diff --git a/configure b/configure index ec451d1095e..aab6618cd10 100755 --- a/configure +++ b/configure @@ -15323,7 +15323,8 @@ wine_fn_config_dll stress.dll16 enable_win16 wine_fn_config_lib strmbase wine_fn_config_lib strmiids wine_fn_config_dll svrapi enable_svrapi -wine_fn_config_dll sxs enable_sxs +wine_fn_config_dll sxs enable_sxs implib +wine_fn_config_test dlls/sxs/tests sxs_test wine_fn_config_dll system.drv16 enable_win16 wine_fn_config_dll t2embed enable_t2embed wine_fn_config_dll tapi32 enable_tapi32 implib diff --git a/configure.ac b/configure.ac index c499f869027..805825d777a 100644 --- a/configure.ac +++ b/configure.ac @@ -2830,7 +2830,8 @@ WINE_CONFIG_DLL(stress.dll16,enable_win16) WINE_CONFIG_LIB(strmbase) WINE_CONFIG_LIB(strmiids) WINE_CONFIG_DLL(svrapi) -WINE_CONFIG_DLL(sxs) +WINE_CONFIG_DLL(sxs,,[implib]) +WINE_CONFIG_TEST(dlls/sxs/tests) WINE_CONFIG_DLL(system.drv16,enable_win16) WINE_CONFIG_DLL(t2embed) WINE_CONFIG_DLL(tapi32,,[implib]) diff --git a/dlls/sxs/Makefile.in b/dlls/sxs/Makefile.in index b9832dbd1ff..d6d6f2bbbf1 100644 --- a/dlls/sxs/Makefile.in +++ b/dlls/sxs/Makefile.in @@ -1,5 +1,6 @@ MODULE = sxs.dll IMPORTS = oleaut32 ole32 +IMPORTLIB = sxs C_SRCS = \ cache.c \ diff --git a/dlls/sxs/tests/Makefile.in b/dlls/sxs/tests/Makefile.in new file mode 100644 index 00000000000..9d100cac2a0 --- /dev/null +++ b/dlls/sxs/tests/Makefile.in @@ -0,0 +1,7 @@ +TESTDLL = sxs.dll +IMPORTS = sxs + +C_SRCS = \ + name.c + +@MAKE_TEST_RULES@ diff --git a/dlls/sxs/tests/name.c b/dlls/sxs/tests/name.c new file mode 100644 index 00000000000..123f4316c07 --- /dev/null +++ b/dlls/sxs/tests/name.c @@ -0,0 +1,228 @@ +/* + * Copyright 2012 Hans Leidekker for CodeWeavers + * + * 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 + */ + +#include + +#define COBJMACROS + +#include +#include +#include + +#include "wine/test.h" + +static const WCHAR wine1W[] = + {'w','i','n','e',0}; +static const WCHAR wine2W[] = + {'w','i','n','e',',','v','e','r','s','i','o','n','=','\"','0','1','.','2','.','3','.','4','\"',',', + 't','y','p','e','=','\"','w','i','n','3','2','\"',',', + 'p','r','o','c','e','s','s','o','r','A','r','c','h','i','t','e','c','t','u','r','e','=', + '\"','x','8','6','\"',',','p','u','b','l','i','c','K','e','y','T','o','k','e','n','=', + '\"','1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','\"',0}; +static const WCHAR wine3W[] = + {'w','i','n','e',',','v','e','r','s','i','o','n','=','\"','1','.','2','.','3','.','4','\"',0}; +static const WCHAR wine4W[] = + {'w','i','n','e',',','v','e','r','s','i','o','n','=','1','.','2','.','3','.','4',0}; +static const WCHAR wine5W[] = + {'w','i','n','e',',',' ','v','e','r','s','i','o','n','=','\"','1','.','2','.','3','.','4','\"',0}; +static const WCHAR wine6W[] = + {'w','i','n','e',',','v','e','r','s','i','o','n',' ','=','\"','1','.','2','.','3','.','4','\"',0}; +static const WCHAR wine7W[] = + {'w','i','n','e',',','v','e','r','s','i','o','n','=',' ','\"','1','.','2','.','3','.','4','\"',0}; +static const WCHAR wine8W[] = + {'w','i','n','e',' ',',','v','e','r','s','i','o','n','=','\"','1','.','2','.','3','.','4','\"',0}; +static const WCHAR wine9W[] = + {'w','i','n','e',',','v','e','r','s','i','o','n',0}; +static const WCHAR wine10W[] = + {'w','i','n','e',',','t','y','p','e','=','\"','\"',0}; +static const WCHAR wine11W[] = + {'w','i','n','e',',','t','y','p','e','=','\"','w','i','n','3','2',0}; + +static void test_CreateAssemblyNameObject( void ) +{ + static const WCHAR emptyW[] = {0}; + IAssemblyName *name; + HRESULT hr; + + hr = CreateAssemblyNameObject( NULL, wine1W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok(hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, NULL, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, emptyW, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, NULL, CANOF_SET_DEFAULT_VALUES, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, emptyW, CANOF_SET_DEFAULT_VALUES, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = NULL; + hr = CreateAssemblyNameObject( &name, wine1W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == S_OK, "expected S_OK got %08x\n", hr ); + ok( name != NULL, "expected non-NULL name\n" ); + IAssemblyName_Release( name ); + + hr = CreateAssemblyNameObject( NULL, wine1W, CANOF_SET_DEFAULT_VALUES, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, NULL, CANOF_SET_DEFAULT_VALUES, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, emptyW, CANOF_SET_DEFAULT_VALUES, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, NULL, CANOF_SET_DEFAULT_VALUES, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, emptyW, CANOF_SET_DEFAULT_VALUES, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine1W, CANOF_SET_DEFAULT_VALUES, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + hr = CreateAssemblyNameObject( NULL, wine1W, 0, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, NULL, 0, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, emptyW, 0, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, NULL, 0, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, emptyW, 0, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine1W, 0, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + + hr = CreateAssemblyNameObject( NULL, wine1W, CANOF_SET_DEFAULT_VALUES|CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, NULL, CANOF_SET_DEFAULT_VALUES|CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, emptyW, CANOF_SET_DEFAULT_VALUES|CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, NULL, CANOF_SET_DEFAULT_VALUES|CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, emptyW, CANOF_SET_DEFAULT_VALUES|CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine1W, CANOF_SET_DEFAULT_VALUES|CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = NULL; + hr = CreateAssemblyNameObject( &name, wine3W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == S_OK, "expected S_OK got %08x\n", hr ); + ok( name != NULL, "expected non-NULL name\n" ); + IAssemblyName_Release( name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine4W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine5W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == HRESULT_FROM_WIN32( ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME ), + "expected ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine6W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == HRESULT_FROM_WIN32( ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME ), + "expected ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine7W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = NULL; + hr = CreateAssemblyNameObject( &name, wine8W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == S_OK, "expected S_OK got %08x\n", hr ); + ok( name != NULL, "expected non-NULL name\n" ); + IAssemblyName_Release( name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine9W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); + + name = NULL; + hr = CreateAssemblyNameObject( &name, wine10W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == S_OK, "expected S_OK got %08x\n", hr ); + ok( name != NULL, "expected non-NULL name\n" ); + IAssemblyName_Release( name ); + + name = (IAssemblyName *)0xdeadbeef; + hr = CreateAssemblyNameObject( &name, wine11W, CANOF_PARSE_DISPLAY_NAME, NULL ); + ok( hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr ); + ok( !name, "expected NULL got %p\n", name ); +} + +START_TEST(name) +{ + test_CreateAssemblyNameObject(); +}