|
|
/*++
Copyright (c) 1991-1999, Microsoft Corporation All rights reserved.
Module Name:
mstest.c
Abstract:
Test module for NLS API LCMapString.
NOTE: This code was simply hacked together quickly in order to test the different code modules of the NLS component. This is NOT meant to be a formal regression test.
Revision History:
06-14-91 JulieB Created.
--*/
//
// Include Files.
//
#include "nlstest.h"
//
// Constant Declarations.
//
#define BUFSIZE 50
#define LCMS_INVALID_FLAGS \
((DWORD)(~( LCMAP_LOWERCASE | LCMAP_UPPERCASE | \ LCMAP_SORTKEY | LCMAP_BYTEREV | \ LCMAP_HIRAGANA | LCMAP_KATAKANA | \ LCMAP_HALFWIDTH | LCMAP_FULLWIDTH | \ LCMAP_TRADITIONAL_CHINESE | \ LCMAP_SIMPLIFIED_CHINESE | \ NORM_IGNORECASE | NORM_IGNORENONSPACE | \ NORM_IGNORESYMBOLS | NORM_IGNOREKANATYPE | \ NORM_IGNOREWIDTH )))
//
// Global Variables.
//
LCID Locale;
#define MapSrc1 L"This Is A String"
#define MapSrc2 L"This Is$ A S-tr,in'g"
#define MapNoSymbols L"ThisIsAString"
WCHAR MapDest[BUFSIZE]; BYTE SortDest[BUFSIZE]; BYTE MapDestA[BUFSIZE];
#define MapUpper L"THIS IS A STRING"
#define MapLower L"this is a string"
#define MapLower2 L"this is$ a str,ing"
// Sharp S
#define wcSharpS L"\x0074\x00df\x0074"
// Nonspace
#define MapNS1 L"\x0074\x00e1\x0061\x0301"
#define MapNS2 L"\x0074\x0301\x00e1\x0061\x0301"
#define MapNoNS1 L"\x0074\x0061\x0061"
#define MapUpperNS L"\x0054\x00c1\x0041\x0301"
// Sortkey
#define SortPunctPre L"\x00e1\x002d" // a-acute, -
#define SortPunctComp L"\x0061\x0301\x002d" // a, acute, -
#define SortPunctExp1 L"\x00e6\x002d" // ae, -
#define SortPunctExp2 L"\x0061\x0065\x002d" // a, e, -
#define SortPunctUnsort L"\x00e6\xffff\x002d" // ae, unsort, -
#define SortSymbolPre L"\x00e1\x002a" // a-acute, *
#define SortSymbolComp L"\x0061\x0301\x002a" // a, acute, *
#define SortSymbolExp1 L"\x00e6\x002a" // ae, *
#define SortSymbolExp2 L"\x0061\x0065\x002a" // a, e, *
#define SortSymbolUnsort L"\x00e6\xffff\x002a" // ae, unsort, *
//
// Forward Declarations.
//
BOOL InitLCMapStr();
int LCMS_BadParamCheck();
int LCMS_NormalCase();
int LCMS_Ansi();
void CheckReturnValidSortKey( int CurrentReturn, int ExpectedReturn, LPBYTE pCurrentString, LPBYTE pExpectedString, LPBYTE pErrString, int *pNumErrors);
////////////////////////////////////////////////////////////////////////////
//
// TestLCMapString
//
// Test routine for LCMapStringW API.
//
// 06-14-91 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int TestLCMapString() { int ErrCount = 0; // error count
//
// Print out what's being done.
//
printf("\n\nTESTING LCMapStringW...\n\n");
//
// Initialize global variables.
//
if (!InitLCMapStr()) { printf("\nABORTED TestLCMapString: Could not Initialize.\n"); return (1); }
//
// Test bad parameters.
//
ErrCount += LCMS_BadParamCheck();
//
// Test normal cases.
//
ErrCount += LCMS_NormalCase();
//
// Test Ansi version.
//
ErrCount += LCMS_Ansi();
//
// Print out result.
//
printf("\nLCMapStringW: ERRORS = %d\n", ErrCount);
//
// Return total number of errors found.
//
return (ErrCount); }
////////////////////////////////////////////////////////////////////////////
//
// InitLCMapStr
//
// This routine initializes the global variables. If no errors were
// encountered, then it returns TRUE. Otherwise, it returns FALSE.
//
// 06-14-91 JulieB Created.
////////////////////////////////////////////////////////////////////////////
BOOL InitLCMapStr() { int size = BUFSIZE; // size of string
//
// Make a Locale.
//
Locale = MAKELCID(0x0409, 0);
//
// Return success.
//
return (TRUE); }
////////////////////////////////////////////////////////////////////////////
//
// LCMS_BadParamCheck
//
// This routine passes in bad parameters to the API routines and checks to
// be sure they are handled properly. The number of errors encountered
// is returned to the caller.
//
// 06-14-91 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int LCMS_BadParamCheck() { int NumErrors = 0; // error count - to be returned
int rc; // return code
//
// Bad Locale.
//
// Variation 1 - Bad Locale
rc = LCMapStringW( (LCID)333, LCMAP_LOWERCASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "Bad Locale", &NumErrors );
//
// Null Pointers.
//
// Variation 1 - lpSrcStr = NULL
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, NULL, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "lpSrcStr NULL", &NumErrors );
// Variation 2 - lpDestStr = NULL
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, -1, NULL, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "lpDestStr NULL", &NumErrors );
//
// Bad Counts.
//
// Variation 1 - cbSrc = 0
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, 0, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "cbSrc = 0", &NumErrors );
// Variation 2 - cbDest < 0
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, -1, MapDest, -1 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "cbDest < 0", &NumErrors );
//
// Zero or Invalid Flag Values.
//
// Variation 0 - Use CP ACP
rc = LCMapStringW( Locale, LOCALE_USE_CP_ACP, L"Th", 2, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "Use CP ACP", &NumErrors );
// Variation 0.1 - byterev, ignore case
rc = LCMapStringW( Locale, LCMAP_BYTEREV | NORM_IGNORECASE, L"Th", 2, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "byterev, ignore case", &NumErrors );
// Variation 1 - dwMapFlags = invalid
rc = LCMapStringW( Locale, LCMS_INVALID_FLAGS, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "dwMapFlags invalid", &NumErrors );
// Variation 2 - dwMapFlags = 0
rc = LCMapStringW( Locale, 0, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "dwMapFlags zero", &NumErrors );
// Variation 3 - illegal combo case
rc = LCMapStringW( Locale, LCMAP_LOWERCASE | LCMAP_UPPERCASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo case", &NumErrors );
// Variation 4 - illegal combo sortkey
rc = LCMapStringW( Locale, LCMAP_LOWERCASE | LCMAP_SORTKEY, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo sortkey", &NumErrors );
// Variation 5 - legal combo byterev
rc = LCMapStringW( Locale, LCMAP_LOWERCASE | LCMAP_BYTEREV, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, NULL, MapSrc1, "legal combo byterev", &NumErrors );
// Variation 6 - illegal flag ignorecase
rc = LCMapStringW( Locale, NORM_IGNORECASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal flag ignorecase", &NumErrors );
// Variation 7 - illegal combo kana
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | LCMAP_KATAKANA, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo kana", &NumErrors );
// Variation 8 - illegal combo width
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_FULLWIDTH, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo width", &NumErrors );
// Variation 9 - illegal combo sortkey, hiragana
rc = LCMapStringW( Locale, LCMAP_SORTKEY | LCMAP_HIRAGANA, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo sortkey, hiragana", &NumErrors );
// Variation 10 - illegal combo sortkey, katakana
rc = LCMapStringW( Locale, LCMAP_SORTKEY | LCMAP_KATAKANA, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo sortkey, katakana", &NumErrors );
// Variation 11 - illegal combo sortkey, half width
rc = LCMapStringW( Locale, LCMAP_SORTKEY | LCMAP_HALFWIDTH, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo sortkey, half width", &NumErrors );
// Variation 12 - illegal combo sortkey, full width
rc = LCMapStringW( Locale, LCMAP_SORTKEY | LCMAP_FULLWIDTH, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo sortkey, full width", &NumErrors );
// Variation 13 - illegal combo kana, ignore symbols
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | NORM_IGNORESYMBOLS, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo kana, symbols", &NumErrors );
// Variation 14 - illegal combo width, ignore symbols
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | NORM_IGNORESYMBOLS, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo width, symbols", &NumErrors );
// Variation 15 - illegal combo kana, ignore nonspace
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | NORM_IGNORENONSPACE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo kana, nonspace", &NumErrors );
// Variation 16 - illegal combo width, ignore nonspace
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | NORM_IGNORENONSPACE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo width, nonspace", &NumErrors );
// Variation 17 - illegal combo kana, ignore kana
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | NORM_IGNOREKANATYPE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo kana, ignore kana", &NumErrors );
// Variation 18 - illegal combo width, ignore kana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | NORM_IGNOREKANATYPE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo width, ignore kana", &NumErrors );
// Variation 19 - illegal combo kana, ignore width
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | NORM_IGNOREWIDTH, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo kana, ignore width", &NumErrors );
// Variation 20 - illegal combo width, ignore width
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | NORM_IGNOREWIDTH, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo width, ignore width", &NumErrors );
// Variation 21 - illegal combo linguistic
rc = LCMapStringW( Locale, LCMAP_LINGUISTIC_CASING, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo linguistic", &NumErrors );
// Variation 22 - illegal combo linguistic, kana
rc = LCMapStringW( Locale, LCMAP_LINGUISTIC_CASING | LCMAP_HIRAGANA, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo linguistic, kana", &NumErrors );
// Variation 23 - illegal combo linguistic, sortkey
rc = LCMapStringW( Locale, LCMAP_LINGUISTIC_CASING | LCMAP_SORTKEY, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo linguistic, sortkey", &NumErrors );
// Variation 24 - illegal combo linguistic, norm
rc = LCMapStringW( Locale, LCMAP_LINGUISTIC_CASING | NORM_IGNORENONSPACE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo linguistic, norm", &NumErrors );
// Variation 25 - illegal combo traditional, kana
rc = LCMapStringW( Locale, LCMAP_TRADITIONAL_CHINESE | LCMAP_HIRAGANA, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo traditional, kana", &NumErrors );
// Variation 26 - illegal combo traditional, width
rc = LCMapStringW( Locale, LCMAP_TRADITIONAL_CHINESE | LCMAP_HALFWIDTH, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo traditional, width", &NumErrors );
// Variation 27 - illegal combo traditional, sortkey
rc = LCMapStringW( Locale, LCMAP_TRADITIONAL_CHINESE | LCMAP_SORTKEY, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo traditional, sortkey", &NumErrors );
// Variation 28 - illegal combo simplified, kana
rc = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE | LCMAP_HIRAGANA, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo simplified, kana", &NumErrors );
// Variation 29 - illegal combo simplified, width
rc = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE | LCMAP_HALFWIDTH, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo simplified, width", &NumErrors );
// Variation 30 - illegal combo simplified, sortkey
rc = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE | LCMAP_SORTKEY, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "illegal combo simplified, sortkey", &NumErrors );
//
// Check the error returns for A and W version.
//
// Variation 1 - NULL destination
SetLastError(0); rc = LCMapStringW( 0x0409, 0, L"xxx", -1, NULL, 100 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A and W errors same - NULL Dest - W version", &NumErrors );
SetLastError(0); rc = LCMapStringA( 0x0409, 0, "xxx", -1, NULL, 100 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A and W errors same - NULL Dest - A version", &NumErrors );
// Variation 2 - Pointers equal
SetLastError(0); rc = LCMapStringW( 0x0409, 0, MapDest, -1, MapDest, 100 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A and W errors same - Pointers Equal - W version", &NumErrors );
SetLastError(0); rc = LCMapStringA( 0x0409, 0, MapDestA, -1, MapDestA, 100 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A and W errors same - Pointers Equal - A version", &NumErrors );
//
// Check src = dest - W Version.
//
// Variation 0
SetLastError(0); MapDest[0] = L'x'; MapDest[1] = 0; rc = LCMapStringW( 0x0409, LCMAP_UPPERCASE | LCMAP_HIRAGANA, MapDest, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - uppercase and hiragana", &NumErrors );
// Variation 1
SetLastError(0); MapDest[0] = L'x'; MapDest[1] = 0; rc = LCMapStringW( 0x0409, LCMAP_LOWERCASE | LCMAP_HIRAGANA, MapDest, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and hiragana", &NumErrors );
// Variation 2
SetLastError(0); MapDest[0] = L'x'; MapDest[1] = 0; rc = LCMapStringW( 0x0409, LCMAP_LOWERCASE | LCMAP_KATAKANA, MapDest, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and katakana", &NumErrors );
// Variation 3
SetLastError(0); MapDest[0] = L'x'; MapDest[1] = 0; rc = LCMapStringW( 0x0409, LCMAP_LOWERCASE | LCMAP_HALFWIDTH, MapDest, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and halfwidth", &NumErrors );
// Variation 4
SetLastError(0); MapDest[0] = L'x'; MapDest[1] = 0; rc = LCMapStringW( 0x0409, LCMAP_LOWERCASE | LCMAP_FULLWIDTH, MapDest, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and fullwidth", &NumErrors );
// Variation 5
SetLastError(0); MapDest[0] = L'x'; MapDest[1] = 0; rc = LCMapStringW( 0x0409, LCMAP_LOWERCASE | LCMAP_FULLWIDTH | LCMAP_HIRAGANA, MapDest, -1, MapDest, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and fullwidth and hiragana", &NumErrors );
// Variation 6
MapDest[0] = L'x'; MapDest[1] = L'y'; MapDest[2] = 0; rc = LCMapStringW( Locale, LCMAP_UPPERCASE, MapDest, -1, MapDest, 2 ); CheckReturnBadParam( rc, 0, ERROR_INSUFFICIENT_BUFFER, "src = dest - uppercase, size - buffer too small", &NumErrors );
//
// Check src = dest - A Version.
//
// Variation 0
SetLastError(0); MapDestA[0] = 'x'; MapDestA[1] = 0; rc = LCMapStringA( 0x0409, LCMAP_UPPERCASE | LCMAP_HIRAGANA, MapDestA, -1, MapDestA, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - uppercase and hiragana (A Version)", &NumErrors );
// Variation 1
SetLastError(0); MapDestA[0] = 'x'; MapDestA[1] = 0; rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE | LCMAP_HIRAGANA, MapDestA, -1, MapDestA, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and hiragana (A Version)", &NumErrors );
// Variation 2
SetLastError(0); MapDestA[0] = 'x'; MapDestA[1] = 0; rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE | LCMAP_KATAKANA, MapDestA, -1, MapDestA, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and katakana (A Version)", &NumErrors );
// Variation 3
SetLastError(0); MapDestA[0] = 'x'; MapDestA[1] = 0; rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE | LCMAP_HALFWIDTH, MapDestA, -1, MapDestA, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and halfwidth (A Version)", &NumErrors );
// Variation 4
SetLastError(0); MapDestA[0] = 'x'; MapDestA[1] = 0; rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE | LCMAP_FULLWIDTH, MapDestA, -1, MapDestA, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and fullwidth (A Version)", &NumErrors );
// Variation 5
SetLastError(0); MapDestA[0] = 'x'; MapDestA[1] = 0; rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE | LCMAP_FULLWIDTH | LCMAP_HIRAGANA, MapDestA, -1, MapDestA, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "src = dest - lowercase and fullwidth and hiragana (A Version)", &NumErrors );
// Variation 6
MapDestA[0] = 'x'; MapDestA[1] = 'y'; MapDestA[2] = 0; rc = LCMapStringA( Locale, LCMAP_UPPERCASE, MapDestA, -1, MapDestA, 2 ); CheckReturnBadParam( rc, 0, ERROR_INSUFFICIENT_BUFFER, "src = dest - uppercase, size - buffer too small (A Version)", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// LCMS_NormalCase
//
// This routine tests the normal cases of the API routine.
//
// 06-14-91 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int LCMS_NormalCase() { int NumErrors = 0; // error count - to be returned
int rc; // return code
#ifdef PERF
DbgBreakPoint();
#endif
//
// Locales.
//
// Variation 1 - System Default Locale
rc = LCMapStringW( LOCALE_SYSTEM_DEFAULT, LCMAP_LOWERCASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapLower, "system default locale", &NumErrors );
// Variation 2 - Current User Locale
rc = LCMapStringW( LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapLower, "current user locale", &NumErrors );
//
// cbDest = 0.
//
// Variation 1 - cbSrc = -1
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, -1, MapDest, 0 ); CheckReturnValidW( rc, -1, NULL, MapLower, "cbDest (0) cbSrc (-1)", &NumErrors );
// Variation 2 - cbSrc = value
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, WC_STRING_LEN_NULL(MapSrc1), MapDest, 0 ); CheckReturnValidW( rc, -1, NULL, MapLower, "cbDest (0) cbSrc (value)", &NumErrors );
// Variation 3 - lpDestStr = NULL
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, -1, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, MapLower, "cbDest (0) lpDestStr NULL", &NumErrors );
//
// cbSrc.
//
// Variation 1 - cbSrc = -1
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapLower, "cbSrc (-1)", &NumErrors );
// Variation 2 - cbSrc = value
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, WC_STRING_LEN(MapSrc1), MapDest, BUFSIZE ); CheckReturnValidW( rc, WC_STRING_LEN(MapSrc1), MapDest, MapLower, "cbSrc (value)", &NumErrors );
// Variation 3 - cbSrc = -1, no DestStr
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, -1, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, MapLower, "cbSrc (-1), no DestStr", &NumErrors );
// Variation 4 - cbSrc = value, no DestStr
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, WC_STRING_LEN(MapSrc1), NULL, 0 ); CheckReturnValidW( rc, WC_STRING_LEN(MapSrc1), NULL, MapLower, "cbSrc (value), no DestStr", &NumErrors );
//
// LOCALE_USE_CP_ACP Flag.
//
// Variation 1 - Use CP ACP
rc = LCMapStringW( Locale, LOCALE_USE_CP_ACP | LCMAP_LOWERCASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapLower, "Use CP ACP", &NumErrors );
//
// LCMAP_LOWERCASE Flag.
//
// Variation 1 - lowercase
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapLower, "lowercase", &NumErrors );
// Variation 2 - lowercase, no DestStr
rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapSrc1, -1, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, MapLower, "lowercase, no DestStr", &NumErrors );
//
// LCMAP_UPPERCASE Flag.
//
// Variation 1 - uppercase
rc = LCMapStringW( Locale, LCMAP_UPPERCASE, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapUpper, "uppercase", &NumErrors );
// Variation 2 - uppercase, no DestStr
rc = LCMapStringW( Locale, LCMAP_UPPERCASE, MapSrc1, -1, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, MapUpper, "uppercase, no DestStr", &NumErrors );
// Variation 3 - uppercase, sharp S
rc = LCMapStringW( Locale, LCMAP_UPPERCASE, wcSharpS, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x0054\x00df\x0054", "uppercase, sharp S", &NumErrors );
// Variation 4 - upper case nonspace
rc = LCMapStringW( Locale, LCMAP_UPPERCASE, MapNS1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapUpperNS, "uppercase, nonspace", &NumErrors );
// Variation 5 - upper case, no DestStr, nonspace
rc = LCMapStringW( Locale, LCMAP_UPPERCASE, MapNS1, -1, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, MapUpperNS, "uppercase, nonspace, no DestStr", &NumErrors );
// Variation 6 - uppercase Korean
MapDest[0] = L'a'; MapDest[1] = L'b'; MapDest[2] = 0; rc = LCMapStringW( MAKELCID(MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), SORT_DEFAULT), LCMAP_UPPERCASE, MapDest, 3, MapDest, 3 ); CheckReturnValidW( rc, -1, MapDest, L"AB", "Korean uppercase", &NumErrors );
//
// LCMAP_LINGUISTIC_CASING Flag.
//
// Variation 1 - linguistic uppercase
rc = LCMapStringW( Locale, LCMAP_UPPERCASE | LCMAP_LINGUISTIC_CASING, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapUpper, "linguistic uppercase", &NumErrors );
// Variation 2 - linguistic uppercase
rc = LCMapStringW( Locale, LCMAP_UPPERCASE | LCMAP_LINGUISTIC_CASING, L"\xff41\xff5a\xff21", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff21\xff3a\xff21", "linguistic uppercase (AZ)", &NumErrors );
// Variation 3 - linguistic uppercase
rc = LCMapStringW( 0x041f, LCMAP_UPPERCASE | LCMAP_LINGUISTIC_CASING, L"\xff41\xff5a\x0069\x0131", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff21\xff3a\x0130\x0049", "linguistic uppercase (Turkish)", &NumErrors );
// Variation 4 - linguistic lowercase
rc = LCMapStringW( Locale, LCMAP_LOWERCASE | LCMAP_LINGUISTIC_CASING, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapLower, "linguistic lowercase", &NumErrors );
// Variation 5 - linguistic lowercase
rc = LCMapStringW( Locale, LCMAP_LOWERCASE | LCMAP_LINGUISTIC_CASING, L"\xff21\xff3a\xff41", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff41\xff5a\xff41", "linguistic lowercase (az)", &NumErrors );
// Variation 6 - linguistic lowercase
rc = LCMapStringW( 0x041f, LCMAP_LOWERCASE | LCMAP_LINGUISTIC_CASING, L"\xff21\xff3a\x0049\x0130", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff41\xff5a\x0131\x0069", "linguistic lowercase (Turkish)", &NumErrors );
//
// NORM_IGNORESYMBOLS Flag.
//
// Variation 1 - ignoresymbols
rc = LCMapStringW( Locale, NORM_IGNORESYMBOLS, MapSrc2, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapNoSymbols, "ignore symbols", &NumErrors );
// Variation 2 - ignoresymbols, no DestStr
rc = LCMapStringW( Locale, NORM_IGNORESYMBOLS, MapSrc2, -1, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, MapNoSymbols, "ignore symbols, no DestStr", &NumErrors );
//
// NORM_IGNORENONSPACE Flag.
//
// Variation 1 - ignore nonspace
rc = LCMapStringW( Locale, NORM_IGNORENONSPACE, MapNS1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapNoNS1, "ignore nonspace", &NumErrors );
// Variation 2 - ignore nonspace, no translation
rc = LCMapStringW( Locale, NORM_IGNORENONSPACE, MapNS2, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapNoNS1, "ignore nonspace, no trans", &NumErrors );
// Variation 3 - ignore nonspace, no DestStr
rc = LCMapStringW( Locale, NORM_IGNORENONSPACE, MapNS1, -1, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, MapNoNS1, "ignore nonspace, no DestStr", &NumErrors );
// Variation 4 - ignore nonspace, no translation, no DestStr
rc = LCMapStringW( Locale, NORM_IGNORENONSPACE, MapNS2, -1, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, MapNoNS1, "ignore nonspace, no trans, no DestStr", &NumErrors );
//
// LCMAP_SORTKEY Flag.
//
// Variation 1 - sortkey
rc = LCMapStringW( Locale, LCMAP_SORTKEY, L"Th", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x99\x0e\x2c\x01\x01\x12\x01\x01", "sortkey", &NumErrors );
// Variation 2 - sortkey, no DestStr
rc = LCMapStringW( Locale, LCMAP_SORTKEY, L"Th", -1, NULL, 0 ); CheckReturnValidSortKey( rc, -1, NULL, "\x0e\x99\x0e\x2c\x01\x01\x12\x01\x01", "sortkey, no DestStr", &NumErrors );
// Variation 3 - sortkey (case)
rc = LCMapStringW( Locale, LCMAP_SORTKEY | NORM_IGNORECASE, L"Th", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x99\x0e\x2c\x01\x01\x01\x01", "sortkey (case)", &NumErrors );
// Variation 4 - sortkey, no DestStr (case)
rc = LCMapStringW( Locale, LCMAP_SORTKEY | NORM_IGNORECASE, L"Th", -1, NULL, 0 ); CheckReturnValidSortKey( rc, -1, NULL, "\x0e\x99\x0e\x2c\x01\x01\x01\x01", "sortkey (case), no DestStr", &NumErrors );
//
// Check for punctuation position using nonspace chars.
// Make sure:
// a-acute, punct is the same as
// a, acute, punct
//
// Variation 5 - sortkey (precomp punct position)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortPunctPre, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x01\x0e\x01\x01\x01\x80\x0b\x06\x82", "sortkey (precomp punct position)", &NumErrors );
// Variation 6 - sortkey (comp punct position)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortPunctComp, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x01\x0e\x01\x01\x01\x80\x0b\x06\x82", "sortkey (comp punct position)", &NumErrors );
//
// Check for punctuation position using expansion chars.
// Make sure:
// ae, punct is the same as
// a, e, punct
//
// Variation 7 - sortkey (expansion 1 punct position)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortPunctExp1, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x0e\x21\x01\x01\x01\x01\x80\x0f\x06\x82", "sortkey (expansion 1 punct position)", &NumErrors );
// Variation 8 - sortkey (expansion 2 punct position)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortPunctExp2, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x0e\x21\x01\x01\x01\x01\x80\x0f\x06\x82", "sortkey (expansion 2 punct position)", &NumErrors );
//
// Check for punctuation position using unsortable chars.
// Make sure:
// ae, unsort, punct is the same as
// a, e, punct
//
// Variation 9 - sortkey (unsortable punct position)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortPunctUnsort, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x0e\x21\x01\x01\x01\x01\x80\x0f\x06\x82", "sortkey (unsortable punct position)", &NumErrors );
//
// Check symbol and nonspace chars.
// Make sure:
// a-acute, symbol is the same as
// a, acute, symbol
//
// Variation 5 - sortkey (precomp symbol)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortSymbolPre, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x07\x2d\x01\x0e\x01\x01\x01", "sortkey (precomp symbol)", &NumErrors );
// Variation 6 - sortkey (comp symbol)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortSymbolComp, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x07\x2d\x01\x0e\x01\x01\x01", "sortkey (comp symbol)", &NumErrors );
//
// Check symbol and expansion char.
// Make sure:
// ae, symbol is the same as
// a, e, symbol
//
// Variation 7 - sortkey (expansion 1 symbol)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortSymbolExp1, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x0e\x21\x07\x2d\x01\x01\x01\x01", "sortkey (expansion 1 symbol)", &NumErrors );
// Variation 8 - sortkey (expansion 2 symbol)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortSymbolExp2, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x0e\x21\x07\x2d\x01\x01\x01\x01", "sortkey (expansion 2 symbol)", &NumErrors );
//
// Check symbol and unsortable char.
// Make sure:
// ae, unsort, symbol is the same as
// a, e, symbol
//
// Variation 9 - sortkey (unsortable symbol)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, SortSymbolUnsort, -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x02\x0e\x21\x07\x2d\x01\x01\x01\x01", "sortkey (unsortable symbol)", &NumErrors );
//
// Check Hungarian compression.
// Make sure: ccs is the same as cs+cs
//
// Variation 10 - sortkey (Hungarian compression)
rc = LCMapStringW( MAKELCID(0x040e, 0), LCMAP_SORTKEY, L"ccsddzs", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x0e\x0e\x0e\x0e\x1e\x0e\x1e\x01\x01\x01\x01", "sortkey (hungarian compression)", &NumErrors );
//
// Check expansion (1 to 3).
//
// Variation 11 - sortkey (expansion 1 to 3)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, L"\xfb03", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x23\x0e\x23\x0e\x32\x01\x01\x01\x01", "sortkey (expansion 1 to 3)", &NumErrors );
// Variation 12 - sortkey (expansion 1 to 3)
rc = LCMapStringW( Locale, LCMAP_SORTKEY, L"ffi", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x23\x0e\x23\x0e\x32\x01\x01\x01\x01", "sortkey (expansion 1 to 3) 2", &NumErrors );
//
// Check WORD sort versus STRING sort.
//
// Variation 1 - sortkey (WORD SORT)
rc = LCMapStringW( MAKELCID(0x040e, 0), LCMAP_SORTKEY, L"co-op", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x0a\x0e\x7c\x0e\x7c\x0e\x7e\x01\x01\x01\x01\x80\x0f\x06\x82", "sortkey (WORD SORT)", &NumErrors );
// Variation 2 - sortkey (STRING SORT)
rc = LCMapStringW( MAKELCID(0x040e, 0), LCMAP_SORTKEY | SORT_STRINGSORT, L"co-op", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x0a\x0e\x7c\x06\x82\x0e\x7c\x0e\x7e\x01\x01\x01\x01", "sortkey (STRING SORT)", &NumErrors );
//
// LCMAP_BYTEREV Flag.
//
// Variation 1 - byterev
rc = LCMapStringW( Locale, LCMAP_BYTEREV, L"Th", 2, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x5400\x6800", "byterev", &NumErrors );
// Variation 2 - byterev, no DestStr
rc = LCMapStringW( Locale, LCMAP_BYTEREV, L"Th", 2, NULL, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x5400\x6800", "byterev, no DestStr", &NumErrors );
// Variation 3 - sortkey, byterev
rc = LCMapStringW( Locale, LCMAP_BYTEREV | LCMAP_SORTKEY, L"Th", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, 10, SortDest, "\x99\x0e\x2c\x0e\x01\x01\x01\x12\x00\x01", "sortkey, byterev", &NumErrors );
// Variation 4 - sortkey, byterev (-1)
rc = LCMapStringW( Locale, LCMAP_BYTEREV | LCMAP_SORTKEY, L"Th", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, 10, SortDest, "\x99\x0e\x2c\x0e\x01\x01\x01\x12\x00\x01", "sortkey, byterev (-1)", &NumErrors );
// Variation 5 - byterev, ignore nonspace
rc = LCMapStringW( Locale, LCMAP_BYTEREV | NORM_IGNORENONSPACE, L"T\x0300h", 3, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x5400\x6800", "byterev, ignore nonspace", &NumErrors );
// Variation 6 - byterev, ignore symbols
rc = LCMapStringW( Locale, LCMAP_BYTEREV | NORM_IGNORESYMBOLS, L"T*h", 3, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x5400\x6800", "byterev, ignore symbols", &NumErrors );
// Variation 7 - byterev, ignore nonspace and symbols
rc = LCMapStringW( Locale, LCMAP_BYTEREV | NORM_IGNORENONSPACE | NORM_IGNORESYMBOLS, L"*T\x0300h@", 5, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x5400\x6800", "byterev, ignore nonspace and symbols", &NumErrors );
// Variation 8 - byterev, no DestStr, cchDest 0
rc = LCMapStringW( 0x0409, LCMAP_BYTEREV, L"Th", 2, NULL, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x5400\x6800", "byterev, no DestStr", &NumErrors );
// Variation 9 - sortkey | byterev, no DestStr, cchDest 0
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY | LCMAP_BYTEREV, L"Th", 2, NULL, 0 ); CheckReturnValidSortKey( rc, 10, NULL, "\x99\x0e\x2c\x0e\x01\x01\x01\x12\x00\x01", "sortkey, byterev (-1), no DestStr", &NumErrors );
//
// LCMAP_HIRAGANA, LCMAP_KATAKANA, LCMAP_HALFWIDTH, LCMAP_FULLWIDTH Flags.
//
// Variation 1 - hiragana
rc = LCMapStringW( Locale, LCMAP_HIRAGANA, L"\x30a1Th\x30aa", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\x3041Th\x304a", "hiragana", &NumErrors );
// Variation 2 - katakana
rc = LCMapStringW( Locale, LCMAP_KATAKANA, L"\x3041Th\x304a", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\x30a1Th\x30aa", "katakana", &NumErrors );
// Variation 3 - halfwidth
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH, L"\x30a6Th\x3131", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff73Th\xffa1", "half width", &NumErrors );
// Variation 4 - fullwidth
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH, L"\xff61Th\xffca", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\x3002\xff34\xff48\x3155", "full width", &NumErrors );
// Variation 5 - hiragana, half width
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | LCMAP_HALFWIDTH, L"\x30a1Th\x30aa", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\x3041Th\x304a", "hiragana, half width", &NumErrors );
// Variation 6 - hiragana, full width
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | LCMAP_FULLWIDTH, L"\x30a1Th\x30aa", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\x3041\xff34\xff48\x304a", "hiragana, full width", &NumErrors );
// Variation 7 - katakana, half width
rc = LCMapStringW( Locale, LCMAP_KATAKANA | LCMAP_HALFWIDTH, L"\x3041Th\x304a", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff67Th\xff75", "katakana, half width", &NumErrors );
// Variation 8 - katakana, full width
rc = LCMapStringW( Locale, LCMAP_KATAKANA | LCMAP_FULLWIDTH, L"\x3041Th\x304a", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\x30a1\xff34\xff48\x30aa", "katakana, full width", &NumErrors );
// Variation 9 - byterev, hiragana, full width
rc = LCMapStringW( Locale, LCMAP_BYTEREV | LCMAP_HIRAGANA | LCMAP_FULLWIDTH, L"\x30a1Th\x30aa", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\x4130\x34ff\x48ff\x4a30", "byterev, hiragana, full width", &NumErrors );
// Variation 10 - byterev, katakana, full width
rc = LCMapStringW( Locale, LCMAP_BYTEREV | LCMAP_KATAKANA | LCMAP_FULLWIDTH, L"\x3041Th\x304a", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xa130\x34ff\x48ff\xaa30", "byterev, katakana, full width", &NumErrors );
// Variation 11 - uppercase, katakana
rc = LCMapStringW( Locale, LCMAP_UPPERCASE | LCMAP_KATAKANA, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapUpper, "uppercase, katakana", &NumErrors );
// Variation 12 - uppercase, half width
rc = LCMapStringW( Locale, LCMAP_UPPERCASE | LCMAP_HALFWIDTH, MapSrc1, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, MapUpper, "uppercase, half width", &NumErrors );
//
// LCMAP_HIRAGANA, LCMAP_KATAKANA, LCMAP_HALFWIDTH, LCMAP_FULLWIDTH Flags.
// cchDest == 0
//
// Variation 1 - hiragana
rc = LCMapStringW( Locale, LCMAP_HIRAGANA, L"\x30a1Th\x30aa", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\x3041Th\x304a", "hiragana (cchDest = 0)", &NumErrors );
// Variation 2 - katakana
rc = LCMapStringW( Locale, LCMAP_KATAKANA, L"\x3041Th\x304a", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\x30a1Th\x30aa", "katakana (cchDest = 0)", &NumErrors );
// Variation 3 - halfwidth
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH, L"\x30a6Th\x3131", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff73Th\xffa1", "half width (cchDest = 0)", &NumErrors );
// Variation 4 - fullwidth
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH, L"\xff61Th\xffca", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\x3002\xff34\xff48\x3155", "full width (cchDest = 0)", &NumErrors );
// Variation 5 - hiragana, half width
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | LCMAP_HALFWIDTH, L"\x30a1Th\x30aa", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\x3041Th\x304a", "hiragana, half width (cchDest = 0)", &NumErrors );
// Variation 6 - hiragana, full width
rc = LCMapStringW( Locale, LCMAP_HIRAGANA | LCMAP_FULLWIDTH, L"\x30a1Th\x30aa", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\x3041\xff34\xff48\x304a", "hiragana, full width (cchDest = 0)", &NumErrors );
// Variation 7 - katakana, half width
rc = LCMapStringW( Locale, LCMAP_KATAKANA | LCMAP_HALFWIDTH, L"\x3041Th\x304a", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff67Th\xff75", "katakana, half width (cchDest = 0)", &NumErrors );
// Variation 8 - katakana, full width
rc = LCMapStringW( Locale, LCMAP_KATAKANA | LCMAP_FULLWIDTH, L"\x3041Th\x304a", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\x30a1\xff34\xff48\x30aa", "katakana, full width (cchDest = 0)", &NumErrors );
// Variation 9 - byterev, hiragana, full width
rc = LCMapStringW( Locale, LCMAP_BYTEREV | LCMAP_HIRAGANA | LCMAP_FULLWIDTH, L"\x30a1Th\x30aa", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\x4130\x34ff\x48ff\x4a30", "byterev, hiragana, full width (cchDest = 0)", &NumErrors );
// Variation 10 - byterev, katakana, full width
rc = LCMapStringW( Locale, LCMAP_BYTEREV | LCMAP_KATAKANA | LCMAP_FULLWIDTH, L"\x3041Th\x304a", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xa130\x34ff\x48ff\xaa30", "byterev, katakana, full width (cchDest = 0)", &NumErrors );
// Variation 11 - uppercase, katakana
rc = LCMapStringW( Locale, LCMAP_UPPERCASE | LCMAP_KATAKANA, MapSrc1, -1, MapDest, 0 ); CheckReturnValidW( rc, -1, MapDest, MapUpper, "uppercase, katakana (cchDest = 0)", &NumErrors );
// Variation 12 - uppercase, half width
rc = LCMapStringW( Locale, LCMAP_UPPERCASE | LCMAP_HALFWIDTH, MapSrc1, -1, MapDest, 0 ); CheckReturnValidW( rc, -1, MapDest, MapUpper, "uppercase, half width (cchDest = 0)", &NumErrors );
//
// Kana and Width - precomposed forms.
//
// Variation 1 - half width
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH, L"\x30d0\x30d1", 2, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff8a\xff9e\xff8a\xff9f", "half precomp", &NumErrors );
// Variation 2 - half width, hiragana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_HIRAGANA, L"\x30d0\x30d1", 2, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x3070\x3071", "half, hiragana precomp", &NumErrors );
// Variation 3 - half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA, L"\x30d0\x30d1", 2, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff8a\xff9e\xff8a\xff9f", "half, katakana precomp", &NumErrors );
// Variation 4 - case, half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA | LCMAP_LOWERCASE, L"\xff2a\x30d0\xff2a\x30d1J", 5, MapDest, BUFSIZE ); CheckReturnValidW( rc, 7, MapDest, L"j\xff8a\xff9ej\xff8a\xff9fj", "case, half, katakana precomp", &NumErrors );
// Variation 5 - full width
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH, L"\x30d0\x30d1", 2, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x30d0\x30d1", "full precomp", &NumErrors );
// Variation 6 - full width, hiragana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_HIRAGANA, L"\x30d0\x30d1", 2, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x3070\x3071", "full, hiragana precomp", &NumErrors );
// Variation 7 - full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA, L"\x30d0\x30d1", 2, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x30d0\x30d1", "full, katakana precomp", &NumErrors );
//
// Kana and Width - precomposed forms.
// cchDest = 0
//
// Variation 1 - half width
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH, L"\x30d0\x30d1", 2, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff8a\xff9e\xff8a\xff9f", "half precomp (cchDest = 0)", &NumErrors );
// Variation 2 - half width, hiragana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_HIRAGANA, L"\x30d0\x30d1", 2, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x3070\x3071", "half, hiragana precomp (cchDest = 0)", &NumErrors );
// Variation 3 - half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA, L"\x30d0\x30d1", 2, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff8a\xff9e\xff8a\xff9f", "half, katakana precomp (cchDest = 0)", &NumErrors );
// Variation 4 - case, half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA | LCMAP_LOWERCASE, L"\xff2a\x30d0\xff2a\x30d1J", 5, MapDest, 0 ); CheckReturnValidW( rc, 7, NULL, L"j\xff8a\xff9ej\xff8a\xff9fj", "case, half, katakana precomp (cchDest = 0)", &NumErrors );
// Variation 5 - full width
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH, L"\x30d0\x30d1", 2, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x30d0\x30d1", "full precomp", &NumErrors );
// Variation 6 - full width, hiragana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_HIRAGANA, L"\x30d0\x30d1", 2, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x3070\x3071", "full, hiragana precomp (cchDest = 0)", &NumErrors );
// Variation 7 - full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA, L"\x30d0\x30d1", 2, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x30d0\x30d1", "full, katakana precomp (cchDest = 0)", &NumErrors );
//
// Kana and Width - composite forms.
//
// Variation 1 - half width
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff8a\xff9e\xff8a\xff9f", "half comp", &NumErrors );
// Variation 2 - half width, hiragana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_HIRAGANA, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\x306f\xff9e\x306f\xff9f", "half, hiragana comp", &NumErrors );
// Variation 3 - half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff8a\xff9e\xff8a\xff9f", "half, katakana comp", &NumErrors );
// Variation 4 - case, half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA | LCMAP_LOWERCASE, L"\xff2a\x30cf\x309b\xff2a\x30cf\x309cJ", 7, MapDest, BUFSIZE ); CheckReturnValidW( rc, 7, MapDest, L"j\xff8a\xff9ej\xff8a\xff9fj", "case, half, katakana comp", &NumErrors );
// Variation 5 - full width
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x30d0\x30d1", "full comp", &NumErrors );
// Variation 6 - full width, hiragana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_HIRAGANA, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x3070\x3071", "full, hiragana comp", &NumErrors );
// Variation 7 - full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x30d0\x30d1", "full, katakana comp", &NumErrors );
// Variation 8 - case, full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA | LCMAP_LOWERCASE, L"\xff2a\x30cf\x309bJ\x30cf\x309cJ", 7, MapDest, BUFSIZE ); CheckReturnValidW( rc, 5, MapDest, L"\xff4a\x30d0\xff4a\x30d1\xff4a", "case, full, katakana comp", &NumErrors );
//
// Kana and Width - composite forms.
// cchDest == 0
//
// Variation 1 - half width
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff8a\xff9e\xff8a\xff9f", "half comp (cchDest = 0)", &NumErrors );
// Variation 2 - half width, hiragana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_HIRAGANA, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\x306f\xff9e\x306f\xff9f", "half, hiragana comp (cchDest = 0)", &NumErrors );
// Variation 3 - half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff8a\xff9e\xff8a\xff9f", "half, katakana comp (cchDest = 0)", &NumErrors );
// Variation 4 - case, half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA | LCMAP_LOWERCASE, L"\xff2a\x30cf\x309b\xff2a\x30cf\x309cJ", 7, MapDest, 0 ); CheckReturnValidW( rc, 7, NULL, L"j\xff8a\xff9ej\xff8a\xff9fj", "case, half, katakana comp (cchDest = 0)", &NumErrors );
// Variation 5 - full width
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x30d0\x30d1", "full comp (cchDest = 0)", &NumErrors );
// Variation 6 - full width, hiragana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_HIRAGANA, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x3070\x3071", "full, hiragana comp (cchDest = 0)", &NumErrors );
// Variation 7 - full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA, L"\x30cf\x309b\x30cf\x309c", 4, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x30d0\x30d1", "full, katakana comp (cchDest = 0)", &NumErrors );
// Variation 8 - case, full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA | LCMAP_LOWERCASE, L"\xff2a\x30cf\x309bJ\x30cf\x309cJ", 7, MapDest, 0 ); CheckReturnValidW( rc, 5, NULL, L"\xff4a\x30d0\xff4a\x30d1\xff4a", "case, full, katakana comp (cchDest = 0)", &NumErrors );
//
// Kana and Width - half width composite forms.
//
// Variation 1 - half width
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff8a\xff9e\xff8a\xff9f", "half comp (half)", &NumErrors );
// Variation 2 - half width, hiragana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_HIRAGANA, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff8a\xff9e\xff8a\xff9f", "half, hiragana comp (half)", &NumErrors );
// Variation 3 - half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 4, MapDest, L"\xff8a\xff9e\xff8a\xff9f", "half, katakana comp (half)", &NumErrors );
// Variation 4 - full width
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x30d0\x30d1", "full comp (half)", &NumErrors );
// Variation 5 - full width, hiragana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_HIRAGANA, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x3070\x3071", "full, hiragana comp (half)", &NumErrors );
// Variation 6 - full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, BUFSIZE ); CheckReturnValidW( rc, 2, MapDest, L"\x30d0\x30d1", "full, katakana comp (half)", &NumErrors );
// Variation 7 - case, full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA | LCMAP_LOWERCASE, L"\xff2a\xff8a\xff9eJ\xff8a\xff9fJ", 7, MapDest, BUFSIZE ); CheckReturnValidW( rc, 5, MapDest, L"\xff4a\x30d0\xff4a\x30d1\xff4a", "case, full, katakana comp (half)", &NumErrors );
//
// Kana and Width - half width composite forms.
// cchDest == 0
//
// Variation 1 - half width
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff8a\xff9e\xff8a\xff9f", "half comp (half) (cchDest = 0)", &NumErrors );
// Variation 2 - half width, hiragana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_HIRAGANA, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff8a\xff9e\xff8a\xff9f", "half, hiragana comp (half) (cchDest = 0)", &NumErrors );
// Variation 3 - half width, katakana
rc = LCMapStringW( Locale, LCMAP_HALFWIDTH | LCMAP_KATAKANA, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, 0 ); CheckReturnValidW( rc, 4, NULL, L"\xff8a\xff9e\xff8a\xff9f", "half, katakana comp (half) (cchDest = 0)", &NumErrors );
// Variation 4 - full width
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x30d0\x30d1", "full comp (half) (cchDest = 0)", &NumErrors );
// Variation 5 - full width, hiragana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_HIRAGANA, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x3070\x3071", "full, hiragana comp (half) (cchDest = 0)", &NumErrors );
// Variation 6 - full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA, L"\xff8a\xff9e\xff8a\xff9f", 4, MapDest, 0 ); CheckReturnValidW( rc, 2, NULL, L"\x30d0\x30d1", "full, katakana comp (half) (cchDest = 0)", &NumErrors );
// Variation 7 - case, full width, katakana
rc = LCMapStringW( Locale, LCMAP_FULLWIDTH | LCMAP_KATAKANA | LCMAP_LOWERCASE, L"\xff2a\xff8a\xff9eJ\xff8a\xff9fJ", 7, MapDest, 0 ); CheckReturnValidW( rc, 5, NULL, L"\xff4a\x30d0\xff4a\x30d1\xff4a", "case, full, katakana comp (half) (cchDest = 0)", &NumErrors );
//
// LCMAP_TRADITIONAL_CHINESE Flag.
//
// Variation 1 - map simplified to traditional
rc = LCMapStringW( Locale, LCMAP_TRADITIONAL_CHINESE, L"\x4e07\x4e0e\x9f95\x9f9f", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x842c\x8207\x9f95\x9f9c", "traditional", &NumErrors );
// Variation 2 - map simplified to traditional
rc = LCMapStringW( Locale, LCMAP_TRADITIONAL_CHINESE | LCMAP_LOWERCASE, L"\x4e07\x4e0e\x9f95\x9f9f", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x842c\x8207\x9f95\x9f9c", "traditional, lowercase", &NumErrors );
// Variation 3 - map simplified to traditional
rc = LCMapStringW( Locale, LCMAP_TRADITIONAL_CHINESE | LCMAP_LOWERCASE, L"YYz\x4e07\x4e0e\x9f95\x9f9fYzY", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"yyz\x842c\x8207\x9f95\x9f9cyzy", "traditional, lowercase 2", &NumErrors );
// Variation 4 - map simplified to traditional
rc = LCMapStringW( Locale, LCMAP_TRADITIONAL_CHINESE | LCMAP_UPPERCASE, L"\x4e07\x4e0e\x9f95\x9f9f", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x842c\x8207\x9f95\x9f9c", "traditional, uppercase", &NumErrors );
// Variation 5 - map simplified to traditional
rc = LCMapStringW( Locale, LCMAP_TRADITIONAL_CHINESE | LCMAP_UPPERCASE, L"Yyz\x4e07\x4e0e\x9f95\x9f9fyzY", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"YYZ\x842c\x8207\x9f95\x9f9cYZY", "traditional, uppercase 2", &NumErrors );
//
// LCMAP_SIMPLIFIED_CHINESE Flag.
//
// Variation 1 - map traditional to simplified
rc = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE, L"\x4e1f\xfa26\x9038", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x4e22\x90fd\x9038", "simplified", &NumErrors );
// Variation 2 - map traditional to simplified
rc = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE | LCMAP_LOWERCASE, L"\x4e1f\xfa26\x9038", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x4e22\x90fd\x9038", "simplified, lowercase", &NumErrors );
// Variation 3 - map traditional to simplified
rc = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE | LCMAP_LOWERCASE, L"YYz\x4e1f\xfa26\x9038YzY", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"yyz\x4e22\x90fd\x9038yzy", "simplified, lowercase 2", &NumErrors );
// Variation 4 - map traditional to simplified
rc = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE | LCMAP_UPPERCASE, L"\x4e1f\xfa26\x9038", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x4e22\x90fd\x9038", "simplified, uppercase", &NumErrors );
// Variation 5 - map traditional to simplified
rc = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE | LCMAP_UPPERCASE, L"Yyz\x4e1f\xfa26\x9038yzY", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"YYZ\x4e22\x90fd\x9038YZY", "simplified, uppercase 2", &NumErrors );
//
// Japanese sortkey tests - CHO-ON.
//
// Variation 1 - cho-on
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x30f6\x30fc", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x0d\x22\x05\x01\x01\x01\xc4\xc4\xff\x03\x05\x02\xc4\xc4\xff\xff\x01", "cho-on", &NumErrors );
// Variation 2 - cho-on first char
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x30fc\x30f6\x30fc", 3, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\xff\xff\x22\x0d\x22\x05\x01\x01\x01\xc4\xc4\xff\x03\x05\x02\xc4\xc4\xff\xff\x01", "cho-on first char", &NumErrors );
// Variation 3 - cho-on first and second char
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x30fc\x30fc\x30f6\x30fc", 4, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\xff\xff\xff\xff\x22\x0d\x22\x05\x01\x01\x01\xc4\xc4\xff\x03\x05\x02\xc4\xc4\xff\xff\x01", "cho-on first and second char", &NumErrors );
// Variation 4 - cho-on with ignore nonspace flag
rc = LCMapStringW( 0x0411, LCMAP_SORTKEY | NORM_IGNORENONSPACE, L"\xff76\xff9e\xff70", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x0a\x22\x02\x01\x01\x01\xff\x02\xc4\xc4\xff\xc4\xc4\xff\x01", "cho-on with ignore nonspace flag", &NumErrors );
// Variation 5 - cho-on without ignore nonspace flag
rc = LCMapStringW( 0x0411, LCMAP_SORTKEY, L"\xff76\xff9e\xff70", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x0a\x22\x02\x01\x03\x01\x01\xff\x03\x05\x02\xc4\xc4\xff\xc4\xc4\xff\x01", "cho-on without ignore nonspace flag", &NumErrors );
// Variation 6 - cho-on with ignore nonspace flag
rc = LCMapStringW( 0x0411, LCMAP_SORTKEY | NORM_IGNORENONSPACE, L"\xff76\xff9e\xff71", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x0a\x22\x02\x01\x01\x01\xff\x02\xc4\xc4\xff\xc4\xc4\xff\x01", "cho-on with ignore nonspace flag 2", &NumErrors );
// Variation 7 - cho-on without ignore nonspace flag
rc = LCMapStringW( 0x0411, LCMAP_SORTKEY, L"\xff76\xff9e\xff71", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x0a\x22\x02\x01\x03\x01\x01\xff\x02\xc4\xc4\xff\xc4\xc4\xff\x01", "cho-on without ignore nonspace flag 2", &NumErrors );
//
// Japanese sortkey tests - REPEAT.
//
// Variation 1 - repeat
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x30f6\x30fd", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x0d\x22\x0d\x01\x01\x01\xc4\xc4\xff\x03\x04\x02\xc4\xc4\xff\xff\x01", "repeat", &NumErrors );
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x30f6\x30f6", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x0d\x22\x0d\x01\x01\x01\xc4\xc4\xff\x02\xc4\xc4\xff\xff\x01", "repeat (actual)", &NumErrors );
// Variation 2 - repeat first char
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x30fd\x30f6\x30fd", 3, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\xff\xff\x22\x0d\x22\x0d\x01\x01\x01\xc4\xc4\xff\x03\x04\x02\xc4\xc4\xff\xff\x01", "repeat first char", &NumErrors );
// Variation 3 - repeat first and second char
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x30fd\x30fd\x30f6\x30fd", 4, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\xff\xff\xff\xff\x22\x0d\x22\x0d\x01\x01\x01\xc4\xc4\xff\x03\x04\x02\xc4\xc4\xff\xff\x01", "repeat first and second char", &NumErrors );
// Variation 4 - repeat (0x30fb)
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x30fb\x30fd", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0a\x0e\x0a\x0e\x01\x01\x03\x01\x01", "repeat (0x30fb)", &NumErrors );
// Variation 5 - repeat alone
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY, L"\x3094\x309d", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x04\x22\x04\x01\x03\x01\x01\xff\x03\x04\x02\xff\xff\x01", "repeat alone", &NumErrors );
// Variation 6 - repeat, ignore kana
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY | NORM_IGNOREKANATYPE, L"\x3094\x309d", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x04\x22\x04\x01\x03\x01\x01\xff\x03\x04\x02\xc4\xc4\xff\xff\x01", "repeat, ignore kana", &NumErrors );
// Variation 7 - repeat, ignore width
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY | NORM_IGNOREWIDTH, L"\x3094\x309d", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x04\x22\x04\x01\x03\x01\x01\xff\x03\x04\x02\xff\xc4\xc4\xff\x01", "repeat, ignore width", &NumErrors );
// Variation 8 - repeat, ignore kana and width
rc = LCMapStringW( 0x0409, LCMAP_SORTKEY | NORM_IGNOREKANATYPE | NORM_IGNOREWIDTH, L"\x3094\x309d", 2, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x22\x04\x22\x04\x01\x03\x01\x01\xff\x03\x04\x02\xc4\xc4\xff\xc4\xc4\xff\x01", "repeat, ignore kana and width", &NumErrors );
//
// Test for upper case.
//
// Variation 1 - uppercase
rc = LCMapStringW( 0x0409, LCMAP_UPPERCASE, L"\x00e7", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x00c7", "uppercase check", &NumErrors );
//
// More Japanese Tests.
//
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x0020", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x3000", "Japanese Test 1", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x0022", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff02", "Japanese Test 2", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x0027", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff07", "Japanese Test 3", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x005c", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x005c", "Japanese Test 4", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x007e", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff5e", "Japanese Test 5", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x30fb", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x30fb", "Japanese Test 6", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x3046\xff9e", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x3094", "Japanese Test 7", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x3046\x309b", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x3094", "Japanese Test 8", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x304b\xff9e", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x304c", "Japanese Test 9", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_FULLWIDTH, L"\x306f\xff9f", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x3071", "Japanese Test 10", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\x3000", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x0020", "Japanese Test 11", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\xffe3", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x00af", "Japanese Test 12", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\x2015", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x2015", "Japanese Test 13", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\xff3c", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff3c", "Japanese Test 14", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\xff5e", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x007e", "Japanese Test 15", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\x2018", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"'", "Japanese Test 16", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\x2019", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"'", "Japanese Test 17", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\x201c", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\"", "Japanese Test 18", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\x201d", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\"", "Japanese Test 19", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\x30fb", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\xff65", "Japanese Test 20", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HALFWIDTH, L"\xffe5", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x00a5", "Japanese Test 21", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HIRAGANA | LCMAP_LOWERCASE, L"\x30fb", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x30fb", "Japanese Test 22", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HIRAGANA, L"\x30f4", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x3094", "Japanese Test 23", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_HIRAGANA, L"\x30f4\xff9e", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x3094\xff9e", "Japanese Test 24", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_UPPERCASE, L"\x3046\xff9e", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x3046\xff9e", "Japanese Test 25", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_UPPERCASE, L"\x304b\xff9e", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x304b\xff9e", "Japanese Test 26", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_UPPERCASE, L"\x304b\x309b", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x304b\x309b", "Japanese Test 27", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_KATAKANA, L"\x304f\x309b", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"\x30af\x309b", "Japanese Test 28", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_KATAKANA | LCMAP_UPPERCASE, L"a\x304f", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"A\x30af", "Japanese Test 29", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_KATAKANA | LCMAP_LOWERCASE, L"A\x304f", -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"a\x30af", "Japanese Test 30", &NumErrors );
rc = LCMapStringW( 0x0411, LCMAP_SORTKEY, L"\x005c", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0a\x05\x01\x01\x01\x01", "Japanese 0x005c", &NumErrors );
//
// Ideograph LCMAP_SORTKEY Tests.
//
// Variation 1 - ideograph sortkey
rc = LCMapStringW( 0x0411, LCMAP_SORTKEY, L"\x99d5", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x81\x22\x01\x01\x01\x01", "ideograph sortkey Japanese", &NumErrors );
// Variation 2 - ideograph sortkey, no DestStr
rc = LCMapStringW( 0x0411, LCMAP_SORTKEY, L"\x99d5", -1, NULL, 0 ); CheckReturnValidSortKey( rc, -1, NULL, "\x81\x22\x01\x01\x01\x01", "ideograph sortkey Japanese, no DestStr", &NumErrors );
// Variation 3 - ideograph sortkey
rc = LCMapStringW( 0x0412, LCMAP_SORTKEY, L"\x99d5", -1, (LPWSTR)SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x03\x01\x79\x01\x01\x01", "ideograph sortkey Korean", &NumErrors );
// Variation 4 - ideograph sortkey, no DestStr
rc = LCMapStringW( 0x0412, LCMAP_SORTKEY, L"\x99d5", -1, NULL, 0 ); CheckReturnValidSortKey( rc, -1, NULL, "\x80\x03\x01\x79\x01\x01\x01", "ideograph sortkey Korean, no DestStr", &NumErrors );
//
// Src = Dest - W Version.
//
// Variation 1 - lowercase
MapDest[0] = L'X'; MapDest[1] = L'Y'; MapDest[2] = 0; rc = LCMapStringW( Locale, LCMAP_LOWERCASE, MapDest, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"xy", "src = dest - lowercase", &NumErrors );
// Variation 2 - uppercase
MapDest[0] = L'x'; MapDest[1] = L'y'; MapDest[2] = 0; rc = LCMapStringW( Locale, LCMAP_UPPERCASE, MapDest, -1, MapDest, BUFSIZE ); CheckReturnValidW( rc, -1, MapDest, L"XY", "src = dest - uppercase", &NumErrors );
// Variation 3 - uppercase
MapDest[0] = L'x'; MapDest[1] = L'y'; MapDest[2] = 0; rc = LCMapStringW( Locale, LCMAP_UPPERCASE, MapDest, 2, MapDest, 2 ); CheckReturnValidW( rc, 2, MapDest, L"XY", "src = dest - uppercase, size", &NumErrors );
//
// Src = Dest - A Version.
//
// Variation 1 - lowercase
MapDestA[0] = 'X'; MapDestA[1] = 'Y'; MapDestA[2] = 0; rc = LCMapStringA( Locale, LCMAP_LOWERCASE, MapDestA, -1, MapDestA, BUFSIZE ); CheckReturnValidA( rc, -1, MapDestA, "xy", NULL, "src = dest - lowercase (A Version)", &NumErrors );
// Variation 2 - uppercase
MapDestA[0] = 'x'; MapDestA[1] = 'y'; MapDestA[2] = 0; rc = LCMapStringA( Locale, LCMAP_UPPERCASE, MapDestA, -1, MapDestA, BUFSIZE ); CheckReturnValidA( rc, -1, MapDestA, "XY", NULL, "src = dest - uppercase (A Version)", &NumErrors );
// Variation 3 - uppercase
MapDestA[0] = 'x'; MapDestA[1] = 'y'; MapDestA[2] = 0; rc = LCMapStringA( Locale, LCMAP_UPPERCASE, MapDestA, 2, MapDestA, 2 ); CheckReturnValidA( rc, 2, MapDestA, "XY", NULL, "src = dest - uppercase, size (A Version)", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// LCMS_Ansi
//
// This routine tests the Ansi version of the API routine.
//
// 06-14-91 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int LCMS_Ansi() { int NumErrors = 0; // error count - to be returned
int rc; // return code
//
// LCMapStringA - USE CP ACP.
//
// Variation 1 - Use CP ACP
rc = LCMapStringA( 0x0409, LOCALE_USE_CP_ACP | LCMAP_LOWERCASE, "ABCD", -1, MapDestA, BUFSIZE ); CheckReturnValidA( rc, -1, MapDestA, "abcd", NULL, "A Version Use CP ACP", &NumErrors );
//
// LCMapStringA - LOWER case.
//
// Variation 1 - Lower case
rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE, "ABCD", -1, MapDestA, BUFSIZE ); CheckReturnValidA( rc, -1, MapDestA, "abcd", NULL, "A version lower", &NumErrors );
// Variation 2 - Lower case
rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE, "ABCD", -1, NULL, 0 ); CheckReturnValidA( rc, -1, NULL, "abcd", NULL, "A version lower (cchDest = 0)", &NumErrors );
// Variation 3 - Lower case
rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE, "ABCD", 4, MapDestA, BUFSIZE ); CheckReturnValidA( rc, 4, MapDestA, "abcd", NULL, "A version lower size", &NumErrors );
// Variation 4 - Lower case
rc = LCMapStringA( 0x0409, LCMAP_LOWERCASE, "ABCD", 4, NULL, 0 ); CheckReturnValidA( rc, 4, NULL, "abcd", NULL, "A version lower size (cchDest = 0)", &NumErrors );
//
// LCMapStringA - SORTKEY.
//
// Variation 1 - sortkey
rc = LCMapStringA( Locale, LCMAP_SORTKEY, "Th", -1, SortDest, BUFSIZE ); CheckReturnValidSortKey( rc, -1, SortDest, "\x0e\x99\x0e\x2c\x01\x01\x12\x01\x01", "A version sortkey", &NumErrors );
// Variation 2 - sortkey, no DestStr
rc = LCMapStringA( Locale, LCMAP_SORTKEY, "Th", -1, NULL, 0 ); CheckReturnValidSortKey( rc, -1, NULL, "\x0e\x99\x0e\x2c\x01\x01\x12\x01\x01", "A version sortkey (cchDest = 0)", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// CheckReturnValidSortKey
//
// Checks the return code from the valid LCMapString[A|W] call with the
// LCMAP_SOTRKEY flag set. It prints out the appropriate error if the
// incorrect result is found.
//
// 06-14-91 JulieB Created.
////////////////////////////////////////////////////////////////////////////
void CheckReturnValidSortKey( int CurrentReturn, int ExpectedReturn, LPBYTE pCurrentString, LPBYTE pExpectedString, LPBYTE pErrString, int *pNumErrors) { int ctr; // loop counter
if (ExpectedReturn == -1) { ExpectedReturn = MB_STRING_LEN_NULL(pExpectedString); }
if ( (CurrentReturn != ExpectedReturn) || ( (pCurrentString != NULL) && (CompStringsA(pCurrentString, pExpectedString, CurrentReturn)) ) ) { printf("ERROR: %s - \n", pErrString); printf(" Return = %d, Expected = %d\n", CurrentReturn, ExpectedReturn);
if (pCurrentString != NULL) { printf(" "); for (ctr = 0; ctr < CurrentReturn; ctr++) { printf("%x ", pCurrentString[ctr]); } printf("\n"); }
(*pNumErrors)++; } }
|