const NumberFormatTestTuple &tuple,
UnicodeString &appendErrorMessage,
UErrorCode &status);
+UBool isParseCurrencyPass(
+ const NumberFormatTestTuple &tuple,
+ UnicodeString &appendErrorMessage,
+ UErrorCode &status);
};
static DigitList &strToDigitList(
return TRUE;
}
+UBool NumberFormatTestDataDriven::isParseCurrencyPass(
+ const NumberFormatTestTuple &tuple,
+ UnicodeString &appendErrorMessage,
+ UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
+ LocalPointer<DecimalFormat> fmtPtr(newDecimalFormat(tuple, status));
+ if (U_FAILURE(status)) {
+ appendErrorMessage.append("Error creating DecimalFormat.");
+ return FALSE;
+ }
+ adjustDecimalFormat(tuple, *fmtPtr, appendErrorMessage);
+ if (appendErrorMessage.length() > 0) {
+ return FALSE;
+ }
+ ParsePosition ppos;
+ LocalPointer<CurrencyAmount> currAmt(
+ fmtPtr->parseCurrency(tuple.parse, ppos));
+ if (ppos.getIndex() == 0) {
+ if (tuple.output != "fail") {
+ appendErrorMessage.append("Parse failed but was expected to succeed.");
+ return FALSE;
+ }
+ return TRUE;
+ }
+ UnicodeString currStr(currAmt->getISOCurrency());
+ Formattable resultFormattable(currAmt->getNumber());
+ UnicodeString resultStr(UnicodeString::fromUTF8(resultFormattable.getDecimalNumber(status)));
+ if (tuple.output == "fail") {
+ appendErrorMessage.append(UnicodeString("Parse succeeded: ") + resultStr + ", but was expected to fail.");
+ return FALSE;
+ }
+ DigitList expected;
+ strToDigitList(tuple.output, expected, status);
+ if (U_FAILURE(status)) {
+ appendErrorMessage.append("Error parsing.");
+ return FALSE;
+ }
+ if (expected != *currAmt->getNumber().getDigitList()) {
+ appendErrorMessage.append(
+ UnicodeString("Expected: ") + tuple.output + ", got: " + resultStr + ". ");
+ return FALSE;
+ }
+ if (currStr != tuple.outputCurrency) {
+ appendErrorMessage.append(UnicodeString(
+ "Expected currency: ") + tuple.outputCurrency + ", got: " + currStr + ". ");
+ return FALSE;
+ }
+ return TRUE;
+}
//#define NUMFMTST_CACHE_DEBUG 1
#include "stdio.h" /* for sprintf */
1 5e2 5 J
1 5.3E2 5.3 JK
+test parse currency fail
+set pattern 0
+set locale en
+begin
+parse output outputCurrency breaks
+// See ticket 11735
+53.45 fail USD J
test parse strange prefix
set locale en
parse output breaks
// C consumes the '9' as a digit and assumes number is negative
// J and JDK bail
-6549K 654 CJK
+// 6549K 654 CJK
// C consumes the '9' as a digit and assumes number is negative
// J and JDK bail
-6549N -654 CJK
+// 6549N -654 CJK
test really strange prefix
set locale en
5.1 0.0 one
5.09 0.0 one
+test parse currency ISO
+set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4
+set locale en_US
+begin
+parse output outputCurrency breaks
+$53.45 53.45 USD
+53.45 USD 53.45 USD
+USD 53.45 53.45 USD J
+53.45USD fail USD
+USD53.45 53.45 USD
+(7.92) USD -7.92 USD
+(7.92) EUR -7.92 EUR
+(7.926) USD -7.926 USD
+(7.926 USD) fail USD
+(USD 7.926) fail USD
+USD (7.926) fail USD
+USD (7.92) fail USD
+(7.92)USD fail USD
+USD(7.92) fail USD
+(8) USD -8 USD
+-8 USD fail USD
+67 USD 67 USD
+53.45$ fail USD
+US Dollars 53.45 53.45 USD J
+53.45 US Dollars 53.45 USD
+US Dollar 53.45 53.45 USD J
+53.45 US Dollar 53.45 USD
+US Dollars53.45 53.45 USD
+53.45US Dollars fail USD
+US Dollar53.45 53.45 USD
+US Dollat53.45 fail USD
+53.45US Dollar fail USD
+US Dollars (53.45) fail USD
+(53.45) US Dollars -53.45 USD
+US Dollar (53.45) fail USD
+(53.45) US Dollar -53.45 USD
+US Dollars(53.45) fail USD
+(53.45)US Dollars fail USD
+US Dollar(53.45) fail USD
+US Dollat(53.45) fail USD
+(53.45)US Dollar fail USD
+
+
+test parse currency ISO negative
+set pattern 0.00 \u00a4\u00a4;-# \u00a4\u00a4
+set locale en_US
+begin
+parse output outputCurrency breaks
+$53.45 53.45 USD
+53.45 USD 53.45 USD
+USD 53.45 53.45 USD J
+53.45USD fail USD
+USD53.45 53.45 USD
+-7.92 USD -7.92 USD
+-7.92 EUR -7.92 EUR
+-7.926 USD -7.926 USD
+USD -7.926 fail USD
+-7.92USD fail USD
+USD-7.92 fail USD
+-8 USD -8 USD
+67 USD 67 USD
+53.45$ fail USD
+US Dollars 53.45 53.45 USD J
+53.45 US Dollars 53.45 USD
+US Dollar 53.45 53.45 USD J
+53.45 US Dollar 53.45 USD
+US Dollars53.45 53.45 USD
+53.45US Dollars fail USD
+US Dollar53.45 53.45 USD
+US Dollat53.45 fail USD
+53.45US Dollar fail USD
+
+
+test parse currency long
+set pattern 0.00 \u00a4\u00a4\u00a4;(#) \u00a4\u00a4\u00a4
+set locale en_US
+begin
+parse output outputCurrency breaks
+$53.45 53.45 USD
+53.45 USD 53.45 USD
+USD 53.45 53.45 USD J
+// See ticket 11735
+53.45USD fail USD J
+USD53.45 53.45 USD
+(7.92) USD -7.92 USD
+(7.926) USD -7.926 USD
+(7.926 USD) fail USD
+(USD 7.926) fail USD
+USD (7.926) fail USD
+USD (7.92) fail USD
+(7.92)USD fail USD
+USD(7.92) fail USD
+(8) USD -8 USD
+// See ticket 11735
+-8 USD fail USD J
+67 USD 67 USD
+// See ticket 11735
+53.45$ fail USD J
+US Dollars 53.45 53.45 USD J
+53.45 US Dollars 53.45 USD
+US Dollar 53.45 53.45 USD J
+53.45 US Dollar 53.45 USD
+US Dollars53.45 53.45 USD
+// See ticket 11735
+53.45US Dollars fail USD J
+US Dollar53.45 53.45 USD
+US Dollat53.45 fail USD
+// See ticket 11735
+53.45US Dollar fail USD J
+
+
+test parse currency short
+set pattern 0.00 \u00a4;(#) \u00a4
+set locale en_US
+begin
+parse output outputCurrency breaks
+$53.45 53.45 USD
+53.45 USD 53.45 USD
+USD 53.45 53.45 USD J
+53.45USD fail USD
+USD53.45 53.45 USD
+(7.92) USD -7.92 USD
+(7.926) USD -7.926 USD
+(7.926 USD) fail USD
+(USD 7.926) fail USD
+USD (7.926) fail USD
+USD (7.92) fail USD
+(7.92)USD fail USD
+USD(7.92) fail USD
+(8) USD -8 USD
+-8 USD fail USD
+67 USD 67 USD
+53.45$ fail USD
+US Dollars 53.45 53.45 USD J
+53.45 US Dollars 53.45 USD
+US Dollar 53.45 53.45 USD J
+53.45 US Dollar 53.45 USD
+US Dollars53.45 53.45 USD
+53.45US Dollars fail USD
+US Dollar53.45 53.45 USD
+US Dollat53.45 fail USD
+53.45US Dollar fail USD
+
+
+test parse currency short prefix
+set pattern \u00a40.00;(\u00a4#)
+set locale en_US
+begin
+parse output outputCurrency breaks
+$53.45 53.45 USD
+53.45 USD fail USD
+USD 53.45 53.45 USD J
+53.45USD fail USD
+USD53.45 53.45 USD
+(7.92) USD fail USD
+(7.926) USD fail USD
+(7.926 USD) fail USD
+(USD 7.926) -7.926 USD J
+USD (7.926) fail USD
+USD (7.92) fail USD
+(7.92)USD fail USD
+USD(7.92) fail USD
+(8) USD fail USD
+-8 USD fail USD
+67 USD fail USD
+53.45$ fail USD
+US Dollars 53.45 53.45 USD J
+53.45 US Dollars 53.45 USD
+US Dollar 53.45 53.45 USD J
+53.45 US Dollar 53.45 USD
+US Dollars53.45 53.45 USD
+53.45US Dollars fail USD
+US Dollar53.45 53.45 USD
+53.45US Dollar fail USD
+
+test format foreign currency
+set locale fa_IR
+begin
+pattern format output breaks
+\u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 # 1235 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 K
+\u00a4\u00a4 0.00;\u00a4\u00a4 -# 1235 IRR \u06F1\u06F2\u06F3\u06F5 K
+\u00a4 0.00;\u00a4 -# 1235 \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 K
+
+test parse foreign currency symbol
+set pattern \u00a4 0.00;\u00a4 -#
+set locale fa_IR
+begin
+parse output outputCurrency
+\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR
+IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR
+IRR 1235 1235 IRR
+\u0631\u06cc\u0627\u0644 1235 1235 IRR
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR
+
+test parse foreign currency ISO
+set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 -#
+set locale fa_IR
+begin
+parse output outputCurrency
+\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR
+IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR
+IRR 1235 1235 IRR
+\u0631\u06cc\u0627\u0644 1235 1235 IRR
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR
+
+test parse foreign currency full
+set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 -#
+set locale fa_IR
+begin
+parse output outputCurrency
+\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR
+IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR
+IRR 1235 1235 IRR
+\u0631\u06cc\u0627\u0644 1235 1235 IRR
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR
+
+test parse currency with foreign symbols symbol english
+set pattern \u00a4 0.00;\u00a4 (#)
+set locale en_US
+begin
+parse output outputCurrency
+EUR 7.82 7.82 EUR
+\u20ac 7.82 7.82 EUR
+Euro 7.82 7.82 EUR
+Euros 7.82 7.82 EUR
+
+test parse currency with foreign symbols ISO english
+set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 (#)
+set locale en_US
+begin
+parse output outputCurrency
+EUR 7.82 7.82 EUR
+\u20ac 7.82 7.82 EUR
+Euro 7.82 7.82 EUR
+Euros 7.82 7.82 EUR
+
+test parse currency with foreign symbols full english
+set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 (#)
+set locale en_US
+begin
+parse output outputCurrency
+EUR 7.82 7.82 EUR
+\u20ac 7.82 7.82 EUR
+Euro 7.82 7.82 EUR
+Euros 7.82 7.82 EUR
+
+test parse currency ISO strict
+set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4
+set locale en_US
+set lenient 0
+begin
+parse output outputCurrency breaks
+$53.45 53.45 USD
+53.45 USD 53.45 USD
+USD 53.45 fail USD
+53.45USD fail USD
+USD53.45 53.45 USD
+(7.92) USD -7.92 USD
+(7.92) EUR -7.92 EUR
+(7.926) USD -7.926 USD
+(7.926 USD) fail USD
+(USD 7.926) fail USD
+USD (7.926) fail USD
+USD (7.92) fail USD
+(7.92)USD fail USD
+USD(7.92) fail USD
+(8) USD -8 USD
+-8 USD fail USD
+67 USD 67 USD
+53.45$ fail USD
+US Dollars 53.45 fail USD
+53.45 US Dollars 53.45 USD
+US Dollar 53.45 fail USD
+53.45 US Dollar 53.45 USD
+US Dollars53.45 53.45 USD
+53.45US Dollars fail USD
+US Dollar53.45 53.45 USD
+US Dollat53.45 fail USD
+53.45US Dollar fail USD
+US Dollars (53.45) fail USD
+(53.45) US Dollars -53.45 USD
+US Dollar (53.45) fail USD
+(53.45) US Dollar -53.45 USD
+US Dollars(53.45) fail USD
+(53.45)US Dollars fail USD
+US Dollar(53.45) fail USD
+US Dollat(53.45) fail USD
+(53.45)US Dollar fail USD
+
+