TestUTF_16.java revision 2362
2362N/A * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. 2115N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 2115N/A * This code is free software; you can redistribute it and/or modify it 2115N/A * under the terms of the GNU General Public License version 2 only, as 2115N/A * published by the Free Software Foundation. 2115N/A * This code is distributed in the hope that it will be useful, but WITHOUT 2115N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 2115N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 2115N/A * version 2 for more details (a copy is included in the LICENSE file that 2115N/A * You should have received a copy of the GNU General Public License version 2115N/A * 2 along with this work; if not, write to the Free Software Foundation, 2115N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2362N/A * or visit www.oracle.com if you need additional information or have any 2115N/A @bug 4403848 6348426 6407730 2115N/A @summary Check correctness of the UTF-16 converter in all its flavors warn(
"expected char[" + i +
"] : " +
"obtained char[" + i +
"] : " +
private static void checkResult(char[] expected, if (testStr.length() != expected.length) failureReport(testStr, expected); for (int i = 0; i < testStr.length(); i++) { if (testStr.charAt(i) != expected[i]) { failureReport(testStr, expected); throw new Exception ("REGTEST TestUTF16 failed: " System.err.println ("Test " + testName + " PASSED"); // Tests: Check decoding of UTF-16. // Ensures correct endian polarity // of the decoders and appropriate // interpretation of BOM bytes where // Test 1: BigEndian UTF-16 Decoding new byte[] { (
byte)
0x00, (
byte)
0x92,
(
byte)
0x00, (
byte)
0x93 });
// Test 1a: BigEndian UTF-16 Decoding. BOM bytes provided. new byte[] { (
byte)
0xfe, (
byte)
0xff,
(
byte)
0x00, (
byte)
0x92,
(
byte)
0x00, (
byte)
0x93 });
new byte[] { (
byte)
0x00, (
byte)
0x92,
(
byte)
0x00, (
byte)
0x93 });
// Test 2a: LittleEndian UTF-16 Decoding, BOM bytes provided. new byte[] { (
byte)
0xff, (
byte)
0xfe,
(
byte)
0x00, (
byte)
0x92,
(
byte)
0x00, (
byte)
0x93 });
// Test 3: UTF-16 (with mandatory byte order mark) Decoding new byte[] { (
byte)
0xfe, (
byte)
0xff,
(
byte)
0x92, (
byte)
0x00,
(
byte)
0x93, (
byte)
0x00 });
// Test 3a: UTF-16 BOM omitted. This should decode OK. new byte[] { (
byte)
0x92, (
byte)
0x00,
(
byte)
0x93, (
byte)
0x00 });
// Test 4: encoding using UTF-16 // BOM must be emitted when encoding and must be BigEndian. new byte[] { (
byte)
0xfe, (
byte)
0xff,
(
byte)
0x01, (
byte)
0x23 });
throw new Exception (
"REGTEST TestUTF16 Overflow test failed");
// UnicodeLittle should accept non-BOM byte sequence new byte[] {
'A',
0,
'r',
0,
'i',
0,
'a',
0,
'l',
0});
// Reversed BOM in middle of stream Negative test. boolean caughtException = false; String out = new String(new byte[] {(byte)0x00, } catch (IOException e) { caughtException = true; } if (caughtException == false) throw new Exception ("Incorrectly parsed BOM in middle of input"); // Fixed included with bug 4403848 fixes buffer sizing // issue due to non provision of additional 2 bytes // headroom for initial BOM bytes for UTF-16 encoding.