/*++ Copyright (c) 1991-1999, Microsoft Corporation All rights reserved. Module Name: glitest.c Abstract: Test module for NLS API GetLocaleInfo. 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 // buffer size in wide chars #define LCTYPE_INVALID 0x0000100 // invalid LCTYPE #define LANG_INVALID 0x0417 // invalid lang id #define S_ILANGUAGE L"0409" #define S_SLANGUAGE L"English (United States)" #define S_SMONTHNAME1_RUSSIAN L"\x042f\x043d\x0432\x0430\x0440\x044c" #define S_SMONTHNAME2_RUSSIAN L"\x0424\x0435\x0432\x0440\x0430\x043b\x044c" #define FONTSIG_ENGLISH L"\x00af\x8000\x38cb\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x8000\x01ff\x003f\x8000\xffff" #define FONTSIG_RUSSIAN L"\x0203\x8000\x3848\x0000\x0000\x0000\x0000\x0000\x0004\x0000\x0000\x0002\x0004\x0000\x0000\x0202" #define FONTSIG_ENGLISH_A "\xaf\x00\x00\x80\xcb\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x80\xff\x01\x3f\x00\x00\x80\xff\xff" #define FONTSIG_RUSSIAN_A "\x03\x02\x00\x80\x48\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x02\x00\x04\x00\x00\x00\x00\x00\x02\x02" // // Global Variables. // LCID Locale; WCHAR lpLCData[BUFSIZE]; BYTE lpLCDataA[BUFSIZE]; // // pLocaleFlag and pLocaleString must have the same number of entries. // LCTYPE pLocaleFlag[] = { LOCALE_ILANGUAGE, LOCALE_SLANGUAGE, LOCALE_SENGLANGUAGE, LOCALE_SABBREVLANGNAME, LOCALE_SNATIVELANGNAME, LOCALE_ICOUNTRY, LOCALE_SCOUNTRY, LOCALE_SENGCOUNTRY, LOCALE_SABBREVCTRYNAME, LOCALE_SNATIVECTRYNAME, LOCALE_IGEOID, LOCALE_SSORTNAME, LOCALE_IDEFAULTLANGUAGE, LOCALE_IDEFAULTCOUNTRY, LOCALE_IDEFAULTANSICODEPAGE, LOCALE_IDEFAULTCODEPAGE, LOCALE_IDEFAULTMACCODEPAGE, LOCALE_IDEFAULTEBCDICCODEPAGE, LOCALE_SLIST, LOCALE_IMEASURE, LOCALE_IPAPERSIZE, LOCALE_SDECIMAL, LOCALE_STHOUSAND, LOCALE_SGROUPING, LOCALE_IDIGITS, LOCALE_ILZERO, LOCALE_SNATIVEDIGITS, LOCALE_SCURRENCY, LOCALE_SINTLSYMBOL, LOCALE_SENGCURRNAME, LOCALE_SNATIVECURRNAME, LOCALE_SMONDECIMALSEP, LOCALE_SMONTHOUSANDSEP, LOCALE_SMONGROUPING, LOCALE_ICURRDIGITS, LOCALE_IINTLCURRDIGITS, LOCALE_ICURRENCY, LOCALE_INEGCURR, LOCALE_SPOSITIVESIGN, LOCALE_SNEGATIVESIGN, LOCALE_IPOSSIGNPOSN, LOCALE_INEGSIGNPOSN, LOCALE_IPOSSYMPRECEDES, LOCALE_IPOSSEPBYSPACE, LOCALE_INEGSYMPRECEDES, LOCALE_INEGSEPBYSPACE, LOCALE_STIMEFORMAT, LOCALE_STIME, LOCALE_ITIME, LOCALE_ITLZERO, LOCALE_ITIMEMARKPOSN, LOCALE_S1159, LOCALE_S2359, LOCALE_SSHORTDATE, LOCALE_SDATE, LOCALE_IDATE, LOCALE_ICENTURY, LOCALE_IDAYLZERO, LOCALE_IMONLZERO, LOCALE_SYEARMONTH, LOCALE_SLONGDATE, LOCALE_ILDATE, LOCALE_ICALENDARTYPE, LOCALE_IOPTIONALCALENDAR, LOCALE_IFIRSTDAYOFWEEK, LOCALE_IFIRSTWEEKOFYEAR, LOCALE_SDAYNAME1, LOCALE_SDAYNAME2, LOCALE_SDAYNAME3, LOCALE_SDAYNAME4, LOCALE_SDAYNAME5, LOCALE_SDAYNAME6, LOCALE_SDAYNAME7, LOCALE_SABBREVDAYNAME1, LOCALE_SABBREVDAYNAME2, LOCALE_SABBREVDAYNAME3, LOCALE_SABBREVDAYNAME4, LOCALE_SABBREVDAYNAME5, LOCALE_SABBREVDAYNAME6, LOCALE_SABBREVDAYNAME7, LOCALE_SMONTHNAME1, LOCALE_SMONTHNAME2, LOCALE_SMONTHNAME3, LOCALE_SMONTHNAME4, LOCALE_SMONTHNAME5, LOCALE_SMONTHNAME6, LOCALE_SMONTHNAME7, LOCALE_SMONTHNAME8, LOCALE_SMONTHNAME9, LOCALE_SMONTHNAME10, LOCALE_SMONTHNAME11, LOCALE_SMONTHNAME12, LOCALE_SMONTHNAME13, LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2, LOCALE_SABBREVMONTHNAME3, LOCALE_SABBREVMONTHNAME4, LOCALE_SABBREVMONTHNAME5, LOCALE_SABBREVMONTHNAME6, LOCALE_SABBREVMONTHNAME7, LOCALE_SABBREVMONTHNAME8, LOCALE_SABBREVMONTHNAME9, LOCALE_SABBREVMONTHNAME10, LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12, LOCALE_SABBREVMONTHNAME13 }; #define NUM_LOCALE_FLAGS ( sizeof(pLocaleFlag) / sizeof(LCTYPE) ) LPWSTR pLocaleString[] = { L"0409", L"English (United States)", L"English", L"ENU", L"English", L"1", L"United States", L"United States", L"USA", L"United States", L"244", L"Default", L"0409", L"1", L"1252", L"437", L"10000", L"037", L",", L"1", L"1", L".", L",", L"3;0", L"2", L"1", L"0123456789", L"$", L"USD", L"US Dollar", L"US Dollar", L".", L",", L"3;0", L"2", L"2", L"0", L"0", L"", L"-", L"3", L"0", L"1", L"0", L"1", L"0", L"h:mm:ss tt", L":", L"0", L"0", L"0", L"AM", L"PM", L"M/d/yyyy", L"/", L"0", L"1", L"0", L"0", L"MMMM, yyyy", L"dddd, MMMM dd, yyyy", L"0", L"1", L"0", L"6", L"0", L"Monday", L"Tuesday", L"Wednesday", L"Thursday", L"Friday", L"Saturday", L"Sunday", L"Mon", L"Tue", L"Wed", L"Thu", L"Fri", L"Sat", L"Sun", L"January", L"February", L"March", L"April", L"May", L"June", L"July", L"August", L"September", L"October", L"November", L"December", L"", L"Jan", L"Feb", L"Mar", L"Apr", L"May", L"Jun", L"Jul", L"Aug", L"Sep", L"Oct", L"Nov", L"Dec", L"" }; // // pLocaleIntFlag and pLocaleInt must have the same number of entries. // LCTYPE pLocaleIntFlag[] = { LOCALE_ILANGUAGE, LOCALE_ICOUNTRY, LOCALE_IDEFAULTLANGUAGE, LOCALE_IDEFAULTCOUNTRY, LOCALE_IDEFAULTANSICODEPAGE, LOCALE_IDEFAULTCODEPAGE, LOCALE_IDEFAULTMACCODEPAGE, LOCALE_IGEOID, LOCALE_IMEASURE, LOCALE_IDIGITS, LOCALE_ILZERO, LOCALE_ICURRDIGITS, LOCALE_IINTLCURRDIGITS, LOCALE_ICURRENCY, LOCALE_INEGCURR, LOCALE_IPOSSIGNPOSN, LOCALE_INEGSIGNPOSN, LOCALE_IPOSSYMPRECEDES, LOCALE_IPOSSEPBYSPACE, LOCALE_INEGSYMPRECEDES, LOCALE_INEGSEPBYSPACE, LOCALE_ITIME, LOCALE_ITLZERO, LOCALE_ITIMEMARKPOSN, LOCALE_IDATE, LOCALE_ICENTURY, LOCALE_IDAYLZERO, LOCALE_IMONLZERO, LOCALE_ILDATE, LOCALE_ICALENDARTYPE, LOCALE_IOPTIONALCALENDAR, LOCALE_IFIRSTDAYOFWEEK, LOCALE_IFIRSTWEEKOFYEAR }; #define NUM_LOCALE_INT_FLAGS ( sizeof(pLocaleIntFlag) / sizeof(LCTYPE) ) DWORD pLocaleInt[] = { 0x0409, 1, 0x0409, 1, 1252, 437, 10000, 244, 1, 2, 1, 2, 2, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }; // // Forward Declarations. // BOOL InitGetLocInfo(); int GLI_BadParamCheck(); int GLI_NormalCase(); int GLI_Ansi(); int VER_NormalCase(); //////////////////////////////////////////////////////////////////////////// // // TestGetLocaleInfo // // Test routine for GetLocaleInfoW API. // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// int TestGetLocaleInfo() { int ErrCount = 0; // error count // // Print out what's being done. // printf("\n\nTESTING GetLocaleInfoW...\n\n"); // // Initialize global variables. // if (!InitGetLocInfo()) { printf("\nABORTED TestGetLocaleInfo: Could not Initialize.\n"); return (1); } // // Test bad parameters. // ErrCount += GLI_BadParamCheck(); // // Test normal cases. // ErrCount += GLI_NormalCase(); // // Test Ansi version. // ErrCount += GLI_Ansi(); // // Test Version Routines. // ErrCount += VER_NormalCase(); // // Print out result. // printf("\nGetLocaleInfoW: ERRORS = %d\n", ErrCount); // // Return total number of errors found. // return (ErrCount); } //////////////////////////////////////////////////////////////////////////// // // InitGetLocInfo // // 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 InitGetLocInfo() { // // Make a Locale. // Locale = MAKELCID(0x0409, 0); // // Return success. // return (TRUE); } //////////////////////////////////////////////////////////////////////////// // // GLI_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 GLI_BadParamCheck() { int NumErrors = 0; // error count - to be returned int rc; // return code // // Bad Locale. // // Variation 1 - Bad Locale rc = GetLocaleInfoW( (LCID)333, LOCALE_ILANGUAGE, lpLCData, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "Bad Locale", &NumErrors ); // // Null Pointers. // // Variation 1 - lpLCData = NULL rc = GetLocaleInfoW( Locale, LOCALE_ILANGUAGE, NULL, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "lpLCData NULL", &NumErrors ); // // Bad Counts. // // Variation 1 - cbBuf < 0 rc = GetLocaleInfoW( Locale, LOCALE_ILANGUAGE, lpLCData, -1 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "cbBuf < 0", &NumErrors ); // // Zero or Invalid Type. // // Variation 1 - LCType = invalid rc = GetLocaleInfoW( Locale, LCTYPE_INVALID, lpLCData, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "LCType invalid", &NumErrors ); // Variation 2 - LCType = 0 rc = GetLocaleInfoW( Locale, 0, lpLCData, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "LCType zero", &NumErrors ); // Variation 3 - Use CP ACP, LCType = invalid rc = GetLocaleInfoW( Locale, LOCALE_USE_CP_ACP | LCTYPE_INVALID, lpLCData, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "Use CP ACP, LCType invalid", &NumErrors ); // // Buffer Too Small. // // Variation 1 - cbBuf = too small rc = GetLocaleInfoW( Locale, LOCALE_ILANGUAGE, lpLCData, 2 ); CheckReturnBadParam( rc, 0, ERROR_INSUFFICIENT_BUFFER, "cbBuf too small", &NumErrors ); // // Bad locale - Not valid in RC file. // // Variation 1 - SLANGUAGE - invalid rc = GetLocaleInfoW( LANG_INVALID, LOCALE_SLANGUAGE, lpLCData, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "invalid locale - invalid", &NumErrors ); // // RETURN_NUMBER flag. // // Variation 1 - invalid flags rc = GetLocaleInfoW( 0x0409, LOCALE_SLANGUAGE | LOCALE_RETURN_NUMBER, lpLCData, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "invalid flags - RETURN_NUMBER", &NumErrors ); // Variation 2 - insufficent buffer rc = GetLocaleInfoW( 0x0409, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER, lpLCData, 1 ); CheckReturnBadParam( rc, 0, ERROR_INSUFFICIENT_BUFFER, "insufficient buffer 1 - RETURN_NUMBER", &NumErrors ); // Variation 3 - insufficent buffer rc = GetLocaleInfoW( 0x0409, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, lpLCData, 1 ); CheckReturnBadParam( rc, 0, ERROR_INSUFFICIENT_BUFFER, "insufficient buffer 2 - RETURN_NUMBER", &NumErrors ); // // Return total number of errors found. // return (NumErrors); } //////////////////////////////////////////////////////////////////////////// // // GLI_NormalCase // // This routine tests the normal cases of the API routine. // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// int GLI_NormalCase() { int NumErrors = 0; // error count - to be returned int rc; // return code int ctr; // loop counter #ifdef PERF DbgBreakPoint(); #endif // // Locales. // // Variation 1 - System Default Locale rc = GetLocaleInfoW( LOCALE_SYSTEM_DEFAULT, LOCALE_ILANGUAGE, lpLCData, BUFSIZE ); CheckReturnEqual( rc, 0, "system default locale", &NumErrors ); // Variation 2 - Current User Locale rc = GetLocaleInfoW( LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, lpLCData, BUFSIZE ); CheckReturnEqual( rc, 0, "current user locale", &NumErrors ); // // Use CP ACP. // // Variation 1 - Use CP ACP, System Default Locale rc = GetLocaleInfoW( LOCALE_SYSTEM_DEFAULT, LOCALE_USE_CP_ACP | LOCALE_ILANGUAGE, lpLCData, BUFSIZE ); CheckReturnEqual( rc, 0, "Use CP ACP, system default locale", &NumErrors ); // // cbBuf. // // Variation 1 - cbBuf = size of lpLCData buffer rc = GetLocaleInfoW( Locale, LOCALE_ILANGUAGE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, S_ILANGUAGE, "cbBuf = bufsize", &NumErrors ); // Variation 2 - cbBuf = 0 lpLCData[0] = 0x0000; rc = GetLocaleInfoW( Locale, LOCALE_ILANGUAGE, lpLCData, 0 ); CheckReturnValidW( rc, -1, NULL, S_ILANGUAGE, "cbBuf zero", &NumErrors ); // Variation 3 - cbBuf = 0, lpLCData = NULL rc = GetLocaleInfoW( Locale, LOCALE_ILANGUAGE, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, S_ILANGUAGE, "cbBuf (NULL ptr)", &NumErrors ); // // LCTYPE values. // for (ctr = 0; ctr < NUM_LOCALE_FLAGS; ctr++) { rc = GetLocaleInfoW( Locale, pLocaleFlag[ctr], lpLCData, BUFSIZE ); CheckReturnValidLoopW( rc, -1, lpLCData, pLocaleString[ctr], "Locale Flag", pLocaleFlag[ctr], &NumErrors ); } // // RC file - SLANGUAGE and SCOUNTRY. // // Variation 1 - SLANGUAGE - Czech rc = GetLocaleInfoW( 0x0405, LOCALE_SLANGUAGE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Czech", "SLANGUAGE (Czech)", &NumErrors ); // Variation 2 - SCOUNTRY - Czech rc = GetLocaleInfoW( 0x0405, LOCALE_SCOUNTRY, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Czech Republic", "SCOUNTRY (Czech)", &NumErrors ); // Variation 3 - SCOUNTRY - Slovak rc = GetLocaleInfoW( 0x041B, LOCALE_SCOUNTRY, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Slovakia", "SCOUNTRY (Slovak)", &NumErrors ); // Variation 4 - SENGCOUNTRY - Czech rc = GetLocaleInfoW( 0x0405, LOCALE_SENGCOUNTRY, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Czech Republic", "SENGCOUNTRY (Czech)", &NumErrors ); // Variation 5 - SENGCOUNTRY - Slovak rc = GetLocaleInfoW( 0x041B, LOCALE_SENGCOUNTRY, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Slovakia", "SENGCOUNTRY (Slovak)", &NumErrors ); // // Language Neutral. // // Variation 1 - SLANGUAGE - neutral rc = GetLocaleInfoW( 0x0000, LOCALE_SLANGUAGE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, S_SLANGUAGE, "SLANGUAGE (neutral)", &NumErrors ); // Variation 2 - SLANGUAGE - sys default rc = GetLocaleInfoW( 0x0400, LOCALE_SLANGUAGE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, S_SLANGUAGE, "SLANGUAGE (sys default)", &NumErrors ); // Variation 3 - SLANGUAGE - user default rc = GetLocaleInfoW( 0x0800, LOCALE_SLANGUAGE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, S_SLANGUAGE, "SLANGUAGE (user default)", &NumErrors ); // Variation 4 - SLANGUAGE - sub lang neutral US rc = GetLocaleInfoW( 0x0009, LOCALE_SLANGUAGE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, S_SLANGUAGE, "SLANGUAGE (sub lang neutral US)", &NumErrors ); // Variation 5 - SLANGUAGE - sub lang neutral Czech rc = GetLocaleInfoW( 0x0005, LOCALE_SLANGUAGE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Czech", "SLANGUAGE (sub lang neutral Czech)", &NumErrors ); // // Test Russian Month Names. // // Variation 1 - SMONTHNAME1 rc = GetLocaleInfoW( 0x0419, LOCALE_SMONTHNAME1, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, S_SMONTHNAME1_RUSSIAN, "Russian SMONTHNAME1", &NumErrors ); // Variation 2 - SMONTHNAME2 rc = GetLocaleInfoW( 0x0419, LOCALE_SMONTHNAME2, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, S_SMONTHNAME2_RUSSIAN, "Russian SMONTHNAME2", &NumErrors ); // // Test Font Signature. // // Variation 1 - FONTSIGNATURE rc = GetLocaleInfoW( 0x0409, LOCALE_FONTSIGNATURE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, 16, lpLCData, FONTSIG_ENGLISH, "English FONTSIGNATURE", &NumErrors ); // Variation 2 - FONTSIGNATURE rc = GetLocaleInfoW( 0x0419, LOCALE_FONTSIGNATURE, lpLCData, BUFSIZE ); CheckReturnValidW( rc, 16, lpLCData, FONTSIG_RUSSIAN, "Russian FONTSIGNATURE", &NumErrors ); // // Test Return Number flag. // // Variation 1 - RETURN_NUMBER rc = GetLocaleInfoW( 0x0409, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, lpLCData, BUFSIZE ); CheckReturnValidInt( rc, 2, *((LPDWORD)lpLCData), 1252, "Return_Number - ansi codepage for 0x0409", &NumErrors ); rc = GetLocaleInfoW( 0x0409, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, NULL, 0 ); CheckReturnValidInt( rc, 2, 1252, 1252, "Return_Number - ansi codepage for 0x0409 (no cchData)", &NumErrors ); // Variation 2 - RETURN_NUMBER rc = GetLocaleInfoW( 0x041f, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, lpLCData, BUFSIZE ); CheckReturnValidInt( rc, 2, *((LPDWORD)lpLCData), 1254, "Return_Number - ansi codepage for 0x041f", &NumErrors ); rc = GetLocaleInfoW( 0x041f, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, NULL, 0 ); CheckReturnValidInt( rc, 2, 1254, 1254, "Return_Number - ansi codepage for 0x041f (no cchData)", &NumErrors ); // Variation 3 - RETURN_NUMBER rc = GetLocaleInfoW( 0x0409, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER, lpLCData, BUFSIZE ); CheckReturnValidInt( rc, 2, *((LPDWORD)lpLCData), 0x0409, "Return_Number - iLanguage", &NumErrors ); rc = GetLocaleInfoW( 0x0409, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER, NULL, 0 ); CheckReturnValidInt( rc, 2, 0x0409, 0x0409, "Return_Number - iLanguage (no cchData)", &NumErrors ); // // Try all INT flags with LOCALE_RETURN_NUMBER flag. // for (ctr = 0; ctr < NUM_LOCALE_INT_FLAGS; ctr++) { rc = GetLocaleInfoW( 0x0409, pLocaleIntFlag[ctr] | LOCALE_RETURN_NUMBER, lpLCData, BUFSIZE ); CheckReturnValidInt( rc, 2, *((LPDWORD)lpLCData), pLocaleInt[ctr], "Locale Int Flag", &NumErrors ); } // // Test SSORTNAME. // // Variation 1 - SSORTNAME rc = GetLocaleInfoW( 0x00000407, LOCALE_SSORTNAME, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Dictionary", "SSORTNAME 0x00000407", &NumErrors ); // Variation 2 - SSORTNAME rc = GetLocaleInfoW( 0x00010407, LOCALE_SSORTNAME, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Phone Book (DIN)", "SSORTNAME 0x00010407", &NumErrors ); // Variation 3 - SSORTNAME rc = GetLocaleInfoW( 0x0000040a, LOCALE_SSORTNAME, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Traditional", "SSORTNAME 0x0000040a", &NumErrors ); // Variation 4 - SSORTNAME rc = GetLocaleInfoW( 0x00000c0a, LOCALE_SSORTNAME, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"International", "SSORTNAME 0x00000c0a", &NumErrors ); // Variation 5 - SSORTNAME rc = GetLocaleInfoW( 0x00000404, LOCALE_SSORTNAME, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Stroke Count", "SSORTNAME 0x00000404", &NumErrors ); // Variation 7 - SSORTNAME rc = GetLocaleInfoW( 0x00020404, LOCALE_SSORTNAME, lpLCData, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "SSORTNAME 0x00020404", &NumErrors ); // Variation 8 - SSORTNAME rc = GetLocaleInfoW( 0x00000804, LOCALE_SSORTNAME, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Pronunciation", "SSORTNAME 0x00000804", &NumErrors ); // Variation 10 - SSORTNAME rc = GetLocaleInfoW( 0x00020804, LOCALE_SSORTNAME, lpLCData, BUFSIZE ); CheckReturnValidW( rc, -1, lpLCData, L"Stroke Count", "SSORTNAME 0x00020804", &NumErrors ); // // Return total number of errors found. // return (NumErrors); } //////////////////////////////////////////////////////////////////////////// // // GLI_Ansi // // This routine tests the Ansi version of the API routine. // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// int GLI_Ansi() { int NumErrors = 0; // error count - to be returned int rc; // return code int ctr; // loop counter // // GetLocaleInfoA. // // Variation 1 - ILANGUAGE rc = GetLocaleInfoA( Locale, LOCALE_ILANGUAGE, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "0409", NULL, "A version ILANGUAGE", &NumErrors ); // Variation 2 - ILANGUAGE rc = GetLocaleInfoA( Locale, LOCALE_ILANGUAGE, NULL, 0 ); CheckReturnValidA( rc, -1, NULL, "0409", NULL, "A version ILANGUAGE, no Dest", &NumErrors ); // Variation 3 - ILANGUAGE rc = GetLocaleInfoA( Locale, LOCALE_ILANGUAGE, NULL, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A version bad lpLCData", &NumErrors ); // Variation 4 - SSHORTDATE rc = GetLocaleInfoA( Locale, LOCALE_SSHORTDATE, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "M/d/yyyy", NULL, "A version SSHORTDATE", &NumErrors ); // Variation 5 - SSHORTDATE rc = GetLocaleInfoA( Locale, LOCALE_SSHORTDATE, NULL, 0 ); CheckReturnValidA( rc, -1, NULL, "M/d/yyyy", NULL, "A version SSHORTDATE, no Dest", &NumErrors ); // // Use CP ACP. // // Variation 1 - Use CP ACP, ILANGUAGE rc = GetLocaleInfoA( Locale, LOCALE_USE_CP_ACP | LOCALE_ILANGUAGE, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "0409", NULL, "A version Use CP ACP, ILANGUAGE", &NumErrors ); // // Make sure the A and W versions set the same error value. // SetLastError( 0 ); rc = GetLocaleInfoA( Locale, LOCALE_SLIST, lpLCDataA, -1 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A and W error returns same - A version", &NumErrors ); SetLastError( 0 ); rc = GetLocaleInfoW( Locale, LOCALE_SLIST, lpLCData, -1 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A and W error returns same - W version", &NumErrors ); // // Test Font Signature. // // Variation 1 - FONTSIGNATURE rc = GetLocaleInfoA( 0x0409, LOCALE_FONTSIGNATURE, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, 32, lpLCDataA, FONTSIG_ENGLISH_A, NULL, "A Version English FONTSIGNATURE", &NumErrors ); // Variation 2 - FONTSIGNATURE rc = GetLocaleInfoA( 0x0419, LOCALE_FONTSIGNATURE, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, 32, lpLCDataA, FONTSIG_RUSSIAN_A, NULL, "A Version Russian FONTSIGNATURE", &NumErrors ); // // Test Return Number flag. // // Variation 1 - RETURN_NUMBER rc = GetLocaleInfoA( 0x0409, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, lpLCDataA, BUFSIZE ); CheckReturnValidInt( rc, 4, *((LPDWORD)lpLCDataA), 1252, "A Version Return_Number - ansi codepage for 0x0409", &NumErrors ); rc = GetLocaleInfoA( 0x0409, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, NULL, 0 ); CheckReturnValidInt( rc, 4, 1252, 1252, "A Version Return_Number - ansi codepage for 0x0409 (no cchData)", &NumErrors ); // Variation 2 - RETURN_NUMBER rc = GetLocaleInfoA( 0x041f, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, lpLCDataA, BUFSIZE ); CheckReturnValidInt( rc, 4, *((LPDWORD)lpLCDataA), 1254, "A Version Return_Number - ansi codepage for 0x041f", &NumErrors ); rc = GetLocaleInfoA( 0x041f, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, NULL, 0 ); CheckReturnValidInt( rc, 4, 1254, 1254, "A Version Return_Number - ansi codepage for 0x041f (no cchData)", &NumErrors ); // Variation 3 - RETURN_NUMBER rc = GetLocaleInfoA( 0x0409, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER, lpLCDataA, BUFSIZE ); CheckReturnValidInt( rc, 4, *((LPDWORD)lpLCDataA), 0x0409, "A Version Return_Number - iLanguage", &NumErrors ); rc = GetLocaleInfoA( 0x0409, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER, NULL, 0 ); CheckReturnValidInt( rc, 4, 0x0409, 0x0409, "A Version Return_Number - iLanguage (no cchData)", &NumErrors ); // // Try all INT flags with LOCALE_RETURN_NUMBER flag. // for (ctr = 0; ctr < NUM_LOCALE_INT_FLAGS; ctr++) { rc = GetLocaleInfoA( 0x0409, pLocaleIntFlag[ctr] | LOCALE_RETURN_NUMBER, lpLCDataA, BUFSIZE ); CheckReturnValidInt( rc, 4, *((LPDWORD)lpLCDataA), pLocaleInt[ctr], "A Version Locale Int Flag", &NumErrors ); } // // Test SSORTNAME. // // Variation 1 - SSORTNAME rc = GetLocaleInfoA( 0x00000407, LOCALE_SSORTNAME, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "Dictionary", NULL, "A version SSORTNAME 0x00000407", &NumErrors ); // Variation 2 - SSORTNAME rc = GetLocaleInfoA( 0x00010407, LOCALE_SSORTNAME, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "Phone Book (DIN)", NULL, "A version SSORTNAME 0x00010407", &NumErrors ); // Variation 3 - SSORTNAME rc = GetLocaleInfoA( 0x0000040a, LOCALE_SSORTNAME, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "Traditional", NULL, "A version SSORTNAME 0x0000040a", &NumErrors ); // Variation 4 - SSORTNAME rc = GetLocaleInfoA( 0x00000c0a, LOCALE_SSORTNAME, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "International", NULL, "A version SSORTNAME 0x00000c0a", &NumErrors ); // Variation 5 - SSORTNAME rc = GetLocaleInfoA( 0x00000404, LOCALE_SSORTNAME, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "Stroke Count", NULL, "A version SSORTNAME 0x00000404", &NumErrors ); // Variation 7 - SSORTNAME rc = GetLocaleInfoA( 0x00020404, LOCALE_SSORTNAME, lpLCDataA, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A version SSORTNAME 0x00020404", &NumErrors ); // Variation 8 - SSORTNAME rc = GetLocaleInfoA( 0x00000804, LOCALE_SSORTNAME, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "Pronunciation", NULL, "A version SSORTNAME 0x00000804", &NumErrors ); // Variation 10 - SSORTNAME rc = GetLocaleInfoA( 0x00020804, LOCALE_SSORTNAME, lpLCDataA, BUFSIZE ); CheckReturnValidA( rc, -1, lpLCDataA, "Stroke Count", NULL, "A version SSORTNAME 0x00020804", &NumErrors ); // // Return total number of errors found. // return (NumErrors); } //////////////////////////////////////////////////////////////////////////// // // VER_NormalCase // // This routine tests the normal cases of the VERSION API routines. // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// int VER_NormalCase() { int NumErrors = 0; // error count - to be returned int rc; // return code BYTE pVersionA[BUFSIZE]; // byte buffer for string WCHAR pVersionW[BUFSIZE]; // word buffer for string // // VerLanguageNameW // // Variation 1 - U.S. rc = VerLanguageNameW( 0x0409, pVersionW, BUFSIZE ); CheckReturnValidW( rc, 23, pVersionW, L"English (United States)", "VerLanguageNameW (US)", &NumErrors ); // Variation 2 - Czech rc = VerLanguageNameW( 0x0405, pVersionW, BUFSIZE ); CheckReturnValidW( rc, 5, pVersionW, L"Czech", "VerLanguageNameW (Czech)", &NumErrors ); // // VerLanguageNameA // // Variation 1 - U.S. rc = VerLanguageNameA( 0x0409, pVersionA, BUFSIZE ); CheckReturnValidA( rc, 23, pVersionA, "English (United States)", NULL, "VerLanguageNameA (US)", &NumErrors ); // Variation 2 - Czech rc = VerLanguageNameA( 0x0405, pVersionA, BUFSIZE ); CheckReturnValidA( rc, 5, pVersionA, "Czech", NULL, "VerLanguageNameA (Czech)", &NumErrors ); // // Bad locale - Not valid in RC file. // // Variation 1 - SLANGUAGE - invalid (W) rc = VerLanguageNameW( LANG_INVALID, pVersionW, BUFSIZE ); CheckReturnValidW( rc, 16, pVersionW, L"Language Neutral", "VerLanguageNameW (invalid)", &NumErrors ); // Variation 2 - SLANGUAGE - invalid (A) rc = VerLanguageNameA( LANG_INVALID, pVersionA, BUFSIZE ); CheckReturnValidA( rc, 16, pVersionA, "Language Neutral", NULL, "VerLanguageNameA (invalid)", &NumErrors ); // // Invalid parameters. // // Variation 1 - wSize - invalid (W) pVersionW[0] = 0; rc = VerLanguageNameW( 0x0409, pVersionW, 0 ); CheckReturnValidW( rc, 0, NULL, NULL, "VerLanguageNameW (invalid size)", &NumErrors ); // Variation 2 - wSize - invalid (A) pVersionA[0] = 0; rc = VerLanguageNameA( 0x0409, pVersionA, 0 ); CheckReturnValidA( rc, 0, NULL, NULL, NULL, "VerLanguageNameA (invalid size)", &NumErrors ); // Variation 3 - szLang - invalid (W) rc = VerLanguageNameW( 0x0409, NULL, BUFSIZE ); CheckReturnValidW( rc, 0, NULL, NULL, "VerLanguageNameW (invalid buffer)", &NumErrors ); // Variation 4 - szLang - invalid (A) pVersionA[0] = 0; rc = VerLanguageNameA( 0x0409, NULL, BUFSIZE ); CheckReturnValidA( rc, 0, NULL, NULL, NULL, "VerLanguageNameA (invalid buffer)", &NumErrors ); // // Return total number of errors found. // return (NumErrors); }