Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: chrome/android/junit/src/org/chromium/chrome/browser/payments/CurrencyStringFormatterTest.java

Issue 2281913002: Currency code exceeding 6 chars will be ellipsized. (Closed)
Patch Set: formatCurrency() Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.payments; 5 package org.chromium.chrome.browser.payments;
6 6
7 import org.junit.Assert; 7 import org.junit.Assert;
8 import org.junit.Test; 8 import org.junit.Test;
9 import org.junit.runner.RunWith; 9 import org.junit.runner.RunWith;
10 import org.junit.runners.Parameterized; 10 import org.junit.runners.Parameterized;
11 import org.junit.runners.Parameterized.Parameters; 11 import org.junit.runners.Parameterized.Parameters;
12 12
13 import java.util.Arrays; 13 import java.util.Arrays;
14 import java.util.Collection; 14 import java.util.Collection;
15 import java.util.Locale; 15 import java.util.Locale;
16 16
17 /** 17 /**
18 * Unit tests for the CurrencyStringFormatter class. 18 * Unit tests for the CurrencyStringFormatter class.
19 */ 19 */
20 @RunWith(Parameterized.class) 20 @RunWith(Parameterized.class)
21 public class CurrencyStringFormatterTest { 21 public class CurrencyStringFormatterTest {
22 /** 22 /**
23 * Unicode non-breaking space. 23 * Unicode non-breaking space.
24 */ 24 */
25 private static final String SPACE = "\u00A0"; 25 private static final String SPACE = "\u00A0";
26 26
27 /**
28 * Unicode for ellipsis.
29 */
30 private static final String ELLIPSIS = "\u2026";
31
27 private enum ExpectedValidity { 32 private enum ExpectedValidity {
33 VALID_CURRENCY,
please use gerrit instead 2016/09/02 17:30:55 This enum covers the three states of validation th
pals 2016/09/06 06:09:00 Done.
28 VALID_AMOUNT, 34 VALID_AMOUNT,
29 INVALID_AMOUNT_CURRENCY_CODE, 35 INVALID_AMOUNT_CURRENCY_CODE,
30 INVALID_AMOUNT_VALUE, 36 INVALID_AMOUNT_VALUE,
31 }; 37 };
32 38
33 @Parameters 39 @Parameters
34 public static Collection<Object[]> data() { 40 public static Collection<Object[]> data() {
35 return Arrays.asList(new Object[][] { 41 return Arrays.asList(new Object[][] {
36 {"55.00", "USD", "en-US", "$55.00", ExpectedValidity.VALID_AMOUNT}, 42 {"55.00", "USD", "en-US", "USD", "$55.00", ExpectedValidity.VALID_AM OUNT},
37 {"55.00", "USD", "en-CA", "$55.00", ExpectedValidity.VALID_AMOUNT}, 43 {"55.00", "USD", "en-CA", "USD", "$55.00", ExpectedValidity.VALID_AM OUNT},
38 {"55.00", "USD", "fr-CA", "$55,00", ExpectedValidity.VALID_AMOUNT}, 44 {"55.00", "USD", "fr-CA", "USD", "$55,00", ExpectedValidity.VALID_AM OUNT},
39 {"55.00", "USD", "fr-FR", "$55,00", ExpectedValidity.VALID_AMOUNT}, 45 {"55.00", "USD", "fr-FR", "USD", "$55,00", ExpectedValidity.VALID_AM OUNT},
40 46
41 {"55.00", "EUR", "en-US", "55.00", ExpectedValidity.VALID_AMOUNT}, 47 {"55.00", "EUR", "en-US", "EUR", "55.00", ExpectedValidity.VALID_AMO UNT},
42 {"55.00", "EUR", "en-CA", "55.00", ExpectedValidity.VALID_AMOUNT}, 48 {"55.00", "EUR", "en-CA", "EUR", "55.00", ExpectedValidity.VALID_AMO UNT},
43 {"55.00", "EUR", "fr-CA", "55,00", ExpectedValidity.VALID_AMOUNT}, 49 {"55.00", "EUR", "fr-CA", "EUR", "55,00", ExpectedValidity.VALID_AMO UNT},
44 {"55.00", "EUR", "fr-FR", "55,00", ExpectedValidity.VALID_AMOUNT}, 50 {"55.00", "EUR", "fr-FR", "EUR", "55,00", ExpectedValidity.VALID_AMO UNT},
45 51
46 {"55.00", "CAD", "en-US", "55.00", ExpectedValidity.VALID_AMOUNT}, 52 {"55.00", "CAD", "en-US", "CAD", "55.00", ExpectedValidity.VALID_AMO UNT},
47 {"55.00", "CAD", "en-CA", "55.00", ExpectedValidity.VALID_AMOUNT}, 53 {"55.00", "CAD", "en-CA", "CAD", "55.00", ExpectedValidity.VALID_AMO UNT},
48 {"55.00", "CAD", "fr-CA", "55,00", ExpectedValidity.VALID_AMOUNT}, 54 {"55.00", "CAD", "fr-CA", "CAD", "55,00", ExpectedValidity.VALID_AMO UNT},
49 {"55.00", "CAD", "fr-FR", "55,00", ExpectedValidity.VALID_AMOUNT}, 55 {"55.00", "CAD", "fr-FR", "CAD", "55,00", ExpectedValidity.VALID_AMO UNT},
50 56
51 {"55.12", "JPY", "ja-JP", "55.12", ExpectedValidity.VALID_AMOUNT}, 57 {"55.12", "JPY", "ja-JP", "JPY", "55.12", ExpectedValidity.VALID_AMO UNT},
52 {"55.00", "JPY", "ja-JP", "55.00", ExpectedValidity.VALID_AMOUNT}, 58 {"55.00", "JPY", "ja-JP", "JPY", "55.00", ExpectedValidity.VALID_AMO UNT},
53 {"55.0", "JPY", "ja-JP", "55.0", ExpectedValidity.VALID_AMOUNT}, 59 {"55.0", "JPY", "ja-JP", "JPY", "55.0", ExpectedValidity.VALID_AMOUN T},
54 {"55", "JPY", "ja-JP", "55", ExpectedValidity.VALID_AMOUNT}, 60 {"55", "JPY", "ja-JP", "JPY", "55", ExpectedValidity.VALID_AMOUNT},
55 61
56 // Unofficial ISO 4217 currency code. 62 // Unofficial ISO 4217 currency code.
57 {"55.00", "BTX", "en-US", "55.00", ExpectedValidity.VALID_AMOUNT}, 63 {"55.00", "BTX", "en-US", "BTX", "55.00", ExpectedValidity.VALID_AMO UNT},
58 {"-55.00", "BTX", "en-US", "-55.00", ExpectedValidity.VALID_AMOUNT}, 64 {"-55.00", "BTX", "en-US", "BTX", "-55.00", ExpectedValidity.VALID_A MOUNT},
59 65
60 {"55.5", "USD", "en-US", "$55.50", ExpectedValidity.VALID_AMOUNT}, 66 {"55.5", "USD", "en-US", "USD", "$55.50", ExpectedValidity.VALID_AMO UNT},
61 {"55", "USD", "en-US", "$55.00", ExpectedValidity.VALID_AMOUNT}, 67 {"55", "USD", "en-US", "USD", "$55.00", ExpectedValidity.VALID_AMOUN T},
62 {"123", "USD", "en-US", "$123.00", ExpectedValidity.VALID_AMOUNT}, 68 {"123", "USD", "en-US", "USD", "$123.00", ExpectedValidity.VALID_AMO UNT},
63 {"1234", "USD", "en-US", "$1,234.00", ExpectedValidity.VALID_AMOUNT} , 69 {"1234", "USD", "en-US", "USD", "$1,234.00", ExpectedValidity.VALID_ AMOUNT},
64 70
65 {"-123", "USD", "en-US", "-$123.00", ExpectedValidity.VALID_AMOUNT}, 71 {"-123", "USD", "en-US", "USD", "-$123.00", ExpectedValidity.VALID_A MOUNT},
66 {"-1234", "USD", "en-US", "-$1,234.00", ExpectedValidity.VALID_AMOUN T}, 72 {"-1234", "USD", "en-US", "USD", "-$1,234.00", ExpectedValidity.VALI D_AMOUNT},
67 73
68 {"123456789012345678901234567890.123456789012345678901234567890", "U SD", "fr-FR", 74 {"123456789012345678901234567890.123456789012345678901234567890", "U SD", "fr-FR", "USD",
69 "$123" + SPACE + "456" + SPACE + "789" + SPACE + "012" + SPA CE + "345" 75 "$123" + SPACE + "456" + SPACE + "789" + SPACE + "012" + SPA CE + "345"
70 + SPACE + "678" + SPACE + "901" + SPACE + "234" + SP ACE + "567" 76 + SPACE + "678" + SPACE + "901" + SPACE + "234" + SP ACE + "567"
71 + SPACE + "890,123456789012345678901234567890", 77 + SPACE + "890,123456789012345678901234567890",
72 ExpectedValidity.VALID_AMOUNT}, 78 ExpectedValidity.VALID_AMOUNT},
73 {"123456789012345678901234567890.123456789012345678901234567890", "U SD", "en-US", 79 {"123456789012345678901234567890.123456789012345678901234567890", "U SD", "en-US", "USD",
74 "$123,456,789,012,345,678,901,234,567,890.123456789012345678 901234567890", 80 "$123,456,789,012,345,678,901,234,567,890.123456789012345678 901234567890",
75 ExpectedValidity.VALID_AMOUNT}, 81 ExpectedValidity.VALID_AMOUNT},
76 82
77 // Any string of at most 2048 characters can be valid amount currenc y codes. 83 // Any string of at most 2048 characters can be valid amount currenc y codes.
78 {"55.00", "", "en-US", "55.00", ExpectedValidity.VALID_AMOUNT}, 84 {"55.00", "", "en-US", "", "55.00", ExpectedValidity.VALID_CURRENCY} ,
79 {"55.00", "ABCDEF", "en-US", "55.00", ExpectedValidity.VALID_AMOUNT} , 85 {"55.00", "ABCDEF", "en-US", "ABCDEF", "55.00", ExpectedValidity.VAL ID_CURRENCY},
80 {"55.00", longStringOfLength(2048), "en-US", "55.00", ExpectedValidi ty.VALID_AMOUNT}, 86 {"55.00", longStringOfLength(2048), "en-US", "AAAAA" + ELLIPSIS, "55 .00",
please use gerrit instead 2016/09/02 17:30:55 ELLIPSIS is used only once, so it's easier to just
pals 2016/09/06 06:09:00 Done.
87 ExpectedValidity.VALID_CURRENCY},
81 88
82 // Invalid amount currency codes. 89 // Invalid amount currency codes.
83 {"55.00", longStringOfLength(2049), "en-US", null, 90 {"55.00", longStringOfLength(2049), "en-US", null, null,
84 ExpectedValidity.INVALID_AMOUNT_CURRENCY_CODE}, 91 ExpectedValidity.INVALID_AMOUNT_CURRENCY_CODE},
85 92
86 // Invalid amount values. 93 // Invalid amount values.
87 {"", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_VALUE}, 94 {"", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_AMOUNT_VA LUE},
88 {"-", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_VALUE}, 95 {"-", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_AMOUNT_V ALUE},
89 {"notdigits", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_ VALUE}, 96 {"notdigits", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_ AMOUNT_VALUE},
90 {"ALSONOTDIGITS", "USD", "en-US", null, ExpectedValidity.INVALID_AMO UNT_VALUE}, 97 {"ALSONOTDIGITS", "USD", "en-US", "USD", null, ExpectedValidity.INVA LID_AMOUNT_VALUE},
91 {"10.", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_VALUE} , 98 {"10.", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_AMOUNT _VALUE},
92 {".99", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_VALUE} , 99 {".99", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_AMOUNT _VALUE},
93 {"10-", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_VALUE} , 100 {"10-", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_AMOUNT _VALUE},
94 {"1-0", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_VALUE} , 101 {"1-0", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_AMOUNT _VALUE},
95 {"1.0.0", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_VALU E}, 102 {"1.0.0", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_AMOU NT_VALUE},
96 {"1/3", "USD", "en-US", null, ExpectedValidity.INVALID_AMOUNT_VALUE} , 103 {"1/3", "USD", "en-US", "USD", null, ExpectedValidity.INVALID_AMOUNT _VALUE},
97 }); 104 });
98 } 105 }
99 106
100 private final String mAmount; 107 private final String mAmount;
101 private final String mCurrency; 108 private final String mCurrency;
102 private final String mLanguageTag; 109 private final String mLanguageTag;
103 private final String mExpectedFormatting; 110 private final String mExpectedCurrencyFormatting;
111 private final String mExpectedAmountFormatting;
104 private final ExpectedValidity mExpectedValidity; 112 private final ExpectedValidity mExpectedValidity;
105 113
106 private static String longStringOfLength(int len) { 114 private static String longStringOfLength(int len) {
107 StringBuilder currency = new StringBuilder(); 115 StringBuilder currency = new StringBuilder();
108 for (int i = 0; i < len; i++) { 116 for (int i = 0; i < len; i++) {
109 currency.append("A"); 117 currency.append("A");
110 } 118 }
111 return currency.toString(); 119 return currency.toString();
112 } 120 }
113 121
114 public CurrencyStringFormatterTest(String amount, String currency, String la nguageTag, 122 public CurrencyStringFormatterTest(String amount, String currency, String la nguageTag,
115 String expectedFormatting, ExpectedValidity expectedValidity) { 123 String expectedCurrencyFormatting, String expectedAmountFormatting,
124 ExpectedValidity expectedValidity) {
116 mAmount = amount; 125 mAmount = amount;
117 mCurrency = currency; 126 mCurrency = currency;
118 mLanguageTag = languageTag; 127 mLanguageTag = languageTag;
119 mExpectedFormatting = expectedFormatting; 128 mExpectedCurrencyFormatting = expectedCurrencyFormatting;
129 mExpectedAmountFormatting = expectedAmountFormatting;
120 mExpectedValidity = expectedValidity; 130 mExpectedValidity = expectedValidity;
121 } 131 }
122 132
123 @Test 133 @Test
124 public void test() { 134 public void test() {
125 CurrencyStringFormatter formatter = new CurrencyStringFormatter(mCurrenc y, 135 CurrencyStringFormatter formatter = new CurrencyStringFormatter(mCurrenc y,
126 Locale.forLanguageTag(mLanguageTag)); 136 Locale.forLanguageTag(mLanguageTag));
127 137
128 if (mExpectedValidity == ExpectedValidity.INVALID_AMOUNT_CURRENCY_CODE) { 138 if (mExpectedValidity == ExpectedValidity.INVALID_AMOUNT_CURRENCY_CODE) {
129 Assert.assertFalse("\"" + mCurrency + "\" should be invalid currency code", 139 Assert.assertFalse("\"" + mCurrency + "\" should be invalid currency code",
130 formatter.isValidAmountCurrencyCode(mCurrency)); 140 formatter.isValidAmountCurrencyCode(mCurrency));
131 } else { 141 } else {
132 Assert.assertTrue("\"" + mCurrency + "\" should be valid currency co de", 142 Assert.assertTrue("\"" + mCurrency + "\" should be valid currency co de",
133 formatter.isValidAmountCurrencyCode(mCurrency)); 143 formatter.isValidAmountCurrencyCode(mCurrency));
134 } 144 }
135 145
136 if (mExpectedValidity == ExpectedValidity.INVALID_AMOUNT_VALUE) { 146 if (mExpectedValidity == ExpectedValidity.INVALID_AMOUNT_VALUE) {
137 Assert.assertFalse("\"" + mAmount + "\" should be invalid amount val ue", 147 Assert.assertFalse("\"" + mAmount + "\" should be invalid amount val ue",
138 formatter.isValidAmountValue(mAmount)); 148 formatter.isValidAmountValue(mAmount));
139 } else { 149 } else {
140 Assert.assertTrue("\"" + mAmount + "\" should be valid amount value" , 150 Assert.assertTrue("\"" + mAmount + "\" should be valid amount value" ,
141 formatter.isValidAmountValue(mAmount)); 151 formatter.isValidAmountValue(mAmount));
142 } 152 }
143 153
154 if (mExpectedValidity == ExpectedValidity.VALID_CURRENCY) {
155 Assert.assertEquals("\"" + mCurrency + "\"" + " should be formatted into \""
156 + mExpectedCurrencyFormatting + "\"",
157 mExpectedCurrencyFormatting, formatter.formatCurrency(mCurre ncy));
please use gerrit instead 2016/09/02 17:30:55 Move lines 155-157 between lines 164 and 65 below.
pals 2016/09/06 06:09:00 Done.
158 }
159
144 if (mExpectedValidity == ExpectedValidity.VALID_AMOUNT) { 160 if (mExpectedValidity == ExpectedValidity.VALID_AMOUNT) {
145 Assert.assertEquals("\"" + mCurrency + "\" \"" + mAmount + "\" (\"" + mLanguageTag 161 Assert.assertEquals("\"" + mCurrency + "\" \"" + mAmount + "\" (\"" + mLanguageTag
146 + "\" locale) should be formatted into \"" + mExpect edFormatting + "\"", 162 + "\" locale) should be formatted into \""
147 mExpectedFormatting, formatter.format(mAmount)); 163 + mExpectedAmountFormatting + "\"",
164 mExpectedAmountFormatting, formatter.format(mAmount));
148 } 165 }
149 } 166 }
150 } 167 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698