|
|
/*++
Copyright (c) 1991-1999, Microsoft Corporation All rights reserved.
Module Name:
gcitest.c
Abstract:
Test module for NLS API GetCalendarInfo.
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:
03-10-98 JulieB Created.
--*/
//
// Include Files.
//
#include "nlstest.h"
//
// Constant Declarations.
//
#define BUFSIZE 50 // buffer size in wide chars
#define CALTYPE_INVALID 0x0000100 // invalid CALTYPE
#define LANG_INVALID 0x0417 // invalid lang id
#define S_ITWODIGITYEARMAX L"2029"
#define I_ITWODIGITYEARMAX 2029
//
// Global Variables.
//
LCID Locale;
WCHAR lpCalData[BUFSIZE]; BYTE lpCalDataA[BUFSIZE];
//
// pCalInfoFlag and pCalString must have the same number of entries.
//
CALTYPE pCalInfoFlag[] = { CAL_ICALINTVALUE, CAL_SCALNAME, CAL_ITWODIGITYEARMAX, CAL_IYEAROFFSETRANGE, CAL_SERASTRING, CAL_SSHORTDATE, CAL_SLONGDATE, CAL_SYEARMONTH, CAL_SDAYNAME1, CAL_SMONTHNAME1, CAL_SMONTHNAME13 };
#define NUM_CAL_FLAGS ( sizeof(pCalInfoFlag) / sizeof(CALTYPE) )
LPWSTR pCalString[] = { L"1", L"Gregorian Calendar", L"2029", L"0", L"", L"M/d/yyyy", L"dddd, MMMM dd, yyyy", L"MMMM, yyyy", L"Monday", L"January", L"" };
LPWSTR pCalStringJapan[] = { L"3", L"\x548c\x66a6", L"99", L"1989", L"\x5e73\x6210", L"gg y/M/d", L"gg y'\x5e74'M'\x6708'd'\x65e5'", L"gg y'\x5e74'M'\x6708'", L"\x6708\x66dc\x65e5", L"1\x6708", L"" };
LPWSTR pCalStringHebrew[] = { L"8", L"\x05dc\x05d5\x05d7\x00a0\x05e9\x05e0\x05d4\x00a0\x05e2\x05d1\x05e8\x05d9", L"5790", L"0", L"", L"dd/MMM/yyyy", L"dddd dd MMMM yyyy", L"MMMM yyyy", L"\x05d9\x05d5\x05dd\x00a0\x05e9\x05e0\x05d9", L"\x05ea\x05e9\x05e8\x05d9", L"\x05d0\x05dc\x05d5\x05dc" };
//
// pCalIntFlag and pCalInt must have the same number of entries.
//
CALTYPE pCalIntFlag[] = { CAL_ICALINTVALUE, CAL_ITWODIGITYEARMAX, CAL_IYEAROFFSETRANGE, };
#define NUM_CAL_INT_FLAGS ( sizeof(pCalIntFlag) / sizeof(CALTYPE) )
int pCalInt[] = { 1, 2029, 0 };
int pCalIntJapan[] = { 3, 99, 1989 };
//
// Forward Declarations.
//
BOOL InitGetCalInfo();
int GCI_BadParamCheck();
int GCI_NormalCase();
int GCI_Ansi();
////////////////////////////////////////////////////////////////////////////
//
// TestGetCalendarInfo
//
// Test routine for GetCalendarInfoW API.
//
// 03-10-98 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int TestGetCalendarInfo() { int ErrCount = 0; // error count
//
// Print out what's being done.
//
printf("\n\nTESTING GetCalendarInfoW...\n\n");
//
// Initialize global variables.
//
if (!InitGetCalInfo()) { printf("\nABORTED TestGetCalendarInfo: Could not Initialize.\n"); return (1); }
//
// Test bad parameters.
//
ErrCount += GCI_BadParamCheck();
//
// Test normal cases.
//
ErrCount += GCI_NormalCase();
//
// Test Ansi version.
//
ErrCount += GCI_Ansi();
//
// Print out result.
//
printf("\nGetCalendarInfoW: ERRORS = %d\n", ErrCount);
//
// Return total number of errors found.
//
return (ErrCount); }
////////////////////////////////////////////////////////////////////////////
//
// InitGetCalInfo
//
// This routine initializes the global variables. If no errors were
// encountered, then it returns TRUE. Otherwise, it returns FALSE.
//
// 03-10-98 JulieB Created.
////////////////////////////////////////////////////////////////////////////
BOOL InitGetCalInfo() { //
// Make a Locale.
//
Locale = MAKELCID(0x0409, 0);
//
// Return success.
//
return (TRUE); }
////////////////////////////////////////////////////////////////////////////
//
// GCI_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.
//
// 03-10-98 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GCI_BadParamCheck() { DWORD dwValue; // value
int NumErrors = 0; // error count - to be returned
int rc; // return code
//
// Bad Locale.
//
// Variation 1 - Bad Locale
rc = GetCalendarInfoW( (LCID)333, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "Bad Locale", &NumErrors );
// Variation 2 - Bad Locale
rc = GetCalendarInfoW( LANG_INVALID, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "invalid locale - invalid", &NumErrors );
//
// Null Pointers.
//
// Variation 1 - lpCalData = NULL
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, NULL, BUFSIZE, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "lpCalData NULL", &NumErrors );
//
// Bad Counts.
//
// Variation 1 - cchData < 0
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, -1, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "cchData < 0", &NumErrors );
//
// Zero or Invalid Type.
//
// Variation 1 - CalType = invalid
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CALTYPE_INVALID, lpCalData, BUFSIZE, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "CalType invalid", &NumErrors );
// Variation 2 - CalType = 0
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, 0, lpCalData, BUFSIZE, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "CalType zero", &NumErrors );
// Variation 3 - Use CP ACP, CalType = invalid
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_USE_CP_ACP | CALTYPE_INVALID, lpCalData, BUFSIZE, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "Use CP ACP, CalType invalid", &NumErrors );
//
// Buffer Too Small.
//
// Variation 1 - cchData = too small
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, 1, NULL ); CheckReturnBadParam( rc, 0, ERROR_INSUFFICIENT_BUFFER, "cchData too small", &NumErrors );
//
// RETURN_NUMBER flag.
//
// Variation 1 - invalid flags
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_SCALNAME | CAL_RETURN_NUMBER, NULL, 0, &dwValue ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "invalid flags - RETURN_NUMBER", &NumErrors );
// Variation 2 - wrong buffer 1
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX | CAL_RETURN_NUMBER, lpCalData, BUFSIZE, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "wrong buffer 1 - RETURN_NUMBER", &NumErrors );
// Variation 3 - wrong buffer 2
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX | CAL_RETURN_NUMBER, lpCalData, 0, &dwValue ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "wrong buffer 2 - RETURN_NUMBER", &NumErrors );
// Variation 4 - wrong buffer 3
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX | CAL_RETURN_NUMBER, NULL, BUFSIZE, &dwValue ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "wrong buffer 3 - RETURN_NUMBER", &NumErrors );
//
// Wrong Buffer.
//
// Variation 1 - wrong buffer 1
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, &dwValue ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "wrong buffer 1", &NumErrors );
// Variation 2 - wrong buffer 2
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, NULL, 0, &dwValue ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "wrong buffer 2", &NumErrors );
// Variation 3 - wrong buffer 3
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, 0, &dwValue ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "wrong buffer 3", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// GCI_NormalCase
//
// This routine tests the normal cases of the API routine.
//
// 03-10-98 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GCI_NormalCase() { DWORD dwValue; // value
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 = GetCalendarInfoW( LOCALE_SYSTEM_DEFAULT, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnEqual( rc, 0, "system default locale", &NumErrors );
// Variation 2 - Current User Locale
rc = GetCalendarInfoW( LOCALE_USER_DEFAULT, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnEqual( rc, 0, "current user locale", &NumErrors );
//
// Use CP ACP.
//
// Variation 1 - Use CP ACP, System Default Locale
rc = GetCalendarInfoW( LOCALE_SYSTEM_DEFAULT, CAL_GREGORIAN, CAL_USE_CP_ACP | CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnEqual( rc, 0, "Use CP ACP, system default locale", &NumErrors );
//
// cchData.
//
// Variation 1 - cchData = size of lpCalData buffer
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnValidW( rc, -1, lpCalData, S_ITWODIGITYEARMAX, "cchData = bufsize", &NumErrors );
// Variation 2 - cchData = 0
lpCalData[0] = 0x0000; rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, 0, NULL ); CheckReturnValidW( rc, -1, NULL, S_ITWODIGITYEARMAX, "cchData zero", &NumErrors );
// Variation 3 - cchData = 0, lpCalData = NULL
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, NULL, 0, NULL ); CheckReturnValidW( rc, -1, NULL, S_ITWODIGITYEARMAX, "cchData (NULL ptr)", &NumErrors );
//
// CALTYPE values.
//
for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++) { rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, pCalInfoFlag[ctr], lpCalData, BUFSIZE, NULL ); CheckReturnValidLoopW( rc, -1, lpCalData, pCalString[ctr], "Calendar Flag", pCalInfoFlag[ctr], &NumErrors ); }
for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++) { rc = GetCalendarInfoW( 0x0411, CAL_JAPAN, pCalInfoFlag[ctr], lpCalData, BUFSIZE, NULL ); CheckReturnValidLoopW( rc, -1, lpCalData, pCalStringJapan[ctr], "Japan Calendar Flag", pCalInfoFlag[ctr], &NumErrors ); }
for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++) { rc = GetCalendarInfoW( 0x040d, CAL_HEBREW, pCalInfoFlag[ctr], lpCalData, BUFSIZE, NULL ); CheckReturnValidLoopW( rc, -1, lpCalData, pCalStringHebrew[ctr], "Hebrew Calendar Flag", pCalInfoFlag[ctr], &NumErrors ); }
//
// Language Neutral.
//
// Variation 1 - language neutral
rc = GetCalendarInfoW( 0x0000, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnValidW( rc, -1, lpCalData, S_ITWODIGITYEARMAX, "language neutral", &NumErrors );
// Variation 2 - sys default
rc = GetCalendarInfoW( 0x0400, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnValidW( rc, -1, lpCalData, S_ITWODIGITYEARMAX, "sys default", &NumErrors );
// Variation 3 - user default
rc = GetCalendarInfoW( 0x0800, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnValidW( rc, -1, lpCalData, S_ITWODIGITYEARMAX, "user default", &NumErrors );
// Variation 4 - sub lang neutral US
rc = GetCalendarInfoW( 0x0009, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, BUFSIZE, NULL ); CheckReturnValidW( rc, -1, lpCalData, S_ITWODIGITYEARMAX, "sub lang neutral US", &NumErrors );
//
// Test Return Number flag.
//
// Variation 1 - RETURN_NUMBER
rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX | CAL_RETURN_NUMBER, NULL, 0, &dwValue ); CheckReturnValidInt( rc, 2, dwValue, 2029, "Return_Number - two digit year max", &NumErrors );
//
// Try all INT flags with CAL_RETURN_NUMBER flag.
//
for (ctr = 0; ctr < NUM_CAL_INT_FLAGS; ctr++) { rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, pCalIntFlag[ctr] | CAL_RETURN_NUMBER, NULL, 0, &dwValue ); CheckReturnValidInt( rc, 2, dwValue, pCalInt[ctr], "Calendar Int Flag", &NumErrors ); }
for (ctr = 0; ctr < NUM_CAL_INT_FLAGS; ctr++) { rc = GetCalendarInfoW( 0x0411, CAL_JAPAN, pCalIntFlag[ctr] | CAL_RETURN_NUMBER, NULL, 0, &dwValue ); CheckReturnValidInt( rc, 2, dwValue, pCalIntJapan[ctr], "Japan Calendar Int Flag", &NumErrors ); }
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// GCI_Ansi
//
// This routine tests the Ansi version of the API routine.
//
// 03-10-98 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GCI_Ansi() { DWORD dwValue; // value
int NumErrors = 0; // error count - to be returned
int rc; // return code
int ctr; // loop counter
//
// GetCalendarInfoA.
//
// Variation 1 - ITWODIGITYEARMAX
rc = GetCalendarInfoA( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalDataA, BUFSIZE, NULL ); CheckReturnValidA( rc, -1, lpCalDataA, "2029", NULL, "A version ITWODIGITYEARMAX", &NumErrors );
// Variation 2 - ITWODIGITYEARMAX
rc = GetCalendarInfoA( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, NULL, 0, NULL ); CheckReturnValidA( rc, -1, NULL, "2029", NULL, "A version ITWODIGITYEARMAX, no Dest", &NumErrors );
// Variation 3 - ITWODIGITYEARMAX
rc = GetCalendarInfoA( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, NULL, BUFSIZE, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A version bad lpCalData", &NumErrors );
//
// Use CP ACP.
//
// Variation 1 - Use CP ACP, ITWODIGITYEARMAX
rc = GetCalendarInfoA( Locale, CAL_GREGORIAN, CAL_USE_CP_ACP | CAL_ITWODIGITYEARMAX, lpCalDataA, BUFSIZE, NULL ); CheckReturnValidA( rc, -1, lpCalDataA, "2029", NULL, "A version Use CP ACP, ITWODIGITYEARMAX", &NumErrors );
//
// Make sure the A and W versions set the same error value.
//
SetLastError( 0 ); rc = GetCalendarInfoA( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalDataA, -1, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A and W error returns same - A version", &NumErrors );
SetLastError( 0 ); rc = GetCalendarInfoW( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX, lpCalData, -1, NULL ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "A and W error returns same - W version", &NumErrors );
//
// Test Return Number flag.
//
// Variation 1 - RETURN_NUMBER
rc = GetCalendarInfoA( Locale, CAL_GREGORIAN, CAL_ITWODIGITYEARMAX | CAL_RETURN_NUMBER, NULL, 0, &dwValue ); CheckReturnValidInt( rc, 4, dwValue, 2029, "A Version Return_Number - two digit year max", &NumErrors );
//
// Try all INT flags with CAL_RETURN_NUMBER flag.
//
for (ctr = 0; ctr < NUM_CAL_INT_FLAGS; ctr++) { rc = GetCalendarInfoA( Locale, CAL_GREGORIAN, pCalIntFlag[ctr] | CAL_RETURN_NUMBER, NULL, 0, &dwValue ); CheckReturnValidInt( rc, 4, dwValue, pCalInt[ctr], "A Version Calendar Int Flag", &NumErrors ); }
//
// Return total number of errors found.
//
return (NumErrors); }
|