Lines Matching +full:enabled +full:- +full:strings
1 // SPDX-License-Identifier: GPL-2.0
29 env->buf = kzalloc(buf_size, GFP_KERNEL); in setup_mock_str_env()
30 if (!env->buf) { in setup_mock_str_env()
35 env->buf_size = buf_size; in setup_mock_str_env()
42 if (env->buf) in free_mock_str_env()
43 kfree(env->buf); in free_mock_str_env()
53 memset(ustr->unicode, 0, sizeof(ustr->unicode)); in create_unistr()
55 ustr->length = cpu_to_be16(len); in create_unistr()
57 ustr->unicode[i] = cpu_to_be16((u16)ascii_str[i]); in create_unistr()
62 ustr->length = cpu_to_be16(U16_MAX); in corrupt_unistr()
73 /* Test identical strings */ in hfsplus_strcasecmp_test()
74 create_unistr(&mock_env->str1, "hello"); in hfsplus_strcasecmp_test()
75 create_unistr(&mock_env->str2, "hello"); in hfsplus_strcasecmp_test()
76 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
77 &mock_env->str2)); in hfsplus_strcasecmp_test()
80 create_unistr(&mock_env->str1, "Hello"); in hfsplus_strcasecmp_test()
81 create_unistr(&mock_env->str2, "hello"); in hfsplus_strcasecmp_test()
82 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
83 &mock_env->str2)); in hfsplus_strcasecmp_test()
85 create_unistr(&mock_env->str1, "HELLO"); in hfsplus_strcasecmp_test()
86 create_unistr(&mock_env->str2, "hello"); in hfsplus_strcasecmp_test()
87 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
88 &mock_env->str2)); in hfsplus_strcasecmp_test()
90 /* Test different strings */ in hfsplus_strcasecmp_test()
91 create_unistr(&mock_env->str1, "apple"); in hfsplus_strcasecmp_test()
92 create_unistr(&mock_env->str2, "banana"); in hfsplus_strcasecmp_test()
93 KUNIT_EXPECT_LT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
94 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
96 create_unistr(&mock_env->str1, "zebra"); in hfsplus_strcasecmp_test()
97 create_unistr(&mock_env->str2, "apple"); in hfsplus_strcasecmp_test()
98 KUNIT_EXPECT_GT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
99 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
102 create_unistr(&mock_env->str1, "test"); in hfsplus_strcasecmp_test()
103 create_unistr(&mock_env->str2, "testing"); in hfsplus_strcasecmp_test()
104 KUNIT_EXPECT_LT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
105 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
107 create_unistr(&mock_env->str1, "testing"); in hfsplus_strcasecmp_test()
108 create_unistr(&mock_env->str2, "test"); in hfsplus_strcasecmp_test()
109 KUNIT_EXPECT_GT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
110 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
112 /* Test empty strings */ in hfsplus_strcasecmp_test()
113 create_unistr(&mock_env->str1, ""); in hfsplus_strcasecmp_test()
114 create_unistr(&mock_env->str2, ""); in hfsplus_strcasecmp_test()
115 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
116 &mock_env->str2)); in hfsplus_strcasecmp_test()
118 create_unistr(&mock_env->str1, ""); in hfsplus_strcasecmp_test()
119 create_unistr(&mock_env->str2, "test"); in hfsplus_strcasecmp_test()
120 KUNIT_EXPECT_LT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
121 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
124 create_unistr(&mock_env->str1, "A"); in hfsplus_strcasecmp_test()
125 create_unistr(&mock_env->str2, "a"); in hfsplus_strcasecmp_test()
126 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
127 &mock_env->str2)); in hfsplus_strcasecmp_test()
129 create_unistr(&mock_env->str1, "A"); in hfsplus_strcasecmp_test()
130 create_unistr(&mock_env->str2, "B"); in hfsplus_strcasecmp_test()
131 KUNIT_EXPECT_LT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
132 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
134 /* Test maximum length strings */ in hfsplus_strcasecmp_test()
135 memset(mock_env->buf, 'a', HFSPLUS_MAX_STRLEN); in hfsplus_strcasecmp_test()
136 mock_env->buf[HFSPLUS_MAX_STRLEN] = '\0'; in hfsplus_strcasecmp_test()
137 create_unistr(&mock_env->str1, mock_env->buf); in hfsplus_strcasecmp_test()
138 create_unistr(&mock_env->str2, mock_env->buf); in hfsplus_strcasecmp_test()
139 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
140 &mock_env->str2)); in hfsplus_strcasecmp_test()
143 mock_env->buf[HFSPLUS_MAX_STRLEN / 2] = 'b'; in hfsplus_strcasecmp_test()
144 create_unistr(&mock_env->str2, mock_env->buf); in hfsplus_strcasecmp_test()
145 KUNIT_EXPECT_LT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
146 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
148 /* Test corrupted strings */ in hfsplus_strcasecmp_test()
149 create_unistr(&mock_env->str1, ""); in hfsplus_strcasecmp_test()
150 corrupt_unistr(&mock_env->str1); in hfsplus_strcasecmp_test()
151 create_unistr(&mock_env->str2, ""); in hfsplus_strcasecmp_test()
152 KUNIT_EXPECT_NE(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
153 &mock_env->str2)); in hfsplus_strcasecmp_test()
155 create_unistr(&mock_env->str1, ""); in hfsplus_strcasecmp_test()
156 create_unistr(&mock_env->str2, ""); in hfsplus_strcasecmp_test()
157 corrupt_unistr(&mock_env->str2); in hfsplus_strcasecmp_test()
158 KUNIT_EXPECT_NE(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
159 &mock_env->str2)); in hfsplus_strcasecmp_test()
161 create_unistr(&mock_env->str1, "test"); in hfsplus_strcasecmp_test()
162 corrupt_unistr(&mock_env->str1); in hfsplus_strcasecmp_test()
163 create_unistr(&mock_env->str2, "testing"); in hfsplus_strcasecmp_test()
164 KUNIT_EXPECT_GT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
165 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
167 create_unistr(&mock_env->str1, "test"); in hfsplus_strcasecmp_test()
168 create_unistr(&mock_env->str2, "testing"); in hfsplus_strcasecmp_test()
169 corrupt_unistr(&mock_env->str2); in hfsplus_strcasecmp_test()
170 KUNIT_EXPECT_LT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
171 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
173 create_unistr(&mock_env->str1, "testing"); in hfsplus_strcasecmp_test()
174 corrupt_unistr(&mock_env->str1); in hfsplus_strcasecmp_test()
175 create_unistr(&mock_env->str2, "test"); in hfsplus_strcasecmp_test()
176 KUNIT_EXPECT_GT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
177 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
179 create_unistr(&mock_env->str1, "testing"); in hfsplus_strcasecmp_test()
180 create_unistr(&mock_env->str2, "test"); in hfsplus_strcasecmp_test()
181 corrupt_unistr(&mock_env->str2); in hfsplus_strcasecmp_test()
182 KUNIT_EXPECT_LT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_strcasecmp_test()
183 &mock_env->str2), 0); in hfsplus_strcasecmp_test()
188 /* Test hfsplus_strcmp function (case-sensitive) */
196 /* Test identical strings */ in hfsplus_strcmp_test()
197 create_unistr(&mock_env->str1, "hello"); in hfsplus_strcmp_test()
198 create_unistr(&mock_env->str2, "hello"); in hfsplus_strcmp_test()
199 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
200 &mock_env->str2)); in hfsplus_strcmp_test()
202 /* Test case sensitive comparison - should NOT be equal */ in hfsplus_strcmp_test()
203 create_unistr(&mock_env->str1, "Hello"); in hfsplus_strcmp_test()
204 create_unistr(&mock_env->str2, "hello"); in hfsplus_strcmp_test()
205 KUNIT_EXPECT_NE(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
206 &mock_env->str2)); in hfsplus_strcmp_test()
208 KUNIT_EXPECT_LT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
209 &mock_env->str2), 0); in hfsplus_strcmp_test()
212 create_unistr(&mock_env->str1, "apple"); in hfsplus_strcmp_test()
213 create_unistr(&mock_env->str2, "banana"); in hfsplus_strcmp_test()
214 KUNIT_EXPECT_LT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
215 &mock_env->str2), 0); in hfsplus_strcmp_test()
217 create_unistr(&mock_env->str1, "zebra"); in hfsplus_strcmp_test()
218 create_unistr(&mock_env->str2, "apple"); in hfsplus_strcmp_test()
219 KUNIT_EXPECT_GT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
220 &mock_env->str2), 0); in hfsplus_strcmp_test()
223 create_unistr(&mock_env->str1, "test"); in hfsplus_strcmp_test()
224 create_unistr(&mock_env->str2, "testing"); in hfsplus_strcmp_test()
225 KUNIT_EXPECT_LT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
226 &mock_env->str2), 0); in hfsplus_strcmp_test()
228 create_unistr(&mock_env->str1, "testing"); in hfsplus_strcmp_test()
229 create_unistr(&mock_env->str2, "test"); in hfsplus_strcmp_test()
230 KUNIT_EXPECT_GT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
231 &mock_env->str2), 0); in hfsplus_strcmp_test()
233 /* Test empty strings */ in hfsplus_strcmp_test()
234 create_unistr(&mock_env->str1, ""); in hfsplus_strcmp_test()
235 create_unistr(&mock_env->str2, ""); in hfsplus_strcmp_test()
236 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
237 &mock_env->str2)); in hfsplus_strcmp_test()
239 /* Test maximum length strings */ in hfsplus_strcmp_test()
240 memset(mock_env->buf, 'a', HFSPLUS_MAX_STRLEN); in hfsplus_strcmp_test()
241 mock_env->buf[HFSPLUS_MAX_STRLEN] = '\0'; in hfsplus_strcmp_test()
242 create_unistr(&mock_env->str1, mock_env->buf); in hfsplus_strcmp_test()
243 create_unistr(&mock_env->str2, mock_env->buf); in hfsplus_strcmp_test()
244 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
245 &mock_env->str2)); in hfsplus_strcmp_test()
248 mock_env->buf[HFSPLUS_MAX_STRLEN / 2] = 'b'; in hfsplus_strcmp_test()
249 create_unistr(&mock_env->str2, mock_env->buf); in hfsplus_strcmp_test()
250 KUNIT_EXPECT_LT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
251 &mock_env->str2), 0); in hfsplus_strcmp_test()
253 /* Test corrupted strings */ in hfsplus_strcmp_test()
254 create_unistr(&mock_env->str1, ""); in hfsplus_strcmp_test()
255 corrupt_unistr(&mock_env->str1); in hfsplus_strcmp_test()
256 create_unistr(&mock_env->str2, ""); in hfsplus_strcmp_test()
257 KUNIT_EXPECT_NE(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
258 &mock_env->str2)); in hfsplus_strcmp_test()
260 create_unistr(&mock_env->str1, ""); in hfsplus_strcmp_test()
261 create_unistr(&mock_env->str2, ""); in hfsplus_strcmp_test()
262 corrupt_unistr(&mock_env->str2); in hfsplus_strcmp_test()
263 KUNIT_EXPECT_NE(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
264 &mock_env->str2)); in hfsplus_strcmp_test()
266 create_unistr(&mock_env->str1, "test"); in hfsplus_strcmp_test()
267 corrupt_unistr(&mock_env->str1); in hfsplus_strcmp_test()
268 create_unistr(&mock_env->str2, "testing"); in hfsplus_strcmp_test()
269 KUNIT_EXPECT_LT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
270 &mock_env->str2), 0); in hfsplus_strcmp_test()
272 create_unistr(&mock_env->str1, "test"); in hfsplus_strcmp_test()
273 create_unistr(&mock_env->str2, "testing"); in hfsplus_strcmp_test()
274 corrupt_unistr(&mock_env->str2); in hfsplus_strcmp_test()
275 KUNIT_EXPECT_LT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
276 &mock_env->str2), 0); in hfsplus_strcmp_test()
278 create_unistr(&mock_env->str1, "testing"); in hfsplus_strcmp_test()
279 corrupt_unistr(&mock_env->str1); in hfsplus_strcmp_test()
280 create_unistr(&mock_env->str2, "test"); in hfsplus_strcmp_test()
281 KUNIT_EXPECT_GT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
282 &mock_env->str2), 0); in hfsplus_strcmp_test()
284 create_unistr(&mock_env->str1, "testing"); in hfsplus_strcmp_test()
285 create_unistr(&mock_env->str2, "test"); in hfsplus_strcmp_test()
286 corrupt_unistr(&mock_env->str2); in hfsplus_strcmp_test()
287 KUNIT_EXPECT_GT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_strcmp_test()
288 &mock_env->str2), 0); in hfsplus_strcmp_test()
302 mock_env->str1.length = cpu_to_be16(3); in hfsplus_unicode_edge_cases_test()
303 mock_env->str1.unicode[0] = cpu_to_be16(0x00E9); /* é */ in hfsplus_unicode_edge_cases_test()
304 mock_env->str1.unicode[1] = cpu_to_be16(0x00F1); /* ñ */ in hfsplus_unicode_edge_cases_test()
305 mock_env->str1.unicode[2] = cpu_to_be16(0x00FC); /* ü */ in hfsplus_unicode_edge_cases_test()
307 mock_env->str2.length = cpu_to_be16(3); in hfsplus_unicode_edge_cases_test()
308 mock_env->str2.unicode[0] = cpu_to_be16(0x00E9); /* é */ in hfsplus_unicode_edge_cases_test()
309 mock_env->str2.unicode[1] = cpu_to_be16(0x00F1); /* ñ */ in hfsplus_unicode_edge_cases_test()
310 mock_env->str2.unicode[2] = cpu_to_be16(0x00FC); /* ü */ in hfsplus_unicode_edge_cases_test()
312 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_unicode_edge_cases_test()
313 &mock_env->str2)); in hfsplus_unicode_edge_cases_test()
314 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_unicode_edge_cases_test()
315 &mock_env->str2)); in hfsplus_unicode_edge_cases_test()
318 mock_env->str2.unicode[1] = cpu_to_be16(0x00F2); /* ò */ in hfsplus_unicode_edge_cases_test()
319 KUNIT_EXPECT_NE(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_unicode_edge_cases_test()
320 &mock_env->str2)); in hfsplus_unicode_edge_cases_test()
323 mock_env->str1.length = cpu_to_be16(3); in hfsplus_unicode_edge_cases_test()
324 mock_env->str1.unicode[0] = cpu_to_be16('a'); in hfsplus_unicode_edge_cases_test()
325 mock_env->str1.unicode[1] = cpu_to_be16(0x0000); /* null */ in hfsplus_unicode_edge_cases_test()
326 mock_env->str1.unicode[2] = cpu_to_be16('b'); in hfsplus_unicode_edge_cases_test()
328 mock_env->str2.length = cpu_to_be16(3); in hfsplus_unicode_edge_cases_test()
329 mock_env->str2.unicode[0] = cpu_to_be16('a'); in hfsplus_unicode_edge_cases_test()
330 mock_env->str2.unicode[1] = cpu_to_be16(0x0000); /* null */ in hfsplus_unicode_edge_cases_test()
331 mock_env->str2.unicode[2] = cpu_to_be16('b'); in hfsplus_unicode_edge_cases_test()
333 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_unicode_edge_cases_test()
334 &mock_env->str2)); in hfsplus_unicode_edge_cases_test()
349 mock_env->str1.length = cpu_to_be16(HFSPLUS_MAX_STRLEN); in hfsplus_unicode_boundary_test()
350 mock_env->str2.length = cpu_to_be16(HFSPLUS_MAX_STRLEN); in hfsplus_unicode_boundary_test()
353 mock_env->str1.unicode[i] = cpu_to_be16('A'); in hfsplus_unicode_boundary_test()
354 mock_env->str2.unicode[i] = cpu_to_be16('A'); in hfsplus_unicode_boundary_test()
357 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_unicode_boundary_test()
358 &mock_env->str2)); in hfsplus_unicode_boundary_test()
361 mock_env->str2.unicode[HFSPLUS_MAX_STRLEN - 1] = cpu_to_be16('B'); in hfsplus_unicode_boundary_test()
362 KUNIT_EXPECT_LT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_unicode_boundary_test()
363 &mock_env->str2), 0); in hfsplus_unicode_boundary_test()
365 /* Test zero length strings */ in hfsplus_unicode_boundary_test()
366 mock_env->str1.length = cpu_to_be16(0); in hfsplus_unicode_boundary_test()
367 mock_env->str2.length = cpu_to_be16(0); in hfsplus_unicode_boundary_test()
368 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcmp(&mock_env->str1, in hfsplus_unicode_boundary_test()
369 &mock_env->str2)); in hfsplus_unicode_boundary_test()
370 KUNIT_EXPECT_EQ(test, 0, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_unicode_boundary_test()
371 &mock_env->str2)); in hfsplus_unicode_boundary_test()
374 mock_env->str1.length = cpu_to_be16(1); in hfsplus_unicode_boundary_test()
375 mock_env->str1.unicode[0] = cpu_to_be16('A'); in hfsplus_unicode_boundary_test()
376 mock_env->str2.length = cpu_to_be16(0); in hfsplus_unicode_boundary_test()
377 KUNIT_EXPECT_GT(test, hfsplus_strcmp(&mock_env->str1, in hfsplus_unicode_boundary_test()
378 &mock_env->str2), 0); in hfsplus_unicode_boundary_test()
379 KUNIT_EXPECT_GT(test, hfsplus_strcasecmp(&mock_env->str1, in hfsplus_unicode_boundary_test()
380 &mock_env->str2), 0); in hfsplus_unicode_boundary_test()
400 ptr->nls.charset = "utf8"; in setup_mock_sb()
401 ptr->nls.uni2char = NULL; /* Will use default behavior */ in setup_mock_sb()
402 ptr->sb_info.nls = &ptr->nls; in setup_mock_sb()
403 ptr->sb.s_fs_info = &ptr->sb_info; in setup_mock_sb()
405 /* Set default flags - no decomposition, no case folding */ in setup_mock_sb()
406 clear_bit(HFSPLUS_SB_NODECOMPOSE, &ptr->sb_info.flags); in setup_mock_sb()
407 clear_bit(HFSPLUS_SB_CASEFOLD, &ptr->sb_info.flags); in setup_mock_sb()
421 return -ENAMETOOLONG; in test_uni2char()
428 /* For non-ASCII, just use '?' as fallback */ in test_uni2char()
446 mock_sb->nls.uni2char = test_uni2char; in hfsplus_uni2asc_basic_test()
449 create_unistr(&mock_env->str1, "hello"); in hfsplus_uni2asc_basic_test()
450 len = mock_env->buf_size; in hfsplus_uni2asc_basic_test()
451 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_basic_test()
452 mock_env->buf, &len); in hfsplus_uni2asc_basic_test()
456 KUNIT_EXPECT_STREQ(test, "hello", mock_env->buf); in hfsplus_uni2asc_basic_test()
459 create_unistr(&mock_env->str1, ""); in hfsplus_uni2asc_basic_test()
460 len = mock_env->buf_size; in hfsplus_uni2asc_basic_test()
461 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_basic_test()
462 mock_env->buf, &len); in hfsplus_uni2asc_basic_test()
468 create_unistr(&mock_env->str1, "A"); in hfsplus_uni2asc_basic_test()
469 len = mock_env->buf_size; in hfsplus_uni2asc_basic_test()
470 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_basic_test()
471 mock_env->buf, &len); in hfsplus_uni2asc_basic_test()
475 KUNIT_EXPECT_EQ(test, 'A', mock_env->buf[0]); in hfsplus_uni2asc_basic_test()
494 mock_sb->nls.uni2char = test_uni2char; in hfsplus_uni2asc_special_chars_test()
497 mock_env->str1.length = cpu_to_be16(1); in hfsplus_uni2asc_special_chars_test()
498 mock_env->str1.unicode[0] = cpu_to_be16(0x0000); in hfsplus_uni2asc_special_chars_test()
499 len = mock_env->buf_size; in hfsplus_uni2asc_special_chars_test()
500 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_special_chars_test()
501 mock_env->buf, &len); in hfsplus_uni2asc_special_chars_test()
505 /* Our test implementation returns '?' for non-ASCII */ in hfsplus_uni2asc_special_chars_test()
506 KUNIT_EXPECT_EQ(test, '?', mock_env->buf[0]); in hfsplus_uni2asc_special_chars_test()
509 mock_env->str1.length = cpu_to_be16(1); in hfsplus_uni2asc_special_chars_test()
510 mock_env->str1.unicode[0] = cpu_to_be16('/'); in hfsplus_uni2asc_special_chars_test()
511 len = mock_env->buf_size; in hfsplus_uni2asc_special_chars_test()
512 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_special_chars_test()
513 mock_env->buf, &len); in hfsplus_uni2asc_special_chars_test()
517 KUNIT_EXPECT_EQ(test, ':', mock_env->buf[0]); in hfsplus_uni2asc_special_chars_test()
520 mock_env->str1.length = cpu_to_be16(3); in hfsplus_uni2asc_special_chars_test()
521 mock_env->str1.unicode[0] = cpu_to_be16('a'); in hfsplus_uni2asc_special_chars_test()
522 mock_env->str1.unicode[1] = cpu_to_be16('/'); in hfsplus_uni2asc_special_chars_test()
523 mock_env->str1.unicode[2] = cpu_to_be16('b'); in hfsplus_uni2asc_special_chars_test()
524 len = mock_env->buf_size; in hfsplus_uni2asc_special_chars_test()
525 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_special_chars_test()
526 mock_env->buf, &len); in hfsplus_uni2asc_special_chars_test()
530 KUNIT_EXPECT_EQ(test, 'a', mock_env->buf[0]); in hfsplus_uni2asc_special_chars_test()
531 KUNIT_EXPECT_EQ(test, ':', mock_env->buf[1]); in hfsplus_uni2asc_special_chars_test()
532 KUNIT_EXPECT_EQ(test, 'b', mock_env->buf[2]); in hfsplus_uni2asc_special_chars_test()
551 mock_sb->nls.uni2char = test_uni2char; in hfsplus_uni2asc_buffer_test()
554 create_unistr(&mock_env->str1, "toolongstring"); in hfsplus_uni2asc_buffer_test()
556 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_buffer_test()
557 mock_env->buf, &len); in hfsplus_uni2asc_buffer_test()
559 KUNIT_EXPECT_EQ(test, -ENAMETOOLONG, result); in hfsplus_uni2asc_buffer_test()
563 create_unistr(&mock_env->str1, "exact"); in hfsplus_uni2asc_buffer_test()
565 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_buffer_test()
566 mock_env->buf, &len); in hfsplus_uni2asc_buffer_test()
572 create_unistr(&mock_env->str1, "test"); in hfsplus_uni2asc_buffer_test()
574 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_buffer_test()
575 mock_env->buf, &len); in hfsplus_uni2asc_buffer_test()
577 KUNIT_EXPECT_EQ(test, -ENAMETOOLONG, result); in hfsplus_uni2asc_buffer_test()
597 mock_sb->nls.uni2char = test_uni2char; in hfsplus_uni2asc_corrupted_test()
600 create_unistr(&mock_env->str1, "test"); in hfsplus_uni2asc_corrupted_test()
601 corrupt_unistr(&mock_env->str1); /* Sets length to U16_MAX */ in hfsplus_uni2asc_corrupted_test()
602 len = mock_env->buf_size; in hfsplus_uni2asc_corrupted_test()
604 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_corrupted_test()
605 mock_env->buf, &len); in hfsplus_uni2asc_corrupted_test()
633 mock_sb->nls.uni2char = test_uni2char; in hfsplus_uni2asc_edge_cases_test()
636 mock_env->str1.length = cpu_to_be16(HFSPLUS_MAX_STRLEN); in hfsplus_uni2asc_edge_cases_test()
638 mock_env->str1.unicode[i] = cpu_to_be16('a'); in hfsplus_uni2asc_edge_cases_test()
640 len = mock_env->buf_size; in hfsplus_uni2asc_edge_cases_test()
641 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_edge_cases_test()
642 mock_env->buf, &len); in hfsplus_uni2asc_edge_cases_test()
649 KUNIT_EXPECT_EQ(test, 'a', mock_env->buf[i]); in hfsplus_uni2asc_edge_cases_test()
651 /* Test string with high Unicode values (non-ASCII) */ in hfsplus_uni2asc_edge_cases_test()
652 mock_env->str1.length = cpu_to_be16(3); in hfsplus_uni2asc_edge_cases_test()
653 mock_env->str1.unicode[0] = cpu_to_be16(0x00E9); /* é */ in hfsplus_uni2asc_edge_cases_test()
654 mock_env->str1.unicode[1] = cpu_to_be16(0x00F1); /* ñ */ in hfsplus_uni2asc_edge_cases_test()
655 mock_env->str1.unicode[2] = cpu_to_be16(0x00FC); /* ü */ in hfsplus_uni2asc_edge_cases_test()
656 len = mock_env->buf_size; in hfsplus_uni2asc_edge_cases_test()
657 result = hfsplus_uni2asc_str(&mock_sb->sb, &mock_env->str1, in hfsplus_uni2asc_edge_cases_test()
658 mock_env->buf, &len); in hfsplus_uni2asc_edge_cases_test()
662 /* Our test implementation converts non-ASCII to '?' */ in hfsplus_uni2asc_edge_cases_test()
663 KUNIT_EXPECT_EQ(test, '?', mock_env->buf[0]); in hfsplus_uni2asc_edge_cases_test()
664 KUNIT_EXPECT_EQ(test, '?', mock_env->buf[1]); in hfsplus_uni2asc_edge_cases_test()
665 KUNIT_EXPECT_EQ(test, '?', mock_env->buf[2]); in hfsplus_uni2asc_edge_cases_test()
676 return -EINVAL; in test_char2uni()
688 int actual_len = be16_to_cpu(ustr->length); in check_unistr_content()
695 u16 actual_char = be16_to_cpu(ustr->unicode[i]); in check_unistr_content()
714 mock_sb->nls.char2uni = test_char2uni; in hfsplus_asc2uni_basic_test()
717 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, in hfsplus_asc2uni_basic_test()
721 check_unistr_content(test, &mock_env->str1, "hello"); in hfsplus_asc2uni_basic_test()
724 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, in hfsplus_asc2uni_basic_test()
728 KUNIT_EXPECT_EQ(test, 0, be16_to_cpu(mock_env->str1.length)); in hfsplus_asc2uni_basic_test()
731 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, in hfsplus_asc2uni_basic_test()
735 check_unistr_content(test, &mock_env->str1, "A"); in hfsplus_asc2uni_basic_test()
737 /* Test null-terminated string with explicit length */ in hfsplus_asc2uni_basic_test()
738 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, in hfsplus_asc2uni_basic_test()
742 check_unistr_content(test, &mock_env->str1, "test"); in hfsplus_asc2uni_basic_test()
761 mock_sb->nls.char2uni = test_char2uni; in hfsplus_asc2uni_special_chars_test()
764 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, in hfsplus_asc2uni_special_chars_test()
768 KUNIT_EXPECT_EQ(test, 1, be16_to_cpu(mock_env->str1.length)); in hfsplus_asc2uni_special_chars_test()
769 KUNIT_EXPECT_EQ(test, '/', be16_to_cpu(mock_env->str1.unicode[0])); in hfsplus_asc2uni_special_chars_test()
772 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, in hfsplus_asc2uni_special_chars_test()
776 KUNIT_EXPECT_EQ(test, 3, be16_to_cpu(mock_env->str1.length)); in hfsplus_asc2uni_special_chars_test()
777 KUNIT_EXPECT_EQ(test, 'a', be16_to_cpu(mock_env->str1.unicode[0])); in hfsplus_asc2uni_special_chars_test()
778 KUNIT_EXPECT_EQ(test, '/', be16_to_cpu(mock_env->str1.unicode[1])); in hfsplus_asc2uni_special_chars_test()
779 KUNIT_EXPECT_EQ(test, 'b', be16_to_cpu(mock_env->str1.unicode[2])); in hfsplus_asc2uni_special_chars_test()
782 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, in hfsplus_asc2uni_special_chars_test()
786 KUNIT_EXPECT_EQ(test, 3, be16_to_cpu(mock_env->str1.length)); in hfsplus_asc2uni_special_chars_test()
787 KUNIT_EXPECT_EQ(test, '/', be16_to_cpu(mock_env->str1.unicode[0])); in hfsplus_asc2uni_special_chars_test()
788 KUNIT_EXPECT_EQ(test, '/', be16_to_cpu(mock_env->str1.unicode[1])); in hfsplus_asc2uni_special_chars_test()
789 KUNIT_EXPECT_EQ(test, '/', be16_to_cpu(mock_env->str1.unicode[2])); in hfsplus_asc2uni_special_chars_test()
808 mock_sb->nls.char2uni = test_char2uni; in hfsplus_asc2uni_buffer_limits_test()
811 memset(mock_env->buf, 'a', HFSPLUS_MAX_STRLEN); in hfsplus_asc2uni_buffer_limits_test()
812 result = hfsplus_asc2uni(&mock_sb->sb, in hfsplus_asc2uni_buffer_limits_test()
813 &mock_env->str1, HFSPLUS_MAX_STRLEN, in hfsplus_asc2uni_buffer_limits_test()
814 mock_env->buf, HFSPLUS_MAX_STRLEN); in hfsplus_asc2uni_buffer_limits_test()
818 be16_to_cpu(mock_env->str1.length)); in hfsplus_asc2uni_buffer_limits_test()
821 memset(mock_env->buf, 'a', HFSPLUS_MAX_STRLEN + 5); in hfsplus_asc2uni_buffer_limits_test()
822 result = hfsplus_asc2uni(&mock_sb->sb, in hfsplus_asc2uni_buffer_limits_test()
823 &mock_env->str1, HFSPLUS_MAX_STRLEN, in hfsplus_asc2uni_buffer_limits_test()
824 mock_env->buf, HFSPLUS_MAX_STRLEN + 5); in hfsplus_asc2uni_buffer_limits_test()
826 KUNIT_EXPECT_EQ(test, -ENAMETOOLONG, result); in hfsplus_asc2uni_buffer_limits_test()
828 be16_to_cpu(mock_env->str1.length)); in hfsplus_asc2uni_buffer_limits_test()
831 result = hfsplus_asc2uni(&mock_sb->sb, in hfsplus_asc2uni_buffer_limits_test()
832 &mock_env->str1, 5, "toolongstring", 13); in hfsplus_asc2uni_buffer_limits_test()
834 KUNIT_EXPECT_EQ(test, -ENAMETOOLONG, result); in hfsplus_asc2uni_buffer_limits_test()
835 KUNIT_EXPECT_EQ(test, 5, be16_to_cpu(mock_env->str1.length)); in hfsplus_asc2uni_buffer_limits_test()
838 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, 0, "test", 4); in hfsplus_asc2uni_buffer_limits_test()
840 KUNIT_EXPECT_EQ(test, -ENAMETOOLONG, result); in hfsplus_asc2uni_buffer_limits_test()
841 KUNIT_EXPECT_EQ(test, 0, be16_to_cpu(mock_env->str1.length)); in hfsplus_asc2uni_buffer_limits_test()
858 mock_sb->nls.char2uni = test_char2uni; in hfsplus_asc2uni_edge_cases_test()
861 result = hfsplus_asc2uni(&mock_sb->sb, in hfsplus_asc2uni_edge_cases_test()
868 result = hfsplus_asc2uni(&mock_sb->sb, in hfsplus_asc2uni_edge_cases_test()
875 result = hfsplus_asc2uni(&mock_sb->sb, in hfsplus_asc2uni_edge_cases_test()
882 result = hfsplus_asc2uni(&mock_sb->sb, in hfsplus_asc2uni_edge_cases_test()
907 mock_sb->nls.char2uni = test_char2uni; in hfsplus_asc2uni_decompose_test()
910 clear_bit(HFSPLUS_SB_NODECOMPOSE, &mock_sb->sb_info.flags); in hfsplus_asc2uni_decompose_test()
911 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str1, in hfsplus_asc2uni_decompose_test()
915 check_unistr_content(test, &mock_env->str1, "test"); in hfsplus_asc2uni_decompose_test()
917 /* Test with decomposition enabled */ in hfsplus_asc2uni_decompose_test()
918 set_bit(HFSPLUS_SB_NODECOMPOSE, &mock_sb->sb_info.flags); in hfsplus_asc2uni_decompose_test()
919 result = hfsplus_asc2uni(&mock_sb->sb, &mock_env->str2, in hfsplus_asc2uni_decompose_test()
923 check_unistr_content(test, &mock_env->str2, "test"); in hfsplus_asc2uni_decompose_test()
927 be16_to_cpu(mock_env->str1.length), in hfsplus_asc2uni_decompose_test()
928 be16_to_cpu(mock_env->str2.length)); in hfsplus_asc2uni_decompose_test()
946 str->name = name; in create_qstr()
947 str->len = strlen(name); in create_qstr()
948 str->hash = 0; /* Will be set by hash function */ in create_qstr()
961 setup_mock_dentry(&mock_sb->sb); in hfsplus_hash_dentry_basic_test()
962 mock_sb->nls.char2uni = test_char2uni; in hfsplus_hash_dentry_basic_test()
971 /* Test that identical strings produce identical hashes */ in hfsplus_hash_dentry_basic_test()
1005 setup_mock_dentry(&mock_sb->sb); in hfsplus_hash_dentry_casefold_test()
1006 mock_sb->nls.char2uni = test_char2uni; in hfsplus_hash_dentry_casefold_test()
1009 clear_bit(HFSPLUS_SB_CASEFOLD, &mock_sb->sb_info.flags); in hfsplus_hash_dentry_casefold_test()
1025 /* Test with case folding enabled */ in hfsplus_hash_dentry_casefold_test()
1026 set_bit(HFSPLUS_SB_CASEFOLD, &mock_sb->sb_info.flags); in hfsplus_hash_dentry_casefold_test()
1058 setup_mock_dentry(&mock_sb->sb); in hfsplus_hash_dentry_special_chars_test()
1059 mock_sb->nls.char2uni = test_char2uni; in hfsplus_hash_dentry_special_chars_test()
1097 setup_mock_dentry(&mock_sb->sb); in hfsplus_hash_dentry_decompose_test()
1098 mock_sb->nls.char2uni = test_char2uni; in hfsplus_hash_dentry_decompose_test()
1101 clear_bit(HFSPLUS_SB_NODECOMPOSE, &mock_sb->sb_info.flags); in hfsplus_hash_dentry_decompose_test()
1107 /* Test with decomposition enabled */ in hfsplus_hash_dentry_decompose_test()
1108 set_bit(HFSPLUS_SB_NODECOMPOSE, &mock_sb->sb_info.flags); in hfsplus_hash_dentry_decompose_test()
1134 setup_mock_dentry(&mock_sb->sb); in hfsplus_hash_dentry_consistency_test()
1135 mock_sb->nls.char2uni = test_char2uni; in hfsplus_hash_dentry_consistency_test()
1149 /* Test that different strings produce different hashes */ in hfsplus_hash_dentry_consistency_test()
1156 /* Test similar strings should have different hashes */ in hfsplus_hash_dentry_consistency_test()
1184 setup_mock_dentry(&mock_sb->sb); in hfsplus_hash_dentry_edge_cases_test()
1185 mock_sb->nls.char2uni = test_char2uni; in hfsplus_hash_dentry_edge_cases_test()
1188 memset(mock_env->buf, 'a', mock_env->buf_size - 1); in hfsplus_hash_dentry_edge_cases_test()
1189 mock_env->buf[mock_env->buf_size - 1] = '\0'; in hfsplus_hash_dentry_edge_cases_test()
1191 create_qstr(&str, mock_env->buf); in hfsplus_hash_dentry_edge_cases_test()
1198 create_qstr(&str, "!@#$%^&*()_+-=[]{}|;':\",./<>?"); in hfsplus_hash_dentry_edge_cases_test()
1227 setup_mock_dentry(&mock_sb->sb); in hfsplus_compare_dentry_basic_test()
1228 mock_sb->nls.char2uni = test_char2uni; in hfsplus_compare_dentry_basic_test()
1230 /* Test identical strings */ in hfsplus_compare_dentry_basic_test()
1235 /* Test different strings - lexicographic order */ in hfsplus_compare_dentry_basic_test()
1247 /* Test empty strings */ in hfsplus_compare_dentry_basic_test()
1252 /* Test one empty, one non-empty */ in hfsplus_compare_dentry_basic_test()
1274 setup_mock_dentry(&mock_sb->sb); in hfsplus_compare_dentry_casefold_test()
1275 mock_sb->nls.char2uni = test_char2uni; in hfsplus_compare_dentry_casefold_test()
1278 clear_bit(HFSPLUS_SB_CASEFOLD, &mock_sb->sb_info.flags); in hfsplus_compare_dentry_casefold_test()
1290 /* Test with case folding enabled */ in hfsplus_compare_dentry_casefold_test()
1291 set_bit(HFSPLUS_SB_CASEFOLD, &mock_sb->sb_info.flags); in hfsplus_compare_dentry_casefold_test()
1325 setup_mock_dentry(&mock_sb->sb); in hfsplus_compare_dentry_special_chars_test()
1326 mock_sb->nls.char2uni = test_char2uni; in hfsplus_compare_dentry_special_chars_test()
1363 setup_mock_dentry(&mock_sb->sb); in hfsplus_compare_dentry_length_test()
1364 mock_sb->nls.char2uni = test_char2uni; in hfsplus_compare_dentry_length_test()
1404 setup_mock_dentry(&mock_sb->sb); in hfsplus_compare_dentry_decompose_test()
1405 mock_sb->nls.char2uni = test_char2uni; in hfsplus_compare_dentry_decompose_test()
1408 clear_bit(HFSPLUS_SB_NODECOMPOSE, &mock_sb->sb_info.flags); in hfsplus_compare_dentry_decompose_test()
1414 /* Test with decomposition enabled */ in hfsplus_compare_dentry_decompose_test()
1415 set_bit(HFSPLUS_SB_NODECOMPOSE, &mock_sb->sb_info.flags); in hfsplus_compare_dentry_decompose_test()
1447 setup_mock_dentry(&mock_sb->sb); in hfsplus_compare_dentry_edge_cases_test()
1448 mock_sb->nls.char2uni = test_char2uni; in hfsplus_compare_dentry_edge_cases_test()
1456 /* Test very long strings */ in hfsplus_compare_dentry_edge_cases_test()
1457 memset(long_str, 'a', str_size - 1); in hfsplus_compare_dentry_edge_cases_test()
1458 long_str[str_size - 1] = '\0'; in hfsplus_compare_dentry_edge_cases_test()
1461 result = hfsplus_compare_dentry(&test_dentry, str_size - 1, in hfsplus_compare_dentry_edge_cases_test()
1465 /* Test with difference at the end of long strings */ in hfsplus_compare_dentry_edge_cases_test()
1466 memset(long_str2, 'a', str_size - 1); in hfsplus_compare_dentry_edge_cases_test()
1467 long_str2[str_size - 1] = '\0'; in hfsplus_compare_dentry_edge_cases_test()
1468 long_str2[str_size - 2] = 'b'; in hfsplus_compare_dentry_edge_cases_test()
1470 result = hfsplus_compare_dentry(&test_dentry, str_size - 1, in hfsplus_compare_dentry_edge_cases_test()
1507 setup_mock_dentry(&mock_sb->sb); in hfsplus_compare_dentry_combined_flags_test()
1508 mock_sb->nls.char2uni = test_char2uni; in hfsplus_compare_dentry_combined_flags_test()
1510 /* Test with both casefold and decompose enabled */ in hfsplus_compare_dentry_combined_flags_test()
1511 set_bit(HFSPLUS_SB_CASEFOLD, &mock_sb->sb_info.flags); in hfsplus_compare_dentry_combined_flags_test()
1512 set_bit(HFSPLUS_SB_NODECOMPOSE, &mock_sb->sb_info.flags); in hfsplus_compare_dentry_combined_flags_test()
1524 clear_bit(HFSPLUS_SB_CASEFOLD, &mock_sb->sb_info.flags); in hfsplus_compare_dentry_combined_flags_test()
1525 clear_bit(HFSPLUS_SB_NODECOMPOSE, &mock_sb->sb_info.flags); in hfsplus_compare_dentry_combined_flags_test()