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 76ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes * 856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 96ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott 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.io.UnsupportedEncodingException; 1956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.ByteBuffer; 2056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.CharBuffer; 2156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.CharacterCodingException; 2256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.Charset; 2356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport java.nio.charset.CharsetDecoder; 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 Hughes 2956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughesimport junit.framework.TestCase; 3056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 3156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes/** 3256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * API unit test for java.nio.CharsetDecoder 3356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 3456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughespublic class CharsetDecoderTest extends TestCase { 3556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 3656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected static final int MAX_BYTES = 3; 3756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 3856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected static final double AVER_BYTES = 0.5; 3956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 4056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // default charset 4156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes private static final Charset MOCKCS = new CharsetEncoderTest.MockCharset( 4256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes "mock", new String[0]); 4356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 4456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes Charset cs = MOCKCS; 4556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 4656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // default decoder 4756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected static CharsetDecoder decoder; 4856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 4956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes String bom = ""; 5056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 5156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected void setUp() throws Exception { 5256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super.setUp(); 5356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder = cs.newDecoder(); 5456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 5556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 5656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected void tearDown() throws Exception { 5756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super.tearDown(); 5856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 5956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 6056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // FIXME: give up this tests 6156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // /* 6256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // * test default value 6356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // */ 6456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // public void testDefaultCharsPerByte() { 6556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertTrue(decoder.averageCharsPerByte() == AVER_BYTES); 6656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertTrue(decoder.maxCharsPerByte() == MAX_BYTES); 6756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // } 6856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 6956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDefaultValues() { 7056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(cs, decoder.charset()); 7156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 7256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.detectedCharset(); 7356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should unsupported"); 7456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (UnsupportedOperationException e) { 7556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 7656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 7756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(decoder.isCharsetDetected()); 7856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should unsupported"); 7956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (UnsupportedOperationException e) { 8056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 8156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertFalse(decoder.isAutoDetecting()); 8256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.REPORT, decoder.malformedInputAction()); 8356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.REPORT, decoder 8456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .unmappableCharacterAction()); 8556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(decoder.replacement(), "\ufffd"); 8656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 8756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 8856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 8956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * test constructor 9056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 9156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testCharsetDecoder() { 9256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // default value 9356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder = new MockCharsetDecoder(cs, (float) AVER_BYTES, MAX_BYTES); 9456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 9556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case 9656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharsetDecoder ec = new MockCharsetDecoder(cs, 1, MAX_BYTES); 9756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(ec.charset(), cs); 9856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(1.0, ec.averageCharsPerByte(), 0.0); 9956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(ec.maxCharsPerByte() == MAX_BYTES); 10056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 10156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 10256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * ------------------------ Exceptional cases ------------------------- 10356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 10456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: null charset 10556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetDecoder(null, 1, MAX_BYTES); 10656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertNull(ec.charset()); 10756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(1.0, ec.averageCharsPerByte(), 0.0); 10856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(ec.maxCharsPerByte() == MAX_BYTES); 10956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 11056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetDecoder(new CharsetEncoderTest.MockCharset("mock", 11156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes new String[0]), 1, MAX_BYTES); 11256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 11356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Commented out since the comment is wrong since MAX_BYTES > 1 11456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // // OK: average length less than max length 11556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // ec = new MockCharsetDecoder(cs, MAX_BYTES, 1); 11656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertTrue(ec.averageCharsPerByte() == MAX_BYTES); 11756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // assertTrue(ec.maxCharsPerByte() == 1); 11856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 11956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: zero length 12056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 12156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetDecoder(cs, 0, MAX_BYTES); 12256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 12356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 12456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 12556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 12656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetDecoder(cs, 1, 0); 12756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 12856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 12956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 13056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 13156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal Argument: negative length 13256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 13356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetDecoder(cs, -1, MAX_BYTES); 13456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 13556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 13656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 13756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 13856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ec = new MockCharsetDecoder(cs, 1, -1); 13956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw IllegalArgumentException"); 14056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 14156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 14256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 14356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 14456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 14556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * test onMalformedInput 14656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 14756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testOnMalformedInput() { 14856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.REPORT, decoder.malformedInputAction()); 14956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 15056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(null); 15156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 15256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 15356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 15456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.IGNORE); 15556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.IGNORE, decoder.malformedInputAction()); 15656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 15756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 15856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 15956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * test unmappableCharacter 16056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 16156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testOnUnmappableCharacter() { 16256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.REPORT, decoder 16356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .unmappableCharacterAction()); 16456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 16556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(null); 16656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 16756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 16856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 16956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 17056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CodingErrorAction.IGNORE, decoder 17156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .unmappableCharacterAction()); 17256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 17356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 17456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 17556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * test replaceWith 17656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 17756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testReplaceWith() { 17856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 17956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.replaceWith(null); 18056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 18156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 18256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 18356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 18456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.replaceWith(""); 18556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 18656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 18756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 18856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 18956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.replaceWith("testReplaceWith"); 19056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw illegal argument exception"); 19156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalArgumentException e) { 19256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 19356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 19456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.replaceWith("a"); 19556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame("a", decoder.replacement()); 19656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 19756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 19856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 19956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for CharBuffer decode(ByteBuffer) 20056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 20156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeByteBuffer() throws CharacterCodingException { 20256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeByteBuffer(); 20356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 20456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 20556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes void implTestDecodeByteBuffer() throws CharacterCodingException { 20656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Null pointer 20756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 20856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(null); 20956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw null pointer exception"); 21056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 21156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 21256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 21356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // empty input buffer 21456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = decoder.decode(ByteBuffer.allocate(0)); 21556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue("", out); 21656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 21756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case 21856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer in = getByteBuffer(); 21956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = decoder.decode(in); 22056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(0, out.position()); 22156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(getString().length(), out.limit()); 22256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(getString().length(), out.remaining()); 22356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString(), out); 22456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 22556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal read only case 22656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in = getByteBuffer().asReadOnlyBuffer(); 22756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = decoder.decode(in); 22856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.position(), 0); 22956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), getString().length()); 23056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.remaining(), getString().length()); 23156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString(), out); 23256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 23356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 23456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeByteBufferException() 23556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 23656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out; 23756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer in; 23856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes String replaceStr = decoder.replacement() + getString(); 23956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 24056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // MalformedException: 24156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.REPORT); 24256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 24356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in = getMalformedByteBuffer(); 24456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (in != null) { 24556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 24656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer buffer = decoder.decode(in); 24756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(buffer.remaining() > 0); 24856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw MalformedInputException"); 24956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (MalformedInputException e) { 25056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 25156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 25256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 25356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 25456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.IGNORE); 25556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = decoder.decode(in); 25656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString(), out); 25756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 25856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 25956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 26056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.REPLACE); 26156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = decoder.decode(in); 26256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(replaceStr, out); 26356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 26456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 26556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Unmapped Exception: 26656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.REPORT); 26756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 26856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in = getUnmappedByteBuffer(); 26956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (in != null) { 27056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 27156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in); 27256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw UnmappableCharacterException"); 27356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (UnmappableCharacterException e) { 27456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 27556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 27656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 27756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 27856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 27956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = decoder.decode(in); 28056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString(), out); 28156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 28256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 28356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 28456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); 28556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = decoder.decode(in); 28656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(replaceStr, out); 28756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 28856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 28956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // RuntimeException 29056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 29156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(getExceptionByteArray()); 29256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw runtime exception"); 29356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (RuntimeException e) { 29456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 29556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 29656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 29756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 29856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * Class under test for CoderResult decode(ByteBuffer, CharBuffer, boolean) 29956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 30056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeByteBufferCharBuffer() { 30156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeByteBufferCharBuffer(getByteBuffer()); 30256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 30356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 30456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeByteBufferCharBufferReadOnly() { 30556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeByteBufferCharBuffer(getByteBuffer()); 30656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 30756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 30856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes void implTestDecodeByteBufferCharBuffer(ByteBuffer in) { 30956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = CharBuffer.allocate(100); 31056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 31156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Null pointer 31256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 31356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 31456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(null, out, true); 31556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("NullPointerException expected"); 31656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 31756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 31856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 31956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, null, true); 32056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("NullPointerException expected"); 32156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (NullPointerException e) { 32256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 32356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 32456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case, one complete operation 32556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 32656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 32756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 32856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, true)); 32956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 100); 33056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.position(), getString().length()); 33156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.remaining(), 100 - getString().length()); 33256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 100); 33356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString(), out); 33456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.flush(out); 33556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 33656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // normal case, one complete operation, but call twice, first time set 33756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // endOfInput to false 33856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 33956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 34056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 34156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, false)); 34256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 100); 34356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.position(), getString().length()); 34456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.remaining(), 100 - getString().length()); 34556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 100); 34656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString(), out); 34756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 34856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 34956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 35056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 35156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, false)); 35256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in = getHeadlessByteBuffer(); 35356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, false)); 35456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 35556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, true)); 35656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.limit(), 100); 35756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(out.position() > 0); 35856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.remaining(), out.capacity() - out.position()); 35956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(out.capacity(), 100); 36056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString() + getString() + getString(), out); 36156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 36256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // overflow 36356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = CharBuffer.allocate(4); 36456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 36556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in = getByteBuffer(); 36656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 36756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.OVERFLOW, decoder.decode(in, out, false)); 36856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 36956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString().substring(0, 4), out); 37056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = CharBuffer.allocate(100); 37156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, false)); 37256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString().substring(4), out); 37356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 37456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out = CharBuffer.allocate(100); 37556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, true)); 37656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(bom + getString(), out); 37756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 37856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 37956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteBufferUnmappedException() 38056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 38156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferUnmappedException( 38256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes getUnmappedByteBuffer(), true); 38356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 38456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 38556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteIncompleteBufferUnmappedException() 38656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 38756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferUnmappedException( 38856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes getUnmappedByteBuffer(), false); 38956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 39056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 39156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteReadOnlyBufferUnmappedException() 39256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 39356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferUnmappedException( 39456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes readOnly(getUnmappedByteBuffer()), true); 39556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 39656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 39756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteReadOnlyIncompleteBufferUnmappedException() 39856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 39956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferUnmappedException( 40056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes readOnly(getUnmappedByteBuffer()), false); 40156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 40256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 40356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes void implTestDecodeCharBufferByteBufferUnmappedException(ByteBuffer in, 40456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes boolean endOfInput) throws CharacterCodingException, 40556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes UnsupportedEncodingException { 40656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (null == in) { 40756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return; 40856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 40956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = CharBuffer.allocate(50); 41056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 41156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.REPORT); 41256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 41356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 41456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CoderResult result = decoder.decode(in, out, endOfInput); 41556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(result.isUnmappable()); 41656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 41756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 41856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 41956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 42056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 42156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, endOfInput)); 42256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString(), out); 42356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 42456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 42556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 42656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 42756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); 42856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, endOfInput)); 42956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(decoder.replacement() + getString(), out); 43056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 43156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 43256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteBufferMalformedException() 43356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 43456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferMalformedException( 43556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes getMalformedByteBuffer(), true); 43656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 43756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 43856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteIncompleteBufferMalformedException() 43956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 44056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 44156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferMalformedException( 44256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes getMalformedByteBuffer(), false); 44356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 44456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 44556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteReadOnlyBufferMalformedException() 44656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 44756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferMalformedException( 44856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes readOnly(getMalformedByteBuffer()), true); 44956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 45056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 45156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteReadOnlyIncompleteBufferMalformedException() 45256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 45356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferMalformedException( 45456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes readOnly(getMalformedByteBuffer()), false); 45556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 45656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 45756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes void implTestDecodeCharBufferByteBufferMalformedException(ByteBuffer in, 45856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes boolean endOfInput) throws CharacterCodingException, 45956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes UnsupportedEncodingException { 46056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (null == in) { 46156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return; 46256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 46356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = CharBuffer.allocate(getString().length() * 3); 46456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 46556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 46656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.REPORT); 46756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CoderResult result = decoder.decode(in, out, endOfInput); 46856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertTrue(result.isMalformed()); 46956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 47056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 47156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 47256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 47356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.IGNORE); 47456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, endOfInput)); 47556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(getString(), out); 47656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 47756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 47856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.clear(); 47956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 48056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.onMalformedInput(CodingErrorAction.REPLACE); 48156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, endOfInput)); 48256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertCharBufferValue(decoder.replacement() + getString(), out); 48356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 48456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 48556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteBufferException() 48656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 48756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferException(getExceptionByteArray(), 48856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes true); 48956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 49056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 49156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteIncompleteBufferException() 49256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 49356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferException(getExceptionByteArray(), 49456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes false); 49556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 49656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 49756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteReadOnlyBufferException() 49856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 49956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferException( 50056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes readOnly(getExceptionByteArray()), true); 50156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 50256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 50356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeCharBufferByteReadOnlyIncompleteBufferException() 50456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 50556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes implTestDecodeCharBufferByteBufferException( 50656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes readOnly(getExceptionByteArray()), false); 50756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 50856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 50956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes void implTestDecodeCharBufferByteBufferException(ByteBuffer in, 51056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes boolean endOfInput) throws CharacterCodingException, 51156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes UnsupportedEncodingException { 51256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = CharBuffer.allocate(50); 51356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 51456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 51556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, endOfInput); 51656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should throw runtime exception"); 51756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (RuntimeException e) { 51856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 51956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 52056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 52156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes private ByteBuffer readOnly(ByteBuffer b) { 52256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (null == b) { 52356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return null; 52456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 52556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return b.asReadOnlyBuffer(); 52656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 52756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 52856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected String getString() { 52956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return " buffer"; 53056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 53156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 53256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected ByteBuffer getByteBuffer() { 53356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return ByteBuffer.wrap(new byte[] { 32, 98, 117, 102, 102, 101, 114 }); 53456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 53556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 53656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected ByteBuffer getHeadlessByteBuffer() { 53756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return getByteBuffer(); 53856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 53956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 54056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer getExceptionByteArray() throws UnsupportedEncodingException { 54156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // "runtime" 54256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return ByteBuffer 54356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .wrap(new byte[] { 114, 117, 110, 116, 105, 109, 101 }); 54456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 54556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 54656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer getUnmappedByteBuffer() throws UnsupportedEncodingException { 54756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // "unmap buffer" 54856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] ba = new byte[] { 117, 110, 109, 97, 112, 32, 98, 117, 102, 102, 54956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 101, 114 }; 55056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return ByteBuffer.wrap(ba); 55156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 55256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 55356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer getMalformedByteBuffer() throws UnsupportedEncodingException { 55456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // "malform buffer" 55556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] ba = new byte[] { 109, 97, 108, 102, 111, 114, 109, 32, 98, 117, 55656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 102, 102, 101, 114 }; 55756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return ByteBuffer.wrap(ba); 55856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 55956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 56056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes private void assertCharBufferValue(String expected, CharBuffer out) { 56156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (out.position() != 0) { 56256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.flip(); 56356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 56456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(expected, new String(out.array(), out.arrayOffset(), out 56556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .arrayOffset() + out.limit())); 56656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 56756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 56856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 56956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * test flush 57056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 57156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testFlush() throws CharacterCodingException { 57256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = CharBuffer.allocate(10); 57356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer in = ByteBuffer.wrap(new byte[] { 12, 12 }); 57456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, true); 57556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.flush(out)); 57656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 57756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 57856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode((ByteBuffer) in.rewind(), (CharBuffer) out.rewind(), 57956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes true); 58056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(CoderResult.UNDERFLOW, decoder 58156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .flush(CharBuffer.allocate(10))); 58256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 58356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 58456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 58556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * ---------------------------------- methods to test illegal state 58656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * ----------------------------------- 58756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 58856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after reset, and it also means reset can be done 58956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // anywhere 59056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testResetIllegalState() throws CharacterCodingException { 59156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 59256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(getByteBuffer()); 59356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 59456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(3), false); 59556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 59656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(3), true); 59756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 59856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 59956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 60056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testFlushIllegalState() throws CharacterCodingException { 60156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer in = ByteBuffer.wrap(new byte[] { 98, 98 }); 60256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = CharBuffer.allocate(5); 6036ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes 6046ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes // Illegal state: after reset. 6056ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes decoder.reset(); 6066ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes try { 6076ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes decoder.flush(out); 6086ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes fail(); 6096ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes } catch (IllegalStateException expected) { 6106ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes } 6116ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes 61256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: after decode with endOfInput is true 61356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 61456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, true); 61556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 61656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CoderResult result = decoder.flush(out); 61756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertSame(result, CoderResult.UNDERFLOW); 61856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 6196ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes // Good state: flush twice 6206ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes decoder.flush(out); 62156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 62256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: flush after decode with endOfInput is false 62356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 62456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, false); 62556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 62656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.flush(out); 6276ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes fail(); 6286ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes } catch (IllegalStateException expected) { 62956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 63056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 6316ad37f500b023ef09fd177ad8cd8e2ba0b842caeElliott Hughes 63256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // test illegal states for decode facade 63356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeFacadeIllegalState() throws CharacterCodingException { 63456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // decode facade can be execute in anywhere 63556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer in = getByteBuffer(); 63656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 63756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just created 63856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in); 63956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 64056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 64156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after decode facade 64256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in); 64356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 64456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 64556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after decode with that endOfInput is true 64656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 64756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(30), true); 64856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in); 64956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 65056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 65156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case:just after decode with that endOfInput is false 65256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 65356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(30), false); 65456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in); 65556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 65656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 65756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after flush 65856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 65956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(30), true); 66056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.flush(CharBuffer.allocate(10)); 66156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in); 66256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 66356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 66456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 66556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // test illegal states for two decode method with endOfInput is true 66656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeTrueIllegalState() throws CharacterCodingException { 66756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer in = ByteBuffer.wrap(new byte[] { 98, 98 }); 66856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = CharBuffer.allocate(100); 66956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just created 67056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, true); 67156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 67256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 67356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 67456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just after decode with that endOfInput is true 67556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 67656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, CharBuffer.allocate(30), true); 67756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 67856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, true); 67956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 68056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 68156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 68256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case:just after decode with that endOfInput is false 68356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 68456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, CharBuffer.allocate(30), false); 68556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 68656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, true); 68756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 68856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 68956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 69056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after flush 69156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 69256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, CharBuffer.allocate(30), true); 69356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.flush(CharBuffer.allocate(10)); 69456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 69556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 69656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, true); 69756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should illegal state"); 69856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 69956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 70056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 70156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 70256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 70356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 70456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 70556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // test illegal states for two decode method with endOfInput is false 70656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testDecodeFalseIllegalState() throws CharacterCodingException { 70756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ByteBuffer in = ByteBuffer.wrap(new byte[] { 98, 98 }); 70856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CharBuffer out = CharBuffer.allocate(5); 70956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case: just created 71056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, false); 71156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 71256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 71356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 71456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after decode facade 71556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 71656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in); 71756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 71856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 71956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, false); 72056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should illegal state"); 72156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 72256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 72356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 72456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 72556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 72656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after decode with that endOfInput is true 72756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 72856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, CharBuffer.allocate(30), true); 72956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 73056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 73156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, false); 73256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should illegal state"); 73356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 73456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 73556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 73656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 73756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 73856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Normal case:just after decode with that endOfInput is false 73956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 74056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, CharBuffer.allocate(30), false); 74156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 74256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, false); 74356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 74456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.rewind(); 74556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 74656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // Illegal state: just after flush 74756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.reset(); 74856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, CharBuffer.allocate(30), true); 74956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.rewind(); 75056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.flush(CharBuffer.allocate(10)); 75156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 75256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder.decode(in, out, false); 75356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes fail("should illegal state"); 75456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (IllegalStateException e) { 75556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 75656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 75756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 75856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 75956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * --------------------------------- illegal state test end 76056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * --------------------------------- 76156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 76256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 76356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testImplFlush() { 76456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 76556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(CoderResult.UNDERFLOW, ((MockCharsetDecoder) decoder) 76656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .pubImplFlush(null)); 76756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 76856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 76956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testImplOnMalformedInput() { 77056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 77156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes assertEquals(CoderResult.UNDERFLOW, ((MockCharsetDecoder) decoder) 77256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes .pubImplFlush(null)); 77356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 77456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 77556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 77656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testImplOnUnmappableCharacter() { 77756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 77856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ((MockCharsetDecoder) decoder).pubImplOnUnmappableCharacter(null); 77956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 78056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 78156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testImplReplaceWith() { 78256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 78356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ((MockCharsetDecoder) decoder).pubImplReplaceWith(null); 78456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 78556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 78656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void testImplReset() { 78756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 78856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes ((MockCharsetDecoder) decoder).pubImplReset(); 78956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 79056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 79156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes /* 79256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes * mock decoder 79356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes */ 79456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public static class MockCharsetDecoder extends CharsetDecoder { 79556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public MockCharsetDecoder(Charset cs, float ave, float max) { 79656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super(cs, ave, max); 79756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 79856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 79956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) { 80056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int inPosition = in.position(); 80156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes byte[] input = new byte[in.remaining()]; 80256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.get(input); 80356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes String result; 80456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes try { 80556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes result = new String(input, "UTF-8"); 80656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } catch (UnsupportedEncodingException e) { 80756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throw new AssertionError(e); 80856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 80956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (result.startsWith("malform")) { 81056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // reset the cursor to the error position 81156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.position(inPosition); 81256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // set the error length 81356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return CoderResult.malformedForLength("malform".length()); 81456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else if (result.startsWith("unmap")) { 81556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // reset the cursor to the error position 81656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.position(inPosition); 81756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // set the error length 81856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return CoderResult.unmappableForLength("unmap".length()); 81956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else if (result.startsWith("runtime")) { 82056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // reset the cursor to the error position 82156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.position(0); 82256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // set the error length 82356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes throw new RuntimeException("runtime"); 82456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 82556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int inLeft = input.length; 82656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int outLeft = out.remaining(); 82756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CoderResult r = CoderResult.UNDERFLOW; 82856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes int length = inLeft; 82956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (outLeft < inLeft) { 83056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes r = CoderResult.OVERFLOW; 83156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes length = outLeft; 83256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes in.position(inPosition + outLeft); 83356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 83456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes for (int i = 0; i < length; i++) { 83556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes out.put((char) input[i]); 83656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 83756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return r; 83856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 83956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 84056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes protected CoderResult implFlush(CharBuffer out) { 84156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes CoderResult result = super.implFlush(out); 84256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes if (out.remaining() >= 5) { 84356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // TODO 84456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // out.put("flush"); 84556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes result = CoderResult.UNDERFLOW; 84656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } else { 84756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes // out.put("flush", 0, out.remaining()); 84856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes result = CoderResult.OVERFLOW; 84956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 85056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return result; 85156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 85256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 85356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public CoderResult pubImplFlush(CharBuffer out) { 85456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes return super.implFlush(out); 85556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 85656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 85756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void pubImplOnMalformedInput(CodingErrorAction newAction) { 85856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super.implOnMalformedInput(newAction); 85956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 86056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 86156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void pubImplOnUnmappableCharacter(CodingErrorAction newAction) { 86256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super.implOnUnmappableCharacter(newAction); 86356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 86456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 86556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void pubImplReplaceWith(String newReplacement) { 86656ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super.implReplaceWith(newReplacement); 86756ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 86856ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 86956ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes public void pubImplReset() { 87056ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes super.implReset(); 87156ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 87256ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 87356ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes } 87456ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes 87556ddb0af9c75dca21f10cd26e73b9f301c58771eElliott Hughes} 876