Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/util/TimeZone/Bug4322313.java
38812 views
/*1* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 432231326* @summary Make sure that new implementation of custom time zone27* support for TimeZone.getTimeZone() works correctly and the28* getDisplayName() methods are locale independent.29* @library /java/text/testlib30*/3132import java.io.*;33import java.text.*;34import java.util.*;3536public class Bug4322313 extends IntlTest {37private static final int MPM = 60 * 1000; /* Milliseconds per minute */38private static final Object[][] VALIDS = {39/* given ID rawOffset normalized ID */40{"GMT+00:00", 0, "GMT+00:00"},41{"GMT+3:04", 184 * MPM, "GMT+03:04"},42{"GMT+03:04", 184 * MPM, "GMT+03:04"},43{"GMT+13:42", 822 * MPM, "GMT+13:42"},44/* ISO-LATIN-1 digits */45{"GMT+\u0030\u0031:\u0032\u0033", 83 * MPM, "GMT+01:23"},4647{"GMT+0", 0, "GMT+00:00"},48{"GMT+3", 180 * MPM, "GMT+03:00"},49{"GMT+13", 780 * MPM, "GMT+13:00"},50{"GMT+034", 34 * MPM, "GMT+00:34"},51{"GMT+1034", 634 * MPM, "GMT+10:34"},5253{"GMT-00:00", 0, "GMT-00:00"},54{"GMT-3:04", -184 * MPM, "GMT-03:04"},55{"GMT-03:04", -184 * MPM, "GMT-03:04"},56{"GMT-13:42", -822 * MPM, "GMT-13:42"},57/* ISO-LATIN-1 digits */58{"GMT-\u0030\u0031:\u0032\u0033", -83 * MPM, "GMT-01:23"},5960{"GMT-0", 0, "GMT-00:00"},61{"GMT-3", -180 * MPM, "GMT-03:00"},62{"GMT-13", -780 * MPM, "GMT-13:00"},63{"GMT-034", -34 * MPM, "GMT-00:34"},64{"GMT-1034", -634 * MPM, "GMT-10:34"},65};6667private static final String[] INVALIDS = {68"GMT+5:8", "GMT+11:1", "GMT+23:60", "GMT+24:13",69"GMT+0a:0A", "GMT +13:42", "GMT+ 13:42", "GMT+13 :42",70"GMT+13: 42", "GMT+421:950", "GMT+-13:42", "GMT+!13:42",71"GMT+a", "GMT+24", "GMT+060", "GMT+3003",72"GMT+42195", "GMT+-1", "GMT+-15", " GMT",7374"GMT-5:8", "GMT-11:1", "GMT-23:60", "GMT-24:13",75"GMT-0a:0A", "GMT -13:42", "GMT- 13:42", "GMT-13 :42",76"GMT-13: 42", "GMT-421:950", "GMT-+13:42", "GMT-#13:42",77"GMT-a", "GMT-24", "GMT-060", "GMT-2403",78"GMT-42195", "GMT-+1", "GMT-+15", "G M T",79"GMT+09:00 ",80};8182void Test4322313() {83Locale savedLocale = Locale.getDefault();84TimeZone savedTimeZone = TimeZone.getDefault();85boolean err = false;8687Locale[] locs = Locale.getAvailableLocales();88try {89TimeZone.setDefault(TimeZone.getTimeZone("GMT"));9091for (int i = 0; i < locs.length; i++) {92Locale.setDefault(locs[i]);9394/* Okay case */95for (int k = 0; k < VALIDS.length; k++) {96TimeZone tz = TimeZone.getTimeZone((String)VALIDS[k][0]);97int offset;9899if (!tz.getID().equals(VALIDS[k][2])) {100err = true;101System.err.println("\tFailed [Locale=" +102Locale.getDefault() + ", \"" + VALIDS[k][0] +103"\"] Invalid TimeZone ID, expected:" +104VALIDS[k][2] + ", got:" + tz.getID() + ", " + tz);105} else {106logln("\tPassed [Locale=" +107Locale.getDefault() + ", \"" + VALIDS[k][0] +108"\"] Valid TimeZone ID, got:" + VALIDS[k][2]);109}110111offset = tz.getRawOffset();112if (offset != (int)VALIDS[k][1]) {113err = true;114System.err.println("\tFailed [Locale=" +115Locale.getDefault() + ", \"" + VALIDS[k][0] +116"\"] Invalid RawOffset, expected:" + VALIDS[k][1] +117", got:" + offset + ", " + tz);118} else {119logln("\tPassed [Locale=" +120Locale.getDefault() + ", \"" + VALIDS[k][0] +121"\"] Vaild RawOffset, got:" + offset);122}123124offset = tz.getDSTSavings();125if (offset != 0) {126err = true;127System.err.println("\tFailed [Locale=" +128Locale.getDefault() + ", \"" + VALIDS[k][0] +129"\"] DSTSavings should be zero, got:" + offset +130", " + tz);131} else {132logln("\tPassed [Locale=" +133Locale.getDefault() + ", \"" + VALIDS[k][0] +134"\"] DSTSavings is zero.");135}136}137138/* Error case */139for (int k=0; k < INVALIDS.length; k++) {140TimeZone tz = TimeZone.getTimeZone(INVALIDS[k]);141int offset;142143if (!tz.getID().equals("GMT")) {144err = true;145System.err.println("\tFailed [Locale=" +146Locale.getDefault() + ", \"" + INVALIDS[k] +147"\"] Invalid TimeZone ID, expected:GMT, got:" +148tz.getID() + ", " + tz);149} else {150logln("\tPassed [Locale=" +151Locale.getDefault() + ", \"" + INVALIDS[k] +152"\"] Valid TimeZone ID, got:" + tz.getID());153}154155offset = tz.getRawOffset();156if (offset != 0) {157err = true;158System.err.println("\tFailed [Locale=" +159Locale.getDefault() + ", \"" + INVALIDS[k] +160"\"] RawOffset should be zero, got:" + offset +161", " + tz);162} else {163logln("\tPassed [Locale=" +164Locale.getDefault() + ", \"" + INVALIDS[k] +165"\"] RawOffset is zero.");166}167168offset = tz.getDSTSavings();169if (offset != 0) {170err = true;171System.err.println("\tFailed [Locale=" +172Locale.getDefault() + ", \"" + INVALIDS[k] +173"\"] DSTSavings should be zero, got:" + offset +174", " + tz);175} else {176logln("\tPassed [Locale=" +177Locale.getDefault() + ", \"" + INVALIDS[k] +178"\"] DSTSavings is zero.");179}180}181182// getDisplayName() tests183{184String normalizedID = "GMT-08:00";185TimeZone tz = TimeZone.getTimeZone("GMT-8");186String s;187s = tz.getDisplayName(true, tz.LONG);188if (!normalizedID.equals(s)) {189err = true;190System.err.println("getDisplayName returned unexpected name: " + s +191" in " + Locale.getDefault());192}193s = tz.getDisplayName(true, tz.SHORT);194if (!normalizedID.equals(s)) {195err = true;196System.err.println("getDisplayName returned unexpected name: " + s +197" in " + Locale.getDefault());198}199s = tz.getDisplayName(false, tz.LONG);200if (!normalizedID.equals(s)) {201err = true;202System.err.println("getDisplayName returned unexpected name: " + s +203" in " + Locale.getDefault());204}205s = tz.getDisplayName(false, tz.SHORT);206if (!normalizedID.equals(s)) {207err = true;208System.err.println("getDisplayName returned unexpected name: " + s +209" in " + Locale.getDefault());210}211}212}213} finally {214Locale.setDefault(savedLocale);215TimeZone.setDefault(savedTimeZone);216}217if (err) {218errln("TimeZone.getTimeZone() test failed");219} else {220logln("TimeZone.getTimeZone() test passed");221}222}223224public static void main (String[] args) throws Exception {225new Bug4322313().run(args);226}227}228229230