[SPOOLSS]
[reactos.git] / rostests / apitests / spoolss / PackStrings.c
1 /*
2 * PROJECT: ReactOS Spooler Router API Tests
3 * LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation
4 * PURPOSE: Tests for PackStrings
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 typedef struct _EXAMPLE_STRUCT
16 {
17 PWSTR String1;
18 PWSTR String2;
19 }
20 EXAMPLE_STRUCT, *PEXAMPLE_STRUCT;
21
22 START_TEST(PackStrings)
23 {
24 PCWSTR Source1[] = { L"Test", L"String" };
25 PCWSTR Source2[] = { L"Test", NULL };
26
27 BYTE Buffer[50];
28 PBYTE pEnd;
29 PEXAMPLE_STRUCT pStruct = (PEXAMPLE_STRUCT)Buffer;
30 DWORD Offsets[] = {
31 FIELD_OFFSET(EXAMPLE_STRUCT, String1),
32 FIELD_OFFSET(EXAMPLE_STRUCT, String2),
33 MAXDWORD
34 };
35
36 // Try a usual case with two strings. Verify that they are copied in reverse order.
37 pEnd = PackStrings(Source1, Buffer, Offsets, &Buffer[sizeof(Buffer)]);
38 ok(wcscmp(pStruct->String1, Source1[0]) == 0, "String1 and Source1[0] don't match!\n");
39 ok(wcscmp(pStruct->String2, Source1[1]) == 0, "String2 and Source1[1] don't match!\n");
40 ok(wcscmp((PWSTR)pEnd, Source1[1]) == 0, "pEnd and Source1[1] don't match!\n");
41
42 // Now verify that the corresponding pointer is set to NULL if a string is NULL.
43 pEnd = PackStrings(Source2, Buffer, Offsets, &Buffer[sizeof(Buffer)]);
44 ok(wcscmp(pStruct->String1, Source2[0]) == 0, "String1 and Source2[0] don't match!\n");
45 ok(!pStruct->String2, "String2 is %p!\n", pStruct->String2);
46 ok(wcscmp((PWSTR)pEnd, Source2[0]) == 0, "pEnd and Source2[0] don't match!\n");
47 }