ICU-10458 Add more data driven tests for parsing currency.

X-SVN-Rev: 37508
This commit is contained in:
Travis Keep 2015-06-09 18:02:40 +00:00
parent 9672f10d99
commit 68597cddb7
4 changed files with 350 additions and 0 deletions

View file

@ -721,6 +721,13 @@ parseNoExponent parse output breaks
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
@ -782,4 +789,297 @@ NaN 0.0 other
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

View file

@ -66,6 +66,16 @@ public class DataDrivenNumberFormatTestSuite extends TestFmwk {
return null;
}
/**
* Runs a single parse currency test. On success, returns null.
* On failure, returns the error. This implementation just returns null.
* Subclasses should override.
* @param tuple contains the parameters of the format test.
*/
public String parseCurrency(NumberFormatTestTuple tuple) {
return null;
}
/**
* Runs a single select test. On success, returns null.
* On failure, returns the error. This implementation just returns null.
@ -304,6 +314,11 @@ public class DataDrivenNumberFormatTestSuite extends TestFmwk {
if (errorMessage != null) {
result.append(errorMessage);
}
} else if (tuple.parse != null && tuple.output != null && tuple.outputCurrency != null) {
String errorMessage = codeUnderTest.parseCurrency(tuple);
if (errorMessage != null) {
result.append(errorMessage);
}
} else if (tuple.parse != null && tuple.output != null) {
String errorMessage = codeUnderTest.parse(tuple);
if (errorMessage != null) {

View file

@ -114,6 +114,33 @@ public class NumberFormatTest extends com.ibm.icu.dev.test.TestFmwk {
}
return null;
}
@Override
public String parseCurrency(NumberFormatTestTuple tuple) {
DecimalFormat fmt = newDecimalFormat(tuple);
ParsePosition ppos = new ParsePosition(0);
CurrencyAmount currAmt = fmt.parseCurrency(tuple.parse, ppos);
if (ppos.getIndex() == 0) {
if (!tuple.output.equals("fail")) {
return "Parse error expected.";
}
return null;
}
if (tuple.output.equals("fail")) {
return "Parse succeeded: "+currAmt+", but was expected to fail.";
}
Number expected = toNumber(tuple.output);
Number actual = currAmt.getNumber();
// number types cannot be compared, this is the best we can do.
if (expected.doubleValue() != (actual.doubleValue())) {
return "Expected: " + expected + ", got: " + actual;
}
if (!tuple.outputCurrency.equals(currAmt.getCurrency().toString())) {
return "Expected currency: " + tuple.outputCurrency + ", got: " + currAmt.getCurrency();
}
return null;
}
/**
* @param tuple
@ -292,6 +319,8 @@ public class NumberFormatTest extends com.ibm.icu.dev.test.TestFmwk {
}
return null;
}
/**
* @param tuple

View file

@ -116,6 +116,7 @@ public class NumberFormatTestTuple {
public Integer parseIntegerOnly = null;
public Integer decimalPatternMatchRequired = null;
public Integer parseNoExponent = null;
public String outputCurrency = null;
@ -219,6 +220,7 @@ public class NumberFormatTestTuple {
"parseIntegerOnly",
"decimalPatternMatchRequired",
"parseNoExponent",
"outputCurrency"
};
static {
@ -413,6 +415,10 @@ public class NumberFormatTestTuple {
parseNoExponent = Integer.valueOf(value);
}
public void setOutputCurrency(String value) {
outputCurrency = value;
}
// end field setters.
// start of field clearers