Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 } |
| OLD | NEW |