1 /* 2 * PROJECT: ReactOS API tests 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Test for StrRStrA/W 5 * COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) 6 */ 7 8 #include "shelltest.h" 9 #include <versionhelpers.h> 10 11 typedef PSTR (WINAPI *FN_StrRStrA)(PCSTR, PCSTR, PCSTR pszSearch); 12 typedef PWSTR (WINAPI *FN_StrRStrW)(PCWSTR, PCWSTR, PCWSTR pszSearch); 13 14 static VOID TEST_StrRStrA(VOID) 15 { 16 PCSTR psz, pch; 17 PSTR ret; 18 FN_StrRStrA StrRStrA = (FN_StrRStrA)GetProcAddress(GetModuleHandleW(L"shell32"), MAKEINTRESOURCEA(389)); 19 20 if (!StrRStrA) 21 { 22 skip("StrRStrA not found\n"); 23 return; 24 } 25 26 psz = "ABCBC"; 27 ret = StrRStrA(psz, NULL, "BC"); 28 ok_ptr(ret, psz + 3); 29 30 psz = "ABCBC"; 31 pch = &psz[2]; 32 ret = StrRStrA(psz, pch, "BC"); 33 ok_ptr(ret, &psz[1]); 34 35 psz = "ABCBC"; 36 ret = StrRStrA(psz, psz, "BC"); 37 ok(!ret, "ret was '%s'\n", ret); 38 39 psz = "ABCBC"; 40 pch = &psz[lstrlenA(psz)]; 41 ret = StrRStrA(psz, pch, "BC"); 42 ok_ptr(ret, psz + 3); 43 } 44 45 static VOID TEST_StrRStrW(VOID) 46 { 47 PCWSTR psz, pch; 48 PWSTR ret; 49 FN_StrRStrW StrRStrW = (FN_StrRStrW)GetProcAddress(GetModuleHandleW(L"shell32"), MAKEINTRESOURCEA(392)); 50 51 if (!StrRStrW) 52 { 53 skip("StrRStrW not found\n"); 54 return; 55 } 56 57 psz = L"ABCBC"; 58 ret = StrRStrW(psz, NULL, L"BC"); 59 ok_ptr(ret, psz + 3); 60 61 psz = L"ABCBC"; 62 pch = &psz[2]; 63 ret = StrRStrW(psz, pch, L"BC"); 64 ok_ptr(ret, &psz[1]); 65 66 psz = L"ABCBC"; 67 ret = StrRStrW(psz, psz, L"BC"); 68 ok(!ret, "ret was '%S'\n", ret); 69 70 psz = L"ABCBC"; 71 pch = &psz[lstrlenW(psz)]; 72 ret = StrRStrW(psz, pch, L"BC"); 73 ok_ptr(ret, psz + 3); 74 } 75 76 static BOOL IsWindowsServer2003SP2OrGreater(VOID) 77 { 78 return IsWindowsVersionOrGreater(5, 2, 2); 79 } 80 81 START_TEST(StrRStr) 82 { 83 if (IsWindowsVistaOrGreater()) 84 { 85 skip("Vista+\n"); 86 return; 87 } 88 89 if (!IsWindowsServer2003SP2OrGreater()) 90 { 91 skip("Before 2K3 SP3\n"); 92 return; 93 } 94 95 TEST_StrRStrA(); 96 TEST_StrRStrW(); 97 } 98