1/*
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23/*
24 *
25 */
26
27import java.text.*;
28import java.util.*;
29import static java.util.Calendar.*;
30import sun.util.locale.provider.*;
31import sun.util.resources.*;
32import com.bar.CalendarNameProviderImpl;
33
34/**
35 * Test case for CalendarNameProvider.
36 *
37 * Test strategy:
38 * com.bar.CalendarNameProviderImpl supports only ja_JP_kids locale. It returns
39 * month names only in full-width digits, followed by "gatsu" in Hiragana if
40 * it's a long style. The standalone styles are used because DateFormatSymbols
41 * has precedence for the format styles.
42 *
43 * Calendar.getDisplayName(s) should be called with kids to get the month
44 * names provided by com.bar.CalendarNameProviderImpl. Other display names
45 * should be the same as what a Calendar constructed with ja_JP returns.
46 */
47public class CalendarNameProviderTest {
48
49    public static void main(String[] s) {
50        new CalendarNameProviderTest().test();
51    }
52
53    void test() {
54        Locale kids = new Locale("ja", "JP", "kids"); // test provider's supported locale
55        Calendar kcal = Calendar.getInstance(kids);
56        Calendar jcal = Calendar.getInstance(Locale.JAPAN);
57
58        // check month names and week day names
59        Map<String, Integer> mapAllStyles = new HashMap<>();
60        for (int style : new int[] { SHORT_STANDALONE, LONG_STANDALONE }) {
61            // Check month names provided by com.bar.CalendarNameProviderImpl
62            Map<String, Integer> map = new HashMap<>();
63            for (int month = JANUARY; month <= DECEMBER; month++) {
64                kcal.set(DAY_OF_MONTH, 1);
65                kcal.set(MONTH, month);
66                kcal.set(HOUR_OF_DAY, 12); // avoid any standard-daylight transitions...
67                kcal.getTimeInMillis();
68                String name = kcal.getDisplayName(MONTH, style, kids);
69                checkResult("Month name",
70                            name,
71                            CalendarNameProviderImpl.toMonthName(kcal.get(MONTH) + 1, style));
72
73                // Builds the map with name to its integer value.
74                map.put(name, kcal.get(MONTH));
75            }
76            checkResult((style == SHORT_STANDALONE ? "Short" : "Long") + " month names map",
77                        kcal.getDisplayNames(MONTH, style, kids), map);
78            mapAllStyles.putAll(map);
79            if (style == LONG_STANDALONE) {
80                checkResult("Short and long month names map",
81                            kcal.getDisplayNames(MONTH, ALL_STYLES, kids), mapAllStyles);
82            }
83
84            // Check week names: kcal and jcal should return the same names and maps.
85            for (int dow = SUNDAY; dow <= SATURDAY; dow++) {
86                kcal.set(DAY_OF_WEEK, dow);
87                jcal.setTimeInMillis(kcal.getTimeInMillis());
88                String name = kcal.getDisplayName(DAY_OF_WEEK, style, kids);
89                checkResult("Day of week name", name,
90                                                jcal.getDisplayName(DAY_OF_WEEK, style, Locale.JAPAN));
91            }
92            checkResult("Short day of week names", kcal.getDisplayNames(DAY_OF_WEEK, style, kids),
93                                                   jcal.getDisplayNames(DAY_OF_WEEK, style, Locale.JAPAN));
94        }
95
96    }
97
98    private <T> void checkResult(String msg, T got, T expected) {
99        if (!expected.equals(got)) {
100            String s = String.format("%s: got='%s', expected='%s'", msg, got, expected);
101            throw new RuntimeException(s);
102        }
103    }
104}
105