/*++ Copyright (c) 1991-1999, Microsoft Corporation All rights reserved. Module Name: gettest.c Abstract: Test module for NLS API IsValidCodePage, IsValidLocale, IsValidLanguageGroup, GetACP, GetOEMCP, GetSystemDefaultUILanguage, GetUserDefaultUILanguage, GetSystemDefaultLangID, GetUserDefaultLangID, GetSystemDefaultLCID, GetUserDefaultLCID, GetThreadLocale, SetThreadLocale. 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" // // Forward Declarations. // int IVCP_NormalCase(); int IVLC_NormalCase(); int IVLG_NormalCase(); int GUAPI_NormalCase(); //////////////////////////////////////////////////////////////////////////// // // TestIsValidCodePage // // Test routine for IsValidCodePage API. // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// int TestIsValidCodePage() { int ErrCount = 0; // error count // // Print out what's being done. // printf("\n\nTESTING IsValidCodePage...\n\n"); // // Test normal cases. // ErrCount += IVCP_NormalCase(); // // Print out result. // printf("\nIsValidCodePage: ERRORS = %d\n", ErrCount); // // Return total number of errors found. // return (ErrCount); } //////////////////////////////////////////////////////////////////////////// // // IVCP_NormalCase // // This routine tests the normal cases of the API routine. // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// int IVCP_NormalCase() { int NumErrors = 0; // error count - to be returned BOOL rc; // return code // // Different values for CodePage. // // Variation 1 - CP_ACP rc = IsValidCodePage( CP_ACP ); CheckReturnValidW( rc, FALSE, NULL, NULL, "CP_ACP", &NumErrors ); // Variation 2 - CP_OEMCP rc = IsValidCodePage( CP_OEMCP ); CheckReturnValidW( rc, FALSE, NULL, NULL, "CP_OEMCP", &NumErrors ); // Variation 3 - CP 6 rc = IsValidCodePage( 6 ); CheckReturnValidW( rc, FALSE, NULL, NULL, "CP 6", &NumErrors ); // Variation 4 - CP 1252 rc = IsValidCodePage( 1252 ); CheckReturnValidW( rc, TRUE, NULL, NULL, "CP 1252", &NumErrors ); // Variation 5 - CP 437 rc = IsValidCodePage( 437 ); CheckReturnValidW( rc, TRUE, NULL, NULL, "CP 437", &NumErrors ); // Variation 6 - CP 37 rc = IsValidCodePage( 37 ); CheckReturnValidW( rc, TRUE, NULL, NULL, "CP 37", &NumErrors ); // Variation 7 - CP 65000 (UTF-7) rc = IsValidCodePage( 65000 ); CheckReturnValidW( rc, TRUE, NULL, NULL, "CP 65000", &NumErrors ); // Variation 8 - CP 65001 (UTF-8) rc = IsValidCodePage( 65001 ); CheckReturnValidW( rc, TRUE, NULL, NULL, "CP 65001", &NumErrors ); // // Return total number of errors found. // return (NumErrors); } //////////////////////////////////////////////////////////////////////////// // // TestIsValidLocale // // Test routine for IsValidLocale API. // // 07-26-93 JulieB Created. //////////////////////////////////////////////////////////////////////////// int TestIsValidLocale() { int ErrCount = 0; // error count // // Print out what's being done. // printf("\n\nTESTING IsValidLocale...\n\n"); // // Test normal cases. // ErrCount += IVLC_NormalCase(); // // Print out result. // printf("\nIsValidLocale: ERRORS = %d\n", ErrCount); // // Return total number of errors found. // return (ErrCount); } //////////////////////////////////////////////////////////////////////////// // // IVLC_NormalCase // // This routine tests the normal cases of the API routine. // // 07-26-93 JulieB Created. //////////////////////////////////////////////////////////////////////////// int IVLC_NormalCase() { int NumErrors = 0; // error count - to be returned BOOL rc; // return code // // Invalid values for Locale. // // Variation 1 - Neutral Locale rc = IsValidLocale( 0x00000000, LCID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "LOCALE_NEUTRAL", &NumErrors ); // Variation 2 - System Default Locale rc = IsValidLocale( LOCALE_SYSTEM_DEFAULT, LCID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "LOCALE_SYSTEM_DEFAULT", &NumErrors ); // Variation 3 - User Default Locale rc = IsValidLocale( LOCALE_USER_DEFAULT, LCID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "LOCALE_USER_DEFAULT", &NumErrors ); // Variation 4 - LCID 01000409 rc = IsValidLocale( 0x01000409, LCID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "invalid (0x01000409)", &NumErrors ); // Variation 5 - invalid flag rc = IsValidLocale( 0x00000409, 0x10000000 ); CheckReturnValidW( rc, FALSE, NULL, NULL, "invalid flag", &NumErrors ); // Variation 6 - LCID 00010407 rc = IsValidLocale( 0x00010407, LCID_SUPPORTED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "sort bit (0x00010407)", &NumErrors ); // Variation 7 - LCID 00010409 rc = IsValidLocale( 0x00010409, LCID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "sort bit (0x00010409)", &NumErrors ); // // Valid values for locale. // // Variation 1 - LCID 00000409 supported rc = IsValidLocale( 0x00000409, LCID_SUPPORTED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "supported 0x0409", &NumErrors ); // Variation 2 - LCID 00000409 installed rc = IsValidLocale( 0x00000409, LCID_INSTALLED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "installed 0x0409", &NumErrors ); // Variation 3 - LCID 0000041f supported rc = IsValidLocale( 0x0000041f, LCID_SUPPORTED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "supported 0x041f", &NumErrors ); // Variation 4 - LCID 0000041f installed rc = IsValidLocale( 0x0000041f, LCID_INSTALLED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "installed 0x041f", &NumErrors ); // Variation 5 - LCID 00000408 supported rc = IsValidLocale( 0x00000408, LCID_SUPPORTED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "supported 0x0408", &NumErrors ); // Variation 6 - LCID 00000408 installed rc = IsValidLocale( 0x00000408, LCID_INSTALLED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "installed 0x0408", &NumErrors ); // Variation 7 - LCID 00000411 installed rc = IsValidLocale( 0x00000411, LCID_INSTALLED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "installed (0x00000411)", &NumErrors ); // // Return total number of errors found. // return (NumErrors); } //////////////////////////////////////////////////////////////////////////// // // TestIsValidLanguageGroup // // Test routine for IsValidLanguageGroup API. // // 03-10-98 JulieB Created. //////////////////////////////////////////////////////////////////////////// int TestIsValidLanguageGroup() { int ErrCount = 0; // error count // // Print out what's being done. // printf("\n\nTESTING IsValidLanguageGroup...\n\n"); // // Test normal cases. // ErrCount += IVLG_NormalCase(); // // Print out result. // printf("\nIsValidLanguageGroup: ERRORS = %d\n", ErrCount); // // Return total number of errors found. // return (ErrCount); } //////////////////////////////////////////////////////////////////////////// // // IVLG_NormalCase // // This routine tests the normal cases of the API routine. // // 03-10-98 JulieB Created. //////////////////////////////////////////////////////////////////////////// int IVLG_NormalCase() { int NumErrors = 0; // error count - to be returned BOOL rc; // return code // // Invalid values for Language Groups. // // Variation 1 - Neutral Language Group rc = IsValidLanguageGroup( 0x0, LGRPID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "Language Group NEUTRAL", &NumErrors ); // Variation 2 - Invalid Language Group rc = IsValidLanguageGroup( 0x12, LGRPID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "Invalid (0x12)", &NumErrors ); // Variation 3 - Invalid Language Group rc = IsValidLanguageGroup( 18, LGRPID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "Invalid (18)", &NumErrors ); // Variation 4 - Invalid Language Group rc = IsValidLanguageGroup( 0x0100, LGRPID_SUPPORTED ); CheckReturnValidW( rc, FALSE, NULL, NULL, "invalid (0x0100)", &NumErrors ); // Variation 5 - invalid flag rc = IsValidLanguageGroup( 1, 0x10000000 ); CheckReturnValidW( rc, FALSE, NULL, NULL, "invalid flag", &NumErrors ); // // Valid values for language groups. // // Variation 1 - LGRPID 1 supported rc = IsValidLanguageGroup( 1, LGRPID_SUPPORTED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "supported 1", &NumErrors ); // Variation 2 - LGRPID 1 installed rc = IsValidLanguageGroup( 1, LGRPID_INSTALLED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "installed 0x0409", &NumErrors ); // Variation 3 - LGRPID 0x1 supported rc = IsValidLanguageGroup( 0x1, LGRPID_SUPPORTED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "supported 0x1", &NumErrors ); // Variation 4 - LGRPID 0x1 installed rc = IsValidLanguageGroup( 0x1, LGRPID_INSTALLED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "installed 0x1", &NumErrors ); // Variation 5 - LGRPID 0x4 supported rc = IsValidLanguageGroup( 0x4, LGRPID_SUPPORTED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "supported 0x4", &NumErrors ); // Variation 6 - LGRPID 0x4 installed rc = IsValidLanguageGroup( 0x4, LGRPID_INSTALLED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "installed 0x4", &NumErrors ); // Variation 7 - LGRPID 0xe supported rc = IsValidLanguageGroup( 0xe, LGRPID_SUPPORTED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "supported (0xe)", &NumErrors ); // Variation 8 - LGRPID 0xe installed rc = IsValidLanguageGroup( 0xe, LGRPID_INSTALLED ); CheckReturnValidW( rc, TRUE, NULL, NULL, "installed (0xe)", &NumErrors ); // // Return total number of errors found. // return (NumErrors); } //////////////////////////////////////////////////////////////////////////// // // TestUtilityAPIs // // Test routine for Utility APIs. // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// int TestUtilityAPIs() { int ErrCount = 0; // error count // // Print out what's being done. // printf("\n\nTESTING GetACP, GetOEMCP,\n"); printf(" GetSystemDefaultUILanguage, GetUserDefaultUILanguage,\n"); printf(" GetSystemDefaultLangID, GetUserDefaultLangID,\n"); printf(" GetSystemDefaultLCID, GetUserDefaultLCID,\n"); printf(" GetThreadLocale, SetThreadLocale...\n\n"); // // Test normal cases. // ErrCount += GUAPI_NormalCase(); // // Print out result. // printf("\nGetUtilityAPIs: ERRORS = %d\n", ErrCount); // // Return total number of errors found. // return (ErrCount); } DWORD GetRegistryString(HKEY hRootKey, LPWSTR szKeyPath, LPWSTR szKeyName, LPWSTR pBuffer, DWORD dwBufferLen) { HKEY hKey; DWORD cbData; DWORD result = 0; DWORD dwType; if (RegOpenKeyW(hRootKey, szKeyPath, &hKey) == ERROR_SUCCESS) { if (pBuffer == NULL) { if (RegQueryValueExW(hKey, szKeyName, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS) { result = cbData; } } else { cbData = dwBufferLen; if (RegQueryValueExW(hKey, szKeyName, NULL, &dwType, (LPBYTE)pBuffer, &cbData) == ERROR_SUCCESS) { if (dwType == REG_SZ) { result = cbData; } } } } RegCloseKey(hRootKey); return (result); } //////////////////////////////////////////////////////////////////////////// // // PrivateGetUserDefaultUILanguage // // This routine reads HKCU\Control Panel\Desktop\MultiUILanguageId // If that key is not available, return GetSystemDefaultUILanguage(); // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// LANGID PrivateGetUserDefaultUILanguage() { WCHAR szValue[256]; BOOL bSuccess = FALSE; LANGID result; if (GetRegistryString(HKEY_CURRENT_USER, L"Control Panel\\Desktop", L"MultiUILanguageId", szValue, sizeof(szValue)*sizeof(WCHAR)) > 0) { if (swscanf(szValue, L"%x", &result) > 0) { return (result); } } if (Verbose) { printf("....Failed to read HKCU\\Control Panel\\Desktop\\MultiUILanguageId\n"); } return (GetSystemDefaultUILanguage()); } //////////////////////////////////////////////////////////////////////////// // // GUAPI_NormalCase // // This routine tests the normal cases of the API routine. // // 06-14-91 JulieB Created. //////////////////////////////////////////////////////////////////////////// int GUAPI_NormalCase() { int NumErrors = 0; // error count - to be returned UINT rcInt; // return code LANGID rcLang; // return code LCID rcLoc; // return code LCID rcLoc2; // return code BOOL rc; // return code LANGID expectedUILanguage; #ifdef PERF DbgBreakPoint(); #endif // Variation 1 - GetACP rcInt = GetACP(); CheckReturnValidW( rcInt, 1252, NULL, NULL, "GetACP", &NumErrors ); // Variation 2 - GetOEMCP rcInt = GetOEMCP(); CheckReturnValidW( rcInt, 437, NULL, NULL, "GetOEMCP", &NumErrors ); // Variation 3 - GetSystemDefaultUILanguage rcLang = GetSystemDefaultUILanguage(); CheckReturnValidW( rcLang, 0x0409, NULL, NULL, "GetSystemDefaultUILanguage", &NumErrors ); // Variation 4 - GetUserDefaultUILanguage rcLang = GetUserDefaultUILanguage(); expectedUILanguage = PrivateGetUserDefaultUILanguage(); CheckReturnValidW( rcLang, expectedUILanguage, NULL, NULL, "GetUserDefaultUILanguage", &NumErrors ); // Variation 5 - GetSystemDefaultLangID rcLang = GetSystemDefaultLangID(); CheckReturnValidW( rcLang, 0x0409, NULL, NULL, "GetSystemDefaultLangID", &NumErrors ); // Variation 6 - GetUserDefaultLangID rcLang = GetUserDefaultLangID(); CheckReturnValidW( rcLang, 0x0409, NULL, NULL, "GetUserDefaultLangID", &NumErrors ); // Variation 7 - GetSystemDefaultLCID rcLoc = GetSystemDefaultLCID(); CheckReturnValidW( rcLoc, 0x00000409, NULL, NULL, "GetSystemDefaultLCID", &NumErrors ); // Variation 8 - GetUserDefaultLCID rcLoc = GetUserDefaultLCID(); CheckReturnValidW( rcLoc, 0x00000409, NULL, NULL, "GetUserDefaultLCID", &NumErrors ); // Variation 9 - GetThreadLocale and SetThreadLocale rcLoc = GetThreadLocale(); CheckReturnValidW( rcLoc, 0x00000409, NULL, NULL, "GetThreadLocale", &NumErrors ); rc = SetThreadLocale( 0x0000040a ); CheckReturnValidW( rc, TRUE, NULL, NULL, "SetThreadLocale 040a", &NumErrors ); rc = SetThreadLocale( 0x0000080b ); CheckReturnValidW( rc, FALSE, NULL, NULL, "SetThreadLocale invalid", &NumErrors ); rc = SetThreadLocale( 0x0100040a ); CheckReturnValidW( rc, FALSE, NULL, NULL, "SetThreadLocale invalid 2", &NumErrors ); rcLoc2 = GetThreadLocale(); CheckReturnValidW( rcLoc2, 0x0000040a, NULL, NULL, "GetThreadLocale 040a", &NumErrors ); rc = SetThreadLocale( rcLoc ); CheckReturnValidW( rc, TRUE, NULL, NULL, "SetThreadLocale back to original", &NumErrors ); // // Return total number of errors found. // return (NumErrors); }