Alexandre Julliard : kernel32/tests: Add tests for NtGetNlsSectionPtr() and RtlInitCodePageTable().
Alexandre Julliard
julliard at winehq.org
Tue Nov 26 16:21:24 CST 2019
Module: wine
Branch: master
Commit: 4901386892449c0831194fe3aed1d6a572f04405
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4901386892449c0831194fe3aed1d6a572f04405
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Nov 26 17:56:04 2019 +0100
kernel32/tests: Add tests for NtGetNlsSectionPtr() and RtlInitCodePageTable().
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/tests/locale.c | 116 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 115 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 0e2c3496a9..5ae7bd492b 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -87,6 +87,8 @@ static INT (WINAPI *pNormalizeString)(NORM_FORM, LPCWSTR, INT, LPWSTR, INT);
static INT (WINAPI *pFindStringOrdinal)(DWORD, LPCWSTR lpStringSource, INT, LPCWSTR, INT, BOOL);
static NTSTATUS (WINAPI *pRtlNormalizeString)(ULONG, LPCWSTR, INT, LPWSTR, INT*);
static NTSTATUS (WINAPI *pRtlIsNormalizedString)(ULONG, LPCWSTR, INT, BOOLEAN*);
+static NTSTATUS (WINAPI *pNtGetNlsSectionPtr)(ULONG,ULONG,void*,void**,SIZE_T*);
+static void (WINAPI *pRtlInitCodePageTable)(USHORT*,CPTABLEINFO*);
static void InitFunctionPointers(void)
{
@@ -130,6 +132,8 @@ static void InitFunctionPointers(void)
X(RtlLocaleNameToLcid);
X(RtlNormalizeString);
X(RtlIsNormalizedString);
+ X(NtGetNlsSectionPtr);
+ X(RtlInitCodePageTable);
#undef X
}
@@ -1572,7 +1576,7 @@ static void test_GetNumberFormatA(void)
if (IsValidLocale(lcid, 0))
{
STRINGSA("-12345","-12 345,00"); /* Try French formatting */
- Expected[3] = 160; /* Non breaking space */
+ Expected[3] = (char)160; /* Non breaking space */
ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, ARRAY_SIZE(buffer));
ok(ret, "Expected ret != 0, got %d, error %d\n", ret, GetLastError());
EXPECT_LENA; EXPECT_EQA;
@@ -4092,6 +4096,7 @@ static void test_EnumTimeFormatsW(void)
GetLastError());
}
}
+
static void test_GetCPInfo(void)
{
BOOL ret;
@@ -4135,6 +4140,115 @@ static void test_GetCPInfo(void)
ok(cpinfo.MaxCharSize == 4 || broken(cpinfo.MaxCharSize == 3) /* win9x */,
"expected 4, got %u\n", cpinfo.MaxCharSize);
}
+
+ if (pNtGetNlsSectionPtr)
+ {
+ CPTABLEINFO table;
+ NTSTATUS status;
+ void *ptr, *ptr2;
+ SIZE_T size;
+ int i;
+
+ for (i = 0; i < 100; i++)
+ {
+ ptr = NULL;
+ size = 0;
+ status = pNtGetNlsSectionPtr( i, 9999, NULL, &ptr, &size );
+ switch (i)
+ {
+ case 9: /* unknown */
+ case 13: /* unknown */
+ ok( status == STATUS_INVALID_PARAMETER_1 || status == STATUS_INVALID_PARAMETER_3, /* vista */
+ "%u: failed %x\n", i, status );
+ break;
+ case 10: /* casemap */
+ ok( status == STATUS_INVALID_PARAMETER_1 || status == STATUS_UNSUCCESSFUL,
+ "%u: failed %x\n", i, status );
+ break;
+ case 11: /* codepage */
+ case 12: /* normalization */
+ ok( status == STATUS_OBJECT_NAME_NOT_FOUND, "%u: failed %x\n", i, status );
+ break;
+ default:
+ ok( status == STATUS_INVALID_PARAMETER_1, "%u: failed %x\n", i, status );
+ break;
+ }
+ }
+
+ /* casemap table */
+
+ status = pNtGetNlsSectionPtr( 10, 0, NULL, &ptr, &size );
+ if (status != STATUS_INVALID_PARAMETER_1)
+ {
+ ok( !status, "failed %x\n", status );
+ ok( size > 0x1000 && size <= 0x8000 , "wrong size %lx\n", size );
+ status = pNtGetNlsSectionPtr( 10, 0, NULL, &ptr2, &size );
+ ok( ptr != ptr2, "got same pointer\n" );
+ ret = UnmapViewOfFile( ptr );
+ todo_wine ok( ret, "UnmapViewOfFile failed err %u\n", GetLastError() );
+ ret = UnmapViewOfFile( ptr2 );
+ todo_wine ok( ret, "UnmapViewOfFile failed err %u\n", GetLastError() );
+ }
+
+ /* codepage tables */
+
+ ptr = (void *)0xdeadbeef;
+ size = 0xdeadbeef;
+ status = pNtGetNlsSectionPtr( 11, 437, NULL, &ptr, &size );
+ ok( !status, "failed %x\n", status );
+ ok( size > 0x10000 && size <= 0x20000, "wrong size %lx\n", size );
+ memset( &table, 0xcc, sizeof(table) );
+ if (pRtlInitCodePageTable)
+ {
+ pRtlInitCodePageTable( ptr, &table );
+ ok( table.CodePage == 437, "wrong codepage %u\n", table.CodePage );
+ ok( table.MaximumCharacterSize == 1, "wrong char size %u\n", table.MaximumCharacterSize );
+ ok( table.DefaultChar == '?', "wrong default char %x\n", table.DefaultChar );
+ ok( !table.DBCSCodePage, "wrong dbcs %u\n", table.DBCSCodePage );
+ }
+ ret = UnmapViewOfFile( ptr );
+ todo_wine ok( ret, "UnmapViewOfFile failed err %u\n", GetLastError() );
+
+ status = pNtGetNlsSectionPtr( 11, 932, NULL, &ptr, &size );
+ ok( !status, "failed %x\n", status );
+ ok( size > 0x20000 && size <= 0x30000, "wrong size %lx\n", size );
+ memset( &table, 0xcc, sizeof(table) );
+ if (pRtlInitCodePageTable)
+ {
+ pRtlInitCodePageTable( ptr, &table );
+ ok( table.CodePage == 932, "wrong codepage %u\n", table.CodePage );
+ ok( table.MaximumCharacterSize == 2, "wrong char size %u\n", table.MaximumCharacterSize );
+ ok( table.DefaultChar == '?', "wrong default char %x\n", table.DefaultChar );
+ ok( table.DBCSCodePage == TRUE, "wrong dbcs %u\n", table.DBCSCodePage );
+ }
+ ret = UnmapViewOfFile( ptr );
+ todo_wine ok( ret, "UnmapViewOfFile failed err %u\n", GetLastError() );
+
+ /* normalization tables */
+
+ for (i = 0; i < 100; i++)
+ {
+ status = pNtGetNlsSectionPtr( 12, i, NULL, &ptr, &size );
+ switch (i)
+ {
+ case NormalizationC:
+ case NormalizationD:
+ case NormalizationKC:
+ case NormalizationKD:
+ case 13: /* IDN */
+ todo_wine ok( !status, "%u: failed %x\n", i, status );
+ if (status) break;
+ ok( size > 0x8000 && size <= 0x30000 , "wrong size %lx\n", size );
+ ret = UnmapViewOfFile( ptr );
+ ok( ret, "UnmapViewOfFile failed err %u\n", GetLastError() );
+ break;
+ default:
+ ok( status == STATUS_OBJECT_NAME_NOT_FOUND, "%u: failed %x\n", i, status );
+ break;
+ }
+ }
+ }
+ else win_skip( "NtGetNlsSectionPtr not supported\n" );
}
/*
More information about the wine-cvs
mailing list