windows-nt/Source/XPSP1/NT/base/win32/winnls/test/nlstest/gtftest.c
2020-09-26 16:20:57 +08:00

1342 lines
40 KiB
C

/*++
Copyright (c) 1991-1999, Microsoft Corporation All rights reserved.
Module Name:
gtftest.c
Abstract:
Test module for NLS API GetTimeFormat.
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:
04-30-93 JulieB Created.
--*/
//
// Include Files.
//
#include "nlstest.h"
//
// Constant Declarations.
//
#define BUFSIZE 50 // buffer size in wide chars
#define GTF_INVALID_FLAGS ((DWORD)(~(LOCALE_NOUSEROVERRIDE | \
TIME_NOMINUTESORSECONDS | \
TIME_NOSECONDS | \
TIME_NOTIMEMARKER | \
TIME_FORCE24HOURFORMAT)))
#define ENGLISH_US L"3:45:25 AM"
#define CZECH L"3:45:25"
#define DANISH L"03.45.25"
#define US_NOMINSEC L"3 AM"
#define US_NOSEC L"3:45 AM"
#define US_NOTM L"3:45:25"
#define US_NOTM_NOMINSEC L"3"
#define US_NOTM_NOSEC L"3:45"
#define CZECH_NOMINSEC L"3"
#define CZECH_NOSEC L"3:45"
#define CZECH_NOTM L"3:45:25"
#define CZECH_NOTM_NOMINSEC L"3"
#define CZECH_NOTM_NOSEC L"3:45"
#define US_24HR L"3:45:25 AM"
#define US_24HR_2 L"15:45:25 PM"
#define CZECH_24HR L"3:45:25"
#define CZECH_24HR_2 L"15:45:25"
//
// Global Variables.
//
LCID Locale;
SYSTEMTIME SysTime;
SYSTEMTIME SysTime2;
WCHAR lpTimeStr[BUFSIZE];
//
// Time format buffers must be in line with the pAllLocales global
// buffer.
//
LPWSTR pTimeAM[] =
{
L"03:45:25", // 0x0402
L"\x4e0a\x5348 03:45:25", // 0x0404
L"3:45:25", // 0x0804
L"3:45:25", // 0x0c04
L"AM 3:45:25", // 0x1004
L"3:45:25", // 0x0405
L"03:45:25", // 0x0406
L"03:45:25", // 0x0407
L"03:45:25", // 0x0807
L"03:45:25", // 0x0c07
L"3:45:25 \x03c0\x03bc", // 0x0408
L"3:45:25 AM", // 0x0409
L"03:45:25", // 0x0809
L"3:45:25 AM", // 0x0c09
L"3:45:25 AM", // 0x1009
L"3:45:25 a.m.", // 0x1409
L"03:45:25", // 0x1809
L"3:45:25", // 0x040a
L"03:45:25 a.m.", // 0x080a
L"3:45:25", // 0x0c0a
L"3:45:25", // 0x040b
L"03:45:25", // 0x040c
L"3:45:25", // 0x080c
L"03:45:25", // 0x0c0c
L"03:45:25", // 0x100c
L"3:45:25", // 0x040e
L"03:45:25", // 0x040f
L"3.45.25", // 0x0410
L"03:45:25", // 0x0810
L"3:45:25", // 0x0411
L"\xc624\xc804 3:45:25", // 0x0412
L"3:45:25", // 0x0413
L"3:45:25", // 0x0813
L"03:45:25", // 0x0414
L"03:45:25", // 0x0814
L"03:45:25", // 0x0415
L"03:45:25", // 0x0416
L"3:45:25", // 0x0816
L"03:45:25", // 0x0418
L"3:45:25", // 0x0419
L"3:45:25", // 0x041a
L"3:45:25", // 0x041b
L"03:45:25", // 0x041d
L"03:45:25", // 0x041f
L"3:45:25" // 0x0424
};
LPWSTR pTimePM[] =
{
L"15:45:25", // 0x0402
L"\x4e0b\x5348 03:45:25", // 0x0404
L"15:45:25", // 0x0804
L"15:45:25", // 0x0c04
L"PM 3:45:25", // 0x1004
L"15:45:25", // 0x0405
L"15:45:25", // 0x0406
L"15:45:25", // 0x0407
L"15:45:25", // 0x0807
L"15:45:25", // 0x0c07
L"3:45:25 \x03bc\x03bc", // 0x0408
L"3:45:25 PM", // 0x0409
L"15:45:25", // 0x0809
L"3:45:25 PM", // 0x0c09
L"3:45:25 PM", // 0x1009
L"3:45:25 p.m.", // 0x1409
L"15:45:25", // 0x1809
L"15:45:25", // 0x040a
L"03:45:25 p.m.", // 0x080a
L"15:45:25", // 0x0c0a
L"15:45:25", // 0x040b
L"15:45:25", // 0x040c
L"15:45:25", // 0x080c
L"15:45:25", // 0x0c0c
L"15:45:25", // 0x100c
L"15:45:25", // 0x040e
L"15:45:25", // 0x040f
L"15.45.25", // 0x0410
L"15:45:25", // 0x0810
L"15:45:25", // 0x0411
L"\xc624\xd6c4 3:45:25", // 0x0412
L"15:45:25", // 0x0413
L"15:45:25", // 0x0813
L"15:45:25", // 0x0414
L"15:45:25", // 0x0814
L"15:45:25", // 0x0415
L"15:45:25", // 0x0416
L"15:45:25", // 0x0816
L"15:45:25", // 0x0418
L"15:45:25", // 0x0419
L"15:45:25", // 0x041a
L"15:45:25", // 0x041b
L"15:45:25", // 0x041d
L"15:45:25", // 0x041f
L"15:45:25" // 0x0424
};
//
// Forward Declarations.
//
BOOL
InitGetTimeFormat();
int
GTF_BadParamCheck();
int
GTF_NormalCase();
int
GTF_Ansi();
////////////////////////////////////////////////////////////////////////////
//
// TestGetTimeFormat
//
// Test routine for GetTimeFormatW API.
//
// 04-30-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int TestGetTimeFormat()
{
int ErrCount = 0; // error count
//
// Print out what's being done.
//
printf("\n\nTESTING GetTimeFormatW...\n\n");
//
// Initialize global variables.
//
if (!InitGetTimeFormat())
{
printf("\nABORTED TestGetTimeFormat: Could not Initialize.\n");
return (1);
}
//
// Test bad parameters.
//
ErrCount += GTF_BadParamCheck();
//
// Test normal cases.
//
ErrCount += GTF_NormalCase();
//
// Test Ansi version.
//
ErrCount += GTF_Ansi();
//
// Print out result.
//
printf("\nGetTimeFormatW: ERRORS = %d\n", ErrCount);
//
// Return total number of errors found.
//
return (ErrCount);
}
////////////////////////////////////////////////////////////////////////////
//
// InitGetTimeFormat
//
// This routine initializes the global variables. If no errors were
// encountered, then it returns TRUE. Otherwise, it returns FALSE.
//
// 04-30-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
BOOL InitGetTimeFormat()
{
//
// Make a Locale.
//
Locale = MAKELCID(0x0409, 0);
//
// Initialize the system time.
//
SysTime.wYear = 1993;
SysTime.wMonth = 5;
SysTime.wDayOfWeek = 6;
SysTime.wDay = 1;
SysTime.wHour = 3;
SysTime.wMinute = 45;
SysTime.wSecond = 25;
SysTime.wMilliseconds = 13;
SysTime2.wYear = 1993;
SysTime2.wMonth = 5;
SysTime2.wDayOfWeek = 6;
SysTime2.wDay = 1;
SysTime2.wHour = 15;
SysTime2.wMinute = 45;
SysTime2.wSecond = 25;
SysTime2.wMilliseconds = 13;
//
// Return success.
//
return (TRUE);
}
////////////////////////////////////////////////////////////////////////////
//
// GTF_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.
//
// 04-30-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GTF_BadParamCheck()
{
int NumErrors = 0; // error count - to be returned
int rc; // return code
SYSTEMTIME MyTime; // structure to hold custom time
//
// Bad Locale.
//
// Variation 1 - Bad Locale
rc = GetTimeFormatW( (LCID)333,
0,
NULL,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_PARAMETER,
"Bad Locale",
&NumErrors );
//
// Null Pointers.
//
// Variation 1 - lpTimeStr = NULL
rc = GetTimeFormatW( Locale,
0,
NULL,
NULL,
NULL,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_PARAMETER,
"lpTimeStr NULL",
&NumErrors );
//
// Bad Count.
//
// Variation 1 - cchTime < 0
rc = GetTimeFormatW( Locale,
0,
NULL,
NULL,
lpTimeStr,
-1 );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_PARAMETER,
"cchTime < 0",
&NumErrors );
//
// Invalid Flag.
//
// Variation 1 - LCType = invalid
rc = GetTimeFormatW( Locale,
GTF_INVALID_FLAGS,
NULL,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_FLAGS,
"Flag invalid",
&NumErrors );
// Variation 2 - lpFormat and NoUserOverride
rc = GetTimeFormatW( Locale,
LOCALE_NOUSEROVERRIDE,
NULL,
L"tt hh:mm:ss",
lpTimeStr,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_FLAGS,
"lpFormat and NoUserOverride",
&NumErrors );
// Variation 3 - Use CP ACP, lpFormat and NoUserOverride
rc = GetTimeFormatW( Locale,
LOCALE_USE_CP_ACP | LOCALE_NOUSEROVERRIDE,
NULL,
L"tt hh:mm:ss",
lpTimeStr,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_FLAGS,
"Use CP ACP, lpFormat and NoUserOverride",
&NumErrors );
//
// Buffer Too Small.
//
// Variation 1 - cchTime = too small
rc = GetTimeFormatW( Locale,
0,
NULL,
NULL,
lpTimeStr,
2 );
CheckReturnBadParam( rc,
0,
ERROR_INSUFFICIENT_BUFFER,
"cchTime too small",
&NumErrors );
//
// Bad time passed in.
//
// Variation 1 - bad wHour
MyTime.wYear = 1993;
MyTime.wMonth = 5;
MyTime.wDayOfWeek = 6;
MyTime.wDay = 1;
MyTime.wHour = 24;
MyTime.wMinute = 45;
MyTime.wSecond = 25;
MyTime.wMilliseconds = 13;
rc = GetTimeFormatW( Locale,
0,
&MyTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_PARAMETER,
"bad wHour",
&NumErrors );
// Variation 2 - bad wMinute
MyTime.wYear = 1993;
MyTime.wMonth = 5;
MyTime.wDayOfWeek = 6;
MyTime.wDay = 1;
MyTime.wHour = 15;
MyTime.wMinute = 60;
MyTime.wSecond = 25;
MyTime.wMilliseconds = 13;
rc = GetTimeFormatW( Locale,
0,
&MyTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_PARAMETER,
"bad wMinute",
&NumErrors );
// Variation 3 - bad wSecond
MyTime.wYear = 1993;
MyTime.wMonth = 5;
MyTime.wDayOfWeek = 6;
MyTime.wDay = 1;
MyTime.wHour = 15;
MyTime.wMinute = 45;
MyTime.wSecond = 60;
MyTime.wMilliseconds = 13;
rc = GetTimeFormatW( Locale,
0,
&MyTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_PARAMETER,
"bad wSecond",
&NumErrors );
// Variation 4 - bad wMilliseconds
MyTime.wYear = 1993;
MyTime.wMonth = 5;
MyTime.wDayOfWeek = 6;
MyTime.wDay = 1;
MyTime.wHour = 15;
MyTime.wMinute = 45;
MyTime.wSecond = 25;
MyTime.wMilliseconds = 1000;
rc = GetTimeFormatW( Locale,
0,
&MyTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnBadParam( rc,
0,
ERROR_INVALID_PARAMETER,
"bad wMilliseconds",
&NumErrors );
//
// Return total number of errors found.
//
return (NumErrors);
}
////////////////////////////////////////////////////////////////////////////
//
// GTF_NormalCase
//
// This routine tests the normal cases of the API routine.
//
// 04-30-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GTF_NormalCase()
{
int NumErrors = 0; // error count - to be returned
int rc; // return code
SYSTEMTIME MyTime; // structure to hold custom time
int ctr; // loop counter
#ifdef PERF
DbgBreakPoint();
#endif
//
// Locales.
//
// Variation 1 - System Default Locale
rc = GetTimeFormatW( LOCALE_SYSTEM_DEFAULT,
0,
NULL,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnEqual( rc,
0,
"system default locale",
&NumErrors );
// Variation 2 - Current User Locale
rc = GetTimeFormatW( LOCALE_USER_DEFAULT,
0,
NULL,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnEqual( rc,
0,
"current user locale",
&NumErrors );
//
// Language Neutral.
//
// Variation 1 - neutral
rc = GetTimeFormatW( 0x0000,
0,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
ENGLISH_US,
"neutral locale",
&NumErrors );
// Variation 2 - sys default
rc = GetTimeFormatW( 0x0400,
0,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
ENGLISH_US,
"sys default locale",
&NumErrors );
// Variation 3 - user default
rc = GetTimeFormatW( 0x0800,
0,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
ENGLISH_US,
"user default locale",
&NumErrors );
// Variation 4 - sub lang neutral US
rc = GetTimeFormatW( 0x0009,
0,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
ENGLISH_US,
"sub lang neutral US",
&NumErrors );
// Variation 5 - sub lang neutral Czech
rc = GetTimeFormatW( 0x0005,
0,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH,
"sub lang neutral Czech",
&NumErrors );
//
// Use CP ACP.
//
// Variation 1 - Use CP ACP, System Default Locale
rc = GetTimeFormatW( LOCALE_SYSTEM_DEFAULT,
LOCALE_USE_CP_ACP,
NULL,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnEqual( rc,
0,
"Use CP ACP, system default locale",
&NumErrors );
//
// cchTime.
//
// Variation 1 - cchTime = size of lpTimeStr buffer
rc = GetTimeFormatW( Locale,
0,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
ENGLISH_US,
"cchTime = bufsize",
&NumErrors );
// Variation 2 - cchTime = 0
lpTimeStr[0] = 0x0000;
rc = GetTimeFormatW( Locale,
0,
&SysTime,
NULL,
lpTimeStr,
0 );
CheckReturnValidW( rc,
-1,
NULL,
ENGLISH_US,
"cchTime zero",
&NumErrors );
// Variation 3 - cchTime = 0, lpTimeStr = NULL
rc = GetTimeFormatW( Locale,
0,
&SysTime,
NULL,
NULL,
0 );
CheckReturnValidW( rc,
-1,
NULL,
ENGLISH_US,
"cchTime (NULL ptr)",
&NumErrors );
//
// lpFormat.
//
// Variation 1 - AM/PM
rc = GetTimeFormatW( 0x0409,
0,
&SysTime,
L"tt hh:mm:ss",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"AM 03:45:25",
"lpFormat AM/PM (tt hh:mm:ss)",
&NumErrors );
// Variation 2 - AM/PM
rc = GetTimeFormatW( 0x0409,
TIME_NOTIMEMARKER,
&SysTime,
L"tt hh:mm:ss",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"03:45:25",
"lpFormat NoTimeMarker (tt hh:mm:ss)",
&NumErrors );
// Variation 3 - AM/PM
rc = GetTimeFormatW( 0x0409,
TIME_NOTIMEMARKER | TIME_NOSECONDS,
&SysTime,
L"tt hh:mm:ss",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"03:45",
"lpFormat NoTimeMarker, NoSeconds (tt hh:mm:ss)",
&NumErrors );
// Variation 4 - AM/PM
rc = GetTimeFormatW( 0x0409,
TIME_NOTIMEMARKER | TIME_NOMINUTESORSECONDS,
&SysTime,
L"tt hh:mm:ss",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"03",
"lpFormat NoTimeMarker, NoMinutesOrSeconds (tt hh:mm:ss)",
&NumErrors );
// Variation 5 - AM/PM
rc = GetTimeFormatW( 0x0409,
TIME_NOMINUTESORSECONDS,
&SysTime,
L"tt hh:mm:ss",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"AM 03",
"lpFormat NoMinutesOrSeconds (tt hh:mm:ss)",
&NumErrors );
// Variation 6 - Extra h, m, s
rc = GetTimeFormatW( 0x0409,
0,
&SysTime,
L"hhh:mmm:sss",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"03:45:25",
"lpFormat (hhh:mmm:sss)",
&NumErrors );
// Variation 7 - Extra H, m, s
rc = GetTimeFormatW( 0x0409,
0,
&SysTime2,
L"HHH:mmm:sss",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"15:45:25",
"lpFormat (HHH:mmm:sss)",
&NumErrors );
// Variation 8 - h:m:s
MyTime.wHour = 15;
MyTime.wMinute = 4;
MyTime.wSecond = 5;
MyTime.wMilliseconds = 13;
rc = GetTimeFormatW( 0x0409,
0,
&MyTime,
L"h:m:s",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"3:4:5",
"lpFormat (h:m:s)",
&NumErrors );
// Variation 9 - H:m:s
MyTime.wHour = 15;
MyTime.wMinute = 4;
MyTime.wSecond = 5;
MyTime.wMilliseconds = 13;
rc = GetTimeFormatW( 0x0409,
0,
&MyTime,
L"H:m:s",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"15:4:5",
"lpFormat (H:m:s)",
&NumErrors );
// Variation 10 - single quote
MyTime.wHour = 15;
MyTime.wMinute = 4;
MyTime.wSecond = 5;
MyTime.wMilliseconds = 13;
rc = GetTimeFormatW( 0x0409,
0,
&MyTime,
L"h 'oclock'",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"3 oclock",
"lpFormat (h 'oclock')",
&NumErrors );
// Variation 11 - single quote
MyTime.wHour = 15;
MyTime.wMinute = 4;
MyTime.wSecond = 5;
MyTime.wMilliseconds = 13;
rc = GetTimeFormatW( 0x0409,
0,
&MyTime,
L"h 'o''clock' tt",
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
L"3 o'clock PM",
"lpFormat (h 'o''clock' tt)",
&NumErrors );
//
// Flag values.
//
// Variation 1 - NOUSEROVERRIDE
rc = GetTimeFormatW( Locale,
LOCALE_NOUSEROVERRIDE,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
ENGLISH_US,
"NoUserOverride",
&NumErrors );
// Variation 2 - US NOMINUTESORSECONDS
rc = GetTimeFormatW( Locale,
TIME_NOMINUTESORSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_NOMINSEC,
"US NoMinutesOrSeconds",
&NumErrors );
// Variation 3 - US NOSECONDS
rc = GetTimeFormatW( Locale,
TIME_NOSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_NOSEC,
"US NoSeconds",
&NumErrors );
// Variation 4 - US NOMINUTESORSECONDS and NOSECONDS
rc = GetTimeFormatW( Locale,
TIME_NOMINUTESORSECONDS | TIME_NOSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_NOMINSEC,
"US NoMinutesOrSeconds, NoSeconds",
&NumErrors );
// Variation 5 - US NOTIMEMARKER
rc = GetTimeFormatW( Locale,
TIME_NOTIMEMARKER,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_NOTM,
"US NoTimeMarker",
&NumErrors );
// Variation 6 - US NOTIMEMARKER and NOMINUTESORSECONDS
rc = GetTimeFormatW( Locale,
TIME_NOTIMEMARKER | TIME_NOMINUTESORSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_NOTM_NOMINSEC,
"US NoTimeMarker, NoMinutesOrSeconds",
&NumErrors );
// Variation 7 - US NOTIMEMARKER and NOSECONDS
rc = GetTimeFormatW( Locale,
TIME_NOTIMEMARKER | TIME_NOSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_NOTM_NOSEC,
"US NoTimeMarker, NoSeconds",
&NumErrors );
// Variation 8 - US NOTIMEMARKER and NOMINUTESORSECONDS and NOSECONDS
rc = GetTimeFormatW( Locale,
TIME_NOTIMEMARKER | TIME_NOMINUTESORSECONDS | TIME_NOSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_NOTM_NOMINSEC,
"US NoTimeMarker, NoMinutesOrSeconds, NoSeconds",
&NumErrors );
// Variation 9 - CZECH NOMINUTESORSECONDS
rc = GetTimeFormatW( 0x0405,
TIME_NOMINUTESORSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_NOMINSEC,
"Czech NoMinutesOrSeconds",
&NumErrors );
// Variation 10 - CZECH NOSECONDS
rc = GetTimeFormatW( 0x0405,
TIME_NOSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_NOSEC,
"Czech NoSeconds",
&NumErrors );
// Variation 11 - CZECH NOMINUTESORSECONDS and NOSECONDS
rc = GetTimeFormatW( 0x0405,
TIME_NOMINUTESORSECONDS | TIME_NOSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_NOMINSEC,
"Czech NoMinutesOrSeconds, NoSeconds",
&NumErrors );
// Variation 12 - CZECH NOTIMEMARKER
rc = GetTimeFormatW( 0x0405,
TIME_NOTIMEMARKER,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_NOTM,
"Czech NoTimeMarker",
&NumErrors );
// Variation 13 - CZECH NOTIMEMARKER and NOMINUTESORSECONDS
rc = GetTimeFormatW( 0x0405,
TIME_NOTIMEMARKER | TIME_NOMINUTESORSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_NOTM_NOMINSEC,
"Czech NoTimeMarker, NoMinutesOrSeconds",
&NumErrors );
// Variation 14 - CZECH NOTIMEMARKER and NOSECONDS
rc = GetTimeFormatW( 0x0405,
TIME_NOTIMEMARKER | TIME_NOSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_NOTM_NOSEC,
"Czech NoTimeMarker, NoSeconds",
&NumErrors );
// Variation 15 - CZECH NOTIMEMARKER and NOMINUTESORSECONDS and NOSECONDS
rc = GetTimeFormatW( 0x0405,
TIME_NOTIMEMARKER | TIME_NOMINUTESORSECONDS | TIME_NOSECONDS,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_NOTM_NOMINSEC,
"Czech NoTimeMarker, NoMinutesOrSeconds, NoSeconds",
&NumErrors );
// Variation 16 - US FORCE24HOURFORMAT
rc = GetTimeFormatW( Locale,
TIME_FORCE24HOURFORMAT,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_24HR,
"US Force24HourFormat 1",
&NumErrors );
// Variation 17 - US FORCE24HOURFORMAT
rc = GetTimeFormatW( Locale,
TIME_FORCE24HOURFORMAT,
&SysTime2,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
US_24HR_2,
"US Force24HourFormat 2",
&NumErrors );
// Variation 18 - CZECH FORCE24HOURFORMAT
rc = GetTimeFormatW( 0x0405,
TIME_FORCE24HOURFORMAT,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_24HR,
"Czech Force24HourFormat",
&NumErrors );
// Variation 19 - CZECH FORCE24HOURFORMAT
rc = GetTimeFormatW( 0x0405,
TIME_FORCE24HOURFORMAT,
&SysTime2,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
lpTimeStr,
CZECH_24HR_2,
"Czech Force24HourFormat 2",
&NumErrors );
//
// Test all locales - 3:45:25 AM
//
for (ctr = 0; ctr < NumLocales; ctr++)
{
rc = GetTimeFormatW( pAllLocales[ctr],
0,
&SysTime,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidLoopW( rc,
-1,
lpTimeStr,
pTimeAM[ctr],
"Time AM",
pAllLocales[ctr],
&NumErrors );
}
//
// Test all locales - 3:45:25 PM
//
for (ctr = 0; ctr < NumLocales; ctr++)
{
rc = GetTimeFormatW( pAllLocales[ctr],
0,
&SysTime2,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidLoopW( rc,
-1,
lpTimeStr,
pTimePM[ctr],
"Time PM",
pAllLocales[ctr],
&NumErrors );
}
//
// System Time.
//
// NOTE: For this test, must use a locale that has the same length
// for both the AM and PM, since I don't check if the test
// is run in the AM or PM.
//
// Variation 1 - Danish system time
rc = GetTimeFormatW( 0x0406,
0,
NULL,
NULL,
lpTimeStr,
BUFSIZE );
CheckReturnValidW( rc,
-1,
NULL,
DANISH,
"Danish System Time",
&NumErrors );
//
// Return total number of errors found.
//
return (NumErrors);
}
////////////////////////////////////////////////////////////////////////////
//
// GTF_Ansi
//
// This routine tests the Ansi version of the API routine.
//
// 04-30-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GTF_Ansi()
{
int NumErrors = 0; // error count - to be returned
int rc; // return code
SYSTEMTIME MyTime; // structure to hold custom time
BYTE pTimeStrA[BUFSIZE]; // ptr to time string
MyTime.wYear = 1993;
MyTime.wMonth = 5;
MyTime.wDayOfWeek = 6;
MyTime.wDay = 1;
MyTime.wHour = 15;
MyTime.wMinute = 4;
MyTime.wSecond = 5;
MyTime.wMilliseconds = 13;
//
// GetTimeFormatA
//
// Variation 1 - AM/PM
rc = GetTimeFormatA( 0x0409,
0,
&MyTime,
"tt hh:mm:ss",
pTimeStrA,
BUFSIZE );
CheckReturnValidA( rc,
-1,
pTimeStrA,
"PM 03:04:05",
NULL,
"A version (tt hh:mm:ss)",
&NumErrors );
// Variation 2 - AM/PM (no dest)
rc = GetTimeFormatA( 0x0409,
0,
&MyTime,
"tt hh:mm:ss",
NULL,
0 );
CheckReturnValidA( rc,
-1,
NULL,
"PM 03:04:05",
NULL,
"A version (tt hh:mm:ss), no Dest",
&NumErrors );
//
// Use CP ACP.
//
// Variation 1 - Use CP ACP, AM/PM
rc = GetTimeFormatA( 0x0409,
LOCALE_USE_CP_ACP,
&MyTime,
"tt hh:mm:ss",
pTimeStrA,
BUFSIZE );
CheckReturnValidA( rc,
-1,
pTimeStrA,
"PM 03:04:05",
NULL,
"A version Use CP ACP (tt hh:mm:ss)",
&NumErrors );
//
// Return total number of errors found.
//
return (NumErrors);
}