From: Mohamad Al-Jaf mohamadaljaf@gmail.com
--- configure.ac | 1 + dlls/cryptowinrt/tests/Makefile.in | 5 ++ dlls/cryptowinrt/tests/crypto.c | 94 ++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 dlls/cryptowinrt/tests/Makefile.in create mode 100644 dlls/cryptowinrt/tests/crypto.c
diff --git a/configure.ac b/configure.ac index 85f4f384bc4..16bada50512 100644 --- a/configure.ac +++ b/configure.ac @@ -2423,6 +2423,7 @@ WINE_CONFIG_MAKEFILE(dlls/cryptext) WINE_CONFIG_MAKEFILE(dlls/cryptnet) WINE_CONFIG_MAKEFILE(dlls/cryptnet/tests) WINE_CONFIG_MAKEFILE(dlls/cryptowinrt) +WINE_CONFIG_MAKEFILE(dlls/cryptowinrt/tests) WINE_CONFIG_MAKEFILE(dlls/cryptsp) WINE_CONFIG_MAKEFILE(dlls/cryptui) WINE_CONFIG_MAKEFILE(dlls/cryptui/tests) diff --git a/dlls/cryptowinrt/tests/Makefile.in b/dlls/cryptowinrt/tests/Makefile.in new file mode 100644 index 00000000000..af7cc510dc2 --- /dev/null +++ b/dlls/cryptowinrt/tests/Makefile.in @@ -0,0 +1,5 @@ +TESTDLL = cryptowinrt.dll +IMPORTS = combase + +C_SRCS = \ + crypto.c diff --git a/dlls/cryptowinrt/tests/crypto.c b/dlls/cryptowinrt/tests/crypto.c new file mode 100644 index 00000000000..fc841b2c3c6 --- /dev/null +++ b/dlls/cryptowinrt/tests/crypto.c @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2022 Mohamad Al-Jaf + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ +#define COBJMACROS +#include "initguid.h" +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "winstring.h" + +#include "roapi.h" + +#define WIDL_using_Windows_Foundation +#define WIDL_using_Windows_Foundation_Collections +#include "windows.foundation.h" +#define WIDL_using_Windows_Storage_Streams +#include "windows.storage.streams.h" +#define WIDL_using_Windows_Security_Cryptography +#include "windows.security.cryptography.h" + +#include "wine/test.h" + +#define check_interface( obj, iid ) check_interface_( __LINE__, obj, iid ) +static void check_interface_( unsigned int line, void *obj, const IID *iid ) +{ + IUnknown *iface = obj; + IUnknown *unk; + HRESULT hr; + + hr = IUnknown_QueryInterface( iface, iid, (void **)&unk ); + ok_(__FILE__, line)( hr == S_OK, "got hr %#lx.\n", hr ); + IUnknown_Release( unk ); +} + +static void test_CryptobufferStatics(void) +{ + static const WCHAR *cryptobuffer_statics_name = L"Windows.Security.Cryptography.CryptographicBuffer"; + ICryptographicBufferStatics *cryptobuffer_statics; + IActivationFactory *factory; + HSTRING str; + HRESULT hr; + LONG ref; + + hr = WindowsCreateString( cryptobuffer_statics_name, wcslen( cryptobuffer_statics_name ), &str ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = RoGetActivationFactory( str, &IID_IActivationFactory, (void **)&factory ); + WindowsDeleteString( str ); + ok( hr == S_OK || broken( hr == REGDB_E_CLASSNOTREG ), "got hr %#lx.\n", hr ); + if (hr == REGDB_E_CLASSNOTREG) + { + win_skip( "%s runtimeclass not registered, skipping tests.\n", wine_dbgstr_w( cryptobuffer_statics_name ) ); + return; + } + + check_interface( factory, &IID_IUnknown ); + check_interface( factory, &IID_IInspectable ); + check_interface( factory, &IID_IAgileObject ); + + hr = IActivationFactory_QueryInterface( factory, &IID_ICryptographicBufferStatics, (void **)&cryptobuffer_statics ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + ref = ICryptographicBufferStatics_Release( cryptobuffer_statics ); + ok( ref == 2, "got ref %ld.\n", ref ); + ref = IActivationFactory_Release( factory ); + ok( ref == 1, "got ref %ld.\n", ref ); +} + +START_TEST(crypto) +{ + HRESULT hr; + + hr = RoInitialize( RO_INIT_MULTITHREADED ); + ok( hr == S_OK, "RoInitialize failed, hr %#lx\n", hr ); + + test_CryptobufferStatics(); + + RoUninitialize(); +}