Index: rostests/apitests/kernel32/CMakeLists.txt =================================================================== --- rostests/apitests/kernel32/CMakeLists.txt (revision 74717) +++ rostests/apitests/kernel32/CMakeLists.txt (working copy) @@ -14,6 +14,7 @@ GetDriveType.c GetModuleFileName.c interlck.c + IsDBCSLeadByteEx.c LoadLibraryExW.c lstrcpynW.c lstrlen.c Index: rostests/apitests/kernel32/IsDBCSLeadByteEx.c =================================================================== --- rostests/apitests/kernel32/IsDBCSLeadByteEx.c (nonexistent) +++ rostests/apitests/kernel32/IsDBCSLeadByteEx.c (working copy) @@ -0,0 +1,125 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Tests for IsDBCSLeadByteEx + * PROGRAMMER: Katayama Hirofumi MZ + */ + +#include + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H +#include +#include + +#define MAX_RANGE 4 + +typedef struct RANGE +{ + int StartIndex; + int EndIndex; +} RANGE; + +typedef struct ENTRY +{ + const char *Name; + int CodePage; + int RangeCount; + RANGE Ranges[MAX_RANGE]; +} ENTRY; + +START_TEST(IsDBCSLeadByteEx) +{ + static const ENTRY Entries[] = + { + { + "English", 437, + 0 + }, + { + "ChineseSimpilified", 936, + 1, + { + { 0x81, 0xFE } + } + }, + { + "ChineseTraditional", 950, + 1, + { + { 0x81, 0xFE } + } + }, + { + "Japanese", 932, + 2, + { + { 0x81, 0x9F }, { 0xE0, 0xFC } + } + }, + { + "Korean", 949, + 1, + { + { 0x81, 0xFE } + } + } + }; + int i; + + for (i = 0; i < _countof(Entries); ++i) + { + int Index, iRange; + int CodePage = Entries[i].CodePage, StartIndex = 0, RangeCount = 0; + BOOL InRange = FALSE; + RANGE Ranges[MAX_RANGE]; + const char *Name = Entries[i].Name; + + ZeroMemory(&Ranges, sizeof(Ranges)); + + for (Index = 0; Index < 256; ++Index) + { + if (InRange) + { + if (!IsDBCSLeadByteEx(CodePage, Index)) + { + Ranges[RangeCount].StartIndex = StartIndex; + Ranges[RangeCount].EndIndex = Index - 1; + ++RangeCount; + InRange = FALSE; + } + } + else + { + if (IsDBCSLeadByteEx(CodePage, Index)) + { + StartIndex = Index; + InRange = TRUE; + } + } + } + if (InRange) + { + Ranges[RangeCount].StartIndex = StartIndex; + Ranges[RangeCount].EndIndex = Index - 1; + ++RangeCount; + } + + ok(RangeCount == Entries[i].RangeCount, + "%s: RangeCount expected %d, was %d\n", + Name, Entries[i].RangeCount, RangeCount); + for (iRange = 0; iRange < Entries[i].RangeCount; ++iRange) + { + const RANGE *pRange = &Entries[i].Ranges[iRange]; + int iStart = Ranges[iRange].StartIndex; + int iEnd = Ranges[iRange].EndIndex; + ok(iStart == pRange->StartIndex, + "%s: Ranges[%d].StartIndex expected: 0x%02X, was: 0x%02X\n", + Name, iRange, pRange->StartIndex, iStart); + ok(iEnd == pRange->EndIndex, + "%s: Ranges[%d].EndIndex was expected: 0x%02X, was: 0x%02X\n", + Name, iRange, pRange->EndIndex, iEnd); + } + } +} Index: rostests/apitests/kernel32/testlist.c =================================================================== --- rostests/apitests/kernel32/testlist.c (revision 74717) +++ rostests/apitests/kernel32/testlist.c (working copy) @@ -15,6 +15,7 @@ extern void func_GetDriveType(void); extern void func_GetModuleFileName(void); extern void func_interlck(void); +extern void func_IsDBCSLeadByteEx(void); extern void func_LoadLibraryExW(void); extern void func_lstrcpynW(void); extern void func_lstrlen(void); @@ -42,6 +43,7 @@ { "GetDriveType", func_GetDriveType }, { "GetModuleFileName", func_GetModuleFileName }, { "interlck", func_interlck }, + { "IsDBCSLeadByteEx", func_IsDBCSLeadByteEx }, { "LoadLibraryExW", func_LoadLibraryExW }, { "lstrcpynW", func_lstrcpynW }, { "lstrlen", func_lstrlen },