2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for FsRtlIsFatDbcsLegal/FsRtlIsHpfsDbcsLegal
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
17 BOOLEAN LeadingBackslash
;
21 { "a", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
22 { "A", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
23 { ".", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
24 { "..", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
25 { "...", FALSE
, FALSE
},
26 { "A ", FALSE
, FALSE
},
27 { " ", FALSE
, FALSE
},
28 { " A", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
29 { " A ", FALSE
, FALSE
},
30 { "A.", FALSE
, FALSE
},
31 { ".A", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
32 { ".A.", FALSE
, FALSE
},
33 { "*", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
34 { "?", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
35 { "????????.???", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
36 { "????????????", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
37 { "????????.????", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
38 { "??????????????????", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
39 { "?*?*?*?*?*?*?*?*?*", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
40 { "ABCDEFGHIJKLMNOPQ*", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
41 { "ABCDEFGHI\\*", FALSE
, TRUE
, TRUE
, TRUE
, FALSE
},
42 { "*\\ABCDEFGHI", FALSE
, TRUE
, TRUE
, TRUE
, FALSE
},
43 { "?.?.?", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
44 { "?..?", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
45 { "? ", TRUE
, FALSE
, TRUE
, FALSE
, FALSE
},
46 { " ?", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
47 { "?.", TRUE
, FALSE
, TRUE
, FALSE
, FALSE
},
48 { ".?", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
49 { "? .?", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
50 { "A?A", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
51 { "A*A", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
52 { "A<A", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
53 { "A>A", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
54 { "A\"A", TRUE
, TRUE
, TRUE
, FALSE
, FALSE
},
55 { "A'A", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
56 { "A:A", FALSE
, FALSE
},
57 { "A\x1fG", FALSE
, FALSE
},
58 { "A\x01G", FALSE
, FALSE
},
59 { "A\x0aG", FALSE
, FALSE
},
60 { "A\x0dG", FALSE
, FALSE
},
61 { "\x7f", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
62 /* FIXME: these two are probably locale-specific */
63 { "\x80", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
64 { "\xff", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
65 { "ABCDEFGH.IJK", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
66 { "ABCDEFGHX.IJK", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
67 { "ABCDEFGHX.IJ", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
68 { "ABCDEFGH.IJKX", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
69 { "ABCDEFG.IJKX", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
70 { "ABCDEFGH", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
71 { "ABCDEFGHX", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
72 { "A.B", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
73 { "A..B", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
74 { "A.B.", FALSE
, FALSE
},
75 { "A.B.C", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
76 { "A .B", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
77 { " A .B", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
78 { "A. B", TRUE
, TRUE
, FALSE
, FALSE
, FALSE
},
79 { "A. B ", FALSE
, FALSE
},
80 { "A. B ", FALSE
, FALSE
},
81 { " A . B", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
82 { " A . B ", FALSE
, FALSE
},
83 { "\\ABCDEFGH.IJK", TRUE
, TRUE
, FALSE
, FALSE
, TRUE
},
84 { "ABCDEFGH.IJK\\", TRUE
, TRUE
, FALSE
, TRUE
, FALSE
},
85 { "\\ABCDEFGH.IJK\\", TRUE
, TRUE
, FALSE
, TRUE
, TRUE
},
86 { "\\", TRUE
, TRUE
, FALSE
, FALSE
, TRUE
},
87 { "\\\\", FALSE
, FALSE
},
88 { "\\\\B", FALSE
, FALSE
},
89 { "A\\", TRUE
, TRUE
, FALSE
, TRUE
, FALSE
},
90 { "A\\B", TRUE
, TRUE
, FALSE
, TRUE
, FALSE
},
91 { "A\\\\", FALSE
, FALSE
},
92 { "A\\\\B", FALSE
, FALSE
},
93 /* We can exceed MAX_PATH (260) characters */
94 { "0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI\\7BCDEF.HI\\8BCDEF.HI\\9BCDEF.HI\\0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI\\7BCDEF.HI\\8BCDEF.HI\\9BCDEF.HI\\0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI", TRUE
, TRUE
, FALSE
, TRUE
, FALSE
},
95 { "0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI\\7BCDEF.HI\\8BCDEF.HI\\9BCDEF.HI\\0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI\\7BCDEF.HI\\8BCDEF.HI\\9BCDEF.HI\\0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI\\", TRUE
, TRUE
, FALSE
, TRUE
, FALSE
},
96 { "0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI\\7BCDEF.HI\\8BCDEF.HI\\9BCDEF.HI\\0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI\\7BCDEF.HI\\8BCDEF.HI\\9BCDEF.HI\\0BCDEF.HI\\1BCDEF.HI\\2BCDEF.HI\\3BCDEF.HI\\4BCDEF.HI\\5BCDEF.HI\\6BCDEF.HI\\7", TRUE
, TRUE
, FALSE
, TRUE
, FALSE
},
97 /* Max component length for HPFS is 255 characters */
98 { "ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDEFGHI6ABCDEFGHI7ABCDEFGHI8ABCDEFGHI9ABCDEFGHI0ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDEFGHI6ABCDEFGHI7ABCDEFGHI8ABCDEFGHI9ABCDEFGHI0ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDE", FALSE
, TRUE
, FALSE
, FALSE
, FALSE
},
99 { "ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDEFGHI6ABCDEFGHI7ABCDEFGHI8ABCDEFGHI9ABCDEFGHI0ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDEFGHI6ABCDEFGHI7ABCDEFGHI8ABCDEFGHI9ABCDEFGHI0ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDEF", FALSE
, FALSE
},
100 { "ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDEFGHI6ABCDEFGHI7ABCDEFGHI8ABCDEFGHI9ABCDEFGHI0ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDEFGHI6ABCDEFGHI7ABCDEFGHI8ABCDEFGHI9ABCDEFGHI0ABCDEFGHI1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDE\\ABC", FALSE
, TRUE
, FALSE
, TRUE
, FALSE
},
103 START_TEST(FsRtlLegal
)
107 ANSI_STRING DbcsName
;
110 for (i
= 0; i
< RTL_NUMBER_OF(Tests
); i
++)
112 RtlInitAnsiString(&DbcsName
, Tests
[i
].Dbcs
);
113 for (Flags
= 0; Flags
< 8; Flags
++)
115 Result
= FsRtlIsFatDbcsLegal(DbcsName
,
116 BooleanFlagOn(Flags
, 1),
117 BooleanFlagOn(Flags
, 2),
118 BooleanFlagOn(Flags
, 4));
119 if (Tests
[i
].HasWildCards
&& !FlagOn(Flags
, 1))
120 ok(Result
== FALSE
, "[%s] Result = %u but has wildcards\n", Tests
[i
].Dbcs
, Result
);
121 else if (Tests
[i
].IsPath
&& !FlagOn(Flags
, 2))
122 ok(Result
== FALSE
, "[%s] Result = %u but is path\n", Tests
[i
].Dbcs
, Result
);
123 else if (Tests
[i
].LeadingBackslash
&& !FlagOn(Flags
, 4))
124 ok(Result
== FALSE
, "[%s] Result = %u but has leading backslash\n", Tests
[i
].Dbcs
, Result
);
125 else if (!Tests
[i
].LegalFat
)
126 ok(Result
== FALSE
, "[%s] Result = %u but is NOT legal FAT\n", Tests
[i
].Dbcs
, Result
);
128 ok(Result
== TRUE
, "[%s] Result = %u but IS legal FAT\n", Tests
[i
].Dbcs
, Result
);
130 Result
= FsRtlIsHpfsDbcsLegal(DbcsName
,
131 BooleanFlagOn(Flags
, 1),
132 BooleanFlagOn(Flags
, 2),
133 BooleanFlagOn(Flags
, 4));
134 if (Tests
[i
].HasWildCards
&& !FlagOn(Flags
, 1))
135 ok(Result
== FALSE
, "[%s] Result = %u but has wildcards\n", Tests
[i
].Dbcs
, Result
);
136 else if (Tests
[i
].IsPath
&& !FlagOn(Flags
, 2))
137 ok(Result
== FALSE
, "[%s] Result = %u but is path\n", Tests
[i
].Dbcs
, Result
);
138 else if (Tests
[i
].LeadingBackslash
&& !FlagOn(Flags
, 4))
139 ok(Result
== FALSE
, "[%s] Result = %u but has leading backslash\n", Tests
[i
].Dbcs
, Result
);
140 else if (!Tests
[i
].LegalHpfs
)
141 ok(Result
== FALSE
, "[%s] Result = %u but is NOT legal HPFS\n", Tests
[i
].Dbcs
, Result
);
143 ok(Result
== TRUE
, "[%s] Result = %u but IS legal HPFS\n", Tests
[i
].Dbcs
, Result
);