169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin/*
569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin *******************************************************************************
61c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert * Copyright (C) 2001-2016, International Business Machines Corporation and
71c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert * others. All Rights Reserved.
869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin *******************************************************************************
969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin */
1069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
11f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert/**
1269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin * Port From:   ICU4C v1.8.1 : format : IntlTestDecimalFormatAPI
1369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin * Source File: $ICU4CRoot/source/test/intltest/dcfmapts.cpp
1469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin **/
1569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinpackage android.icu.dev.test.format;
1769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.text.AttributedCharacterIterator;
1969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.text.FieldPosition;
2069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.text.Format;
2169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.text.ParsePosition;
2269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.ArrayList;
2369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.Iterator;
2469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.List;
2569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.Locale;
2669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
27f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
2805fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runner.RunWith;
2905fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runners.JUnit4;
30f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
3105fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport android.icu.dev.test.TestFmwk;
3231fc099bf012524568ddeffd7fd4c9326411156bPaul Duffinimport android.icu.text.CurrencyPluralInfo;
3369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.text.DecimalFormat;
3469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.text.DecimalFormatSymbols;
3569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.text.NumberFormat;
3631fc099bf012524568ddeffd7fd4c9326411156bPaul Duffinimport android.icu.util.ULocale;
372e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillinimport android.icu.testsharding.MainTestShard;
3869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
3969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin// This is an API test, not a unit test.  It doesn't test very many cases, and doesn't
4069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin// try to test the full functionality.  It just calls each function in the class and
4169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin// verifies that it works on a basic level.
422e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillin@MainTestShard
4305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert@RunWith(JUnit4.class)
4405fa7802d0874812c234a29745586677ee5837eaFredrik Roubertpublic class IntlTestDecimalFormatAPIC extends TestFmwk {
4569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
4669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // This test checks various generic API methods in DecimalFormat to achieve 100% API coverage.
47f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
4869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestAPI() {
4969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
5069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("DecimalFormat API test---");
5169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("");
5269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Locale.setDefault(Locale.ENGLISH);
5369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
5469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // ======= Test constructors
5569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
5669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Testing DecimalFormat constructors");
5769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
5869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        DecimalFormat def = new DecimalFormat();
5969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
6069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        final String pattern = new String("#,##0.# FF");
6131fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        final DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.FRENCH);
6231fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        final CurrencyPluralInfo infoInput = new CurrencyPluralInfo(ULocale.FRENCH);
63f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
6469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        DecimalFormat pat = null;
6569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        try {
6669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            pat = new DecimalFormat(pattern);
6769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        } catch (IllegalArgumentException e) {
6869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln("ERROR: Could not create DecimalFormat (pattern)");
6969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
7069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
7131fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        DecimalFormat cust1 = null;
7231fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        try {
7331fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin            cust1 = new DecimalFormat(pattern, symbols);
7431fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        } catch (IllegalArgumentException e) {
7531fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin            errln("ERROR: Could not create DecimalFormat (pattern, symbols)");
7631fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        }
77f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
78f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        @SuppressWarnings("unused")
7931fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        DecimalFormat cust2 = null;
8031fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        try {
8131fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin            cust2 = new DecimalFormat(pattern, symbols, infoInput, NumberFormat.PLURALCURRENCYSTYLE);
8231fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        } catch (IllegalArgumentException e) {
8331fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin            errln("ERROR: Could not create DecimalFormat (pattern, symbols, infoInput, style)");
8431fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        }
8569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
8669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
8769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // ======= Test clone(), assignment, and equality
8869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
8969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Testing clone() and equality operators");
9069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
9169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Format clone = (Format) def.clone();
9269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (!def.equals(clone)) {
9369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln("ERROR: Clone() failed");
9469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
9569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
9669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // ======= Test various format() methods
9769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
9869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Testing various format() methods");
9969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
10069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //        final double d = -10456.0037; // this appears as -10456.003700000001 on NT
10169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //        final double d = -1.04560037e-4; // this appears as -1.0456003700000002E-4 on NT
10269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        final double d = -10456.00370000000000; // this works!
10369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        final long l = 100000000;
10469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("" + Double.toString(d) + " is the double value");
10569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
10669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        StringBuffer res1 = new StringBuffer();
10769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        StringBuffer res2 = new StringBuffer();
10869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        StringBuffer res3 = new StringBuffer();
10969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        StringBuffer res4 = new StringBuffer();
11069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        FieldPosition pos1 = new FieldPosition(0);
11169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        FieldPosition pos2 = new FieldPosition(0);
11269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        FieldPosition pos3 = new FieldPosition(0);
11369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        FieldPosition pos4 = new FieldPosition(0);
11469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
11569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        res1 = def.format(d, res1, pos1);
11669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("" + Double.toString(d) + " formatted to " + res1);
11769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
11869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        res2 = pat.format(l, res2, pos2);
11969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("" + l + " formatted to " + res2);
12069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
12169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        res3 = cust1.format(d, res3, pos3);
12269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("" + Double.toString(d) + " formatted to " + res3);
12369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
12469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        res4 = cust1.format(l, res4, pos4);
12569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("" + l + " formatted to " + res4);
12669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
12769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // ======= Test parse()
12869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
12969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Testing parse()");
13069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
13169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String text = new String("-10,456.0037");
13269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        ParsePosition pos = new ParsePosition(0);
13369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String patt = new String("#,##0.#");
13469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.applyPattern(patt);
13569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        double d2 = pat.parse(text, pos).doubleValue();
13669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (d2 != d) {
13769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln(
138f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                "ERROR: Roundtrip failed (via parse(" + Double.toString(d2) + " != " + Double.toString(d) + ")) for " + text);
13969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
14069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln(text + " parsed into " + (long) d2);
14169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
14269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // ======= Test getters and setters
14369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
14469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Testing getters and setters");
14569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
14669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        final DecimalFormatSymbols syms = pat.getDecimalFormatSymbols();
14769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        def.setDecimalFormatSymbols(syms);
14869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (!pat.getDecimalFormatSymbols().equals(def.getDecimalFormatSymbols())) {
14969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln("ERROR: set DecimalFormatSymbols() failed");
15069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
15169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
15269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String posPrefix;
15369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.setPositivePrefix("+");
15469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        posPrefix = pat.getPositivePrefix();
15569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Positive prefix (should be +): " + posPrefix);
156495cb271e305cfb399d463f32210a371198f0abfFredrik Roubert        assertEquals("ERROR: setPositivePrefix() failed", "+", posPrefix);
15769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
15869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String negPrefix;
15969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.setNegativePrefix("-");
16069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        negPrefix = pat.getNegativePrefix();
16169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Negative prefix (should be -): " + negPrefix);
162495cb271e305cfb399d463f32210a371198f0abfFredrik Roubert        assertEquals("ERROR: setNegativePrefix() failed", "-", negPrefix);
16369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
16469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String posSuffix;
16569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.setPositiveSuffix("_");
16669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        posSuffix = pat.getPositiveSuffix();
16769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Positive suffix (should be _): " + posSuffix);
168495cb271e305cfb399d463f32210a371198f0abfFredrik Roubert        assertEquals("ERROR: setPositiveSuffix() failed", "_", posSuffix);
16969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
17069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String negSuffix;
17169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.setNegativeSuffix("~");
17269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        negSuffix = pat.getNegativeSuffix();
17369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Negative suffix (should be ~): " + negSuffix);
174495cb271e305cfb399d463f32210a371198f0abfFredrik Roubert        assertEquals("ERROR: setNegativeSuffix() failed", "~", negSuffix);
17569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
17669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        long multiplier = 0;
17769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.setMultiplier(8);
17869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        multiplier = pat.getMultiplier();
17969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Multiplier (should be 8): " + multiplier);
18069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (multiplier != 8) {
18169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln("ERROR: setMultiplier() failed");
18269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
18369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
18469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int groupingSize = 0;
18569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.setGroupingSize(2);
18669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        groupingSize = pat.getGroupingSize();
18769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Grouping size (should be 2): " + (long) groupingSize);
18869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (groupingSize != 2) {
18969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln("ERROR: setGroupingSize() failed");
19069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
19169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
19269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.setDecimalSeparatorAlwaysShown(true);
19369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        boolean tf = pat.isDecimalSeparatorAlwaysShown();
19469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln(
195f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            "DecimalSeparatorIsAlwaysShown (should be true) is " + (tf ? "true" : "false"));
19669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (tf != true) {
19769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln("ERROR: setDecimalSeparatorAlwaysShown() failed");
19869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
19969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
20069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String funkyPat;
20169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        funkyPat = pat.toPattern();
20269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Pattern is " + funkyPat);
20369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
20469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String locPat;
20569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        locPat = pat.toLocalizedPattern();
20669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Localized pattern is " + locPat);
207f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
208f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        pat.setCurrencyPluralInfo(infoInput);
209f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        if(!infoInput.equals(pat.getCurrencyPluralInfo())) {
210f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            errln("ERROR: set/get CurrencyPluralInfo() failed");
211f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        }
212f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
213f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
21431fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        pat.setCurrencyPluralInfo(infoInput);
21531fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        if(!infoInput.equals(pat.getCurrencyPluralInfo())) {
21631fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin            errln("ERROR: set/get CurrencyPluralInfo() failed");
21731fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin        }
21869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
21969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // ======= Test applyPattern()
22069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
22169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Testing applyPattern()");
22269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
22369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String p1 = new String("#,##0.0#;(#,##0.0#)");
22469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Applying pattern " + p1);
22569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.applyPattern(p1);
22669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String s2;
22769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        s2 = pat.toPattern();
22869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Extracted pattern is " + s2);
22969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (!s2.equals(p1)) {
230495cb271e305cfb399d463f32210a371198f0abfFredrik Roubert            errln("ERROR: toPattern() result did not match pattern applied: " + p1 + " vs " + s2);
23169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
23269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
23369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String p2 = new String("#,##0.0# FF;(#,##0.0# FF)");
23469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Applying pattern " + p2);
23569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pat.applyLocalizedPattern(p2);
23669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String s3;
23769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        s3 = pat.toLocalizedPattern();
23869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("Extracted pattern is " + s3);
239495cb271e305cfb399d463f32210a371198f0abfFredrik Roubert        assertEquals("ERROR: toLocalizedPattern() result did not match pattern applied", p2, s3);
24069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
24169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // ======= Test getStaticClassID()
24269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
24369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //        logln("Testing instanceof()");
24469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
24569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //        try {
24669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //           NumberFormat test = new DecimalFormat();
24769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
24869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //            if (! (test instanceof DecimalFormat)) {
24969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //                errln("ERROR: instanceof failed");
25069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //            }
25169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //        }
25269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //        catch (Exception e) {
25369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //            errln("ERROR: Couldn't create a DecimalFormat");
25469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //        }
255f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
25669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
25769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
258f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
25969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestRounding() {
26069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        double Roundingnumber = 2.55;
26169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        double Roundingnumber1 = -2.55;
26269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        //+2.55 results   -2.55 results
26369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        double result[] = {
264f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            3, -3,
265f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            2, -2,
266f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            3, -2,
267f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            2, -3,
268f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            3, -3,
269f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            3, -3,
270f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            3, -3
27169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
27269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        DecimalFormat pat = new DecimalFormat();
27369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String s = "";
27469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        s = pat.toPattern();
27569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln("pattern = " + s);
27669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int mode;
27769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int i = 0;
27869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String message;
27969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String resultStr;
28069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (mode = 0; mode < 7; mode++) {
28169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            pat.setRoundingMode(mode);
28269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (pat.getRoundingMode() != mode) {
28369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                errln(
284f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                     "SetRoundingMode or GetRoundingMode failed for mode=" + mode);
28569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
28669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
28769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            //for +2.55 with RoundingIncrement=1.0
28805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            pat.setRoundingIncrement(java.math.BigDecimal.ONE);
28969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            resultStr = pat.format(Roundingnumber);
290f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            message = "round(" + Roundingnumber
291f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    + "," + mode + ",FALSE) with RoundingIncrement=1.0==>";
29269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            verify(message, resultStr, result[i++]);
29369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            message = "";
29469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            resultStr = "";
29569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
29669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            //for -2.55 with RoundingIncrement=1.0
29769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            resultStr = pat.format(Roundingnumber1);
298f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            message = "round(" + Roundingnumber1
299f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    + "," + mode + ",FALSE) with RoundingIncrement=1.0==>";
30069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            verify(message, resultStr, result[i++]);
30169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            message = "";
30269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            resultStr = "";
30369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
30469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
30569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
306f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
30769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testFormatToCharacterIterator() {
30869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
30969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Number number = new Double(350.76);
31069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Number negativeNumber = new Double(-350.76);
31169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
31269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Locale us = Locale.US;
31369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
31469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test number instance
31569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(1, number, NumberFormat.getNumberInstance(us),
31669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                getNumberVectorUS());
31769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
31869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test percent instance
31969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(3, number, NumberFormat.getPercentInstance(us),
32069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                getPercentVectorUS());
32169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
32269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test permille pattern
32369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        DecimalFormat format = new DecimalFormat("###0.##\u2030");
32469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(4, number, format, getPermilleVector());
32569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
32669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test exponential pattern with positive exponent
32769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        format = new DecimalFormat("00.0#E0");
32869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(5, number, format, getPositiveExponentVector());
32969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
33069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test exponential pattern with negative exponent
33169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        format = new DecimalFormat("0000.0#E0");
33269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(6, number, format, getNegativeExponentVector());
33369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
33469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test currency instance with US Locale
33569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(7, number, NumberFormat.getCurrencyInstance(us),
33669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                getPositiveCurrencyVectorUS());
33769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
33869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test negative currency instance with US Locale
33969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(8, negativeNumber, NumberFormat.getCurrencyInstance(us),
34069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                getNegativeCurrencyVectorUS());
34169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
34269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test multiple grouping separators
34369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        number = new Long(100300400);
34469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(11, number, NumberFormat.getNumberInstance(us),
34569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                getNumberVector2US());
34669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
34769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // test 0
34869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        number = new Long(0);
34969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        t_Format(12, number, NumberFormat.getNumberInstance(us),
35069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                getZeroVector());
35169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
35269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
35369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getNumberVectorUS() {
35469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(3);
35569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 3, NumberFormat.Field.INTEGER));
35669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(3, 4, NumberFormat.Field.DECIMAL_SEPARATOR));
35769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(4, 6, NumberFormat.Field.FRACTION));
35869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
35969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
360f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
36169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//    private static Vector getPositiveCurrencyVectorTR() {
36269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        Vector v = new Vector();
36369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        v.add(new FieldContainer(0, 3, NumberFormat.Field.INTEGER));
36469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        v.add(new FieldContainer(4, 6, NumberFormat.Field.CURRENCY));
36569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        return v;
36669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//    }
36769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//
36869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//    private static Vector getNegativeCurrencyVectorTR() {
36969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        Vector v = new Vector();
37069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        v.add(new FieldContainer(0, 1, NumberFormat.Field.SIGN));
37169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        v.add(new FieldContainer(1, 4, NumberFormat.Field.INTEGER));
37269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        v.add(new FieldContainer(5, 7, NumberFormat.Field.CURRENCY));
37369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//        return v;
37469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//    }
37569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
37669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getPositiveCurrencyVectorUS() {
37769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(4);
37869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 1, NumberFormat.Field.CURRENCY));
37969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(1, 4, NumberFormat.Field.INTEGER));
38069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(4, 5, NumberFormat.Field.DECIMAL_SEPARATOR));
38169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(5, 7, NumberFormat.Field.FRACTION));
38269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
38369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
38469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
38569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getNegativeCurrencyVectorUS() {
38669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(4);
38769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // SIGN added with fix for issue 11805.
38869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 1, NumberFormat.Field.SIGN));
38969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(1, 2, NumberFormat.Field.CURRENCY));
39069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(2, 5, NumberFormat.Field.INTEGER));
39169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(5, 6, NumberFormat.Field.DECIMAL_SEPARATOR));
39269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(6, 8, NumberFormat.Field.FRACTION));
39369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
39469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
39569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
39669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getPercentVectorUS() {
39769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(5);
39869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 2, NumberFormat.Field.INTEGER));
39969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(2, 3, NumberFormat.Field.INTEGER));
40069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(2, 3, NumberFormat.Field.GROUPING_SEPARATOR));
40169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(3, 6, NumberFormat.Field.INTEGER));
40269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(6, 7, NumberFormat.Field.PERCENT));
40369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
40469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
40569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
40669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getPermilleVector() {
40769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(2);
40869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 6, NumberFormat.Field.INTEGER));
40969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(6, 7, NumberFormat.Field.PERMILLE));
41069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
41169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
41269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
41369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getNegativeExponentVector() {
41469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(6);
41569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 4, NumberFormat.Field.INTEGER));
41669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(4, 5, NumberFormat.Field.DECIMAL_SEPARATOR));
41769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(5, 6, NumberFormat.Field.FRACTION));
41869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(6, 7, NumberFormat.Field.EXPONENT_SYMBOL));
41969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(7, 8, NumberFormat.Field.EXPONENT_SIGN));
42069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(8, 9, NumberFormat.Field.EXPONENT));
42169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
42269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
42369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
42469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getPositiveExponentVector() {
42569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(5);
42669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 2, NumberFormat.Field.INTEGER));
42769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(2, 3, NumberFormat.Field.DECIMAL_SEPARATOR));
42869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(3, 5, NumberFormat.Field.FRACTION));
42969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(5, 6, NumberFormat.Field.EXPONENT_SYMBOL));
43069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(6, 7, NumberFormat.Field.EXPONENT));
43169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
43269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
43369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
43469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getNumberVector2US() {
43569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(7);
43669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 3, NumberFormat.Field.INTEGER));
43769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(3, 4, NumberFormat.Field.GROUPING_SEPARATOR));
43869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(3, 4, NumberFormat.Field.INTEGER));
43969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(4, 7, NumberFormat.Field.INTEGER));
44069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(7, 8, NumberFormat.Field.GROUPING_SEPARATOR));
44169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(7, 8, NumberFormat.Field.INTEGER));
44269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(8, 11, NumberFormat.Field.INTEGER));
44369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
44469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
44569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
44669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> getZeroVector() {
44769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> v = new ArrayList<FieldContainer>(1);
44869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        v.add(new FieldContainer(0, 1, NumberFormat.Field.INTEGER));
44969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return v;
450f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    }
451f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
45269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private void t_Format(int count, Object object, Format format,
45369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            List<FieldContainer> expectedResults) {
45469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> results = findFields(format.formatToCharacterIterator(object));
45569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertTrue("Test " + count
45669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                + ": Format returned incorrect CharacterIterator for "
45769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                + format.format(object), compare(results, expectedResults));
45869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
45969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
46069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    /**
46169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     * compares two vectors regardless of the order of their elements
46269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     */
46369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static boolean compare(List vector1, List vector2) {
46469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return vector1.size() == vector2.size() && vector1.containsAll(vector2);
46569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
466f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
46769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    /**
46869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     * finds attributes with regards to char index in this
46969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     * AttributedCharacterIterator, and puts them in a vector
470f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert     *
47169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     * @param iterator
47269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     * @return a vector, each entry in this vector are of type FieldContainer ,
47369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     *         which stores start and end indexes and an attribute this range
47469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     *         has
47569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     */
47669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static List<FieldContainer> findFields(AttributedCharacterIterator iterator) {
47769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<FieldContainer> result = new ArrayList<FieldContainer>();
47869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        while (iterator.getIndex() != iterator.getEndIndex()) {
47969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            int start = iterator.getRunStart();
48069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            int end = iterator.getRunLimit();
48169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
48269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            Iterator it = iterator.getAttributes().keySet().iterator();
48369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            while (it.hasNext()) {
48469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                AttributedCharacterIterator.Attribute attribute = (AttributedCharacterIterator.Attribute) it
48569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        .next();
48669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                Object value = iterator.getAttribute(attribute);
48769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                result.add(new FieldContainer(start, end, attribute, value));
48869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // System.out.println(start + " " + end + ": " + attribute + ",
48969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // " + value );
49069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // System.out.println("v.add(new FieldContainer(" + start +"," +
49169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // end +"," + attribute+ "," + value+ "));");
49269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
49369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            iterator.setIndex(end);
49469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
49569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return result;
49669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
49769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    protected static class FieldContainer {
49869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int start, end;
49969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
50069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        AttributedCharacterIterator.Attribute attribute;
50169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
50269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object value;
50369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
50469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//         called from support_decimalformat and support_simpledateformat tests
50569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public FieldContainer(int start, int end,
50669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        AttributedCharacterIterator.Attribute attribute) {
50769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            this(start, end, attribute, attribute);
50869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
50969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
51069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//         called from support_messageformat tests
51169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public FieldContainer(int start, int end, AttributedCharacterIterator.Attribute attribute, int value) {
51269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        this(start, end, attribute, new Integer(value));
51369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
51469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
51569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//         called from support_messageformat tests
51669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public FieldContainer(int start, int end, AttributedCharacterIterator.Attribute attribute,
51769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object value) {
51869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        this.start = start;
51969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        this.end = end;
52069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        this.attribute = attribute;
52169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        this.value = value;
52269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
52369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
524f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        @Override
52569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public boolean equals(Object obj) {
52669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (!(obj instanceof FieldContainer))
52769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return false;
52869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
52969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        FieldContainer fc = (FieldContainer) obj;
53069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return (start == fc.start && end == fc.end
53169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        && attribute == fc.attribute && value.equals(fc.value));
53269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
533f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    }
53469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
53569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    /*Helper functions */
53669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void verify(String message, String got, double expected) {
53769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        logln(message + got + " Expected : " + (long)expected);
53869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String expectedStr = "";
53969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        expectedStr=expectedStr + (long)expected;
54069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if(!got.equals(expectedStr) ) {
54169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln("ERROR: Round() failed:  " + message + got + "  Expected : " + expectedStr);
54269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
54369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
54469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin}
54569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin//eof
546