|
|
/*++
Copyright (c) 1991-1999, Microsoft Corporation All rights reserved.
Module Name:
ggitest.c
Abstract:
Test module for NLS API GetGeoInfo, GetUserGeoID, and SetUserGeoID.
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:
09-12-2000 JulieB Created.
--*/
//
// Include Files.
//
#include "nlstest.h"
//
// Constant Declarations.
//
#define BUFSIZE 50 // buffer size in wide chars
#define GEOTYPE_INVALID 0x0100 // invalid geo type
#define GEO_INVALID 1 // invalid geo id
#define GEOCLASS_INVALID 3 // invalid geo class
#define US_NATION L"244"
#define US_FRIENDLYNAME L"United States"
#define US_OFFICIALNAME L"United States of America"
#define US_NATION_A "244"
#define US_FRIENDLYNAME_A "United States"
#define US_OFFICIALNAME_A "United States of America"
//
// Global Variables.
//
LCID Locale; GEOID GeoId;
WCHAR lpGeoData[BUFSIZE]; BYTE lpGeoDataA[BUFSIZE];
//
// pGeoFlag and pGeoString must have the same number of entries.
//
GEOTYPE pGeoFlag[] = { GEO_NATION, GEO_LATITUDE, GEO_LONGITUDE, GEO_ISO2, GEO_ISO3, GEO_RFC1766, GEO_LCID, GEO_FRIENDLYNAME, GEO_OFFICIALNAME // GEO_TIMEZONES,
// GEO_OFFICIALLANGUAGES
};
#define NUM_GEO_FLAGS ( sizeof(pGeoFlag) / sizeof(GEOTYPE) )
LPWSTR pGeoString[] = { L"244", L"39.45", L"-98.908", L"US", L"USA", L"en-us", L"00000409", L"United States", L"United States of America", };
LPSTR pGeoStringA[] = { "244", "39.45", "-98.908", "US", "USA", "en-us", "00000409", "United States", "United States of America", };
LPWSTR pGeoString2[] = { L"122", L"35.156", L"136.06", L"JP", L"JPN", L"ja-jp", L"00000411", L"Japan", L"Japan", };
LPSTR pGeoString2A[] = { "122", "35.156", "136.06", "JP", "JPN", "ja-jp", "00000411", "Japan", "Japan", };
//
// Forward Declarations.
//
BOOL InitGetGeoInfo();
int GGI_BadParamCheck();
int GGI_NormalCase();
int GGI_Ansi();
int GetSetUserGeoId();
////////////////////////////////////////////////////////////////////////////
//
// TestGetGeoInfo
//
// Test routine for GetGeoInfoW API.
//
// 09-12-00 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int TestGetGeoInfo() { int ErrCount = 0; // error count
//
// Print out what's being done.
//
printf("\n\nTESTING GetGeoInfoW, GetUserGeoID, SetUserGeoID...\n\n");
//
// Initialize global variables.
//
if (!InitGetGeoInfo()) { printf("\nABORTED TestGetGeoInfo: Could not Initialize.\n"); return (1); }
//
// Test bad parameters.
//
ErrCount += GGI_BadParamCheck();
//
// Test normal cases.
//
ErrCount += GGI_NormalCase();
//
// Test Ansi version.
//
ErrCount += GGI_Ansi();
//
// Test Get and Set.
//
ErrCount += GetSetUserGeoId();
//
// Print out result.
//
printf("\nGetGeoInfoW: ERRORS = %d\n", ErrCount);
//
// Return total number of errors found.
//
return (ErrCount); }
////////////////////////////////////////////////////////////////////////////
//
// InitGetGeoInfo
//
// This routine initializes the global variables. If no errors were
// encountered, then it returns TRUE. Otherwise, it returns FALSE.
//
// 09-12-00 JulieB Created.
////////////////////////////////////////////////////////////////////////////
BOOL InitGetGeoInfo() { //
// Make a Locale.
//
Locale = MAKELCID(0x0409, 0);
//
// Set the GeoId.
//
GeoId = 244;
//
// Return success.
//
return (TRUE); }
////////////////////////////////////////////////////////////////////////////
//
// GGI_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.
//
// 09-12-00 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GGI_BadParamCheck() { int NumErrors = 0; // error count - to be returned
int rc; // return code
//
// Bad Locale.
//
// Variation 1 - Bad Locale
rc = GetGeoInfoW( GEO_INVALID, GEO_NATION, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "Bad Geo Id", &NumErrors );
//
// Null Pointers.
//
// Variation 1 - lpGeoData = NULL
rc = GetGeoInfoW( GeoId, GEO_NATION, NULL, BUFSIZE, 0x0409 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "lpGeoData NULL", &NumErrors );
//
// Bad Counts.
//
// Variation 1 - cbBuf < 0
rc = GetGeoInfoW( GeoId, GEO_NATION, lpGeoData, -1, 0x0409 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "cbBuf < 0", &NumErrors );
//
// Zero or Invalid Type.
//
// Variation 1 - GeoType = invalid
rc = GetGeoInfoW( GeoId, GEOTYPE_INVALID, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "GeoType invalid", &NumErrors );
// Variation 2 - GeoType = 0
rc = GetGeoInfoW( GeoId, 0, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "GeoType zero", &NumErrors );
//
// Buffer Too Small.
//
// Variation 1 - cbBuf = too small
rc = GetGeoInfoW( GeoId, GEO_NATION, lpGeoData, 2, 0x0409 ); CheckReturnBadParam( rc, 0, ERROR_INSUFFICIENT_BUFFER, "cbBuf too small", &NumErrors );
//
// Bad GeoId - Not valid in RC file.
//
// Variation 1 - GEO_NATION - invalid
rc = GetGeoInfoW( GEO_INVALID, GEO_NATION, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "invalid geo id", &NumErrors );
//
// Bad LangId.
//
// Variation 1 - GEO_NATION - invalid
rc = GetGeoInfoW( GeoId, GEO_NATION, lpGeoData, BUFSIZE, (LCID)333 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "invalid lang id", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// GGI_NormalCase
//
// This routine tests the normal cases of the API routine.
//
// 09-12-00 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GGI_NormalCase() { int NumErrors = 0; // error count - to be returned
int rc; // return code
int ctr; // loop counter
#ifdef PERF
DbgBreakPoint();
#endif
//
// GeoIds.
//
// Variation 1 - Current User GeoId
rc = GetGeoInfoW( GetUserGeoID(GEOCLASS_NATION), GEO_NATION, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnEqual( rc, 0, "current user geo id", &NumErrors );
//
// cbBuf.
//
// Variation 1 - cbBuf = size of lpGeoData buffer
rc = GetGeoInfoW( GeoId, GEO_NATION, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, US_NATION, "cbBuf = bufsize", &NumErrors );
// Variation 2 - cbBuf = 0
lpGeoData[0] = 0x0000; rc = GetGeoInfoW( GeoId, GEO_NATION, lpGeoData, 0, 0x0409 ); CheckReturnValidW( rc, -1, NULL, US_NATION, "cbBuf zero", &NumErrors );
// Variation 3 - cbBuf = 0, lpGeoData = NULL
rc = GetGeoInfoW( GeoId, GEO_NATION, NULL, 0, 0x0409 ); CheckReturnValidW( rc, -1, NULL, US_NATION, "cbBuf (NULL ptr)", &NumErrors );
//
// GEOTYPE values.
//
for (ctr = 0; ctr < NUM_GEO_FLAGS; ctr++) { //
// United States
//
rc = GetGeoInfoW( GeoId, pGeoFlag[ctr], lpGeoData, BUFSIZE, 0x0009 ); CheckReturnValidLoopW( rc, -1, lpGeoData, pGeoString[ctr], "Lang Id 0009, Geo Flag", pGeoFlag[ctr], &NumErrors );
rc = GetGeoInfoW( GeoId, pGeoFlag[ctr], lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidLoopW( rc, -1, lpGeoData, pGeoString[ctr], "Lang Id 0409, Geo Flag", pGeoFlag[ctr], &NumErrors );
//
// Japan
//
rc = GetGeoInfoW( 122, pGeoFlag[ctr], lpGeoData, BUFSIZE, 0x0011 ); CheckReturnValidLoopW( rc, -1, lpGeoData, pGeoString2[ctr], "Lang Id 0011, Geo Flag", pGeoFlag[ctr], &NumErrors );
rc = GetGeoInfoW( 122, pGeoFlag[ctr], lpGeoData, BUFSIZE, 0x0411 ); CheckReturnValidLoopW( rc, -1, lpGeoData, pGeoString2[ctr], "Lang Id 0411, Geo Flag", pGeoFlag[ctr], &NumErrors ); }
//
// RC file - FRIENDLYNAME and OFFICIALNAME.
//
// Variation 1 - FRIENDLYNAME US
rc = GetGeoInfoW( 244, GEO_FRIENDLYNAME, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, US_FRIENDLYNAME, "FriendlyName US", &NumErrors );
// Variation 2 - OFFICIALNAME US
rc = GetGeoInfoW( 244, GEO_OFFICIALNAME, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, US_OFFICIALNAME, "OfficialName US", &NumErrors );
// Variation 3 - FRIENDLYNAME Czech
rc = GetGeoInfoW( 75, GEO_FRIENDLYNAME, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, L"Czech Republic", "FriendlyName Czech", &NumErrors );
// Variation 4 - OFFICIALNAME Czech
rc = GetGeoInfoW( 75, GEO_OFFICIALNAME, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, L"Czech Republic", "OfficialName Czech", &NumErrors );
// Variation 5 - FRIENDLYNAME Venezuela
rc = GetGeoInfoW( 249, GEO_FRIENDLYNAME, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, L"Venezuela", "FriendlyName Venezuela", &NumErrors );
// Variation 6 - OFFICIALNAME Venezuela
rc = GetGeoInfoW( 249, GEO_OFFICIALNAME, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, L"Bolivarian Republic of Venezuela", "OfficialName Venezuela", &NumErrors );
// Variation 7 - FRIENDLYNAME Puerto Rico
rc = GetGeoInfoW( 202, GEO_FRIENDLYNAME, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, L"Puerto Rico", "FriendlyName Puerto Rico", &NumErrors );
// Variation 8 - OFFICIALNAME Puerto Rico
rc = GetGeoInfoW( 202, GEO_OFFICIALNAME, lpGeoData, BUFSIZE, 0x0409 ); CheckReturnValidW( rc, -1, lpGeoData, L"Puerto Rico", "OfficialName Puerto Rico", &NumErrors );
//
// Language Neutral.
//
// Variation 1 - lang id - neutral
rc = GetGeoInfoW( GeoId, GEO_NATION, lpGeoData, BUFSIZE, 0 ); CheckReturnValidW( rc, -1, lpGeoData, US_NATION, "lang id (neutral)", &NumErrors );
// Variation 2 - lang id - sub lang neutral US
rc = GetGeoInfoW( GeoId, GEO_NATION, lpGeoData, BUFSIZE, 0x0009 ); CheckReturnValidW( rc, -1, lpGeoData, US_NATION, "lang id (sub lang neutral US)", &NumErrors );
// Variation 5 - lang id - sub lang neutral Czech
rc = GetGeoInfoW( GeoId, GEO_NATION, lpGeoData, BUFSIZE, 0x0005 ); CheckReturnValidW( rc, -1, lpGeoData, US_NATION, "lang id (sub lang neutral Czech)", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// GGI_Ansi
//
// This routine tests the Ansi version of the API routine.
//
// 09-12-00 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GGI_Ansi() { int NumErrors = 0; // error count - to be returned
int rc; // return code
int ctr; // loop counter
//
// GeoIds.
//
// Variation 1 - Current User GeoId
rc = GetGeoInfoA( GetUserGeoID(GEOCLASS_NATION), GEO_NATION, lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnEqual( rc, 0, "A version - current user geo id", &NumErrors );
//
// cbBuf.
//
// Variation 1 - cbBuf = size of lpGeoDataA buffer
rc = GetGeoInfoA( GeoId, GEO_NATION, lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnValidA( rc, -1, lpGeoDataA, US_NATION_A, NULL, "A version - cbBuf = bufsize", &NumErrors );
// Variation 2 - cbBuf = 0
lpGeoDataA[0] = 0x0000; rc = GetGeoInfoA( GeoId, GEO_NATION, lpGeoDataA, 0, 0x0409 ); CheckReturnValidA( rc, -1, NULL, US_NATION_A, NULL, "A version - cbBuf zero", &NumErrors );
// Variation 3 - cbBuf = 0, lpGeoDataA = NULL
rc = GetGeoInfoA( GeoId, GEO_NATION, NULL, 0, 0x0409 ); CheckReturnValidA( rc, -1, NULL, US_NATION_A, NULL, "A version - cbBuf (NULL ptr)", &NumErrors );
//
// GEOTYPE values.
//
for (ctr = 0; ctr < NUM_GEO_FLAGS; ctr++) { rc = GetGeoInfoA( GeoId, pGeoFlag[ctr], lpGeoDataA, BUFSIZE, 0x0009 ); CheckReturnValidLoopA( rc, -1, lpGeoDataA, pGeoStringA[ctr], "A version - Lang Id 0009, Geo Flag", pGeoFlag[ctr], &NumErrors );
rc = GetGeoInfoA( GeoId, pGeoFlag[ctr], lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnValidLoopA( rc, -1, lpGeoDataA, pGeoStringA[ctr], "A version - Lang Id 0409, Geo Flag", pGeoFlag[ctr], &NumErrors ); }
//
// RC file - FRIENDLYNAME and OFFICIALNAME.
//
// Variation 1 - FRIENDLYNAME US
rc = GetGeoInfoA( 244, GEO_FRIENDLYNAME, lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnValidA( rc, -1, lpGeoDataA, US_FRIENDLYNAME_A, NULL, "A version - FriendlyName US", &NumErrors );
// Variation 2 - OFFICIALNAME US
rc = GetGeoInfoA( 244, GEO_OFFICIALNAME, lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnValidA( rc, -1, lpGeoDataA, US_OFFICIALNAME_A, NULL, "A version - OfficialName US", &NumErrors );
// Variation 3 - FRIENDLYNAME Czech
rc = GetGeoInfoA( 75, GEO_FRIENDLYNAME, lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnValidA( rc, -1, lpGeoDataA, "Czech Republic", NULL, "A version - FriendlyName Czech", &NumErrors );
// Variation 4 - OFFICIALNAME Czech
rc = GetGeoInfoA( 75, GEO_OFFICIALNAME, lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnValidA( rc, -1, lpGeoDataA, "Czech Republic", NULL, "A version - OfficialName Czech", &NumErrors );
// Variation 5 - FRIENDLYNAME Venezuela
rc = GetGeoInfoA( 249, GEO_FRIENDLYNAME, lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnValidA( rc, -1, lpGeoDataA, "Venezuela", NULL, "A version - FriendlyName Venezuela", &NumErrors );
// Variation 6 - OFFICIALNAME Venezuela
rc = GetGeoInfoA( 249, GEO_OFFICIALNAME, lpGeoDataA, BUFSIZE, 0x0409 ); CheckReturnValidA( rc, -1, lpGeoDataA, "Bolivarian Republic of Venezuela", NULL, "A version - OfficialName Venezuela", &NumErrors );
//
// Language Neutral.
//
// Variation 1 - lang id - neutral
rc = GetGeoInfoA( GeoId, GEO_NATION, lpGeoDataA, BUFSIZE, 0 ); CheckReturnValidA( rc, -1, lpGeoDataA, US_NATION_A, NULL, "A version - lang id (neutral)", &NumErrors );
// Variation 2 - lang id - sub lang neutral US
rc = GetGeoInfoA( GeoId, GEO_NATION, lpGeoDataA, BUFSIZE, 0x0009 ); CheckReturnValidA( rc, -1, lpGeoDataA, US_NATION_A, NULL, "A version - lang id (sub lang neutral US)", &NumErrors );
// Variation 5 - lang id - sub lang neutral Czech
rc = GetGeoInfoA( GeoId, GEO_NATION, lpGeoDataA, BUFSIZE, 0x0005 ); CheckReturnValidA( rc, -1, lpGeoDataA, US_NATION_A, NULL, "A version - lang id (sub lang neutral Czech)", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// GetSetUserGeoId
//
// This routine tests the normal cases of the Get and Set Geo APIs.
//
// 09-12-00 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GetSetUserGeoId() { int NumErrors = 0; // error count - to be returned
int rc; // return code
GEOID rcGeo; // return code
GEOID rcGeo2; // return code
rcGeo2 = GetUserGeoID(GEOCLASS_INVALID); CheckReturnValidW( rcGeo2, GEOID_NOT_AVAILABLE, NULL, NULL, "GetUserGeoID invalid geoclass", &NumErrors );
rcGeo2 = GetUserGeoID(GEOCLASS_REGION); CheckReturnValidW( rcGeo2, GEOID_NOT_AVAILABLE, NULL, NULL, "GetUserGeoID region geoclass", &NumErrors );
rcGeo = GetUserGeoID(GEOCLASS_NATION); CheckReturnValidW( rcGeo, 244, NULL, NULL, "GetUserGeoID", &NumErrors );
rc = SetUserGeoID(242); CheckReturnValidW( rc, TRUE, NULL, NULL, "SetUserGeoID 242", &NumErrors );
rc = SetUserGeoID(1); CheckReturnValidW( rc, FALSE, NULL, NULL, "SetUserGeoID invalid", &NumErrors );
rc = SetUserGeoID(0); CheckReturnValidW( rc, FALSE, NULL, NULL, "SetUserGeoID invalid 2", &NumErrors );
rcGeo2 = GetUserGeoID(GEOCLASS_NATION); CheckReturnValidW( rcGeo2, 242, NULL, NULL, "GetUserGeoID 242", &NumErrors );
rc = SetUserGeoID(rcGeo); CheckReturnValidW( rc, TRUE, NULL, NULL, "SetUserGeoID back to original", &NumErrors );
rcGeo2 = GetUserGeoID(GEOCLASS_NATION); CheckReturnValidW( rcGeo2, rcGeo, NULL, NULL, "GetUserGeoID original", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
|