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 Wilsonimport tests.support.Support_Locale;
28e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
29e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilsonpublic final class OldFormatterTest extends TestCase {
30e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
31e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson    public void test_Formattable() {
32e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Formattable ones = new Formattable() {
33e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            public void formatTo(Formatter formatter, int flags, int width, int precision) throws IllegalFormatException {
34e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                try {
35e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                    formatter.out().append("111");
36e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                } catch (IOException e) {
37e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                    throw new RuntimeException(e);
38e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                }
39e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            }
40e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        };
41e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Formattable twos = new Formattable() {
42e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            public void formatTo(Formatter formatter, int flags, int width, int precision) throws IllegalFormatException {
43e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                try {
44e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                    formatter.out().append("222");
45e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                } catch (IOException e) {
46e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                    throw new RuntimeException(e);
47e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                }
48e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            }
49e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        };
50e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
51e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        assertEquals("aaa 111?", new Formatter().format("aaa %s?", ones).toString());
52e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        assertEquals("aaa 111 bbb 222?", new Formatter().format("aaa %s bbb %s?", ones, twos).toString());
53e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson    }
54e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
55e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson    public void test_formatLjava_util_LocaleLjava_lang_StringLjava_lang_Object() {
56e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Double val = new Double(3.14);
57e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Calendar cal = Calendar.getInstance();
58e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Formatter fLoc = null;
59e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        Formatter fNoL = null;
60e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        cal.set(2008, Calendar.SEPTEMBER, 23, 18, 30);
61e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
62f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        if (Support_Locale.isLocaleAvailable(Locale.GERMAN)) {
63f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fLoc = new Formatter(Locale.GERMAN);
64f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fNoL = new Formatter(Locale.GERMAN);
65f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fLoc.format(Locale.US, "%f", val);
66f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fNoL.format("%f", val);
67f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            assertFalse(fLoc.toString().equals(fNoL.toString()));
68f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        }
69e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
70f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        if (Support_Locale.isLocaleAvailable(Locale.FRANCE)) {
71f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fLoc = new Formatter(Locale.FRANCE);
72f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fNoL = new Formatter(Locale.FRANCE);
73f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fLoc.format(Locale.US, "%f", val);
74f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fNoL.format("%f", val);
75f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            assertFalse(fLoc.toString().equals(fNoL.toString()));
76f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        }
77e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
78e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc = new Formatter(Locale.US);
79e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fNoL = new Formatter(Locale.US);
80e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc.format(Locale.US, "%f", val);
81e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fNoL.format("%f", val);
82e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        assertTrue(fLoc.toString().equals(fNoL.toString()));
83e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
84f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        if (Support_Locale.isLocaleAvailable(Locale.GERMAN)) {
85f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fLoc = new Formatter(Locale.GERMAN);
86f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fNoL = new Formatter(Locale.GERMAN);
87f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fLoc.format(Locale.US, "%tA %tB %td %tT", cal, cal,  cal, cal);
88f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fNoL.format("%tA %tB %td %tT", cal, cal,  cal, cal);
89f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            assertFalse(fLoc.toString().equals(fNoL.toString()));
90f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        }
91e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
92f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        if (Support_Locale.isLocaleAvailable(Locale.FRANCE)) {
93f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fLoc = new Formatter(Locale.FRANCE);
94f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fNoL = new Formatter(Locale.FRANCE);
95f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fLoc.format(Locale.US, "%tA %tB %td %tT", cal, cal,  cal, cal);
96f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            fNoL.format("%tA %tB %td %tT", cal, cal,  cal, cal);
97f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            assertFalse(fLoc.toString().equals(fNoL.toString()));
98f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        }
99e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
100e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc = new Formatter(Locale.US);
101e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fNoL = new Formatter(Locale.US);
102e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc.format(Locale.US, "%tA %tB %td %tT", cal, cal,  cal, cal);
103e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fNoL.format("%tA %tB %td %tT", cal, cal,  cal, cal);
104e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        assertTrue(fLoc.toString().equals(fNoL.toString()));
105e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
106e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        final String[] illFlags = { "%+ e", "%+ E", "%+ g", "%+ G", "%+ f",
107e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                "%+ a", "%+ A", "%-03e", "%-03E", "%-03g", "%-03G", "%-03f",
108e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson                "%-03a", "%-03A" };
109e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        for (int i = 0; i < illFlags.length; i++) {
110f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            if (Support_Locale.isLocaleAvailable(Locale.FRANCE)) {
111f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                try {
112f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                    fLoc = new Formatter(Locale.US);
113f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                    fLoc.format(Locale.FRANCE, illFlags[i], 1.23d);
114f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                    fail("should throw IllegalFormatFlagsException");
115f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                } catch (IllegalFormatFlagsException expected) {
116f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                }
117e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            }
118e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
119f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            if (Support_Locale.isLocaleAvailable(Locale.CANADA)) {
120f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                try {
121f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                    fLoc = new Formatter(Locale.CANADA);
122f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                    fLoc.format(Locale.GERMAN, illFlags[i], (Double) null);
123f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                    fail("should throw IllegalFormatFlagsException");
124f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                } catch (IllegalFormatFlagsException expected) {
125f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                }
126e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson            }
127e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        }
128e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        fLoc.close();
129e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson
130f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes        if (Support_Locale.isLocaleAvailable(Locale.GERMAN)) {
131f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            try {
132f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes                fLoc.format(Locale.GERMAN, "%f", val);
133f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            } catch (FormatterClosedException expected) {
134f049593e9a5160492a0dafb19e5595dac138505eElliott Hughes            }
135e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson        }
136e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson    }
137e10910215b65ca9f9f0b85d4c4a7405fde54d71eJesse Wilson}
138