e52a340d7f
Reviewed-by: iris, joehw, alanb
410 lines
9.9 KiB
Java
410 lines
9.9 KiB
Java
/*
|
|
* Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
/*
|
|
* @test
|
|
* @bug 4625418 8239965 8290488
|
|
* @summary Tests XML <a href="http://download.java.net/jdk6/docs/technotes/guides/intl/encoding.doc.html">encoding</a>
|
|
* @author Sergey Malenkov
|
|
* @run main/timeout=360 Test4625418
|
|
*/
|
|
|
|
import java.beans.ExceptionListener;
|
|
import java.beans.XMLDecoder;
|
|
import java.beans.XMLEncoder;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.InputStream;
|
|
import java.nio.charset.IllegalCharsetNameException;
|
|
import java.nio.charset.UnsupportedCharsetException;
|
|
|
|
public final class Test4625418 implements ExceptionListener {
|
|
|
|
private static final String[] encodings = {
|
|
"ASCII",
|
|
"Big5",
|
|
//"Big5-HKSCS",
|
|
//"Big5_HKSCS",
|
|
"Big5_Solaris",
|
|
//"Cp037",
|
|
"Cp1006",
|
|
//"Cp1025",
|
|
//"Cp1026",
|
|
"Cp1046",
|
|
"Cp1047",
|
|
"Cp1097",
|
|
"Cp1098",
|
|
//"Cp1112",
|
|
//"Cp1122",
|
|
//"Cp1123",
|
|
"Cp1124",
|
|
//"Cp1140",
|
|
//"Cp1141",
|
|
//"Cp1142",
|
|
//"Cp1143",
|
|
//"Cp1144",
|
|
//"Cp1145",
|
|
//"Cp1146",
|
|
//"Cp1147",
|
|
//"Cp1148",
|
|
//"Cp1149",
|
|
"Cp1250",
|
|
"Cp1251",
|
|
"Cp1252",
|
|
"Cp1253",
|
|
"Cp1254",
|
|
"Cp1255",
|
|
"Cp1256",
|
|
"Cp1257",
|
|
"Cp1258",
|
|
//"Cp1381",
|
|
//"Cp1383",
|
|
//"Cp273",
|
|
//"Cp277",
|
|
//"Cp278",
|
|
//"Cp280",
|
|
//"Cp284",
|
|
//"Cp285",
|
|
//"Cp297",
|
|
//"Cp33722",
|
|
//"Cp420",
|
|
//"Cp424",
|
|
"Cp437",
|
|
//"Cp500",
|
|
//"Cp50220",
|
|
//"Cp50221",
|
|
"Cp737",
|
|
"Cp775",
|
|
//"Cp834",
|
|
//"Cp838",
|
|
"Cp850",
|
|
"Cp852",
|
|
"Cp855",
|
|
"Cp856",
|
|
"Cp857",
|
|
"Cp858",
|
|
"Cp860",
|
|
"Cp861",
|
|
"Cp862",
|
|
"Cp863",
|
|
//"Cp864",
|
|
"Cp865",
|
|
"Cp866",
|
|
"Cp868",
|
|
"Cp869",
|
|
//"Cp870",
|
|
//"Cp871",
|
|
"Cp874",
|
|
//"Cp875",
|
|
//"Cp918",
|
|
"Cp921",
|
|
"Cp922",
|
|
//"Cp930",
|
|
"Cp933",
|
|
//"Cp935",
|
|
//"Cp937",
|
|
//"Cp939",
|
|
//"Cp942",
|
|
//"Cp942C",
|
|
//"Cp943",
|
|
//"Cp943C",
|
|
"Cp948",
|
|
"Cp949",
|
|
//"Cp949C",
|
|
"Cp950",
|
|
"Cp964",
|
|
//"Cp970",
|
|
//"EUC-JP",
|
|
"EUC-KR",
|
|
"EUC_CN",
|
|
//"EUC_JP",
|
|
//"EUC_JP_LINUX",
|
|
//"EUC_JP_Solaris",
|
|
"EUC_KR",
|
|
//"EUC_TW",
|
|
"GB18030",
|
|
"GB2312",
|
|
"GBK",
|
|
//"IBM-Thai",
|
|
"IBM00858",
|
|
//"IBM01140",
|
|
//"IBM01141",
|
|
//"IBM01142",
|
|
//"IBM01143",
|
|
//"IBM01144",
|
|
//"IBM01145",
|
|
//"IBM01146",
|
|
//"IBM01147",
|
|
//"IBM01148",
|
|
//"IBM01149",
|
|
//"IBM037",
|
|
//"IBM1026",
|
|
"IBM1047",
|
|
//"IBM273",
|
|
//"IBM277",
|
|
//"IBM278",
|
|
//"IBM280",
|
|
//"IBM284",
|
|
//"IBM285",
|
|
//"IBM297",
|
|
//"IBM420",
|
|
//"IBM424",
|
|
"IBM437",
|
|
//"IBM500",
|
|
"IBM775",
|
|
"IBM850",
|
|
"IBM852",
|
|
"IBM855",
|
|
"IBM857",
|
|
"IBM860",
|
|
"IBM861",
|
|
"IBM862",
|
|
"IBM863",
|
|
//"IBM864",
|
|
"IBM865",
|
|
"IBM866",
|
|
"IBM868",
|
|
"IBM869",
|
|
//"IBM870",
|
|
//"IBM871",
|
|
//"IBM918",
|
|
//"ISCII91",
|
|
//"ISO-2022-CN",
|
|
"ISO-2022-JP",
|
|
"ISO-2022-KR",
|
|
"ISO-8859-1",
|
|
"ISO-8859-13",
|
|
"ISO-8859-15",
|
|
"ISO-8859-2",
|
|
"ISO-8859-3",
|
|
"ISO-8859-4",
|
|
"ISO-8859-5",
|
|
"ISO-8859-6",
|
|
"ISO-8859-7",
|
|
"ISO-8859-8",
|
|
"ISO-8859-9",
|
|
//"ISO2022CN",
|
|
"ISO2022JP",
|
|
"ISO2022KR",
|
|
//"ISO2022_CN_CNS",
|
|
//"ISO2022_CN_GB",
|
|
"ISO8859_1",
|
|
"ISO8859_13",
|
|
"ISO8859_15",
|
|
"ISO8859_2",
|
|
"ISO8859_3",
|
|
"ISO8859_4",
|
|
"ISO8859_5",
|
|
"ISO8859_6",
|
|
"ISO8859_7",
|
|
"ISO8859_8",
|
|
"ISO8859_9",
|
|
//"JISAutoDetect",
|
|
//"JIS_X0201",
|
|
//"JIS_X0212-1990",
|
|
"KOI8-R",
|
|
"KOI8-U",
|
|
"KOI8_R",
|
|
"KOI8_U",
|
|
"MS874",
|
|
//"MS932",
|
|
//"MS936",
|
|
"MS949",
|
|
"MS950",
|
|
//"MS950_HKSCS",
|
|
"MacArabic",
|
|
"MacCentralEurope",
|
|
"MacCroatian",
|
|
"MacCyrillic",
|
|
//"MacDingbat",
|
|
"MacGreek",
|
|
"MacHebrew",
|
|
"MacIceland",
|
|
"MacRoman",
|
|
"MacRomania",
|
|
//"MacSymbol",
|
|
"MacThai",
|
|
"MacTurkish",
|
|
"MacUkraine",
|
|
//"PCK",
|
|
//"SJIS",
|
|
//"Shift_JIS",
|
|
"TIS-620",
|
|
"TIS620",
|
|
"US-ASCII",
|
|
"UTF-16",
|
|
"UTF-16BE",
|
|
"UTF-16LE",
|
|
"UTF-32",
|
|
"UTF-32BE",
|
|
"UTF-32LE",
|
|
"UTF-8",
|
|
"UTF8",
|
|
"UTF_32",
|
|
"UTF_32BE",
|
|
//"UTF_32BE_BOM",
|
|
"UTF_32LE",
|
|
//"UTF_32LE_BOM",
|
|
"UnicodeBig",
|
|
"UnicodeBigUnmarked",
|
|
"UnicodeLittle",
|
|
"UnicodeLittleUnmarked",
|
|
"windows-1250",
|
|
"windows-1251",
|
|
"windows-1252",
|
|
"windows-1253",
|
|
"windows-1254",
|
|
"windows-1255",
|
|
"windows-1256",
|
|
"windows-1257",
|
|
"windows-1258",
|
|
//"windows-31j",
|
|
//"x-Big5_Solaris",
|
|
//"x-EUC-TW",
|
|
"x-IBM1006",
|
|
//"x-IBM1025",
|
|
"x-IBM1046",
|
|
"x-IBM1097",
|
|
"x-IBM1098",
|
|
//"x-IBM1112",
|
|
//"x-IBM1122",
|
|
//"x-IBM1123",
|
|
"x-IBM1124",
|
|
//"x-IBM1381",
|
|
//"x-IBM1383",
|
|
//"x-IBM33722",
|
|
"x-IBM737",
|
|
//"x-IBM834",
|
|
"x-IBM856",
|
|
"x-IBM874",
|
|
//"x-IBM875",
|
|
"x-IBM921",
|
|
"x-IBM922",
|
|
//"x-IBM930",
|
|
"x-IBM933",
|
|
//"x-IBM935",
|
|
//"x-IBM937",
|
|
//"x-IBM939",
|
|
//"x-IBM942",
|
|
//"x-IBM942C",
|
|
//"x-IBM943",
|
|
//"x-IBM943C",
|
|
"x-IBM948",
|
|
"x-IBM949",
|
|
//"x-IBM949C",
|
|
"x-IBM950",
|
|
"x-IBM964",
|
|
//"x-IBM970",
|
|
//"x-ISCII91",
|
|
//"x-ISO2022-CN-CNS",
|
|
//"x-ISO2022-CN-GB",
|
|
//"x-JIS0208",
|
|
//"x-JISAutoDetect",
|
|
"x-Johab",
|
|
//"x-MS950-HKSCS",
|
|
"x-MacArabic",
|
|
"x-MacCentralEurope",
|
|
"x-MacCroatian",
|
|
"x-MacCyrillic",
|
|
//"x-MacDingbat",
|
|
"x-MacGreek",
|
|
"x-MacHebrew",
|
|
"x-MacIceland",
|
|
"x-MacRoman",
|
|
"x-MacRomania",
|
|
//"x-MacSymbol",
|
|
"x-MacThai",
|
|
"x-MacTurkish",
|
|
"x-MacUkraine",
|
|
//"x-PCK",
|
|
"x-UTF-16LE-BOM",
|
|
//"x-UTF-32BE-BOM",
|
|
//"x-UTF-32LE-BOM",
|
|
//"x-euc-jp-linux",
|
|
//"x-eucJP-Open",
|
|
"x-iso-8859-11",
|
|
"x-mswin-936",
|
|
//"x-windows-50220",
|
|
//"x-windows-50221",
|
|
"x-windows-874",
|
|
"x-windows-949",
|
|
"x-windows-950",
|
|
//"x-windows-iso2022jp",
|
|
};
|
|
|
|
public static void main(final String[] args) {
|
|
final String string = createString(0x10000);
|
|
for (String encoding : encodings) {
|
|
System.out.println("Test encoding: " + encoding);
|
|
new Test4625418(encoding).test(string);
|
|
}
|
|
}
|
|
|
|
private static String createString(int length) {
|
|
StringBuilder sb = new StringBuilder(length);
|
|
while (0 < length--)
|
|
sb.append((char) length);
|
|
|
|
return sb.toString();
|
|
}
|
|
|
|
private final String encoding;
|
|
|
|
private Test4625418(final String encoding) {
|
|
this.encoding = encoding;
|
|
}
|
|
|
|
private void test(String string) {
|
|
try {
|
|
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
XMLEncoder encoder = new XMLEncoder(output, this.encoding, true, 0);
|
|
encoder.setExceptionListener(this);
|
|
encoder.writeObject(string);
|
|
encoder.close();
|
|
|
|
InputStream input = new ByteArrayInputStream(output.toByteArray());
|
|
XMLDecoder decoder = new XMLDecoder(input);
|
|
decoder.setExceptionListener(this);
|
|
Object object = decoder.readObject();
|
|
decoder.close();
|
|
|
|
if (!string.equals(object)) {
|
|
throw new Error(this.encoding + " - can't read properly");
|
|
}
|
|
}
|
|
catch (IllegalCharsetNameException exception) {
|
|
throw new Error(this.encoding + " - illegal charset name", exception);
|
|
}
|
|
catch (UnsupportedCharsetException exception) {
|
|
throw new Error(this.encoding + " - unsupported charset", exception);
|
|
}
|
|
catch (UnsupportedOperationException exception) {
|
|
throw new Error(this.encoding + " - unsupported encoder", exception);
|
|
}
|
|
}
|
|
|
|
public void exceptionThrown(Exception exception) {
|
|
throw new Error(this.encoding + " - internal", exception);
|
|
}
|
|
}
|