2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for RtlGetLengthWithoutTrailingPathSeperators
5 * PROGRAMMER: David Quintana <gigaherz@gmail.com>
8 #define WIN32_NO_STATUS
10 #include <ndk/rtlfuncs.h>
12 #define MakeTestEntry_Success(str, expect) \
13 { str, expect, STATUS_SUCCESS, __LINE__ }
17 ULONG expected_output
;
18 NTSTATUS expected_result
;
22 /* NULL in UNICODE_STRING */
23 MakeTestEntry_Success( NULL
, 0 ),
26 MakeTestEntry_Success( L
"", 0 ),
27 MakeTestEntry_Success( L
"T", 1 ),
28 MakeTestEntry_Success( L
"Te", 2 ),
29 MakeTestEntry_Success( L
"Tes", 3 ),
30 MakeTestEntry_Success( L
"Test", 4 ),
32 /* Separators tests */
33 MakeTestEntry_Success( L
"\\.", 2 ),
34 MakeTestEntry_Success( L
"\\.", 2 ),
35 MakeTestEntry_Success( L
"\\.\\", 2 ),
36 MakeTestEntry_Success( L
"\\.\\T", 4 ),
37 MakeTestEntry_Success( L
"\\.\\Te", 5 ),
38 MakeTestEntry_Success( L
"\\.\\Tes", 6 ),
39 MakeTestEntry_Success( L
"\\.\\Test", 7 ),
40 MakeTestEntry_Success( L
"\\.\\Test\\", 7 ),
41 MakeTestEntry_Success( L
"\\.\\Test\\s", 9 ),
42 MakeTestEntry_Success( L
"\\.\\T\\est", 8 ),
43 MakeTestEntry_Success( L
"\\.\\T\\e\\st", 9 ),
44 MakeTestEntry_Success( L
"\\.\\T\\e\\s\\t", 10 ),
45 MakeTestEntry_Success( L
"\\.\\T\\e\\s\\t\\", 10 ),
46 MakeTestEntry_Success( L
"\\Tests\\String\\", 13 ),
47 MakeTestEntry_Success( L
"\\.\\Test\\String\\", 14 ),
48 MakeTestEntry_Success( L
"\\.\\Tests\\String\\", 15 ),
49 MakeTestEntry_Success( L
"\\.\\Tests\\String\\s", 17 ),
50 MakeTestEntry_Success( L
"\\.\\Tests\\String\\as", 18 ),
51 MakeTestEntry_Success( L
"\\.\\Tests\\String\\asd", 19 ),
52 MakeTestEntry_Success( L
"\\.\\Tests\\String\\asdf", 20 ),
53 MakeTestEntry_Success( L
"\\Tests\\String\\sdfsdf\\", 20 ),
54 MakeTestEntry_Success( L
"C:\\Tests\\String\\sdfsdf\\", 22 ),
56 /* Separator-only tests */
57 MakeTestEntry_Success( L
"\\", 0 ),
58 MakeTestEntry_Success( L
"/", 0 ),
60 /* Mixed separators tests */
61 MakeTestEntry_Success( L
"/Test/String", 12 ),
62 MakeTestEntry_Success( L
"\\Test/String", 12 ),
63 MakeTestEntry_Success( L
"/Test\\String", 12 ),
64 MakeTestEntry_Success( L
"\\Test/String", 12 ),
65 MakeTestEntry_Success( L
"/Test/String\\", 12 ),
66 MakeTestEntry_Success( L
"\\Test/String\\", 12 ),
67 MakeTestEntry_Success( L
"/Test\\String\\", 12 ),
68 MakeTestEntry_Success( L
"\\Test/String\\", 12 ),
69 MakeTestEntry_Success( L
"/Test/String/", 12 ),
70 MakeTestEntry_Success( L
"\\Test/String/", 12 ),
71 MakeTestEntry_Success( L
"/Test\\String/", 12 ),
72 MakeTestEntry_Success( L
"\\Test/String/", 12 ),
73 MakeTestEntry_Success( L
"\\Test/String/", 12 ),
74 MakeTestEntry_Success( L
"\\Test\\\\String/", 13 ),
76 /* Common path formats tests */
77 MakeTestEntry_Success( L
"Test\\String", 11 ),
78 MakeTestEntry_Success( L
"\\Test\\String", 12 ),
79 MakeTestEntry_Success( L
".\\Test\\String", 13 ),
80 MakeTestEntry_Success( L
"\\.\\Test\\String", 14 ),
81 MakeTestEntry_Success( L
"\\??\\Test\\String", 15 ),
83 /* Redundant trailing tests */
84 MakeTestEntry_Success( L
"\\??\\Test\\String\\", 15 ),
85 MakeTestEntry_Success( L
"\\??\\Test\\String\\\\", 15 ),
86 MakeTestEntry_Success( L
"\\??\\Test\\String\\\\\\\\\\", 15 ),
90 int num_tests
= sizeof(test_entries
) / sizeof(struct test_data
);
92 START_TEST(RtlGetLengthWithoutTrailingPathSeperators
)
99 struct test_data
* pentry
= test_entries
;
101 for(i
= 0; i
< num_tests
; i
++, pentry
++)
103 RtlInitUnicodeString(
104 &str
, pentry
->input
);
109 res
= RtlGetLengthWithoutTrailingPathSeperators(0, &str
, &len
);
110 EndSeh(STATUS_SUCCESS
);
112 ok(res
== pentry
->expected_result
,
113 "Unexpected result 0x%08x (expected 0x%08x) in [%d:%d]\n",
114 res
, pentry
->expected_result
,
116 ok(len
== pentry
->expected_output
,
117 "Unexpected length %d (expected %d) in [%d:%d]\n",
118 len
, pentry
->expected_output
,
122 // Invalid parameters
127 res
= RtlGetLengthWithoutTrailingPathSeperators(0, NULL
, &len
);
128 EndSeh(STATUS_SUCCESS
);
130 ok(res
== STATUS_INVALID_PARAMETER
,
131 "Unexpected result 0x%08x (expected STATUS_INVALID_PARAMETER)\n",
134 "Unexpected length %08x (expected 0)\n",
138 res
= RtlGetLengthWithoutTrailingPathSeperators(0, &str
, NULL
);
139 EndSeh(STATUS_SUCCESS
);
141 ok(res
== STATUS_INVALID_PARAMETER
,
142 "Unexpected result 0x%08x (expected STATUS_INVALID_PARAMETER)\n",
146 res
= RtlGetLengthWithoutTrailingPathSeperators(0, NULL
, NULL
);
147 EndSeh(STATUS_SUCCESS
);
149 ok(res
== STATUS_INVALID_PARAMETER
,
150 "Unexpected result 0x%08x (expected STATUS_INVALID_PARAMETER)\n",
153 for(i
= 0; i
< 32; i
++)
158 res
= RtlGetLengthWithoutTrailingPathSeperators(1<<i
, &str
, &len
);
159 EndSeh(STATUS_SUCCESS
);
161 ok(res
== STATUS_INVALID_PARAMETER
,
162 "Unexpected result 0x%08x (expected STATUS_INVALID_PARAMETER)\n",
166 "Unexpected length %08x (expected 0)\n",
173 res
= RtlGetLengthWithoutTrailingPathSeperators(0xFFFFFFFF, &str
, &len
);
174 EndSeh(STATUS_SUCCESS
);
176 ok(res
== STATUS_INVALID_PARAMETER
,
177 "Unexpected result 0x%08x (expected STATUS_INVALID_PARAMETER)\n",
181 "Unexpected length %08x (expected 0)\n",