Reactos
at master 117 lines 3.8 kB view raw
1/* 2 * PROJECT: ReactOS api tests 3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) 4 * PURPOSE: Tests for GUIDFromStringA/W 5 * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com> 6 */ 7 8#include <shelltest.h> 9#include <initguid.h> 10#include <undocshell.h> 11#include <versionhelpers.h> 12 13DEFINE_GUID(invalid_guid, 0xDEADDEAD, 0xDEAD, 0xDEAD, 0xED, 0xED, 0xED, 0xED, 14 0xED, 0xED, 0xED, 0xED); 15 16//DEFINE_GUID(IID_IShellLinkW, 0x000214F9, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 17// 0x00, 0x00, 0x00, 0x46); 18//DEFINE_GUID(IID_IShellLinkW_Invalid, 0x000214F9, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 19// 0x00, 0x00, 0x00, 0xED); 20 21static void TEST_GUIDFromStringA(void) 22{ 23 GUID guid; 24 BOOL ret; 25 26 guid = invalid_guid; 27 _SEH2_TRY 28 { 29 ret = GUIDFromStringA(NULL, &guid); 30 } 31 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 32 { 33 ret = 0xDEADBEEF; 34 } 35 _SEH2_END; 36 37 ok(ret == FALSE || // Win8+ 38 ret == (int)(0xDEADBEEF), // Win2k3-Win7 39 "Wrong value for ret (0x%X)\n", ret); 40 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 41 42 guid = invalid_guid; 43 ok_int(GUIDFromStringA("", &guid), FALSE); 44 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 45 46 guid = invalid_guid; 47 ok_int(GUIDFromStringA("{", &guid), FALSE); 48 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 49 50 guid = invalid_guid; 51 ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046", &guid), FALSE); 52 //ok_int(memcmp(&guid, &IID_IShellLinkW_Invalid, sizeof(guid)) == 0, TRUE); // Ignorable corner case 53 54 guid = invalid_guid; 55 ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046}", &guid), TRUE); 56 ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); 57 58 guid = invalid_guid; 59 ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046}g", &guid), TRUE); 60 ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); 61 62 guid = invalid_guid; 63 ok_int(GUIDFromStringA(" {000214F9-0000-0000-C000-000000000046}", &guid), FALSE); 64 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 65} 66 67static void TEST_GUIDFromStringW(void) 68{ 69 GUID guid; 70 BOOL ret; 71 72 guid = invalid_guid; 73 _SEH2_TRY 74 { 75 ret = GUIDFromStringW(NULL, &guid); 76 } 77 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 78 { 79 ret = 0xDEADBEEF; 80 } 81 _SEH2_END; 82 83 ok(ret == (int)(0xDEADBEEF) || // Win8+ 84 ret == FALSE, // Win2k3-Win7 85 "Wrong value for ret (0x%X)\n", ret); 86 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 87 88 guid = invalid_guid; 89 ok_int(GUIDFromStringW(L"", &guid), FALSE); 90 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 91 92 guid = invalid_guid; 93 ok_int(GUIDFromStringW(L"{", &guid), FALSE); 94 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 95 96 guid = invalid_guid; 97 ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046", &guid), FALSE); 98 //ok_int(memcmp(&guid, &IID_IShellLinkW_Invalid, sizeof(guid)) == 0, TRUE); // Ignorable corner case 99 100 guid = invalid_guid; 101 ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046}", &guid), TRUE); 102 ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); 103 104 guid = invalid_guid; 105 ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046}g", &guid), TRUE); 106 ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); 107 108 guid = invalid_guid; 109 ok_int(GUIDFromStringW(L" {000214F9-0000-0000-C000-000000000046}", &guid), FALSE); 110 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 111} 112 113START_TEST(GUIDFromString) 114{ 115 TEST_GUIDFromStringA(); 116 TEST_GUIDFromStringW(); 117}