X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=rostests%2Fapitests%2Fadvapi32%2FIsTextUnicode.c;h=a20a2c3602d1f7aab3e6abea6a6fd08c8024beaf;hp=c4c8162c7df98d60f1e2487c613717d20feeda7a;hb=85d39f7ebeeb40fa4c73df74b93cb9b73d0f5ab9;hpb=af19896debe14ca9ab70d32c907092371f18ee73 diff --git a/rostests/apitests/advapi32/IsTextUnicode.c b/rostests/apitests/advapi32/IsTextUnicode.c index c4c8162c7df..a20a2c3602d 100644 --- a/rostests/apitests/advapi32/IsTextUnicode.c +++ b/rostests/apitests/advapi32/IsTextUnicode.c @@ -8,7 +8,54 @@ #include #define WIN32_NO_STATUS +#include #include +#include +#include +#include + +PVOID LoadCodePageData(ULONG Code) +{ + char filename[MAX_PATH], sysdir[MAX_PATH]; + HANDLE hFile; + PVOID Data = NULL; + GetSystemDirectoryA(sysdir, MAX_PATH); + + if (Code != -1) + sprintf(filename, "%s\\c_%lu.nls", sysdir, Code); + else + sprintf(filename, "%s\\l_intl.nls", sysdir); + + hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + DWORD dwRead; + DWORD dwFileSize = GetFileSize(hFile, NULL); + Data = malloc(dwFileSize); + ReadFile(hFile, Data, dwFileSize, &dwRead, NULL); + CloseHandle(hFile); + } + return Data; +} + +/* https://www.microsoft.com/resources/msdn/goglobal/default.mspx */ +void SetupLocale(ULONG AnsiCode, ULONG OemCode, ULONG Unicode) +{ + NLSTABLEINFO NlsTable; + PVOID AnsiCodePageData; + PVOID OemCodePageData; + PVOID UnicodeCaseTableData; + + AnsiCodePageData = LoadCodePageData(AnsiCode); + OemCodePageData = LoadCodePageData(OemCode); + UnicodeCaseTableData = LoadCodePageData(Unicode); + + RtlInitNlsTables(AnsiCodePageData, OemCodePageData, UnicodeCaseTableData, &NlsTable); + RtlResetRtlTranslations(&NlsTable); + /* Do NOT free the buffers here, they are directly used! + Yes, we leak the old buffers, but this is a test anyway... */ + +} START_TEST(IsTextUnicode) { @@ -89,8 +136,16 @@ START_TEST(IsTextUnicode) NEW_TEST(L"UNICODE S" L"\x0A0D" L"tring 5 Привет!", IS_TEXT_UNICODE_ILLEGAL_CHARS, IS_TEXT_UNICODE_ILLEGAL_CHARS, FALSE), /* Unicode 0xFFFF */ NEW_TEST(L"UNICODE S" L"\xFFFF" L"tring 5 Привет!", IS_TEXT_UNICODE_ILLEGAL_CHARS, IS_TEXT_UNICODE_ILLEGAL_CHARS, FALSE), + + // 35 + NEW_TEST(L"UNICODE String 0", IS_TEXT_UNICODE_DBCS_LEADBYTE, 0, FALSE) }; + const char japanese_with_lead[] = "ABC" "\x83\x40" "D"; + const char simplfied_chinese_with_lead[] = "ABC" "\xC5\xC5" "D"; + const char korean_with_lead[] = "ABC" "\xBF\xAD" "D"; + const char traditional_chinese_with_lead[] = "ABC" "\xB1\xC1" "D"; + UINT i; BOOL Success; INT Result; @@ -103,4 +158,32 @@ START_TEST(IsTextUnicode) if (Result != INVALID_FLAG) ok(Result == Tests[i].ResultFlags, "IsTextUnicode(%u) Result returned 0x%x, expected 0x%x\n", i, Result, Tests[i].ResultFlags); } + + /* Japanese */ + SetupLocale(932, 932, -1); + + Result = IS_TEXT_UNICODE_DBCS_LEADBYTE; + ok(!IsTextUnicode(japanese_with_lead, sizeof(japanese_with_lead), &Result), "IsTextUnicode() returned TRUE, expected FALSE\n"); + ok(Result == IS_TEXT_UNICODE_DBCS_LEADBYTE, "Result returned 0x%x, expected 0x%x\n", Result, IS_TEXT_UNICODE_DBCS_LEADBYTE); + + /* Simplified Chinese */ + SetupLocale(936, 936, -1); + + Result = IS_TEXT_UNICODE_DBCS_LEADBYTE; + ok(!IsTextUnicode(simplfied_chinese_with_lead, sizeof(simplfied_chinese_with_lead), &Result), "IsTextUnicode() returned TRUE, expected FALSE\n"); + ok(Result == IS_TEXT_UNICODE_DBCS_LEADBYTE, "Result returned 0x%x, expected 0x%x\n", Result, IS_TEXT_UNICODE_DBCS_LEADBYTE); + + /* Korean */ + SetupLocale(949, 949, -1); + + Result = IS_TEXT_UNICODE_DBCS_LEADBYTE; + ok(!IsTextUnicode(korean_with_lead, sizeof(korean_with_lead), &Result), "IsTextUnicode() returned TRUE, expected FALSE\n"); + ok(Result == IS_TEXT_UNICODE_DBCS_LEADBYTE, "Result returned 0x%x, expected 0x%x\n", Result, IS_TEXT_UNICODE_DBCS_LEADBYTE); + + /* Traditional Chinese */ + SetupLocale(950, 950, -1); + + Result = IS_TEXT_UNICODE_DBCS_LEADBYTE; + ok(!IsTextUnicode(traditional_chinese_with_lead, sizeof(traditional_chinese_with_lead), &Result), "IsTextUnicode() returned TRUE, expected FALSE\n"); + ok(Result == IS_TEXT_UNICODE_DBCS_LEADBYTE, "Result returned 0x%x, expected 0x%x\n", Result, IS_TEXT_UNICODE_DBCS_LEADBYTE); }