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 13 DEFINE_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 21 static 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 if (IsWindowsVistaOrGreater()) 38 ok_int(ret, FALSE); 39 else 40 ok_int(ret, 0xDEADBEEF); 41 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 42 43 guid = invalid_guid; 44 ok_int(GUIDFromStringA("", &guid), FALSE); 45 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 46 47 guid = invalid_guid; 48 ok_int(GUIDFromStringA("{", &guid), FALSE); 49 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 50 51 guid = invalid_guid; 52 ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046", &guid), FALSE); 53 //ok_int(memcmp(&guid, &IID_IShellLinkW_Invalid, sizeof(guid)) == 0, TRUE); // Ignorable corner case 54 55 guid = invalid_guid; 56 ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046}", &guid), TRUE); 57 ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); 58 59 guid = invalid_guid; 60 ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046}g", &guid), TRUE); 61 ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); 62 63 guid = invalid_guid; 64 ok_int(GUIDFromStringA(" {000214F9-0000-0000-C000-000000000046}", &guid), FALSE); 65 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 66 } 67 68 static void TEST_GUIDFromStringW(void) 69 { 70 GUID guid; 71 BOOL ret; 72 73 guid = invalid_guid; 74 _SEH2_TRY 75 { 76 ret = GUIDFromStringW(NULL, &guid); 77 } 78 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 79 { 80 ret = 0xDEADBEEF; 81 } 82 _SEH2_END; 83 84 if (IsWindowsVistaOrGreater()) 85 ok_int(ret, 0xDEADBEEF); 86 else 87 ok_int(ret, FALSE); 88 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 89 90 guid = invalid_guid; 91 ok_int(GUIDFromStringW(L"", &guid), FALSE); 92 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 93 94 guid = invalid_guid; 95 ok_int(GUIDFromStringW(L"{", &guid), FALSE); 96 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 97 98 guid = invalid_guid; 99 ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046", &guid), FALSE); 100 //ok_int(memcmp(&guid, &IID_IShellLinkW_Invalid, sizeof(guid)) == 0, TRUE); // Ignorable corner case 101 102 guid = invalid_guid; 103 ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046}", &guid), TRUE); 104 ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); 105 106 guid = invalid_guid; 107 ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046}g", &guid), TRUE); 108 ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); 109 110 guid = invalid_guid; 111 ok_int(GUIDFromStringW(L" {000214F9-0000-0000-C000-000000000046}", &guid), FALSE); 112 ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); 113 } 114 115 START_TEST(GUIDFromString) 116 { 117 TEST_GUIDFromStringA(); 118 TEST_GUIDFromStringW(); 119 } 120