Module: wine Branch: master Commit: 7d16575df660a256f05efaf46d91c720e0a01c46 URL: https://source.winehq.org/git/wine.git/?a=commit;h=7d16575df660a256f05efaf46...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Mar 27 13:36:20 2018 +0200
kernel32/tests: Add tests for window settings namespaces.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/tests/actctx.c | 109 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 105 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c index b63abac..8c9ac79 100644 --- a/dlls/kernel32/tests/actctx.c +++ b/dlls/kernel32/tests/actctx.c @@ -464,10 +464,46 @@ static const char settings_manifest[] = " <application xmlns="urn:schemas-microsoft-com:asm.v3">" " <windowsSettings>" " <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings%5C%22%3Etrue</dpiAware>" +" <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings%5C%22%3Etrue</dpiAwareness>" " </windowsSettings>" " </application>" "</assembly>";
+static const char settings_manifest2[] = +"<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">" +" <assemblyIdentity version="1.0.0.0" name="Wine.Test" type="win32"></assemblyIdentity>" +" <application xmlns="urn:schemas-microsoft-com:asm.v3"" +" xmlns:ws05="http://schemas.microsoft.com/SMI/2005/WindowsSettings%5C"" +" xmlns:ws11="http://schemas.microsoft.com/SMI/2011/WindowsSettings%5C"" +" xmlns:ws16="http://schemas.microsoft.com/SMI/2016/WindowsSettings%5C"" +" xmlns:ws17="http://schemas.microsoft.com/SMI/2017/WindowsSettings%5C%22%3E" +" <windowsSettings>" +" ws05:autoElevatetrue</ws05:autoElevate>" +" ws05:disableThemingtrue</ws05:disableTheming>" +" ws11:disableWindowFilteringtrue</ws11:disableWindowFiltering>" +" ws05:dpiAwaretrue</ws05:dpiAware>" +" ws16:dpiAwarenesstrue</ws16:dpiAwareness>" +" ws17:gdiScalingtrue</ws17:gdiScaling>" +" ws17:highResolutionScrollingAwaretrue</ws17:highResolutionScrollingAware>" +" ws16:longPathAwaretrue</ws16:longPathAware>" +" ws17:magicFutureSettingtrue</ws17:magicFutureSetting>" +" ws11:printerDriverIsolationtrue</ws11:printerDriverIsolation>" +" ws17:ultraHighResolutionScrollingAwaretrue</ws17:ultraHighResolutionScrollingAware>" +" </windowsSettings>" +" </application>" +"</assembly>"; + +/* broken manifest found in some binaries: asmv3 namespace is used but not declared */ +static const char settings_manifest3[] = +"<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">" +" <assemblyIdentity version="1.0.0.0" name="Wine.Test" type="win32"></assemblyIdentity>" +" asmv3:application" +" <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings%5C%22%3E" +" <dpiAware>true</dpiAware>" +" </asmv3:windowsSettings>" +" </asmv3:application>" +"</assembly>"; + DEFINE_GUID(VISTA_COMPAT_GUID, 0xe2011457, 0x1546, 0x43c5, 0xa5, 0xfe, 0x00, 0x8d, 0xee, 0xe3, 0xd3, 0xf0); DEFINE_GUID(WIN7_COMPAT_GUID, 0x35138b9a, 0x5d96, 0x4fbd, 0x8e, 0x2d, 0xa2, 0x44, 0x02, 0x25, 0xf9, 0x3a); DEFINE_GUID(WIN8_COMPAT_GUID, 0x4a2f28e3, 0x53b9, 0x4441, 0xba, 0x9c, 0xd6, 0x9d, 0x4a, 0x4a, 0x6e, 0x38); @@ -2964,9 +3000,11 @@ static void test_compatibility(void) static void test_settings(void) { static const WCHAR dpiAwareW[] = {'d','p','i','A','w','a','r','e',0}; + static const WCHAR dpiAwarenessW[] = {'d','p','i','A','w','a','r','e','n','e','s','s',0}; static const WCHAR dummyW[] = {'d','u','m','m','y',0}; static const WCHAR trueW[] = {'t','r','u','e',0}; - static const WCHAR namespaceW[] = {'h','t','t','p',':','/','/','s','c','h','e','m','a','s','.','m','i','c','r','o','s','o','f','t','.','c','o','m','/','S','M','I','/','2','0','0','5','/','W','i','n','d','o','w','s','S','e','t','t','i','n','g','s',0}; + static const WCHAR namespace2005W[] = {'h','t','t','p',':','/','/','s','c','h','e','m','a','s','.','m','i','c','r','o','s','o','f','t','.','c','o','m','/','S','M','I','/','2','0','0','5','/','W','i','n','d','o','w','s','S','e','t','t','i','n','g','s',0}; + static const WCHAR namespace2016W[] = {'h','t','t','p',':','/','/','s','c','h','e','m','a','s','.','m','i','c','r','o','s','o','f','t','.','c','o','m','/','S','M','I','/','2','0','1','6','/','W','i','n','d','o','w','s','S','e','t','t','i','n','g','s',0}; WCHAR buffer[80]; SIZE_T size; HANDLE handle; @@ -3001,26 +3039,60 @@ static void test_settings(void) size = 0xdead; memset( buffer, 0xcc, sizeof(buffer) ); ret = pQueryActCtxSettingsW( 0, handle, NULL, dummyW, buffer, 80, &size ); - ok( !ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() ); + ok( !ret, "QueryActCtxSettingsW succeeded\n" ); ok( GetLastError() == ERROR_SXS_KEY_NOT_FOUND, "wrong error %u\n", GetLastError() ); ok( buffer[0] == 0xcccc, "got %s\n", wine_dbgstr_w(buffer) ); SetLastError( 0xdeadbeef ); size = 0xdead; memset( buffer, 0xcc, sizeof(buffer) ); - ret = pQueryActCtxSettingsW( 0, handle, namespaceW, dpiAwareW, buffer, 80, &size ); + ret = pQueryActCtxSettingsW( 0, handle, namespace2005W, dpiAwareW, buffer, 80, &size ); ok( ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() ); ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) ); ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size ); SetLastError( 0xdeadbeef ); size = 0xdead; memset( buffer, 0xcc, sizeof(buffer) ); - ret = pQueryActCtxSettingsW( 0, handle, namespaceW, dpiAwareW, buffer, lstrlenW(trueW) + 1, &size ); + ret = pQueryActCtxSettingsW( 0, handle, namespace2005W, dpiAwareW, buffer, lstrlenW(trueW) + 1, &size ); ok( ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() ); ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) ); ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size ); SetLastError( 0xdeadbeef ); size = 0xdead; memset( buffer, 0xcc, sizeof(buffer) ); + ret = pQueryActCtxSettingsW( 0, handle, namespace2016W, dpiAwareW, buffer, lstrlenW(trueW) + 1, &size ); + ok( !ret, "QueryActCtxSettingsW succeeded\n" ); + ok( GetLastError() == ERROR_SXS_KEY_NOT_FOUND || broken( GetLastError() == ERROR_INVALID_PARAMETER ), + "wrong error %u\n", GetLastError() ); + ok( buffer[0] == 0xcccc, "got %s\n", wine_dbgstr_w(buffer) ); + SetLastError( 0xdeadbeef ); + size = 0xdead; + memset( buffer, 0xcc, sizeof(buffer) ); + ret = pQueryActCtxSettingsW( 0, handle, NULL, dpiAwarenessW, buffer, lstrlenW(trueW) + 1, &size ); + ok( !ret, "QueryActCtxSettingsW succeeded\n" ); + ok( GetLastError() == ERROR_SXS_KEY_NOT_FOUND, "wrong error %u\n", GetLastError() ); + ok( buffer[0] == 0xcccc, "got %s\n", wine_dbgstr_w(buffer) ); + SetLastError( 0xdeadbeef ); + size = 0xdead; + memset( buffer, 0xcc, sizeof(buffer) ); + ret = pQueryActCtxSettingsW( 0, handle, namespace2005W, dpiAwarenessW, buffer, lstrlenW(trueW) + 1, &size ); + ok( !ret, "QueryActCtxSettingsW succeeded\n" ); + ok( GetLastError() == ERROR_SXS_KEY_NOT_FOUND, "wrong error %u\n", GetLastError() ); + ok( buffer[0] == 0xcccc, "got %s\n", wine_dbgstr_w(buffer) ); + SetLastError( 0xdeadbeef ); + size = 0xdead; + memset( buffer, 0xcc, sizeof(buffer) ); + ret = pQueryActCtxSettingsW( 0, handle, namespace2016W, dpiAwarenessW, buffer, lstrlenW(trueW) + 1, &size ); + ok( ret || broken( GetLastError() == ERROR_INVALID_PARAMETER ), + "QueryActCtxSettingsW failed err %u\n", GetLastError() ); + if (ret) + { + ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) ); + ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size ); + } + else ok( buffer[0] == 0xcccc, "got %s\n", wine_dbgstr_w(buffer) ); + SetLastError( 0xdeadbeef ); + size = 0xdead; + memset( buffer, 0xcc, sizeof(buffer) ); ret = pQueryActCtxSettingsW( 0, handle, NULL, dpiAwareW, buffer, lstrlenW(trueW), &size ); ok( ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() ); ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) ); @@ -3034,6 +3106,35 @@ static void test_settings(void) ok( buffer[0] == 0xcccc, "got %s\n", wine_dbgstr_w(buffer) ); ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size ); pReleaseActCtx(handle); + + create_manifest_file( "manifest_settings2.manifest", settings_manifest2, -1, NULL, NULL ); + handle = test_create("manifest_settings2.manifest"); + ok( handle != INVALID_HANDLE_VALUE || broken( handle == INVALID_HANDLE_VALUE ), /* <= vista */ + "handle == INVALID_HANDLE_VALUE, error %u\n", GetLastError() ); + DeleteFileA( "manifest_settings2.manifest" ); + if (handle != INVALID_HANDLE_VALUE) + { + SetLastError( 0xdeadbeef ); + size = 0xdead; + memset( buffer, 0xcc, sizeof(buffer) ); + ret = pQueryActCtxSettingsW( 0, handle, NULL, dpiAwareW, buffer, 80, &size ); + ok( ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() ); + ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) ); + ok( size == lstrlenW( buffer ) + 1, "wrong len %lu\n", size ); + pReleaseActCtx(handle); + } + + create_manifest_file( "manifest_settings3.manifest", settings_manifest3, -1, NULL, NULL ); + handle = test_create("manifest_settings3.manifest"); + ok( handle != INVALID_HANDLE_VALUE, "handle == INVALID_HANDLE_VALUE, error %u\n", GetLastError() ); + DeleteFileA( "manifest_settings3.manifest" ); + SetLastError( 0xdeadbeef ); + size = 0xdead; + memset( buffer, 0xcc, sizeof(buffer) ); + ret = pQueryActCtxSettingsW( 0, handle, NULL, dpiAwareW, buffer, 80, &size ); + ok( !ret, "QueryActCtxSettingsW succeeded\n" ); + ok( GetLastError() == ERROR_SXS_KEY_NOT_FOUND, "wrong error %u\n", GetLastError() ); + pReleaseActCtx(handle); }
START_TEST(actctx)