1 /* 2 * PROJECT: ReactOS Spooler Router API Tests 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Tests for ReallocSplStr 5 * COPYRIGHT: Copyright 2015 Colin Finck (colin@reactos.org) 6 */ 7 8 #include <apitest.h> 9 10 #define WIN32_NO_STATUS 11 #include <windef.h> 12 #include <winbase.h> 13 #include <spoolss.h> 14 15 #include <pseh/pseh2.h> 16 17 START_TEST(ReallocSplStr) 18 { 19 const WCHAR wszTestString1[] = L"Test"; 20 const WCHAR wszTestString2[] = L"New"; 21 22 DWORD dwResult; 23 PWSTR pwszBackup; 24 PWSTR pwszTest; 25 26 // Verify that ReallocSplStr raises an exception if all parameters are NULL. 27 _SEH2_TRY 28 { 29 dwResult = 0; 30 ReallocSplStr(NULL, NULL); 31 } 32 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 33 { 34 dwResult = _SEH2_GetExceptionCode(); 35 } 36 _SEH2_END; 37 38 ok(dwResult == EXCEPTION_ACCESS_VIOLATION, "dwResult is %lx!\n", dwResult); 39 40 // Allocate a string for testing. 41 pwszTest = AllocSplStr(wszTestString1); 42 if (!pwszTest) 43 { 44 skip("AllocSplStr failed with error %lu!\n", GetLastError()); 45 return; 46 } 47 48 // Verify that ReallocSplStr frees the old string even if pwszInput is NULL. 49 ok(ReallocSplStr(&pwszTest, NULL), "ReallocSplStr is FALSE!\n"); 50 ok(pwszTest == NULL, "pwszTest is %p\n", pwszTest); 51 52 // Now verify that ReallocSplStr copies the new string into a new block and frees the old one. 53 pwszBackup = pwszTest; 54 ok(ReallocSplStr(&pwszTest, wszTestString2), "ReallocSplStr is FALSE!\n"); 55 ok(wcscmp(pwszTest, wszTestString2) == 0, "New string was not copied into pwszTest!\n"); 56 57 _SEH2_TRY 58 { 59 dwResult = (DWORD)wcscmp(pwszBackup, wszTestString1); 60 } 61 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 62 { 63 dwResult = _SEH2_GetExceptionCode(); 64 } 65 _SEH2_END; 66 67 ok(dwResult == EXCEPTION_ACCESS_VIOLATION, "dwResult is %lx!\n", dwResult); 68 } 69