mirror of https://github.com/tongzx/nt5src
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.
1341 lines
40 KiB
1341 lines
40 KiB
/*++
|
|
|
|
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);
|
|
}
|