Windows2000/private/windows/winnls/test/nlstest/edftest.c
2020-09-30 17:12:32 +02:00

396 lines
13 KiB
C

/*++
Copyright (c) 1991-1999, Microsoft Corporation All rights reserved.
Module Name:
edftest.c
Abstract:
Test module for NLS API EnumDateFormats.
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:
08-02-93 JulieB Created.
--*/
// Include Files.
#include "nlstest.h"
// Constant Declarations.
#define EDF_INVALID_FLAGS ((DWORD)(~(DATE_SHORTDATE | DATE_LONGDATE | DATE_YEARMONTH)))
#define NUM_SHORT_DATES_ENGLISH 7
#define NUM_LONG_DATES_ENGLISH 4
#define NUM_YEAR_MONTH_ENGLISH 1
#define NUM_SHORT_DATES_JAPAN 22
#define NUM_LONG_DATES_JAPAN 14
#define NUM_YEAR_MONTH_JAPAN 3
// Global Variables.
int DateCtr;
// Forward Declarations.
BOOL InitEnumDateFormats();
int EDF_BadParamCheck();
int EDF_NormalCase();
int EDF_Ansi();
BOOL CALLBACK MyFuncDate(LPWSTR pStr);
BOOL CALLBACK MyFuncDateA(LPSTR pStr);
BOOL CALLBACK MyFuncDateEx(LPWSTR pStr, CALID CalId);
BOOL CALLBACK MyFuncDateExA(LPSTR pStr, CALID CalId);
// Callback functions.
BOOL CALLBACK MyFuncDate(LPWSTR pStr)
{
if (Verbose)
{
while (*pStr)
{
printf((*pStr > 0xff) ? "(0x%x)" : "%wc", *pStr);
pStr++;
}
printf("\n");
}
DateCtr++;
return (TRUE);
}
BOOL CALLBACK MyFuncDateA(LPSTR pStr)
{
if (Verbose)
{
while (*pStr)
{
printf((*pStr > 0xff) ? "(0x%x)" : "%c", *pStr);
pStr++;
}
printf("\n");
}
DateCtr++;
return (TRUE);
}
// Callback functions for EX version.
BOOL CALLBACK MyFuncDateEx(LPWSTR pStr, CALID CalId)
{
if (Verbose)
{
printf("CalId = %d\n", CalId);
while (*pStr)
{
printf((*pStr > 0xff) ? "(0x%x)" : "%wc", *pStr);
pStr++;
}
printf("\n");
}
DateCtr++;
return (TRUE);
}
BOOL CALLBACK MyFuncDateExA(LPSTR pStr, CALID CalId)
{
if (Verbose)
{
printf("CalId = %d\n", CalId);
while (*pStr)
{
printf((*pStr > 0xff) ? "(0x%x)" : "%c", *pStr);
pStr++;
}
printf("\n");
}
DateCtr++;
return (TRUE);
}
// Test routine for EnumDateFormatsW API.
// 08-02-93 JulieB Created.
int TestEnumDateFormats()
{
int ErrCount = 0; // error count
// Print out what's being done.
printf("\n\nTESTING EnumDateFormatsW...\n\n");
// Initialize global variables.
if (!InitEnumDateFormats())
{
printf("\nABORTED TestEnumDateFormats: Could not Initialize.\n");
return (1);
}
ErrCount += EDF_BadParamCheck();// Test bad parameters.
ErrCount += EDF_NormalCase();// Test normal cases.
ErrCount += EDF_Ansi();// Test Ansi version.
printf("\nEnumDateFormatsW: ERRORS = %d\n", ErrCount);// Print out result.
return (ErrCount);// Return total number of errors found.
}
// This routine initializes the global variables. If no errors were
// encountered, then it returns TRUE. Otherwise, it returns FALSE.
// 08-02-93 JulieB Created.
BOOL InitEnumDateFormats()
{
DateCtr = 0;// Initialize date counter.
return (TRUE);// Return success.
}
// 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.
// 08-02-93 JulieB Created.
int EDF_BadParamCheck()
{
int NumErrors = 0; // error count - to be returned
int rc; // return code
// Bad Function.
// Variation 1 - bad function
DateCtr = 0;
rc = EnumDateFormatsW( NULL, 0x0409, DATE_SHORTDATE );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_PARAMETER, "Function invalid", &NumErrors, DateCtr, 0 );
DateCtr = 0;
rc = EnumDateFormatsExW( NULL, 0x0409, DATE_SHORTDATE );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_PARAMETER, "Ex Function invalid", &NumErrors, DateCtr, 0 );
// Bad Locale.
// Variation 1 - bad locale
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, (LCID)333, DATE_SHORTDATE );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_PARAMETER, "Locale invalid", &NumErrors, DateCtr, 0 );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, (LCID)333, DATE_SHORTDATE );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_PARAMETER, "Ex Locale invalid", &NumErrors, DateCtr, 0 );
// Invalid Flag.
// Variation 1 - dwFlags = invalid
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0409, EDF_INVALID_FLAGS );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_FLAGS, "Flag invalid", &NumErrors, DateCtr, 0 );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0409, EDF_INVALID_FLAGS );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_FLAGS, "Ex Flag invalid", &NumErrors, DateCtr, 0 );
// Variation 2 - dwFlags = both invalid
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0409, DATE_SHORTDATE | DATE_LONGDATE );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_FLAGS, "Flag both invalid", &NumErrors, DateCtr, 0 );
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0409, DATE_SHORTDATE | DATE_YEARMONTH );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_FLAGS, "Flag both invalid 2", &NumErrors, DateCtr, 0 );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0409, DATE_SHORTDATE | DATE_LONGDATE );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_FLAGS, "Ex Flag both invalid", &NumErrors, DateCtr, 0 );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0409, DATE_SHORTDATE | DATE_YEARMONTH );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_FLAGS, "Ex Flag both invalid 2", &NumErrors, DateCtr, 0 );
// Variation 3 - dwFlags = 2 invalid and Use CP ACP
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0409, LOCALE_USE_CP_ACP | DATE_SHORTDATE | DATE_LONGDATE );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_FLAGS, "Flag 2 invalid, Use CP ACP", &NumErrors, DateCtr, 0 );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0409, LOCALE_USE_CP_ACP | DATE_SHORTDATE | DATE_LONGDATE );
CheckReturnBadParamEnum( rc, FALSE, ERROR_INVALID_FLAGS, "Ex Flag 2 invalid, Use CP ACP", &NumErrors, DateCtr, 0 );
// Return total number of errors found.
return (NumErrors);
}
// This routine tests the normal cases of the API routine.
// 08-02-93 JulieB Created.
int EDF_NormalCase()
{
int NumErrors = 0; // error count - to be returned
int rc; // return code
if (Verbose)
{
printf("\n---- W version ----\n\n");
}
// Variation 1 - short date
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0409, DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_ENGLISH, "short date English", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0409, DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_ENGLISH, "Ex short date English", &NumErrors );
// Variation 2 - short date
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0411, DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_JAPAN, "short date Japan", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0411, DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_JAPAN, "Ex short date Japan", &NumErrors );
// Variation 3 - long date
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0409, DATE_LONGDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_LONG_DATES_ENGLISH, "long date English", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0409, DATE_LONGDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_LONG_DATES_ENGLISH, "Ex long date English", &NumErrors );
// Variation 4 - long date
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0411, DATE_LONGDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_LONG_DATES_JAPAN, "long date Japan", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0411, DATE_LONGDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_LONG_DATES_JAPAN, "Ex long date Japan", &NumErrors );
// Variation 5 - year month
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0409, DATE_YEARMONTH );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_YEAR_MONTH_ENGLISH, "year month English", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0409, DATE_YEARMONTH );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_YEAR_MONTH_ENGLISH, "Ex year month English", &NumErrors );
// Variation 6 - year month
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0411, DATE_YEARMONTH );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_YEAR_MONTH_JAPAN, "year month Japan", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0411, DATE_YEARMONTH );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_YEAR_MONTH_JAPAN, "Ex year month Japan", &NumErrors );
// Use CP ACP.
// Variation 1 - Use CP ACP
DateCtr = 0;
rc = EnumDateFormatsW( MyFuncDate, 0x0409, LOCALE_USE_CP_ACP | DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_ENGLISH, "Use CP ACP, short date English", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExW( MyFuncDateEx, 0x0409, LOCALE_USE_CP_ACP | DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_ENGLISH, "Ex Use CP ACP, short date English", &NumErrors );
return (NumErrors);// Return total number of errors found.
}
// This routine tests the Ansi version of the API routine.
// 08-02-93 JulieB Created.
int EDF_Ansi()
{
int NumErrors = 0;// error count - to be returned
int rc; // return code
if (Verbose)
{
printf("\n---- A version ----\n\n");
}
// Variation 1 - short date
DateCtr = 0;
rc = EnumDateFormatsA( MyFuncDateA, 0x0409, DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_ENGLISH, "A version short date English", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExA( MyFuncDateExA, 0x0409, DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_ENGLISH, "Ex A version short date English", &NumErrors );
// Variation 2 - short date
DateCtr = 0;
rc = EnumDateFormatsA( MyFuncDateA, 0x0411, DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_JAPAN, "A version short date Japan", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExA( MyFuncDateExA, 0x0411, DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_JAPAN, "Ex A version short date Japan", &NumErrors );
// Variation 3 - long date
DateCtr = 0;
rc = EnumDateFormatsA( MyFuncDateA, 0x0409, DATE_LONGDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_LONG_DATES_ENGLISH, "A version short date English", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExA( MyFuncDateExA, 0x0409, DATE_LONGDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_LONG_DATES_ENGLISH, "Ex A version short date English", &NumErrors );
// Variation 4 - long date
DateCtr = 0;
rc = EnumDateFormatsA( MyFuncDateA, 0x0411, DATE_LONGDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_LONG_DATES_JAPAN, "A version long date Japan", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExA( MyFuncDateExA, 0x0411, DATE_LONGDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_LONG_DATES_JAPAN, "Ex A version long date Japan", &NumErrors );
// Variation 5 - year month
DateCtr = 0;
rc = EnumDateFormatsA( MyFuncDateA, 0x0409, DATE_YEARMONTH );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_YEAR_MONTH_ENGLISH, "A version year month English", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExA( MyFuncDateExA, 0x0409, DATE_YEARMONTH );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_YEAR_MONTH_ENGLISH, "Ex A version year month English", &NumErrors );
// Variation 5 - year month
DateCtr = 0;
rc = EnumDateFormatsA( MyFuncDateA, 0x0411, DATE_YEARMONTH );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_YEAR_MONTH_JAPAN, "A version year month Japan", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExA( MyFuncDateExA, 0x0411, DATE_YEARMONTH );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_YEAR_MONTH_JAPAN, "Ex A version year month Japan", &NumErrors );
// Use CP ACP.
// Variation 1 - Use CP ACP
DateCtr = 0;
rc = EnumDateFormatsA( MyFuncDateA, 0x0409, LOCALE_USE_CP_ACP | DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_ENGLISH, "A version Use CP ACP, short date English", &NumErrors );
DateCtr = 0;
rc = EnumDateFormatsExA( MyFuncDateExA, 0x0409, LOCALE_USE_CP_ACP | DATE_SHORTDATE );
CheckReturnValidEnum( rc, TRUE, DateCtr, NUM_SHORT_DATES_ENGLISH, "Ex A version Use CP ACP, short date English", &NumErrors );
return (NumErrors);// Return total number of errors found.
}