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>
10 #define MakeTestEntry_Success(str, expect) \
11 { str, expect, STATUS_SUCCESS, __LINE__ }
15 ULONG expected_output
;
16 NTSTATUS expected_result
;
20 /* NULL in UNICODE_STRING */
21 MakeTestEntry_Success( NULL
, 0 ),
24 MakeTestEntry_Success( L
"", 0 ),
25 MakeTestEntry_Success( L
"T", 1 ),
26 MakeTestEntry_Success( L
"Te", 2 ),
27 MakeTestEntry_Success( L
"Tes", 3 ),
28 MakeTestEntry_Success( L
"Test", 4 ),
30 /* Separators tests */
31 MakeTestEntry_Success( L
"\\.", 2 ),
32 MakeTestEntry_Success( L
"\\.", 2 ),
33 MakeTestEntry_Success( L
"\\.\\", 2 ),
34 MakeTestEntry_Success( L
"\\.\\T", 4 ),
35 MakeTestEntry_Success( L
"\\.\\Te", 5 ),
36 MakeTestEntry_Success( L
"\\.\\Tes", 6 ),
37 MakeTestEntry_Success( L
"\\.\\Test", 7 ),
38 MakeTestEntry_Success( L
"\\.\\Test\\", 7 ),
39 MakeTestEntry_Success( L
"\\.\\Test\\s", 9 ),
40 MakeTestEntry_Success( L
"\\.\\T\\est", 8 ),
41 MakeTestEntry_Success( L
"\\.\\T\\e\\st", 9 ),
42 MakeTestEntry_Success( L
"\\.\\T\\e\\s\\t", 10 ),
43 MakeTestEntry_Success( L
"\\.\\T\\e\\s\\t\\", 10 ),
44 MakeTestEntry_Success( L
"\\Tests\\String\\", 13 ),
45 MakeTestEntry_Success( L
"\\.\\Test\\String\\", 14 ),
46 MakeTestEntry_Success( L
"\\.\\Tests\\String\\", 15 ),
47 MakeTestEntry_Success( L
"\\.\\Tests\\String\\s", 17 ),
48 MakeTestEntry_Success( L
"\\.\\Tests\\String\\as", 18 ),
49 MakeTestEntry_Success( L
"\\.\\Tests\\String\\asd", 19 ),
50 MakeTestEntry_Success( L
"\\.\\Tests\\String\\asdf", 20 ),
51 MakeTestEntry_Success( L
"\\Tests\\String\\sdfsdf\\", 20 ),
52 MakeTestEntry_Success( L
"C:\\Tests\\String\\sdfsdf\\", 22 ),
54 /* Separator-only tests */
55 MakeTestEntry_Success( L
"\\", 0 ),
56 MakeTestEntry_Success( L
"/", 0 ),
58 /* Mixed separators tests */
59 MakeTestEntry_Success( L
"/Test/String", 12 ),
60 MakeTestEntry_Success( L
"\\Test/String", 12 ),
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/", 13 ),
74 /* Common path formats tests */
75 MakeTestEntry_Success( L
"Test\\String", 11 ),
76 MakeTestEntry_Success( L
"\\Test\\String", 12 ),
77 MakeTestEntry_Success( L
".\\Test\\String", 13 ),
78 MakeTestEntry_Success( L
"\\.\\Test\\String", 14 ),
79 MakeTestEntry_Success( L
"\\??\\Test\\String", 15 ),
81 /* Redundant trailing tests */
82 MakeTestEntry_Success( L
"\\??\\Test\\String\\", 15 ),
83 MakeTestEntry_Success( L
"\\??\\Test\\String\\\\", 15 ),
84 MakeTestEntry_Success( L
"\\??\\Test\\String\\\\\\\\\\", 15 ),
88 int num_tests
= sizeof(test_entries
) / sizeof(struct test_data
);
90 START_TEST(RtlGetLengthWithoutTrailingPathSeperators
)
97 struct test_data
* pentry
= test_entries
;
99 for(i
= 0; i
< num_tests
; i
++, pentry
++)
101 RtlInitUnicodeString(
102 &str
, pentry
->input
);
107 res
= RtlGetLengthWithoutTrailingPathSeperators(0, &str
, &len
);
108 EndSeh(STATUS_SUCCESS
);
110 ok(res
== pentry
->expected_result
,
111 "Unexpected result 0x%08lx (expected 0x%08lx) in [%d:%d]\n",
112 res
, pentry
->expected_result
,
114 ok(len
== pentry
->expected_output
,
115 "Unexpected length %lu (expected %lu) in [%d:%d]\n",
116 len
, pentry
->expected_output
,
120 // Invalid parameters
125 res
= RtlGetLengthWithoutTrailingPathSeperators(0, NULL
, &len
);
126 EndSeh(STATUS_SUCCESS
);
128 ok(res
== STATUS_INVALID_PARAMETER
,
129 "Unexpected result 0x%08lx (expected STATUS_INVALID_PARAMETER)\n",
132 "Unexpected length %08lx (expected 0)\n",
136 res
= RtlGetLengthWithoutTrailingPathSeperators(0, &str
, NULL
);
137 EndSeh(STATUS_SUCCESS
);
139 ok(res
== STATUS_INVALID_PARAMETER
,
140 "Unexpected result 0x%08lx (expected STATUS_INVALID_PARAMETER)\n",
144 res
= RtlGetLengthWithoutTrailingPathSeperators(0, NULL
, NULL
);
145 EndSeh(STATUS_SUCCESS
);
147 ok(res
== STATUS_INVALID_PARAMETER
,
148 "Unexpected result 0x%08lx (expected STATUS_INVALID_PARAMETER)\n",
151 for(i
= 0; i
< 32; i
++)
156 res
= RtlGetLengthWithoutTrailingPathSeperators(1<<i
, &str
, &len
);
157 EndSeh(STATUS_SUCCESS
);
159 ok(res
== STATUS_INVALID_PARAMETER
,
160 "Unexpected result 0x%08lx (expected STATUS_INVALID_PARAMETER)\n",
164 "Unexpected length %08lx (expected 0)\n",
171 res
= RtlGetLengthWithoutTrailingPathSeperators(0xFFFFFFFF, &str
, &len
);
172 EndSeh(STATUS_SUCCESS
);
174 ok(res
== STATUS_INVALID_PARAMETER
,
175 "Unexpected result 0x%08lx (expected STATUS_INVALID_PARAMETER)\n",
179 "Unexpected length %08lx (expected 0)\n",