Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1067 lines
27 KiB

/*++
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);
}