Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/text/Format/DateFormat/Bug4322313.java
47182 views
1
/*
2
* Copyright (c) 2001, 2016, 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
* @test
26
* @bug 4322313 4833268 6302990 6304305
27
* @library /java/text/testlib
28
* @summary Make sure that new implementation for
29
* SimpleDateFormat.parse('z' or 'Z') and format('z' or 'Z') work correctly.
30
*/
31
32
import java.io.*;
33
import java.text.*;
34
import java.util.*;
35
36
public class Bug4322313 extends IntlTest {
37
38
public void Test4322313() {
39
Locale savedLocale = Locale.getDefault();
40
TimeZone savedTimeZone = TimeZone.getDefault();
41
boolean err = false;
42
long mpm = 60 * 1000; /* Milliseconds per a minute */
43
44
Locale[] locs = {Locale.US, Locale.JAPAN, Locale.UK, new Locale("ar")};
45
46
String[] formats = {
47
"z",
48
"Z",
49
};
50
51
Object[][] valids = {
52
/* given ID offset format('z'), ('Z') index */
53
{"GMT+03:04", new Long(-184 * mpm), "GMT+03:04", "+0304", new Integer(9)},
54
{"GMT+13:42", new Long(-822 * mpm), "GMT+13:42", "+1342", new Integer(9)},
55
{"GMT+00:00", new Long(0), "GMT+00:00", "+0000", new Integer(9)},
56
{"GMT+1:11", new Long(-71 * mpm), "GMT+01:11", "+0111", new Integer(8)},
57
{"GMT +13:42", new Long(0), "GMT", "+0000", new Integer(3)},
58
{" GMT", new Long(0), "GMT", "+0000", new Integer(4)},
59
{"+0304", new Long(-184 * mpm), "GMT+03:04", "+0304", new Integer(5)},
60
{"+1342", new Long(-822 * mpm), "GMT+13:42", "+1342", new Integer(5)},
61
{"+0000", new Long(0), "GMT+00:00", "+0000", new Integer(5)},
62
{" +1342", new Long(-822 * mpm), "GMT+13:42", "+1342", new Integer(6)},
63
/* ISO-LATIN-1 digits */
64
{"GMT+\u0030\u0031:\u0032\u0033", new Long(-83 * mpm), "GMT+01:23", "+0123", new Integer(9)},
65
66
/* In fact, this test case is skipped because TimeZone class can't
67
* recognize TimeZone IDs like "+00234" or "-00234".
68
*/
69
{"+00234", new Long(-23 * mpm), "GMT+00:23", "+0023", new Integer(5)},
70
71
{"GMT-03:04", new Long(184 * mpm), "GMT-03:04", "-0304", new Integer(9)},
72
{"GMT-13:42", new Long(822 * mpm), "GMT-13:42", "-1342", new Integer(9)},
73
{"GMT-00:00", new Long(0), "GMT+00:00", "+0000", new Integer(9)},
74
{"GMT-1:11", new Long(71 * mpm), "GMT-01:11", "-0111", new Integer(8)},
75
{"GMT -13:42", new Long(0), "GMT", "+0000", new Integer(3)},
76
{"-0304", new Long(184 * mpm), "GMT-03:04", "-0304", new Integer(5)},
77
{"-1342", new Long(822 * mpm), "GMT-13:42", "-1342", new Integer(5)},
78
{" -1342", new Long(822 * mpm), "GMT-13:42", "-1342", new Integer(6)},
79
/* ISO-LATIN-1 digits */
80
{"GMT-\u0030\u0031:\u0032\u0033", new Long(83 * mpm), "GMT-01:23", "-0123", new Integer(9)},
81
/* In fact, this test case is skipped because TimeZone class can't
82
* recognize TimeZone IDs like "+00234" or "-00234".
83
*/
84
{"-00234", new Long(23 * mpm), "GMT+00:23", "-0023", new Integer(5)},
85
};
86
87
Object[][] invalids = {
88
/* given ID error index */
89
{"GMT+8", new Integer(5)},
90
{"GMT+18", new Integer(6)},
91
{"GMT+208", new Integer(6)},
92
{"GMT+0304", new Integer(6)},
93
{"GMT+42195", new Integer(5)},
94
{"GMT+5:8", new Integer(7)},
95
{"GMT+23:60", new Integer(8)},
96
{"GMT+11:1", new Integer(8)},
97
{"GMT+24:13", new Integer(5)},
98
{"GMT+421:950", new Integer(5)},
99
{"GMT+0a:0A", new Integer(5)},
100
{"GMT+ 13:42", new Integer(4)},
101
{"GMT+13 :42", new Integer(6)},
102
{"GMT+13: 42", new Integer(7)},
103
{"GMT+-13:42", new Integer(4)},
104
{"G M T", new Integer(0)},
105
{"+8", new Integer(2)},
106
{"+18", new Integer(3)},
107
{"+208", new Integer(4)},
108
{"+2360", new Integer(4)},
109
{"+2413", new Integer(2)},
110
{"+42195", new Integer(2)},
111
{"+0AbC", new Integer(2)},
112
{"+ 1342", new Integer(1)},
113
{"+-1342", new Integer(1)},
114
{"1342", new Integer(0)},
115
/* Arabic-Indic digits */
116
{"GMT+\u0660\u0661:\u0662\u0663", new Integer(4)},
117
/* Extended Arabic-Indic digits */
118
{"GMT+\u06f0\u06f1:\u06f2\u06f3", new Integer(4)},
119
/* Devanagari digits */
120
{"GMT+\u0966\u0967:\u0968\u0969", new Integer(4)},
121
/* Fullwidth digits */
122
{"GMT+\uFF10\uFF11:\uFF12\uFF13", new Integer(4)},
123
124
{"GMT-8", new Integer(5)},
125
{"GMT-18", new Integer(6)},
126
{"GMT-208", new Integer(6)},
127
{"GMT-0304", new Integer(6)},
128
{"GMT-42195", new Integer(5)},
129
{"GMT-5:8", new Integer(7)},
130
{"GMT-23:60", new Integer(8)},
131
{"GMT-11:1", new Integer(8)},
132
{"GMT-24:13", new Integer(5)},
133
{"GMT-421:950", new Integer(5)},
134
{"GMT-0a:0A", new Integer(5)},
135
{"GMT- 13:42", new Integer(4)},
136
{"GMT-13 :42", new Integer(6)},
137
{"GMT-13: 42", new Integer(7)},
138
{"GMT-+13:42", new Integer(4)},
139
{"-8", new Integer(2)},
140
{"-18", new Integer(3)},
141
{"-208", new Integer(4)},
142
{"-2360", new Integer(4)},
143
{"-2413", new Integer(2)},
144
{"-42195", new Integer(2)},
145
{"-0AbC", new Integer(2)},
146
{"- 1342", new Integer(1)},
147
{"--1342", new Integer(1)},
148
{"-802", new Integer(2)},
149
/* Arabic-Indic digits */
150
{"GMT-\u0660\u0661:\u0662\u0663", new Integer(4)},
151
/* Extended Arabic-Indic digits */
152
{"GMT-\u06f0\u06f1:\u06f2\u06f3", new Integer(4)},
153
/* Devanagari digits */
154
{"GMT-\u0966\u0967:\u0968\u0969", new Integer(4)},
155
/* Fullwidth digits */
156
{"GMT-\uFF10\uFF11:\uFF12\uFF13", new Integer(4)},
157
};
158
159
try {
160
for (int i=0; i < locs.length; i++) {
161
Locale.setDefault(locs[i]);
162
163
for (int j=0; j < formats.length; j++) {
164
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
165
SimpleDateFormat sdf = new SimpleDateFormat(formats[j]);
166
Date date;
167
168
/* Okay case */
169
for (int k=0; k < valids.length; k++) {
170
ParsePosition pos = new ParsePosition(0);
171
try {
172
date = sdf.parse((String)valids[k][0], pos);
173
}
174
catch (Exception e) {
175
err = true;
176
System.err.println("\tParse Error [Locale=" +
177
Locale.getDefault() + ", " + formats[j] +
178
"/\"" + valids[k][0] +
179
"\"] Unexpected Exception occurred: " + e);
180
continue;
181
}
182
183
int offset = pos.getIndex();
184
if (offset != ((Integer)valids[k][4]).intValue()) {
185
err = true;
186
System.err.println("\tParse Error [Locale=" +
187
Locale.getDefault() + ", " + formats[j] +
188
"/\"" + valids[k][0] +
189
"\"] invalid index: expected:" + valids[k][4] +
190
", got:" + offset);
191
}
192
193
if (date.getTime() != ((Long)valids[k][1]).longValue()) {
194
err = true;
195
System.err.println("\tParse Error [Locale=" +
196
Locale.getDefault() + ", " + formats[j] +
197
"/\"" + valids[k][0] +
198
"\"] expected:" + valids[k][1] +
199
", got:" + date.getTime() + ", " + date);
200
} else {
201
/*
202
logln("\tParse Okay [Locale=" +
203
Locale.getDefault() + ", " + formats[j] +
204
"/\"" + valids[k][0] +
205
"\"] expected:" + valids[k][1] +
206
", got:" + date.getTime() + ", " + date);
207
*/
208
209
try {
210
date = sdf.parse((String)valids[k][0]);
211
}
212
catch (Exception e) {
213
err = true;
214
System.err.println("\tParse Error [Locale=" +
215
Locale.getDefault() + ", " + formats[j] +
216
"/\"" + valids[k][0] +
217
"\"] Unexpected Exception occurred: " + e);
218
continue;
219
}
220
221
/* Since TimeZone.getTimeZone() don't treat
222
* "+00234" or "-00234" as a valid ID, skips.
223
*/
224
if (((String)valids[k][0]).length() == 6) {
225
continue;
226
}
227
228
/* Since TimeZone.getTimeZone() don't recognize
229
* +hhmm/-hhmm format, add "GMT" as prefix.
230
*/
231
sdf.setTimeZone(TimeZone.getTimeZone(
232
(((((String)valids[k][0]).charAt(0) != 'G') ?
233
"GMT" : "") + valids[k][0])));
234
StringBuffer s = new StringBuffer();
235
sdf.format(date, s, new FieldPosition(0));
236
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
237
238
String got = s.toString();
239
String expected = (String)valids[k][2+j];
240
if (!got.equals(expected) &&
241
// special case to allow the difference between
242
// DateFormatSymbols.getZoneStrings() and
243
// TimeZone.getDisplayName() for "GMT+-00:00"
244
!(got.equals("GMT-00:00") &&
245
expected.equals("GMT+00:00"))) {
246
err = true;
247
System.err.println("\tFormat Error [Locale=" +
248
Locale.getDefault() + ", " +
249
formats[j] + "/\"" + valids[k][0] +
250
"\"] expected:" + valids[k][2+j] +
251
", got:" + s + ", " + date);
252
} else {
253
/*
254
logln("\tFormat Okay [Locale=" +
255
Locale.getDefault() + ", " +
256
formats[j] + "/\"" + valids[k][0] +
257
"\"] expected:" + valids[k][2+j] +
258
", got:" + s + ", " + date);
259
*/
260
}
261
}
262
}
263
264
/* Error case 1
265
* using SimpleDateFormat.parse(String, ParsePosition)
266
*/
267
for (int k=0; k < invalids.length; k++) {
268
ParsePosition pos = new ParsePosition(0);
269
try {
270
date = sdf.parse((String)invalids[k][0], pos);
271
if (date != null) {
272
err = true;
273
System.err.println("\tParse Error [Locale=" +
274
Locale.getDefault() + ", " + formats[j] +
275
"/\"" + invalids[k][0] +
276
"\"] expected:null , got:" + date);
277
}
278
int offset = pos.getErrorIndex();
279
if (offset != ((Integer)invalids[k][1]).intValue()) {
280
err = true;
281
System.err.println("\tParse Error [Locale=" +
282
Locale.getDefault() + ", " + formats[j] +
283
"/\"" + invalids[k][0] +
284
"\"] incorrect offset. expected:" +
285
invalids[k][1] + ", got: " + offset);
286
} else {
287
/*
288
logln("\tParse Okay [Locale=" +
289
Locale.getDefault() + ", " + formats[j] +
290
"/\"" + invalids[k][0] +
291
"\"] correct offset: " + offset);
292
*/
293
}
294
}
295
catch (Exception e) {
296
err = true;
297
System.err.println("\tParse Error [Locale=" +
298
Locale.getDefault() + ", " + formats[j] +
299
"/\"" + invalids[k][0] +
300
"\"] Unexpected Exception occurred: " + e);
301
}
302
}
303
304
/* Error case 2
305
* using DateFormat.parse(String)
306
*/
307
boolean correctParseException = false;
308
for (int k=0; k < invalids.length; k++) {
309
try {
310
date = sdf.parse((String)invalids[k][0]);
311
}
312
catch (ParseException e) {
313
correctParseException = true;
314
int offset = e.getErrorOffset();
315
if (offset != ((Integer)invalids[k][1]).intValue()) {
316
err = true;
317
System.err.println("\tParse Error [Locale=" +
318
Locale.getDefault() + ", " + formats[j] +
319
"/\"" + invalids[k][0] +
320
"\"] Expected exception occurred with an incorrect offset. expected:" +
321
invalids[k][1] + ", got: " + offset);
322
} else {
323
/*
324
logln("\tParse Okay [Locale=" +
325
Locale.getDefault() + ", " + formats[j] +
326
"/\"" + invalids[k][0] +
327
"\"] Expected exception occurred with an correct offset: "
328
+ offset);
329
*/
330
}
331
}
332
catch (Exception e) {
333
err = true;
334
System.err.println("\tParse Error [Locale=" +
335
Locale.getDefault() + ", " + formats[j] +
336
"/\"" + invalids[k][0] +
337
"\"] Invalid exception occurred: " + e);
338
}
339
finally {
340
if (!correctParseException) {
341
err = true;
342
System.err.println("\tParse Error: [Locale=" +
343
Locale.getDefault() + ", " + formats[j] +
344
"/\"" + invalids[k][0] +
345
"\"] Expected exception didn't occur.");
346
}
347
}
348
}
349
}
350
}
351
}
352
finally {
353
Locale.setDefault(savedLocale);
354
TimeZone.setDefault(savedTimeZone);
355
if (err) {
356
errln("SimpleDateFormat.parse()/format() test failed");
357
}
358
}
359
}
360
361
public static void main(String[] args) throws Exception {
362
new Bug4322313().run(args);
363
}
364
}
365
366