1/* GENERATED SOURCE. DO NOT MODIFY. */
2// © 2016 and later: Unicode, Inc. and others.
3// License & terms of use: http://www.unicode.org/copyright.html#License
4/*****************************************************************************************
5 *
6 *   Copyright (C) 1996-2009, International Business Machines
7 *   Corporation and others.  All Rights Reserved.
8 **/
9/**
10 * Port From:   JDK 1.4b1 : java.text.Format.IntlTestNumberFormatAPI
11 * Source File: java/text/format/IntlTestNumberFormatAPI.java
12 **/
13
14/*
15    @test 1.4 98/03/06
16    @summary test International Number Format API
17*/
18
19package android.icu.dev.test.format;
20
21import java.math.BigInteger;
22import java.text.FieldPosition;
23import java.text.ParseException;
24import java.text.ParsePosition;
25import java.util.Locale;
26
27import org.junit.Test;
28import org.junit.runner.RunWith;
29import org.junit.runners.JUnit4;
30
31import android.icu.dev.test.TestFmwk;
32import android.icu.text.NumberFormat;
33import android.icu.util.ULocale;
34import android.icu.testsharding.MainTestShard;
35
36@MainTestShard
37@RunWith(JUnit4.class)
38public class IntlTestNumberFormatAPI extends TestFmwk
39{
40    // This test checks various generic API methods in DecimalFormat to achieve 100% API coverage.
41    @Test
42    public void TestAPI()
43    {
44        logln("NumberFormat API test---"); logln("");
45        Locale.setDefault(Locale.ENGLISH);
46
47        // ======= Test constructors
48
49        logln("Testing NumberFormat constructors");
50
51        NumberFormat def = NumberFormat.getInstance();
52
53        NumberFormat fr = NumberFormat.getInstance(Locale.FRENCH);
54
55        NumberFormat cur = NumberFormat.getCurrencyInstance();
56
57        NumberFormat cur_fr = NumberFormat.getCurrencyInstance(Locale.FRENCH);
58
59        NumberFormat per = NumberFormat.getPercentInstance();
60
61        NumberFormat per_fr = NumberFormat.getPercentInstance(Locale.FRENCH);
62
63        NumberFormat integer = NumberFormat.getIntegerInstance();
64
65        NumberFormat int_fr = NumberFormat.getIntegerInstance(Locale.FRENCH);
66
67        //Fix "The variable is never used" compilation warnings
68        logln("Currency : " + cur.format(1234.5));
69        logln("Percent : " + per.format(1234.5));
70        logln("Integer : " + integer.format(1234.5));
71        logln("Int_fr : " + int_fr.format(1234.5));
72
73        // ======= Test equality
74
75        logln("Testing equality operator");
76
77        if( per_fr.equals(cur_fr) ) {
78            errln("ERROR: == failed");
79        }
80
81        // ======= Test various format() methods
82
83        logln("Testing various format() methods");
84
85//        final double d = -10456.0037; // this appears as -10456.003700000001 on NT
86//        final double d = -1.04560037e-4; // this appears as -1.0456003700000002E-4 on NT
87        final double d = -10456.00370000000000; // this works!
88        final long l = 100000000;
89
90        String res1 = new String();
91        String res2 = new String();
92        StringBuffer res3 = new StringBuffer();
93        StringBuffer res4 = new StringBuffer();
94        StringBuffer res5 = new StringBuffer();
95        StringBuffer res6 = new StringBuffer();
96        FieldPosition pos1 = new FieldPosition(0);
97        FieldPosition pos2 = new FieldPosition(0);
98        FieldPosition pos3 = new FieldPosition(0);
99        FieldPosition pos4 = new FieldPosition(0);
100
101        res1 = cur_fr.format(d);
102        logln( "" + d + " formatted to " + res1);
103
104        res2 = cur_fr.format(l);
105        logln("" + l + " formatted to " + res2);
106
107        res3 = cur_fr.format(d, res3, pos1);
108        logln( "" + d + " formatted to " + res3);
109
110        res4 = cur_fr.format(l, res4, pos2);
111        logln("" + l + " formatted to " + res4);
112
113        res5 = cur_fr.format(d, res5, pos3);
114        logln("" + d + " formatted to " + res5);
115
116        res6 = cur_fr.format(l, res6, pos4);
117        logln("" + l + " formatted to " + res6);
118
119
120        // ======= Test parse()
121
122        logln("Testing parse()");
123
124//        String text = new String("-10,456.0037");
125        String text = new String("-10456,0037");
126        ParsePosition pos = new ParsePosition(0);
127        ParsePosition pos01 = new ParsePosition(0);
128        double d1 = ((Number)fr.parseObject(text, pos)).doubleValue();
129        if(d1 != d) {
130            errln("ERROR: Roundtrip failed (via parse()) for " + text);
131        }
132        logln(text + " parsed into " + d1);
133
134        double d2 = fr.parse(text, pos01).doubleValue();
135        if(d2 != d) {
136            errln("ERROR: Roundtrip failed (via parse()) for " + text);
137        }
138        logln(text + " parsed into " + d2);
139
140        double d3 = 0;
141        try {
142            d3 = fr.parse(text).doubleValue();
143        }
144        catch (ParseException e) {
145            errln("ERROR: parse() failed");
146        }
147        if(d3 != d) {
148            errln("ERROR: Roundtrip failed (via parse()) for " + text);
149        }
150        logln(text + " parsed into " + d3);
151
152
153        // ======= Test getters and setters
154
155        logln("Testing getters and setters");
156
157        final Locale[] locales = NumberFormat.getAvailableLocales();
158        long count = locales.length;
159        logln("Got " + count + " locales" );
160        for(int i = 0; i < count; i++) {
161            String name;
162            name = locales[i].getDisplayName();
163            logln(name);
164        }
165
166        fr.setParseIntegerOnly( def.isParseIntegerOnly() );
167        if(fr.isParseIntegerOnly() != def.isParseIntegerOnly() ) {
168                errln("ERROR: setParseIntegerOnly() failed");
169        }
170
171        fr.setGroupingUsed( def.isGroupingUsed() );
172        if(fr.isGroupingUsed() != def.isGroupingUsed() ) {
173                errln("ERROR: setGroupingUsed() failed");
174        }
175
176        fr.setMaximumIntegerDigits( def.getMaximumIntegerDigits() );
177        if(fr.getMaximumIntegerDigits() != def.getMaximumIntegerDigits() ) {
178                errln("ERROR: setMaximumIntegerDigits() failed");
179        }
180
181        fr.setMinimumIntegerDigits( def.getMinimumIntegerDigits() );
182        if(fr.getMinimumIntegerDigits() != def.getMinimumIntegerDigits() ) {
183                errln("ERROR: setMinimumIntegerDigits() failed");
184        }
185
186        fr.setMaximumFractionDigits( def.getMaximumFractionDigits() );
187        if(fr.getMaximumFractionDigits() != def.getMaximumFractionDigits() ) {
188                errln("ERROR: setMaximumFractionDigits() failed");
189        }
190
191        fr.setMinimumFractionDigits( def.getMinimumFractionDigits() );
192        if(fr.getMinimumFractionDigits() != def.getMinimumFractionDigits() ) {
193                errln("ERROR: setMinimumFractionDigits() failed");
194        }
195
196        // ======= Test getStaticClassID()
197
198//        logln("Testing instanceof()");
199
200//        try {
201//            NumberFormat test = new DecimalFormat();
202
203//            if (! (test instanceof DecimalFormat)) {
204//                errln("ERROR: instanceof failed");
205//            }
206//        }
207//        catch (Exception e) {
208//            errln("ERROR: Couldn't create a DecimalFormat");
209//        }
210    }
211
212    // Jitterbug 4451, for coverage
213    @Test
214    public void TestCoverage(){
215        class StubNumberFormat extends NumberFormat{
216            /**
217             * For serialization
218             */
219            private static final long serialVersionUID = 3768385020503005993L;
220            public void run(){
221                String p = NumberFormat.getPattern(ULocale.getDefault().toLocale(),0);
222                if (!p.equals(NumberFormat.getPattern(ULocale.getDefault(),0))){
223                    errln("NumberFormat.getPattern(Locale, int) should delegate to (ULocale,)");
224                }
225            }
226            @Override
227            public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {return null;}
228            @Override
229            public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {return null;}
230            @Override
231            public StringBuffer format(BigInteger number, StringBuffer toAppendTo, FieldPosition pos) {return null;}
232            @Override
233            public StringBuffer format(java.math.BigDecimal number, StringBuffer toAppendTo, FieldPosition pos) {return null;}
234            @Override
235            public StringBuffer format(android.icu.math.BigDecimal number, StringBuffer toAppendTo, FieldPosition pos) {return null;}
236            @Override
237            public Number parse(String text, ParsePosition parsePosition) {return null;}
238        }
239        new StubNumberFormat().run();
240    }
241}
242