| Index: chrome/android/javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4853fdd1cf87c519d55a118b62d2d77df24add5a
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java
|
| @@ -0,0 +1,113 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.payments;
|
| +
|
| +import android.support.test.filters.MediumTest;
|
| +
|
| +import junit.framework.Assert;
|
| +
|
| +import org.chromium.base.LocaleUtils;
|
| +import org.chromium.content.browser.test.NativeLibraryTestBase;
|
| +
|
| +import java.util.Arrays;
|
| +import java.util.List;
|
| +
|
| +/**
|
| + * A lightweight integration test for CurrencyFormatter to run on an Android device.
|
| + */
|
| +public class CurrencyFormatterTest extends NativeLibraryTestBase {
|
| + /**
|
| + * Unicode non-breaking space.
|
| + */
|
| + private static final String SPACE = "\u00A0";
|
| +
|
| + @Override
|
| + protected void setUp() throws Exception {
|
| + super.setUp();
|
| + loadNativeLibraryAndInitBrowserProcess();
|
| + }
|
| +
|
| + private static String longStringOfLength(int len) {
|
| + StringBuilder currency = new StringBuilder();
|
| + for (int i = 0; i < len; i++) {
|
| + currency.append("A");
|
| + }
|
| + return currency.toString();
|
| + }
|
| +
|
| + @MediumTest
|
| + public void testMultipleConversions() throws Exception {
|
| + // Note, all spaces are expected to be unicode non-breaking spaces. Here they are shown as
|
| + // normal spaces.
|
| + List<Object[]> testCases = Arrays.asList(new Object[][] {
|
| + {"55.00", "USD", "en-US", "USD", "$55.00"},
|
| + {"55.00", "USD", "en-CA", "USD", "$55.00"},
|
| + {"55.00", "USD", "fr-CA", "USD", "55,00 $"},
|
| + {"55.00", "USD", "fr-FR", "USD", "55,00 $"},
|
| + {"1234", "USD", "fr-FR", "USD", "1 234,00 $"},
|
| +
|
| + {"55.5", "USD", "en-US", "USD", "$55.50"}, {"55", "USD", "en-US", "USD", "$55.00"},
|
| + {"-123", "USD", "en-US", "USD", "-$123.00"},
|
| + {"-1234", "USD", "en-US", "USD", "-$1,234.00"},
|
| + {"0.1234", "USD", "en-US", "USD", "$0.1234"},
|
| +
|
| + {"55.00", "EUR", "en-US", "EUR", "€55.00"},
|
| + {"55.00", "EUR", "en-CA", "EUR", "€55.00"},
|
| + {"55.00", "EUR", "fr-CA", "EUR", "55,00 €"},
|
| + {"55.00", "EUR", "fr-FR", "EUR", "55,00 €"},
|
| +
|
| + {"55.00", "CAD", "en-US", "CAD", "$55.00"},
|
| + {"55.00", "CAD", "en-CA", "CAD", "$55.00"},
|
| + {"55.00", "CAD", "fr-CA", "CAD", "55,00 $"},
|
| + {"55.00", "CAD", "fr-FR", "CAD", "55,00 $"},
|
| +
|
| + {"55", "JPY", "ja-JP", "JPY", "¥55"}, {"55.0", "JPY", "ja-JP", "JPY", "¥55"},
|
| + {"55.00", "JPY", "ja-JP", "JPY", "¥55"},
|
| + {"55.12", "JPY", "ja-JP", "JPY", "¥55.12"},
|
| + {"55.49", "JPY", "ja-JP", "JPY", "¥55.49"},
|
| + {"55.50", "JPY", "ja-JP", "JPY", "¥55.5"},
|
| + {"55.9999", "JPY", "ja-JP", "JPY", "¥55.9999"},
|
| +
|
| + // Unofficial ISO 4217 currency code.
|
| + {"55.00", "BTX", "en-US", "BTX", "55.00"},
|
| + {"-0.00000001", "BTX", "en-US", "BTX", "-0.00000001"},
|
| + {"-55.00", "BTX", "fr-FR", "BTX", "-55,00"},
|
| +
|
| + {"123456789012345678901234567890.123456789012345678901234567890", "USD", "fr-FR",
|
| + "USD", "123 456 789 012 345 678 901 234 567 890,123456789 $"},
|
| + {"123456789012345678901234567890.123456789012345678901234567890", "USD", "en-US",
|
| + "USD", "$123,456,789,012,345,678,901,234,567,890.123456789"},
|
| +
|
| + // Any string of at most 2048 characters can be valid amount currency codes.
|
| + {"55.00", "", "en-US", "", "55.00"},
|
| + {"55.00", "ABCDEF", "en-US", "ABCDE\u2026", "55.00"},
|
| + // Currency code more than 6 character is formatted to first 5 characters and
|
| + // ellipsis. "\u2026" is unicode for ellipsis.
|
| + {"55.00", longStringOfLength(2048), "en-US", "AAAAA\u2026", "55.00"},
|
| + });
|
| +
|
| + for (int i = 0; i < testCases.size(); i++) {
|
| + Object[] testCase = testCases.get(i);
|
| +
|
| + String amount = (String) testCase[0];
|
| + String currency = (String) testCase[1];
|
| + String locale = (String) testCase[2];
|
| + String expectedCurrencyFormatting = (String) testCase[3];
|
| + String expectedAmountFormatting = (String) testCase[4];
|
| +
|
| + CurrencyFormatter formatter =
|
| + new CurrencyFormatter(currency, null, LocaleUtils.forLanguageTag(locale));
|
| +
|
| + String formattedAmount = formatter.format(amount).replace(SPACE, " ");
|
| + Assert.assertEquals("\"" + currency + "\" \"" + amount + "\" (\"" + locale
|
| + + "\" locale) should be formatted into \"" + expectedAmountFormatting
|
| + + "\"",
|
| + expectedAmountFormatting, formattedAmount);
|
| + Assert.assertEquals("\"" + currency + "\""
|
| + + " should be formatted into \"" + expectedCurrencyFormatting + "\"",
|
| + expectedCurrencyFormatting, formatter.getFormattedCurrencyCode());
|
| + }
|
| + }
|
| +}
|
|
|