156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more 256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * contributor license agreements. See the NOTICE file distributed with 356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * this work for additional information regarding copyright ownership. 456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * (the "License"); you may not use this file except in compliance with 656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * the License. You may obtain a copy of the License at 75ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes * 856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 95ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes * 1056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Unless required by applicable law or agreed to in writing, software 1156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 1256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * See the License for the specific language governing permissions and 1456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * limitations under the License. 1556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 16e5fea3d504609d22337a5311d3ce0e72314bceeeNarayan Kamathpackage org.apache.harmony.tests.java.nio.charset; 1756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 1856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.ByteBuffer; 1956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.CharBuffer; 2056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.CharacterCodingException; 2156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.Charset; 2256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.CharsetDecoder; 2356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.CharsetEncoder; 2456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.CoderResult; 2556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.CodingErrorAction; 2656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.MalformedInputException; 2756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.UnmappableCharacterException; 2856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.UnsupportedCharsetException; 2956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.util.Arrays; 3056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 3156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport junit.framework.TestCase; 3256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 3356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes/** 3456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * API unit test for java.nio.charset.CharsetEncoder 3556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 3656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughespublic class CharsetEncoderTest extends TestCase { 3756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 3856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes static final int MAX_BYTES = 3; 3956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 4056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes static final float AVER_BYTES = 0.5f; 4156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 4256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // charset for mock class 4356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes private static final Charset MOCKCS = new MockCharset("CharsetEncoderTest_mock", new String[0]); 4456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 4556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes Charset cs = MOCKCS; 4656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 4756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // default encoder 4856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharsetEncoder encoder; 4956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 5056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // default for Charset abstract class 5156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] defaultReplacement = new byte[] { 63 }; 5256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 5356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // specific for Charset implementation subclass 5456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] specifiedReplacement = new byte[] { 63 }; 5556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 5656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes static final String unistr = " buffer";// \u8000\u8001\u00a5\u3000\r\n"; 5756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 5856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] unibytes = new byte[] { 32, 98, 117, 102, 102, 101, 114 }; 5956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 6056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] unibytesWithRep = null; 6156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 6256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] surrogate = new byte[0]; 6356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 6456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected void setUp() throws Exception { 6556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super.setUp(); 6656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder = cs.newEncoder(); 6756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (null == unibytesWithRep) { 6856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] replacement = encoder.replacement(); 6956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes unibytesWithRep = new byte[replacement.length + unibytes.length]; 7056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.arraycopy(replacement, 0, unibytesWithRep, 0, 7156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes replacement.length); 7256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.arraycopy(unibytes, 0, unibytesWithRep, replacement.length, 7356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes unibytes.length); 7456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 7556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 7656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 7756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 7856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * @see TestCase#tearDown() 7956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 8056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected void tearDown() throws Exception { 8156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super.tearDown(); 8256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 8356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 8456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testSpecificDefaultValue() { 8556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.averageBytesPerChar() == AVER_BYTES); 8656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.maxBytesPerChar() == MAX_BYTES); 8756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 8856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 8956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDefaultValue() { 9056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(CodingErrorAction.REPORT, encoder.malformedInputAction()); 915ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes assertEquals(CodingErrorAction.REPORT, encoder.unmappableCharacterAction()); 9256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.onMalformedInput(CodingErrorAction.IGNORE)); 935ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes assertSame(encoder, encoder.onUnmappableCharacter(CodingErrorAction.IGNORE)); 9456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (encoder instanceof MockCharsetEncoder) { 9556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(Arrays.equals(encoder.replacement(), defaultReplacement)); 9656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else { 975ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes assertTrue(Arrays.equals(encoder.replacement(), specifiedReplacement)); 9856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 9956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 10056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 10156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 10256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 10356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for constructor CharsetEncoder(Charset, float, float) 10456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 10556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testCharsetEncoderCharsetfloatfloat() { 10656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // default value 10756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder = new MockCharsetEncoder(cs, (float) AVER_BYTES, MAX_BYTES); 10856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder.charset(), cs); 10956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.averageBytesPerChar() == AVER_BYTES); 11056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.maxBytesPerChar() == MAX_BYTES); 11156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(CodingErrorAction.REPORT, encoder.malformedInputAction()); 11256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(CodingErrorAction.REPORT, encoder 11356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .unmappableCharacterAction()); 11456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(new String(encoder.replacement()), new String( 11556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes defaultReplacement)); 11656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.onMalformedInput(CodingErrorAction.IGNORE)); 11756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder 11856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .onUnmappableCharacter(CodingErrorAction.IGNORE)); 11956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 12056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case 12156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharsetEncoder ec = new MockCharsetEncoder(cs, 1, MAX_BYTES); 12256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(ec.charset(), cs); 12356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(1.0, ec.averageBytesPerChar(), 0); 12456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(ec.maxBytesPerChar() == MAX_BYTES); 12556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 12656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 12756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * ------------------------ Exceptional cases ------------------------- 12856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 12956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // NullPointerException: null charset 13056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 13156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(null, 1, MAX_BYTES); 13256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 13356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 13456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 13556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 13656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(new MockCharset("mock", new String[0]), 1, 13756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes MAX_BYTES); 13856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 13956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Commented out since the comment is wrong since MAX_BYTES > 1 14056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // // OK: average length less than max length 14156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // ec = new MockCharsetEncoder(cs, MAX_BYTES, 1); 14256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertTrue(ec.averageBytesPerChar() == MAX_BYTES); 14356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertTrue(ec.maxBytesPerChar() == 1); 14456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 14556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: zero length 14656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 14756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 0, MAX_BYTES); 14856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 14956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 15056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 15156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 15256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 1, 0); 15356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 15456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 15556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 15656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 15756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: negative length 15856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 15956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, -1, MAX_BYTES); 16056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 16156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 16256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 16356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 16456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 1, -1); 16556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 16656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 16756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 16856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 16956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 17056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 17156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for constructor CharsetEncoder(Charset, float, float, 17256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * byte[]) 17356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 17456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testCharsetEncoderCharsetfloatfloatbyteArray() { 17556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] ba = getLegalByteArray(); 17656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case 17756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharsetEncoder ec = new MockCharsetEncoder(cs, 1, MAX_BYTES, ba); 17856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(ec.charset(), cs); 17956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(1.0, ec.averageBytesPerChar(), 0.0); 18056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(ec.maxBytesPerChar() == MAX_BYTES); 181861d34f160de8a5f94b2b8b453daca5246052450Shubham Ajmera assertTrue(Arrays.equals(ba, ec.replacement())); 18256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 18356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 18456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * ------------------------ Exceptional cases ------------------------- 18556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 18656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // NullPointerException: null charset 18756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 18856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(null, 1, MAX_BYTES, ba); 18956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 19056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 19156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 19256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 19356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: null byte array 19456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 19556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 1, MAX_BYTES, null); 19656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 19756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 19856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 19956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: empty byte array 20056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 20156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 1, MAX_BYTES, new byte[0]); 20256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 20356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 20456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 20556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: byte array is longer than max length 20656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 20756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 1, MAX_BYTES, new byte[] { 1, 2, 20856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes MAX_BYTES, 4 }); 20956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 21056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 21156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 21256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 21356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Commented out since the comment is wrong since MAX_BYTES > 1 21456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // This test throws IllegalArgumentException on Harmony and RI 21556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // // OK: average length less than max length 21656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // ec = new MockCharsetEncoder(cs, MAX_BYTES, ba.length, ba); 21756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertTrue(ec.averageBytesPerChar() == MAX_BYTES); 21856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertTrue(ec.maxBytesPerChar() == ba.length); 21956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 22056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: zero length 22156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 22256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 0, MAX_BYTES, ba); 22356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 22456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 22556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 22656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 22756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 1, 0, ba); 22856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 22956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 23056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 23156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 23256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: negative length 23356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 23456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, -1, MAX_BYTES, ba); 23556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 23656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 23756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 23856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 23956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetEncoder(cs, 1, -1, ba); 24056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 24156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 24256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 24356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 24456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 24556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 24656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for boolean canEncode(char) 24756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 24856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testCanEncodechar() throws CharacterCodingException { 24956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // for non-mapped char 25056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.canEncode('\uc2c0')); 25156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // surrogate char for unicode 25256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // 1st byte: d800-dbff 25356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // 2nd byte: dc00-dfff 25456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.canEncode('\ud800')); 25556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // valid surrogate pair 25656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.canEncode('\udc00')); 25756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 25856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 25956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /*----------------------------------------- 26056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for illegal state case 26156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * methods which can change internal states are two encode, flush, two canEncode, reset 26256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * ----------------------------------------- 26356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 26456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 26556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after reset, and it also means reset can be done 26656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // anywhere 26756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testResetIllegalState() throws CharacterCodingException { 26856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 26956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode('\ud901'); 27056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 27156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud901\udc00"); 27256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 27356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("aaa")); 27456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 27556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("aaa"), ByteBuffer.allocate(3), false); 27656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 27756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("aaa"), ByteBuffer.allocate(3), true); 27856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 27956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 28056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 2816ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes public void testFlushIllegalState() throws CharacterCodingException { 2826ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 2836ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes ByteBuffer out = ByteBuffer.allocate(5); 2846ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes 2856ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes // Illegal state: after reset. 2866ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes encoder.reset(); 2876ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes try { 2886ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes encoder.flush(out); 2896ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes fail(); 2906ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes } catch (IllegalStateException expected) { 2916ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes } 2926ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes 2936ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes // Normal case: after encode with endOfInput is true 2946ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes assertSame(encoder, encoder.reset()); 2956ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes encoder.encode(in, out, true); 2966ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes out.rewind(); 2976ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes CoderResult result = encoder.flush(out); 2986ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes 2996ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes // Good state: flush twice 3006ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes encoder.flush(out); 3016ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes 3026ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes // Illegal state: flush after encode with endOfInput is false 3036ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes assertSame(encoder, encoder.reset()); 3046ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes encoder.encode(in, out, false); 3056ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes try { 3066ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes encoder.flush(out); 3076ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes fail(); 3086ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes } catch (IllegalStateException expected) { 3096ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes } 3106ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes } 3115ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes 31256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testFlushAfterConstructing() { 31356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer out = ByteBuffer.allocate(5); 3145ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes 31556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes //Illegal state: flush after instance created 31656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 3175ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes encoder.flush(out); 31856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalStateException"); 31956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 32056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Expected 32156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 32256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 32356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 32456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 32556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // test illegal states for encode facade 32656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testEncodeFacadeIllegalState() throws CharacterCodingException { 32756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // encode facade can be execute in anywhere 32856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 32956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just created 33056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 33156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 33256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 33356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after encode facade 33456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 33556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 33656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 33756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after canEncode 33856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 33956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud902\udc00"); 34056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 34156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 34256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 34356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode('\ud902'); 34456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 34556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 34656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 34756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after encode with that endOfInput is true 34856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 34956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState2"), 35056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), true); 35156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 35256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 35356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 35456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case:just after encode with that endOfInput is false 35556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 35656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState3"), 35756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), false); 35856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 35956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 36056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 36156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after flush 36256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 36356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState4"), 36456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), true); 36556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.flush(ByteBuffer.allocate(10)); 36656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 36756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 36856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 36956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 37056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // test illegal states for two encode method with endOfInput is true 37156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testEncodeTrueIllegalState() throws CharacterCodingException { 37256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 37356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer out = ByteBuffer.allocate(5); 37456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just created 37556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, true); 37656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 37756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 37856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 37956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 38056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 38156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 38256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after encode with that endOfInput is true 38356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 38456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState2"), 38556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), true); 38656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, true); 38756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 38856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 38956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 39056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case:just after encode with that endOfInput is false 39156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 39256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState3"), 39356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), false); 39456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, true); 39556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 39656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 39756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 39856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after flush 39956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 40056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState4"), 40156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), true); 40256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.flush(ByteBuffer.allocate(10)); 40356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 40456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, true); 40556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should illegal state"); 40656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 40756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 40856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 40956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: after canEncode 41056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 41156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud906\udc00"); 41256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, true); 41356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 41456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 41556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 41656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode('\ud905'); 41756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, true); 41856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 41956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 42056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // test illegal states for two encode method with endOfInput is false 42156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testEncodeFalseIllegalState() throws CharacterCodingException { 42256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 42356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer out = ByteBuffer.allocate(5); 42456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just created 42556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, false); 42656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 42756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 42856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 42956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after encode facade 43056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 43156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState1")); 43256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 43356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, false); 43456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should illegal state"); 43556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 43656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 43756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 43856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after encode with that endOfInput is true 43956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 44056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState2"), 44156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), true); 44256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 44356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, false); 44456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should illegal state"); 44556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 44656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 44756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 44856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case:just after encode with that endOfInput is false 44956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 45056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState3"), 45156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), false); 45256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, false); 45356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 45456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 45556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 45656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after flush 45756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 45856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState4"), 45956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), true); 46056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.flush(ByteBuffer.allocate(10)); 46156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 46256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, false); 46356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should illegal state"); 46456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 46556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 46656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 46756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: after canEncode 46856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 46956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud906\udc00"); 47056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, false); 47156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 47256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 47356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 47456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode('\ud905'); 47556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, out, false); 47656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 47756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 47856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // test illegal states for two canEncode methods 47956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testCanEncodeIllegalState() throws CharacterCodingException { 48056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just created 48156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud900\udc00"); 48256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode('\ud900'); 48356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 48456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after encode with that endOfInput is true 48556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 48656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState2"), 48756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), true); 48856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 48956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud903\udc00"); 49056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw illegal state exception"); 49156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 49256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 49356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 49456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state:just after encode with that endOfInput is false 49556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 49656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState3"), 49756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), false); 49856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 49956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud904\udc00"); 50056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw illegal state exception"); 50156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 50256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 50356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 50456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after flush 50556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState4"), 50656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer.allocate(30), true); 50756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.flush(ByteBuffer.allocate(10)); 50856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud905\udc00"); 50956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode('\ud906'); 51056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 51156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: after reset again 51256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 51356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode("\ud906\udc00"); 51456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.canEncode('\ud905'); 51556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 51656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 51756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 51856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * --------------------------------- illegal state test end 51956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * --------------------------------- 52056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 52156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 52256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 52356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for boolean canEncode(CharSequence) 52456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 52556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testCanEncodeCharSequence() { 52656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // for non-mapped char 52756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.canEncode("\uc2c0")); 52856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // surrogate char for unicode 52956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // 1st byte: d800-dbff 53056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // 2nd byte: dc00-dfff 53156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // valid surrogate pair 53256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.canEncode("\ud800\udc00")); 53356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // invalid surrogate pair 53456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.canEncode("\ud800\udb00")); 53556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 53656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 5375ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes public void test_canEncode_empty() throws Exception { 5385ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes assertTrue(encoder.canEncode("")); 5395ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes } 5405ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes 5415ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes public void test_canEncode_null() throws Exception { 5425ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes try { 5435ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes encoder.canEncode(null); 5445ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes fail(); 5455ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes } catch (NullPointerException e) { 5465ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes } 5475ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes } 5485ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes 54956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 55056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for Charset charset() 55156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 55256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testCharset() { 55356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 55456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder = new MockCharsetEncoder(Charset.forName("gbk"), 1, 55556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes MAX_BYTES); 55656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertSame(encoder.charset(), Charset.forName("gbk")); 55756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (UnsupportedCharsetException e) { 55856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.err 55956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .println("Don't support GBK encoding, ignore current test"); 56056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 56156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 56256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 56356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 56456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for ByteBuffer encode(CharBuffer) 56556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 56656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testEncodeCharBuffer() throws CharacterCodingException { 56756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Null pointer 56856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 56956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(null); 57056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 57156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 57256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 57356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 57456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // empty input buffer 57556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer out = encoder.encode(CharBuffer.wrap("")); 57656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.position(), 0); 57756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, new byte[0]); 57856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertByteArray(out, surrogate); 57956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 58056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case 58156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = encoder.encode(CharBuffer.wrap(unistr)); 58256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.position(), 0); 58356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(unibytes)); 5845ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes 58556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Regression test for harmony-3378 58656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes Charset cs = Charset.forName("UTF-8"); 58756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharsetEncoder encoder = cs.newEncoder(); 58856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.REPLACE); 58956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder = encoder.replaceWith(new byte[] { (byte) 0xef, (byte) 0xbf, 59056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes (byte) 0xbd, }); 59156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in = CharBuffer.wrap("\ud800"); 59256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = encoder.encode(in); 5935ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes assertNotNull(out); 59456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 59556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 59656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes private byte[] addSurrogate(byte[] expected) { 59756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (surrogate.length > 0) { 59856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] temp = new byte[surrogate.length + expected.length]; 59956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.arraycopy(surrogate, 0, temp, 0, surrogate.length); 60056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.arraycopy(expected, 0, temp, surrogate.length, 60156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes expected.length); 60256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes expected = temp; 60356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 60456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return expected; 60556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 60656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 60756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /** 60856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * @return 60956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 61056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected byte[] getEmptyByteArray() { 61156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return new byte[0]; 61256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 61356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 61456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer getMalformedCharBuffer() { 61556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return CharBuffer.wrap("malform buffer"); 61656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 61756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 61856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer getUnmapCharBuffer() { 61956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return CharBuffer.wrap("unmap buffer"); 62056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 62156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 62256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer getExceptionCharBuffer() { 62356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return CharBuffer.wrap("runtime buffer"); 62456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 62556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 62656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testEncodeCharBufferException() throws CharacterCodingException { 62756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer out; 62856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in; 62956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // MalformedException: 63056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in = getMalformedCharBuffer(); 63156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.REPORT); 63256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 63356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (in != null) { 63456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 63556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // regression test for Harmony-1379 63656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 63756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw MalformedInputException"); 63856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (MalformedInputException e) { 63956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 64056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 64156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 64256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 64356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.IGNORE); 64456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = encoder.encode(in); 64556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(unibytes)); 64656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 64756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 64856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 64956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.REPLACE); 65056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = encoder.encode(in); 65156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(unibytesWithRep)); 65256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 65356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 65456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Unmapped Exception: 65556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in = getUnmapCharBuffer(); 65656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.REPORT); 65756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 65856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (in != null) { 65956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 66056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 66156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in); 66256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw UnmappableCharacterException"); 66356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (UnmappableCharacterException e) { 66456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 66556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 66656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 66756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 66856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 66956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = encoder.encode(in); 67056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, unibytes); 67156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 67256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 67356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 67456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPLACE); 67556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = encoder.encode(in); 67656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, unibytesWithRep); 67756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 67856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 67956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // RuntimeException 68056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 68156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(getExceptionCharBuffer()); 68256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw runtime exception"); 68356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (RuntimeException e) { 68456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 68556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 68656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 68756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 68856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * utility method, extract given bytebuffer to a string and compare with 68956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * give string 69056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 69156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes void assertByteArray(ByteBuffer out, byte[] expected) { 69256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = out.duplicate(); 69356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (out.position() != 0) { 69456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.flip(); 69556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 69656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] ba = new byte[out.limit() - out.position()]; 69756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.get(ba); 69856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // byte[] ba = out.array(); 69956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(Arrays.equals(ba, expected)); 70056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 70156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 70256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 70356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for CoderResult encode(CharBuffer, ByteBuffer, boolean) 70456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 70556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testEncodeCharBufferByteBufferboolean() 70656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException { 70756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer out = ByteBuffer.allocate(200); 70856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in = CharBuffer.wrap(unistr); 70956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Null pointer 71056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 71156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(null, out, true); 71256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 71356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 71456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 71556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 71656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(in, null, true); 71756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 71856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 71956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 72056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 72156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case, one complete operation 72256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 72356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 72456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 72556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, true)); 72656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 200); 72756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.position() > 0); 72856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.remaining() > 0); 72956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 200); 73056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(unibytes)); 73156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 73256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 73356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.flush(out); 73456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 73556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case, one complete operation, but call twice, first time set 73656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // endOfInput to false 73756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 73856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 73956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = ByteBuffer.allocate(200); 74056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, false)); 74156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 200); 74256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.position() > 0); 74356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.remaining() > 0); 74456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 200); 74556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(unibytes)); 74656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 74756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 74856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, false)); 74956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 75056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, true)); 75156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 200); 75256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.position() > 0); 75356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.remaining() > 0); 75456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 200); 75556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 75656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(duplicateByteArray(unibytes, 3))); 75756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 75856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // overflow 75956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = ByteBuffer.allocate(4); 76056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 76156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 76256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 76356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.OVERFLOW, encoder.encode(in, out, true)); 76456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 4); 76556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.position(), 4); 76656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.remaining(), 0); 76756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 4); 76856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer temp = ByteBuffer.allocate(200); 76956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.flip(); 77056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes temp.put(out); 77156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = temp; 77256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, true)); 77356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 200); 77456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.position() > 0); 77556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.remaining() > 0); 77656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 200); 77756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(unibytes)); 77856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 77956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.reset()); 78056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 78156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = ByteBuffer.allocate(4); 78256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.OVERFLOW, encoder.encode(in, out, false)); 78356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 4); 78456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.position(), 4); 78556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.remaining(), 0); 78656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 4); 78756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes temp = ByteBuffer.allocate(200); 78856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.flip(); 78956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes temp.put(out); 79056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = temp; 79156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, false)); 79256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 200); 79356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.position() > 0); 79456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.remaining() > 0); 79556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 200); 79656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(unibytes)); 79756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 79856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 79956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes void printByteBuffer(ByteBuffer buffer) { 80056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.out.println("print buffer"); 80156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (buffer.position() != 0) { 80256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes buffer.flip(); 80356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 80456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] ba = buffer.array(); 80556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes for (int i = 0; i < ba.length; i++) { 80656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.out.println(Integer.toHexString(ba[i])); 80756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 80856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 80956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 81056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testEncodeCharBufferByteBufferbooleanExceptionFalse() 81156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException { 81256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestEncodeCharBufferByteBufferbooleanException(false); 81356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 81456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 81556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testEncodeCharBufferByteBufferbooleanExceptionTrue() 81656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException { 81756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestEncodeCharBufferByteBufferbooleanException(true); 81856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 81956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 82056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes private byte[] duplicateByteArray(byte[] ba, int times) { 82156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] result = new byte[ba.length * times]; 82256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes for (int i = 0; i < times; i++) { 82356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.arraycopy(ba, 0, result, i * ba.length, ba.length); 82456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 82556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return result; 82656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 82756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 82856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected void implTestEncodeCharBufferByteBufferbooleanException( 82956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes boolean endOfInput) throws CharacterCodingException { 83056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer out = ByteBuffer.allocate(100); 83156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 83256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // MalformedException: 83356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in = getMalformedCharBuffer(); 83456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.REPORT); 83556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 83656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (in != null) { 83756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 83856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CoderResult r = encoder.encode(in, out, endOfInput); 83956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(r.isMalformed()); 84056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 84156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 84256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 84356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 84456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.IGNORE); 84556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 84656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes endOfInput)); 84756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCodingErrorAction(endOfInput, out, in, unibytes); 84856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 84956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 85056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 85156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 85256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.REPLACE); 85356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 85456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes endOfInput)); 85556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCodingErrorAction(endOfInput, out, in, unibytesWithRep); 85656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else { 85756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.out.println("Cannot find malformed char buffer for " 85856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes + cs.name()); 85956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 86056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 86156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Unmapped Exception: 86256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in = getUnmapCharBuffer(); 86356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.REPORT); 86456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 86556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (in != null) { 86656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 86756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 86856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.encode(in, out, endOfInput).isUnmappable()); 86956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 87056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 87156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 87256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 87356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 87456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 87556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes endOfInput)); 87656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCodingErrorAction(endOfInput, out, in, unibytes); 87756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 87856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.reset(); 87956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 88056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 88156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPLACE); 88256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 88356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes endOfInput)); 88456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCodingErrorAction(endOfInput, out, in, unibytesWithRep); 88556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else { 88656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes System.out.println("Cannot find unmapped char buffer for " 88756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes + cs.name()); 88856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 88956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 89056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // RuntimeException 89156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 89256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(getExceptionCharBuffer()); 89356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw runtime exception"); 89456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (RuntimeException e) { 89556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 89656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 89756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 89856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes private void assertCodingErrorAction(boolean endOfInput, ByteBuffer out, 89956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in, byte[] expect) { 90056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (endOfInput) { 90156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(expect)); 90256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else { 90356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 90456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 90556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes endOfInput)); 90656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 90756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, true)); 90856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertByteArray(out, addSurrogate(duplicateByteArray(expect, 3))); 90956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 91056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 91156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 91256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 91356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for CoderResult flush(ByteBuffer) 91456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 91556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testFlush() throws CharacterCodingException { 91656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer out = ByteBuffer.allocate(6); 91756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 91856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(in.remaining(), 3); 91956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 92056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // by encode facade, so that internal state will be wrong 92156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.encode(CharBuffer.wrap("testFlush"), ByteBuffer.allocate(20), 92256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes true); 92356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, encoder 92456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .flush(ByteBuffer.allocate(50))); 92556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 92656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 92756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 92856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * test isLegalReplacement(byte[]) 92956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 9305ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes public void test_isLegalReplacement_null() { 93156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 93256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.isLegalReplacement(null); 93356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 93456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 93556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 9365ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes } 9375ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes 9385ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes public void test_isLegalReplacement_good() { 93956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.isLegalReplacement(specifiedReplacement)); 9405ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes } 94156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 9425ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes public void test_isLegalReplacement_bad() { 94356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.isLegalReplacement(new byte[200])); 94456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] ba = getIllegalByteArray(); 94556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (ba != null) { 94656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertFalse(encoder.isLegalReplacement(ba)); 94756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 94856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 94956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 9505ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes public void test_isLegalReplacement_empty_array() { 95156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // ISO, ASC, GB, UTF8 encoder will throw exception in RI 95256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // others will pass 95356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(encoder.isLegalReplacement(new byte[0])); 95456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 95556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 95656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testOnMalformedInput() { 95756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.REPORT, encoder.malformedInputAction()); 95856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 95956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(null); 96056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 96156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 96256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 96356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onMalformedInput(CodingErrorAction.IGNORE); 96456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.IGNORE, encoder.malformedInputAction()); 96556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 96656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 96756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testOnUnmappableCharacter() { 96856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.REPORT, encoder 96956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .unmappableCharacterAction()); 97056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 97156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(null); 97256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 97356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 97456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 97556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 97656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.IGNORE, encoder 97756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .unmappableCharacterAction()); 97856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 97956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 98056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testReplacement() { 98156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 98256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.replaceWith(null); 98356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 98456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 98556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 98656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 98756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.replaceWith(new byte[0]); 98856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 98956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 99056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 99156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 99256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.replaceWith(new byte[100]); 99356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 99456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 99556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 99656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 99756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] nr = getLegalByteArray(); 99856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(encoder, encoder.replaceWith(nr)); 999861d34f160de8a5f94b2b8b453daca5246052450Shubham Ajmera assertTrue(Arrays.equals(nr, encoder.replacement())); 100056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 100156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes nr = getIllegalByteArray(); 100256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 100356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes encoder.replaceWith(new byte[100]); 10045ec6bf8d033754e06a463adb091d2c0afd0755acElliott Hughes fail(); 100556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 100656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 100756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 100856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 100956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected byte[] getLegalByteArray() { 101056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return new byte[] { 'a' }; 101156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 101256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 101356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected byte[] getIllegalByteArray() { 101456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return new byte[155]; 101556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 101656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 101756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 101856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Mock subclass of CharsetEncoder For protected method test 101956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 102056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public static class MockCharsetEncoder extends CharsetEncoder { 102156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 102256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes boolean flushed = false; 102356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 102456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public boolean isFlushed() { 102556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes boolean result = flushed; 102656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes flushed = false; 102756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return result; 102856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 102956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 103056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public boolean isLegalReplacement(byte[] ba) { 103156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (ba.length == 155) {// specified magic number, return false 103256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return false; 103356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 103456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return super.isLegalReplacement(ba); 103556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 103656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 103756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public MockCharsetEncoder(Charset cs, float aver, float max) { 103856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super(cs, aver, max); 103956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 104056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 104156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public MockCharsetEncoder(Charset cs, float aver, float max, 104256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] replacement) { 104356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super(cs, aver, max, replacement); 104456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 104556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 104656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) { 104756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int inPosition = in.position(); 104856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes char[] input = new char[in.remaining()]; 104956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.get(input); 105056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes String result = new String(input); 105156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (result.startsWith("malform")) { 105256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // reset the cursor to the error position 105356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.position(inPosition); 105456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // in.position(0); 105556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // set the error length 105656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return CoderResult.malformedForLength("malform".length()); 105756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else if (result.startsWith("unmap")) { 105856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // reset the cursor to the error position 105956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.position(inPosition); 106056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // in.position(0); 106156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // set the error length 106256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return CoderResult.unmappableForLength("unmap".length()); 106356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else if (result.startsWith("runtime")) { 106456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // reset the cursor to the error position 106556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.position(0); 106656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // set the error length 106756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throw new RuntimeException("runtime"); 106856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 106956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int inLeft = input.length; 107056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int outLeft = out.remaining(); 107156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CoderResult r = CoderResult.UNDERFLOW; 107256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int length = inLeft; 107356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (outLeft < inLeft) { 107456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes r = CoderResult.OVERFLOW; 107556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes length = outLeft; 107656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.position(inPosition + outLeft); 107756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 107856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes for (int i = 0; i < length; i++) { 107956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.put((byte) input[i]); 108056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 108156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return r; 108256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 108356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 108456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected CoderResult implFlush(ByteBuffer out) { 108556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CoderResult result = super.implFlush(out); 108656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int length = 0; 108756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (out.remaining() >= 5) { 108856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes length = 5; 108956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes result = CoderResult.UNDERFLOW; 109056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes flushed = true; 109156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // for (int i = 0; i < length; i++) { 109256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // out.put((byte)'f'); 109356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // } 109456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else { 109556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes length = out.remaining(); 109656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes result = CoderResult.OVERFLOW; 109756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 109856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return result; 109956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 110056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 110156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected void implReplaceWith(byte[] ba) { 1102861d34f160de8a5f94b2b8b453daca5246052450Shubham Ajmera assertTrue(Arrays.equals(ba, replacement())); 110356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 110456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 110556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 110656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 110756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 110856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * mock charset for test encoder initialization 110956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 111056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public static class MockCharset extends Charset { 111156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected MockCharset(String arg0, String[] arg1) { 111256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super(arg0, arg1); 111356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 111456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 111556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public boolean contains(Charset arg0) { 111656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return false; 111756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 111856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 111956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public CharsetDecoder newDecoder() { 112056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return new CharsetDecoderTest.MockCharsetDecoder(this, 112156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes (float) AVER_BYTES, MAX_BYTES); 112256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 112356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 112456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public CharsetEncoder newEncoder() { 112556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return new MockCharsetEncoder(this, (float) AVER_BYTES, MAX_BYTES); 112656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 112756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 112856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 112956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes} 1130