|
|
/*++
Copyright (c) 1991-1999, Microsoft Corporation All rights reserved.
Module Name:
gcftest.c
Abstract:
Test module for NLS API GetCurrencyFormat.
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:
07-28-93 JulieB Created.
--*/
//
// Include Files.
//
#include "nlstest.h"
//
// Constant Declarations.
//
#define BUFSIZE 500 // buffer size in wide chars
#define GCF_INVALID_FLAGS ((DWORD)(~(LOCALE_NOUSEROVERRIDE)))
#define GCF_ENGLISH_US L"$1,234,567.44"
#define GCF_CZECH L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 K\x010d"
//
// Global Variables.
//
LCID Locale;
LPWSTR pValue; LPWSTR pNegValue;
CURRENCYFMT CurrFmt;
WCHAR lpCurrencyStr[BUFSIZE];
//
// Currency format buffers must be in line with the pAllLocales global
// buffer.
//
LPWSTR pPosCurrency[] = { L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 \x043b\x0432", // 0x0402
L"NT$1,234,567.44", // 0x0404
L"\xffe5\x0031,234,567.44", // 0x0804
L"HK$1,234,567.44", // 0x0c04
L"$1,234,567.44", // 0x1004
L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 K\x010d", // 0x0405
L"kr 1.234.567,44", // 0x0406
L"1.234.567,44 \x20ac", // 0x0407
L"SFr. 1'234'567.44", // 0x0807
L"\x20ac 1.234.567,44", // 0x0c07
L"1.234.567,44 \x20ac", // 0x0408
L"$1,234,567.44", // 0x0409
L"�1,234,567.44", // 0x0809
L"$1,234,567.44", // 0x0c09
L"$1,234,567.44", // 0x1009
L"$1,234,567.44", // 0x1409
L"\x20ac\x0031,234,567.44", // 0x1809
L"1.234.567,44 \x20ac", // 0x040a
L"$1,234,567.44", // 0x080a
L"1.234.567,44 \x20ac", // 0x0c0a
L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 \x20ac", // 0x040b
L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 \x20ac", // 0x040c
L"1.234.567,44 \x20ac", // 0x080c
L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 $", // 0x0c0c
L"SFr. 1'234'567.44", // 0x100c
L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 Ft", // 0x040e
L"1.234.567,44 kr.", // 0x040f
L"\x20ac 1.234.567,44", // 0x0410
L"SFr. 1'234'567.44", // 0x0810
L"\x00a5\x0031,234,567", // 0x0411
L"\x20a9\x0031,234,567", // 0x0412
L"\x20ac 1.234.567,44", // 0x0413
L"1.234.567,44 \x20ac", // 0x0813
L"kr 1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44", // 0x0414
L"kr 1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44", // 0x0814
L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 z\x0142", // 0x0415
L"R$ 1.234.567,44", // 0x0416
L"1.234.567,44 \x20ac", // 0x0816
L"1.234.567,44 lei", // 0x0418
L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44\x0440.", // 0x0419
L"1.234.567,44 kn", // 0x041a
L"1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 Sk", // 0x041b
L"1.234.567,44 kr", // 0x041d
L"1.234.567,44 TL", // 0x041f
L"1.234.567,44 SIT" // 0x0424
};
LPWSTR pNegCurrency[] = { L"-1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 \x043b\x0432", // 0x0402
L"-NT$1,234,567.44", // 0x0404
L"\xffe5-1,234,567.44", // 0x0804
L"(HK$1,234,567.44)", // 0x0c04
L"($1,234,567.44)", // 0x1004
L"-1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 K\x010d", // 0x0405
L"kr -1.234.567,44", // 0x0406
L"-1.234.567,44 \x20ac", // 0x0407
L"SFr.-1'234'567.44", // 0x0807
L"-\x20ac 1.234.567,44", // 0x0c07
L"-1.234.567,44 \x20ac", // 0x0408
L"($1,234,567.44)", // 0x0409
L"-�1,234,567.44", // 0x0809
L"-$1,234,567.44", // 0x0c09
L"-$1,234,567.44", // 0x1009
L"-$1,234,567.44", // 0x1409
L"-\x20ac\x0031,234,567.44", // 0x1809
L"-1.234.567,44 \x20ac", // 0x040a
L"-$1,234,567.44", // 0x080a
L"-1.234.567,44 \x20ac", // 0x0c0a
L"-1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 \x20ac", // 0x040b
L"-1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 \x20ac", // 0x040c
L"-1.234.567,44 \x20ac", // 0x080c
L"(1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44$)", // 0x0c0c
L"SFr.-1'234'567.44", // 0x100c
L"-1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 Ft", // 0x040e
L"-1.234.567,44 kr.", // 0x040f
L"-\x20ac 1.234.567,44", // 0x0410
L"SFr.-1'234'567.44", // 0x0810
L"-\x00a5\x0031,234,567", // 0x0411
L"-\x20a9\x0031,234,567", // 0x0412
L"\x20ac 1.234.567,44-", // 0x0413
L"-1.234.567,44 \x20ac", // 0x0813
L"kr -1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44", // 0x0414
L"kr -1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44", // 0x0814
L"-1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 z\x0142", // 0x0415
L"(R$ 1.234.567,44)", // 0x0416
L"-1.234.567,44 \x20ac", // 0x0816
L"-1.234.567,44 lei", // 0x0418
L"-1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44\x0440.", // 0x0419
L"-1.234.567,44 kn", // 0x041a
L"-1\x00a0\x0032\x0033\x0034\x00a0\x0035\x0036\x0037,44 Sk", // 0x041b
L"-1.234.567,44 kr", // 0x041d
L"-1.234.567,44 TL", // 0x041f
L"-1.234.567,44 SIT" // 0x0424
};
//
// Forward Declarations.
//
BOOL InitGetCurrencyFormat();
int GCF_BadParamCheck();
int GCF_NormalCase();
int GCF_Ansi();
////////////////////////////////////////////////////////////////////////////
//
// TestGetCurrencyFormat
//
// Test routine for GetCurrencyFormatW API.
//
// 07-28-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int TestGetCurrencyFormat() { int ErrCount = 0; // error count
//
// Print out what's being done.
//
printf("\n\nTESTING GetCurrencyFormatW...\n\n");
//
// Initialize global variables.
//
if (!InitGetCurrencyFormat()) { printf("\nABORTED TestGetCurrencyFormat: Could not Initialize.\n"); return (1); }
//
// Test bad parameters.
//
ErrCount += GCF_BadParamCheck();
//
// Test normal cases.
//
ErrCount += GCF_NormalCase();
//
// Test Ansi version.
//
ErrCount += GCF_Ansi();
//
// Print out result.
//
printf("\nGetCurrencyFormatW: ERRORS = %d\n", ErrCount);
//
// Return total number of errors found.
//
return (ErrCount); }
////////////////////////////////////////////////////////////////////////////
//
// InitGetCurrencyFormat
//
// This routine initializes the global variables. If no errors were
// encountered, then it returns TRUE. Otherwise, it returns FALSE.
//
// 07-28-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
BOOL InitGetCurrencyFormat() { //
// Make a Locale.
//
Locale = MAKELCID(0x0409, 0);
//
// Initialize the value.
//
pValue = L"1234567.4444"; pNegValue = L"-1234567.4444";
//
// Initialize the currency format structure.
//
CurrFmt.NumDigits = 3; CurrFmt.LeadingZero = 1; CurrFmt.Grouping = 3; CurrFmt.lpDecimalSep = L"/"; CurrFmt.lpThousandSep = L";"; CurrFmt.lpCurrencySymbol = L"*"; CurrFmt.PositiveOrder = 3; CurrFmt.NegativeOrder = 6;
//
// Return success.
//
return (TRUE); }
////////////////////////////////////////////////////////////////////////////
//
// GCF_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.
//
// 07-28-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GCF_BadParamCheck() { int NumErrors = 0; // error count - to be returned
int rc; // return code
CURRENCYFMT MyCurrFmt; // currency format
//
// Bad Locale.
//
// Variation 1 - Bad Locale
rc = GetCurrencyFormatW( (LCID)333, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "Bad Locale", &NumErrors );
//
// Null Pointers.
//
// Variation 1 - lpCurrencyStr = NULL
rc = GetCurrencyFormatW( Locale, 0, pValue, NULL, NULL, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "lpCurrencyStr NULL", &NumErrors );
// Variation 2 - lpValue = NULL
rc = GetCurrencyFormatW( Locale, 0, NULL, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "lpValue NULL", &NumErrors );
//
// Bad Count.
//
// Variation 1 - cchCurrency < 0
rc = GetCurrencyFormatW( Locale, 0, pValue, NULL, lpCurrencyStr, -1 ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "cchCurrency < 0", &NumErrors );
//
// Invalid Flag.
//
// Variation 1 - dwFlags = invalid
rc = GetCurrencyFormatW( Locale, GCF_INVALID_FLAGS, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "Flag invalid", &NumErrors );
// Variation 2 - lpFormat and NoUserOverride
rc = GetCurrencyFormatW( Locale, LOCALE_NOUSEROVERRIDE, pValue, &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "lpFormat and NoUserOverride", &NumErrors );
// Variation 3 - Use CP ACP, lpFormat and NoUserOverride
rc = GetCurrencyFormatW( Locale, LOCALE_USE_CP_ACP | LOCALE_NOUSEROVERRIDE, pValue, &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_FLAGS, "Use CP ACP, lpFormat and NoUserOverride", &NumErrors );
//
// Buffer Too Small.
//
// Variation 1 - cchCurrency = too small
rc = GetCurrencyFormatW( Locale, 0, pValue, NULL, lpCurrencyStr, 2 ); CheckReturnBadParam( rc, 0, ERROR_INSUFFICIENT_BUFFER, "cchCurrency too small", &NumErrors );
//
// Bad format passed in.
//
// Variation 1 - bad NumDigits
MyCurrFmt.NumDigits = 10; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad NumDigits", &NumErrors );
// Variation 2 - bad LeadingZero
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 2; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad LeadingZero", &NumErrors );
// Variation 3 - bad Grouping
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 10000; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad Grouping", &NumErrors );
// Variation 4 - bad DecimalSep
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = NULL; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad DecimalSep", &NumErrors );
// Variation 5 - bad DecimalSep 2
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"////"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad DecimalSep2", &NumErrors );
// Variation 6 - bad DecimalSep 3
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"6"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad DecimalSep3", &NumErrors );
// Variation 7 - bad ThousandSep
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = NULL; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad ThousandSep", &NumErrors );
// Variation 8 - bad ThousandSep 2
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";;;;"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad ThousandSep2", &NumErrors );
// Variation 9 - bad ThousandSep 3
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L"6"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad ThousandSep3", &NumErrors );
// Variation 10 - bad Currency Symbol
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = NULL; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad Currency Symbol", &NumErrors );
// Variation 11 - bad Currency Symbol 2
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"******"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad Currency Symbol 2", &NumErrors );
// Variation 12 - bad Currency Symbol 3
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*6"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad Currency Symbol 3", &NumErrors );
// Variation 13 - bad Positive Order
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 4; MyCurrFmt.NegativeOrder = 6; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad Positive Order", &NumErrors );
// Variation 14 - bad Negative Order
MyCurrFmt.NumDigits = 3; MyCurrFmt.LeadingZero = 1; MyCurrFmt.Grouping = 3; MyCurrFmt.lpDecimalSep = L"/"; MyCurrFmt.lpThousandSep = L";"; MyCurrFmt.lpCurrencySymbol = L"*"; MyCurrFmt.PositiveOrder = 3; MyCurrFmt.NegativeOrder = 16; rc = GetCurrencyFormatW( Locale, 0, pValue, &MyCurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnBadParam( rc, 0, ERROR_INVALID_PARAMETER, "bad Negative Order", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// GCF_NormalCase
//
// This routine tests the normal cases of the API routine.
//
// 07-28-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GCF_NormalCase() { 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 = GetCurrencyFormatW( LOCALE_SYSTEM_DEFAULT, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "System Default Locale", &NumErrors );
// Variation 2 - Current User Locale
rc = GetCurrencyFormatW( LOCALE_USER_DEFAULT, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "Current User Locale", &NumErrors );
//
// Language Neutral.
//
// Variation 1 - neutral
rc = GetCurrencyFormatW( 0x0000, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "neutral locale", &NumErrors );
// Variation 2 - sys default
rc = GetCurrencyFormatW( 0x0400, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "sys default locale", &NumErrors );
// Variation 3 - user default
rc = GetCurrencyFormatW( 0x0800, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "user default locale", &NumErrors );
// Variation 4 - sub lang neutral US
rc = GetCurrencyFormatW( 0x0009, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "sub lang neutral US", &NumErrors );
// Variation 5 - sub lang neutral Czech
rc = GetCurrencyFormatW( 0x0005, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_CZECH, "sub lang neutral Czech", &NumErrors );
//
// Use CP ACP.
//
// Variation 1 - System Default Locale
rc = GetCurrencyFormatW( LOCALE_SYSTEM_DEFAULT, LOCALE_USE_CP_ACP, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "Use CP ACP, System Default Locale", &NumErrors );
//
// cchCurrency.
//
// Variation 1 - cchCurrency = size of lpCurrencyStr buffer
rc = GetCurrencyFormatW( Locale, 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "cchCurrency = bufsize", &NumErrors );
// Variation 2 - cchCurrency = 0
lpCurrencyStr[0] = 0x0000; rc = GetCurrencyFormatW( Locale, 0, pValue, NULL, lpCurrencyStr, 0 ); CheckReturnValidW( rc, -1, NULL, GCF_ENGLISH_US, "cchCurrency zero", &NumErrors );
// Variation 3 - cchCurrency = 0, lpCurrencyStr = NULL
rc = GetCurrencyFormatW( Locale, 0, pValue, NULL, NULL, 0 ); CheckReturnValidW( rc, -1, NULL, GCF_ENGLISH_US, "cchCurrency (NULL ptr)", &NumErrors );
//
// lpFormat - pValue = 1234567.4444
//
// CurrFmt.NumDigits = 3;
// CurrFmt.LeadingZero = 1;
// CurrFmt.Grouping = 3;
// CurrFmt.lpDecimalSep = L"/";
// CurrFmt.lpThousandSep = L";";
// CurrFmt.lpCurrencySymbol = L"*";
// CurrFmt.PositiveOrder = 3;
// CurrFmt.NegativeOrder = 6;
//
// Variation 1 - lpFormat
rc = GetCurrencyFormatW( 0x0409, 0, pValue, &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"1;234;567/444 *", "lpFormat (1;234;567/444 *)", &NumErrors );
// Variation 2 - lpFormat leading zero
rc = GetCurrencyFormatW( 0x0409, 0, L".4444", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"0/444 *", "lpFormat (0/444 *)", &NumErrors );
// Variation 3 - lpFormat no decimal
rc = GetCurrencyFormatW( 0x0409, 0, L"1234567", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"1;234;567/000 *", "lpFormat (1;234;567/000 *)", &NumErrors );
// Variation 4 - lpFormat
rc = GetCurrencyFormatW( 0x0409, 0, L"-1234567.444", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"1;234;567/444-*", "lpFormat (1;234;567/444-*)", &NumErrors );
// Variation 5 - lpFormat leading zero
rc = GetCurrencyFormatW( 0x0409, 0, L"-.4444", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"0/444-*", "lpFormat (0/444-*)", &NumErrors );
// Variation 6 - lpFormat no decimal
rc = GetCurrencyFormatW( 0x0409, 0, L"-1234567", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"1;234;567/000-*", "lpFormat (1;234;567/000-*)", &NumErrors );
//
// Flag values.
//
// Variation 1 - NOUSEROVERRIDE
rc = GetCurrencyFormatW( Locale, LOCALE_NOUSEROVERRIDE, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, GCF_ENGLISH_US, "NoUserOverride", &NumErrors );
//
// Test all locales - pValue = 1234567.4444
//
for (ctr = 0; ctr < NumLocales; ctr++) { rc = GetCurrencyFormatW( pAllLocales[ctr], 0, pValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidLoopW( rc, -1, lpCurrencyStr, pPosCurrency[ctr], "Pos", pAllLocales[ctr], &NumErrors ); }
//
// Test all locales - pNegValue = -1234567.4444
//
for (ctr = 0; ctr < NumLocales; ctr++) { rc = GetCurrencyFormatW( pAllLocales[ctr], 0, pNegValue, NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidLoopW( rc, -1, lpCurrencyStr, pNegCurrency[ctr], "Neg", pAllLocales[ctr], &NumErrors ); }
//
// Special case checks.
//
// Variation 1 - rounding check
CurrFmt.NumDigits = 3; CurrFmt.LeadingZero = 1; CurrFmt.Grouping = 2; CurrFmt.lpDecimalSep = L"."; CurrFmt.lpThousandSep = L","; CurrFmt.NegativeOrder = 1; CurrFmt.PositiveOrder = 0; CurrFmt.lpCurrencySymbol = L"$";
rc = GetCurrencyFormatW( 0x0409, 0, L"799.9999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"$8,00.000", "rounding ($8,00.000)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"-799.9999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"-$8,00.000", "rounding (-$8,00.000)", &NumErrors );
// Variation 2 - rounding check
CurrFmt.NumDigits = 0 ; CurrFmt.LeadingZero = 1 ; CurrFmt.Grouping = 2 ; CurrFmt.lpDecimalSep = L"." ; CurrFmt.lpThousandSep = L"," ; CurrFmt.NegativeOrder = 1 ; CurrFmt.PositiveOrder = 0 ; CurrFmt.lpCurrencySymbol = L"$" ;
rc = GetCurrencyFormatW( 0x0409, 0, L"9.500", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"$10", "rounding ($10)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"-9.500", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"-$10", "rounding (-$10)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"99.500", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"$1,00", "rounding ($1,00)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"-99.500", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"-$1,00", "rounding (-$1,00)", &NumErrors );
// Variation 3 - grouping check
CurrFmt.NumDigits = 3; CurrFmt.LeadingZero = 1; CurrFmt.Grouping = 32; CurrFmt.lpDecimalSep = L"."; CurrFmt.lpThousandSep = L","; CurrFmt.NegativeOrder = 1; CurrFmt.PositiveOrder = 0; CurrFmt.lpCurrencySymbol = L"$";
rc = GetCurrencyFormatW( 0x0409, 0, L"1234567.999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"$12,34,567.999", "grouping ($12,34,567.999)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"-1234567.999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"-$12,34,567.999", "grouping (-$12,34,567.999)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"9999999.9999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"$1,00,00,000.000", "grouping/rounding ($1,00,00,000.000)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"-9999999.9999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"-$1,00,00,000.000", "grouping/rounding (-$1,00,00,000.000)", &NumErrors );
// Variation 4 - grouping check
CurrFmt.NumDigits = 3; CurrFmt.LeadingZero = 1; CurrFmt.Grouping = 320; CurrFmt.lpDecimalSep = L"."; CurrFmt.lpThousandSep = L","; CurrFmt.NegativeOrder = 1; CurrFmt.PositiveOrder = 0; CurrFmt.lpCurrencySymbol = L"$";
rc = GetCurrencyFormatW( 0x0409, 0, L"123456789.999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"$1234,56,789.999", "grouping ($1234,56,789.999)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"-123456789.999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"-$1234,56,789.999", "grouping (-$1234,56789.999)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"9999999.9999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"$100,00,000.000", "grouping/rounding ($100,00,000.000)", &NumErrors );
rc = GetCurrencyFormatW( 0x0409, 0, L"-9999999.9999", &CurrFmt, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"-$100,00,000.000", "grouping/rounding (-$100,00,000.000)", &NumErrors );
// Variation 5 - large number check
SetLastError(0); rc = GetCurrencyFormat( LOCALE_USER_DEFAULT, 0, L"10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", NULL, lpCurrencyStr, BUFSIZE ); CheckReturnValidW( rc, -1, lpCurrencyStr, L"$10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.00", "big number", &NumErrors ); CheckLastError( 0, "Last Error should be 0 - call should have succeeded", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
////////////////////////////////////////////////////////////////////////////
//
// GCF_Ansi
//
// This routine tests the Ansi version of the API routine.
//
// 07-28-93 JulieB Created.
////////////////////////////////////////////////////////////////////////////
int GCF_Ansi() { int NumErrors = 0; // error count - to be returned
int rc; // return code
BYTE pCurStrA[BUFSIZE]; // ptr to currency string buffer
CURRENCYFMTA CurrFmtA; // currency format structure
//
// GetCurrencyFormatA.
//
// Variation 1 - cchCurrency = size of lpCurrencyStr buffer
rc = GetCurrencyFormatA( Locale, 0, "123456.789", NULL, pCurStrA, BUFSIZE ); CheckReturnValidA( rc, -1, pCurStrA, "$123,456.79", NULL, "A version cchCurrency = bufsize", &NumErrors );
// Variation 2 - cchCurrency = 0
pCurStrA[0] = 0x00; rc = GetCurrencyFormatA( Locale, 0, "123456.789", NULL, pCurStrA, 0 ); CheckReturnValidA( rc, -1, NULL, "$123,456.79", NULL, "A version cchCurrency = bufsize, no Dest", &NumErrors );
// Variation 3 - cchCurrency = 0, lpCurrencyStr = NULL
rc = GetCurrencyFormatA(Locale, 0, "123456.789", NULL, NULL, 0); CheckReturnValidA( rc, -1, NULL, "$123,456.79", NULL, "A version cchCurrency (NULL ptr)", &NumErrors );
//
// Use CP ACP.
//
// Variation 1 - Use CP ACP, cchCurrency = bufsize
rc = GetCurrencyFormatA( Locale, LOCALE_USE_CP_ACP, "123456.789", NULL, pCurStrA, BUFSIZE ); CheckReturnValidA( rc, -1, pCurStrA, "$123,456.79", NULL, "A version Use CP ACP, cchCurrency = bufsize", &NumErrors );
//
// lpFormat - pValue = 1234567.4444
//
CurrFmtA.NumDigits = 3; CurrFmtA.LeadingZero = 1; CurrFmtA.Grouping = 3; CurrFmtA.lpDecimalSep = "/"; CurrFmtA.lpThousandSep = ";"; CurrFmtA.lpCurrencySymbol = "*"; CurrFmtA.PositiveOrder = 3; CurrFmtA.NegativeOrder = 6;
// Variation 1 - lpFormat
rc = GetCurrencyFormatA( 0x0409, 0, "1234567.4444", &CurrFmtA, pCurStrA, BUFSIZE ); CheckReturnValidA( rc, -1, pCurStrA, "1;234;567/444 *", NULL, "A version cchCurrency (NULL ptr)", &NumErrors );
//
// Return total number of errors found.
//
return (NumErrors); }
|