1e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson/* Licensed to the Apache Software Foundation (ASF) under one or more
2e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * contributor license agreements.  See the NOTICE file distributed with
3e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * this work for additional information regarding copyright ownership.
4e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0
5e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * (the "License"); you may not use this file except in compliance with
6e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * the License.  You may obtain a copy of the License at
7e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson *
8e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
9e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson *
10e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * Unless required by applicable law or agreed to in writing, software
11e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * See the License for the specific language governing permissions and
14e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson * limitations under the License.
15e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson */
16e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonpackage libcore.java.util;
17e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
18e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport java.io.IOException;
19e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport java.util.Calendar;
20e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport java.util.Formattable;
21e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport java.util.Formatter;
22e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport java.util.FormatterClosedException;
23e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport java.util.IllegalFormatException;
24e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport java.util.IllegalFormatFlagsException;
25e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport java.util.Locale;
26e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonimport junit.framework.TestCase;
27e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
28e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonpublic final class OldFormatterTest extends TestCase {
29e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
30e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson    public void test_Formattable() {
31e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Formattable ones = new Formattable() {
32e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            public void formatTo(Formatter formatter, int flags, int width, int precision) throws IllegalFormatException {
33e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                try {
34e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                    formatter.out().append("111");
35e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                } catch (IOException e) {
36e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                    throw new RuntimeException(e);
37e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                }
38e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            }
39e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        };
40e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Formattable twos = new Formattable() {
41e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            public void formatTo(Formatter formatter, int flags, int width, int precision) throws IllegalFormatException {
42e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                try {
43e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                    formatter.out().append("222");
44e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                } catch (IOException e) {
45e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                    throw new RuntimeException(e);
46e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                }
47e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            }
48e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        };
49e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
50e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        assertEquals("aaa 111?", new Formatter().format("aaa %s?", ones).toString());
51e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        assertEquals("aaa 111 bbb 222?", new Formatter().format("aaa %s bbb %s?", ones, twos).toString());
52e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson    }
53e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
54e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson    public void test_formatLjava_util_LocaleLjava_lang_StringLjava_lang_Object() {
55e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Double val = new Double(3.14);
56e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Calendar cal = Calendar.getInstance();
57e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Formatter fLoc = null;
58e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Formatter fNoL = null;
59e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        cal.set(2008, Calendar.SEPTEMBER, 23, 18, 30);
60e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
61dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc = new Formatter(Locale.GERMAN);
62dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fNoL = new Formatter(Locale.GERMAN);
63dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc.format(Locale.US, "%f", val);
64dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fNoL.format("%f", val);
65dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        assertFalse(fLoc.toString().equals(fNoL.toString()));
66e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
67dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc = new Formatter(Locale.FRANCE);
68dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fNoL = new Formatter(Locale.FRANCE);
69dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc.format(Locale.US, "%f", val);
70dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fNoL.format("%f", val);
71dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        assertFalse(fLoc.toString().equals(fNoL.toString()));
72e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
73e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc = new Formatter(Locale.US);
74e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fNoL = new Formatter(Locale.US);
75e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc.format(Locale.US, "%f", val);
76e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fNoL.format("%f", val);
77e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        assertTrue(fLoc.toString().equals(fNoL.toString()));
78e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
79dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc = new Formatter(Locale.GERMAN);
80dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fNoL = new Formatter(Locale.GERMAN);
81dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc.format(Locale.US, "%tA %tB %td %tT", cal, cal,  cal, cal);
82dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fNoL.format("%tA %tB %td %tT", cal, cal,  cal, cal);
83dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        assertFalse(fLoc.toString().equals(fNoL.toString()));
84e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
85dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc = new Formatter(Locale.FRANCE);
86dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fNoL = new Formatter(Locale.FRANCE);
87dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc.format(Locale.US, "%tA %tB %td %tT", cal, cal,  cal, cal);
88dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fNoL.format("%tA %tB %td %tT", cal, cal,  cal, cal);
89dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        assertFalse(fLoc.toString().equals(fNoL.toString()));
90e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
91e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc = new Formatter(Locale.US);
92e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fNoL = new Formatter(Locale.US);
93e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc.format(Locale.US, "%tA %tB %td %tT", cal, cal,  cal, cal);
94e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fNoL.format("%tA %tB %td %tT", cal, cal,  cal, cal);
95e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        assertTrue(fLoc.toString().equals(fNoL.toString()));
96e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
97e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        final String[] illFlags = { "%+ e", "%+ E", "%+ g", "%+ G", "%+ f",
98e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                "%+ a", "%+ A", "%-03e", "%-03E", "%-03g", "%-03G", "%-03f",
99e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                "%-03a", "%-03A" };
100e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        for (int i = 0; i < illFlags.length; i++) {
101dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes            try {
102dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes                fLoc = new Formatter(Locale.US);
103dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes                fLoc.format(Locale.FRANCE, illFlags[i], 1.23d);
104dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes                fail("should throw IllegalFormatFlagsException");
105dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes            } catch (IllegalFormatFlagsException expected) {
106e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            }
107dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes            try {
108dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes                fLoc = new Formatter(Locale.CANADA);
109dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes                fLoc.format(Locale.GERMAN, illFlags[i], (Double) null);
110dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes                fail("should throw IllegalFormatFlagsException");
111dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes            } catch (IllegalFormatFlagsException expected) {
112e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            }
113e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        }
114e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
115dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        fLoc.close();
116dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        try {
117dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes            fLoc.format(Locale.GERMAN, "%f", val);
118dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes            fail();
119dd9b761d3b32bf02de354cb228f83cf7697032efElliott Hughes        } catch (FormatterClosedException expected) {
120e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        }
121e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson    }
122e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson}
123