kernel32/tests: Add test for CT_TYPE1 of GetStringTypeW.
This commit is contained in:
parent
46a5b46710
commit
6c970e7e66
|
@ -2656,6 +2656,131 @@ static void test_GetCPInfo(void)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The CT_TYPE1 has varied over windows version.
|
||||
* The current target for correct behavior is windows 7.
|
||||
* There was a big shift between windows 2000 (first introduced) and windows Xp
|
||||
* Most of the old values below are from windows 2000.
|
||||
* A smaller subset of changes happened between windows Xp and Window vista/7
|
||||
*/
|
||||
static void test_GetStringTypeW(void)
|
||||
{
|
||||
static const WCHAR blanks[] = {0x9, 0x20, 0xa0, 0x3000, 0xfeff};
|
||||
static const WORD blanks_new[] = {C1_SPACE | C1_CNTRL | C1_BLANK | C1_DEFINED,
|
||||
C1_SPACE | C1_BLANK | C1_DEFINED,
|
||||
C1_SPACE | C1_BLANK | C1_DEFINED,
|
||||
C1_SPACE | C1_BLANK | C1_DEFINED,
|
||||
C1_CNTRL | C1_BLANK | C1_DEFINED};
|
||||
static const WORD blanks_old[] ={C1_SPACE | C1_CNTRL | C1_BLANK,
|
||||
C1_SPACE | C1_BLANK,
|
||||
C1_SPACE | C1_BLANK,
|
||||
C1_SPACE | C1_BLANK,
|
||||
C1_SPACE | C1_BLANK};
|
||||
|
||||
static const WCHAR undefined[] = {0x378, 0x379, 0x65f, 0xfff8, 0xfffe};
|
||||
|
||||
/* Lu, Ll, Lt */
|
||||
static const WCHAR alpha[] = {0x47, 0x67, 0x1c5};
|
||||
static const WORD alpha_old[] = {C1_UPPER | C1_ALPHA,
|
||||
C1_LOWER | C1_ALPHA,
|
||||
C1_UPPER | C1_LOWER | C1_ALPHA,
|
||||
C1_ALPHA};
|
||||
|
||||
/* Sk, Sk, Mn, So, Me */
|
||||
static const WCHAR oldpunc[] = { 0x2c2, 0x2e5, 0x322, 0x482, 0x6de,
|
||||
/* Sc, Sm, No,*/
|
||||
0xffe0, 0xffe9, 0x2153};
|
||||
|
||||
/* Lm, Nl, Cf, 0xad(Cf), 0x1f88 (Lt), Lo, Mc */
|
||||
static const WCHAR changed[] = {0x2b0, 0x2160, 0x600, 0xad, 0x1f88, 0x294, 0x903};
|
||||
static const WORD changed_old[] = { C1_PUNCT, C1_PUNCT, 0, C1_PUNCT, C1_UPPER | C1_ALPHA, C1_ALPHA, C1_PUNCT };
|
||||
static const WORD changed_xp[] = {C1_ALPHA | C1_DEFINED,
|
||||
C1_ALPHA | C1_DEFINED,
|
||||
C1_CNTRL | C1_DEFINED,
|
||||
C1_PUNCT | C1_DEFINED,
|
||||
C1_UPPER | C1_LOWER | C1_ALPHA | C1_DEFINED,
|
||||
C1_ALPHA | C1_LOWER | C1_DEFINED,
|
||||
C1_ALPHA | C1_DEFINED };
|
||||
static const WORD changed_new[] = { C1_ALPHA | C1_DEFINED,
|
||||
C1_ALPHA | C1_DEFINED,
|
||||
C1_CNTRL | C1_DEFINED,
|
||||
C1_PUNCT | C1_CNTRL | C1_DEFINED,
|
||||
C1_UPPER | C1_LOWER | C1_ALPHA | C1_DEFINED,
|
||||
C1_ALPHA | C1_DEFINED,
|
||||
C1_DEFINED
|
||||
};
|
||||
/* Pc, Pd, Ps, Pe, Pi, Pf, Po*/
|
||||
static const WCHAR punct[] = { 0x5f, 0x2d, 0x28, 0x29, 0xab, 0xbb, 0x21 };
|
||||
|
||||
static const WCHAR punct_special[] = {0x24, 0x2b, 0x3c, 0x3e, 0x5e, 0x60,
|
||||
0x7c, 0x7e, 0xa2, 0xbe, 0xd7, 0xf7};
|
||||
static const WCHAR digit_special[] = {0xb2, 0xb3, 0xb9};
|
||||
static const WCHAR lower_special[] = {0x2071, 0x207f};
|
||||
static const WCHAR cntrl_special[] = {0x070f, 0x200c, 0x200d,
|
||||
0x200e, 0x200f, 0x202a, 0x202b, 0x202c, 0x202d, 0x202e,
|
||||
0x206a, 0x206b, 0x206c, 0x206d, 0x206e, 0x206f, 0xfeff,
|
||||
0xfff9, 0xfffa, 0xfffb};
|
||||
static const WCHAR space_special[] = {0x09, 0x0d, 0x85};
|
||||
|
||||
WORD types[20];
|
||||
int i;
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, blanks, 5, types);
|
||||
for (i = 0; i < 5; i++)
|
||||
ok(types[i] == blanks_new[i] || broken(types[i] == blanks_old[i] || broken(types[i] == 0)), "incorrect type1 returned for %x -> (%x != %x)\n",blanks[i],types[i],blanks_new[i]);
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, alpha, 3, types);
|
||||
for (i = 0; i < 3; i++)
|
||||
ok(types[i] == (C1_DEFINED | alpha_old[i]) || broken(types[i] == alpha_old[i]) || broken(types[i] == 0), "incorrect types returned for %x -> (%x != %x)\n",alpha[i], types[i],(C1_DEFINED | alpha_old[i]));
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, undefined, 5, types);
|
||||
for (i = 0; i < 5; i++)
|
||||
ok(types[i] == 0, "incorrect types returned for %x -> (%x != 0)\n",undefined[i], types[i]);
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, oldpunc, 8, types);
|
||||
for (i = 0; i < 8; i++)
|
||||
ok(types[i] == C1_DEFINED || broken(types[i] == C1_PUNCT) || broken(types[i] == 0), "incorrect types returned for %x -> (%x != %x)\n",oldpunc[i], types[i], C1_DEFINED);
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, changed, 7, types);
|
||||
for (i = 0; i < 7; i++)
|
||||
ok(types[i] == changed_new[i] || broken(types[i] == changed_old[i]) || broken(types[i] == changed_xp[i]) || broken(types[i] == 0), "incorrect types returned for %x -> (%x != %x)\n",changed[i], types[i], changed_new[i]);
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, punct, 7, types);
|
||||
for (i = 0; i < 7; i++)
|
||||
ok(types[i] == (C1_PUNCT | C1_DEFINED) || broken(types[i] == C1_PUNCT) || broken(types[i] == 0), "incorrect types returned for %x -> (%x != %x)\n",punct[i], types[i], (C1_PUNCT | C1_DEFINED));
|
||||
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, punct_special, 12, types);
|
||||
for (i = 0; i < 12; i++)
|
||||
ok(types[i] & C1_PUNCT || broken(types[i] == 0), "incorrect types returned for %x -> (%x doest not have %x)\n",punct_special[i], types[i], C1_PUNCT);
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, digit_special, 3, types);
|
||||
for (i = 0; i < 3; i++)
|
||||
ok(types[i] & C1_DIGIT || broken(types[i] == 0), "incorrect types returned for %x -> (%x doest not have = %x)\n",digit_special[i], types[i], C1_DIGIT);
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, lower_special, 2, types);
|
||||
for (i = 0; i < 2; i++)
|
||||
ok(types[i] & C1_LOWER || broken(types[i] == C1_PUNCT) || broken(types[i] == 0), "incorrect types returned for %x -> (%x does not have %x)\n",lower_special[i], types[i], C1_LOWER);
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, cntrl_special, 20, types);
|
||||
for (i = 0; i < 20; i++)
|
||||
ok(types[i] & C1_CNTRL || broken(types[i] == (C1_BLANK|C1_SPACE)) || broken(types[i] == C1_PUNCT) || broken(types[i] == 0), "incorrect types returned for %x -> (%x does not have %x)\n",cntrl_special[i], types[i], C1_CNTRL);
|
||||
|
||||
memset(types,0,sizeof(types));
|
||||
GetStringTypeW(CT_CTYPE1, space_special, 3, types);
|
||||
for (i = 0; i < 3; i++)
|
||||
ok(types[i] & C1_SPACE || broken(types[i] == C1_CNTRL) || broken(types[i] == 0), "incorrect types returned for %x -> (%x does not have %x)\n",space_special[i], types[i], C1_SPACE );
|
||||
}
|
||||
|
||||
START_TEST(locale)
|
||||
{
|
||||
InitFunctionPointers();
|
||||
|
@ -2680,6 +2805,7 @@ START_TEST(locale)
|
|||
test_SetLocaleInfoA();
|
||||
test_EnumUILanguageA();
|
||||
test_GetCPInfo();
|
||||
test_GetStringTypeW();
|
||||
/* this requires collation table patch to make it MS compatible */
|
||||
if (0) test_sorting();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue