msvcrt/tests: Add tests for SpecialCasing.

Signed-off-by: Daniel Lehman <dlehman25@gmail.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Daniel Lehman 2020-08-06 18:44:58 -07:00 committed by Alexandre Julliard
parent d5c5387622
commit 5458eea5b3
1 changed files with 86 additions and 0 deletions

View File

@ -4295,6 +4295,91 @@ static void test___STRINGTOLD(void)
}
}
static void test_SpecialCasing(void)
{
int i;
wint_t ret, exp;
_locale_t locale;
struct test {
const char *lang;
wint_t ch;
wint_t exp;
};
struct test ucases[] = {
{"English", 'I', 'i'}, /* LATIN CAPITAL LETTER I */
{"English", 0x0130}, /* LATIN CAPITAL LETTER I WITH DOT ABOVE */
{"Turkish", 'I', 'i'}, /* LATIN CAPITAL LETTER I */
{"Turkish", 0x0130}, /* LATIN CAPITAL LETTER I WITH DOT ABOVE */
};
struct test lcases[] = {
{"English", 'i', 'I'}, /* LATIN SMALL LETTER I */
{"English", 0x0131}, /* LATIN SMALL LETTER DOTLESS I */
{"Turkish", 'i', 'I'}, /* LATIN SMALL LETTER I */
{"Turkish", 0x0131}, /* LATIN SMALL LETTER DOTLESS I */
};
for (i = 0; i < ARRAY_SIZE(ucases); i++) {
if (!setlocale(LC_ALL, ucases[i].lang)) {
win_skip("skipping special case tests for %s\n", ucases[i].lang);
continue;
}
ret = p_towlower(ucases[i].ch);
exp = ucases[i].exp ? ucases[i].exp : ucases[i].ch;
ok(ret == exp, "expected lowercase %x, got %x for locale %s\n", exp, ret, ucases[i].lang);
}
for (i = 0; i < ARRAY_SIZE(lcases); i++) {
if (!setlocale(LC_ALL, lcases[i].lang)) {
win_skip("skipping special case tests for %s\n", lcases[i].lang);
continue;
}
ret = p_towupper(lcases[i].ch);
exp = lcases[i].exp ? lcases[i].exp : lcases[i].ch;
ok(ret == exp, "expected uppercase %x, got %x for locale %s\n", exp, ret, lcases[i].lang);
}
setlocale(LC_ALL, "C");
if (!p__towlower_l || !p__towupper_l || !p__create_locale)
{
win_skip("_towlower_l/_towupper_l/_create_locale not available\n");
return;
}
/* test _towlower_l creating locale */
for (i = 0; i < ARRAY_SIZE(ucases); i++) {
if (!(locale = p__create_locale(LC_ALL, ucases[i].lang))) {
win_skip("locale %s not available. skipping\n", ucases[i].lang);
continue;
}
ret = p__towlower_l(ucases[i].ch, locale);
exp = ucases[i].exp ? ucases[i].exp : ucases[i].ch;
ok(ret == exp, "expected lowercase %x, got %x for locale %s\n", exp, ret, ucases[i].lang);
p__free_locale(locale);
}
/* test _towupper_l creating locale */
for (i = 0; i < ARRAY_SIZE(lcases); i++) {
if (!(locale = p__create_locale(LC_ALL, lcases[i].lang))) {
win_skip("locale %s not available. skipping\n", lcases[i].lang);
continue;
}
ret = p__towupper_l(lcases[i].ch, locale);
exp = lcases[i].exp ? lcases[i].exp : lcases[i].ch;
ok(ret == exp, "expected uppercase %x, got %x for locale %s\n", exp, ret, lcases[i].lang);
p__free_locale(locale);
}
}
START_TEST(string)
{
char mem[100];
@ -4446,4 +4531,5 @@ START_TEST(string)
test_iswdigit();
test_wcscmp();
test___STRINGTOLD();
test_SpecialCasing();
}