ReactOS  0.4.15-dev-3193-g74513a7
ReallocSplStr.c
Go to the documentation of this file.
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 
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;
31  }
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  }
62  {
63  dwResult = _SEH2_GetExceptionCode();
64  }
65  _SEH2_END;
66 
67  ok(dwResult == EXCEPTION_ACCESS_VIOLATION, "dwResult is %lx!\n", dwResult);
68 }
PWSTR WINAPI AllocSplStr(PCWSTR pwszInput)
Definition: memory.c:56
uint16_t * PWSTR
Definition: typedefs.h:56
#define EXCEPTION_ACCESS_VIOLATION
Definition: winbase.h:308
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define DWORD
Definition: nt_native.h:44
_SEH2_TRY
Definition: create.c:4226
BOOL WINAPI ReallocSplStr(PWSTR *ppwszString, PCWSTR pwszInput)
Definition: memory.c:195
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_SEH2_END
Definition: create.c:4400
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
#define skip(...)
Definition: atltest.h:64
START_TEST(ReallocSplStr)
Definition: ReallocSplStr.c:17
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:40
#define _SEH2_GetExceptionCode()
Definition: pseh2_64.h:165