| /* | |
| * 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); | |
| } | |
| } |