1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage tests.api.java.nio.charset; 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.UnsupportedEncodingException; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.ByteBuffer; 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.CharBuffer; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.CharacterCodingException; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.Charset; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.CharsetDecoder; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.CoderResult; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.CodingErrorAction; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.MalformedInputException; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.UnmappableCharacterException; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * API unit test for java.nio.CharsetDecoder 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class CharsetDecoderTest extends TestCase { 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected static final int MAX_BYTES = 3; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected static final double AVER_BYTES = 0.5; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // default charset 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final Charset MOCKCS = new CharsetEncoderTest.MockCharset( 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mock", new String[0]); 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Charset cs = MOCKCS; 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // default decoder 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected static CharsetDecoder decoder; 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String bom = ""; 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder = cs.newDecoder(); 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() throws Exception { 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.tearDown(); 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME: give up this tests 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // /* 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // * test default value 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // */ 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // public void testDefaultCharsPerByte() { 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertTrue(decoder.averageCharsPerByte() == AVER_BYTES); 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertTrue(decoder.maxCharsPerByte() == MAX_BYTES); 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // } 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDefaultValues() { 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(cs, decoder.charset()); 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.detectedCharset(); 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should unsupported"); 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedOperationException e) { 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(decoder.isCharsetDetected()); 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should unsupported"); 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedOperationException e) { 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(decoder.isAutoDetecting()); 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.REPORT, decoder.malformedInputAction()); 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.REPORT, decoder 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .unmappableCharacterAction()); 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(decoder.replacement(), "\ufffd"); 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * test constructor 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCharsetDecoder() { 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // default value 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder = new MockCharsetDecoder(cs, (float) AVER_BYTES, MAX_BYTES); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharsetDecoder ec = new MockCharsetDecoder(cs, 1, MAX_BYTES); 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(ec.charset(), cs); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1.0, ec.averageCharsPerByte(), 0.0); 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(ec.maxCharsPerByte() == MAX_BYTES); 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * ------------------------ Exceptional cases ------------------------- 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: null charset 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetDecoder(null, 1, MAX_BYTES); 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(ec.charset()); 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1.0, ec.averageCharsPerByte(), 0.0); 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(ec.maxCharsPerByte() == MAX_BYTES); 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetDecoder(new CharsetEncoderTest.MockCharset("mock", 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new String[0]), 1, MAX_BYTES); 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Commented out since the comment is wrong since MAX_BYTES > 1 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // // OK: average length less than max length 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ec = new MockCharsetDecoder(cs, MAX_BYTES, 1); 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertTrue(ec.averageCharsPerByte() == MAX_BYTES); 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertTrue(ec.maxCharsPerByte() == 1); 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: zero length 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetDecoder(cs, 0, MAX_BYTES); 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetDecoder(cs, 1, 0); 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: negative length 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetDecoder(cs, -1, MAX_BYTES); 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetDecoder(cs, 1, -1); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * test onMalformedInput 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testOnMalformedInput() { 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.REPORT, decoder.malformedInputAction()); 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(null); 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.IGNORE); 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.IGNORE, decoder.malformedInputAction()); 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * test unmappableCharacter 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testOnUnmappableCharacter() { 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.REPORT, decoder 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .unmappableCharacterAction()); 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(null); 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.IGNORE, decoder 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .unmappableCharacterAction()); 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * test replaceWith 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testReplaceWith() { 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.replaceWith(null); 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.replaceWith(""); 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.replaceWith("testReplaceWith"); 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw illegal argument exception"); 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.replaceWith("a"); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("a", decoder.replacement()); 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for CharBuffer decode(ByteBuffer) 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeByteBuffer() throws CharacterCodingException { 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeByteBuffer(); 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes void implTestDecodeByteBuffer() throws CharacterCodingException { 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Null pointer 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(null); 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // empty input buffer 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = decoder.decode(ByteBuffer.allocate(0)); 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue("", out); 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer in = getByteBuffer(); 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = decoder.decode(in); 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(0, out.position()); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(getString().length(), out.limit()); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(getString().length(), out.remaining()); 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString(), out); 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal read only case 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = getByteBuffer().asReadOnlyBuffer(); 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = decoder.decode(in); 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.position(), 0); 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), getString().length()); 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.remaining(), getString().length()); 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString(), out); 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeByteBufferException() 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out; 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer in; 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String replaceStr = decoder.replacement() + getString(); 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // MalformedException: 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.REPORT); 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = getMalformedByteBuffer(); 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (in != null) { 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer buffer = decoder.decode(in); 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(buffer.remaining() > 0); 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw MalformedInputException"); 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (MalformedInputException e) { 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.IGNORE); 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = decoder.decode(in); 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString(), out); 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.REPLACE); 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = decoder.decode(in); 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(replaceStr, out); 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Unmapped Exception: 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.REPORT); 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = getUnmappedByteBuffer(); 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (in != null) { 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in); 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw UnmappableCharacterException"); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnmappableCharacterException e) { 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = decoder.decode(in); 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString(), out); 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = decoder.decode(in); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(replaceStr, out); 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // RuntimeException 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(getExceptionByteArray()); 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw runtime exception"); 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (RuntimeException e) { 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for CoderResult decode(ByteBuffer, CharBuffer, boolean) 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeByteBufferCharBuffer() { 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeByteBufferCharBuffer(getByteBuffer()); 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeByteBufferCharBufferReadOnly() { 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeByteBufferCharBuffer(getByteBuffer()); 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes void implTestDecodeByteBufferCharBuffer(ByteBuffer in) { 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = CharBuffer.allocate(100); 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Null pointer 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(null, out, true); 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NullPointerException expected"); 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, null, true); 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NullPointerException expected"); 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case, one complete operation 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, true)); 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 100); 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.position(), getString().length()); 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.remaining(), 100 - getString().length()); 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 100); 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString(), out); 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.flush(out); 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case, one complete operation, but call twice, first time set 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // endOfInput to false 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, false)); 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 100); 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.position(), getString().length()); 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.remaining(), 100 - getString().length()); 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 100); 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString(), out); 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, false)); 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = getHeadlessByteBuffer(); 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, false)); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, true)); 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 100); 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.position() > 0); 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.remaining(), out.capacity() - out.position()); 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 100); 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString() + getString() + getString(), out); 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // overflow 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = CharBuffer.allocate(4); 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = getByteBuffer(); 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.OVERFLOW, decoder.decode(in, out, false)); 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString().substring(0, 4), out); 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = CharBuffer.allocate(100); 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, false)); 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString().substring(4), out); 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = CharBuffer.allocate(100); 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, true)); 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(bom + getString(), out); 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteBufferUnmappedException() 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferUnmappedException( 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes getUnmappedByteBuffer(), true); 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteIncompleteBufferUnmappedException() 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferUnmappedException( 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes getUnmappedByteBuffer(), false); 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteReadOnlyBufferUnmappedException() 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferUnmappedException( 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes readOnly(getUnmappedByteBuffer()), true); 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteReadOnlyIncompleteBufferUnmappedException() 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferUnmappedException( 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes readOnly(getUnmappedByteBuffer()), false); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes void implTestDecodeCharBufferByteBufferUnmappedException(ByteBuffer in, 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean endOfInput) throws CharacterCodingException, 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes UnsupportedEncodingException { 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (null == in) { 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = CharBuffer.allocate(50); 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.REPORT); 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult result = decoder.decode(in, out, endOfInput); 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(result.isUnmappable()); 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, endOfInput)); 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString(), out); 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, endOfInput)); 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(decoder.replacement() + getString(), out); 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteBufferMalformedException() 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferMalformedException( 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes getMalformedByteBuffer(), true); 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteIncompleteBufferMalformedException() 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferMalformedException( 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes getMalformedByteBuffer(), false); 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteReadOnlyBufferMalformedException() 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferMalformedException( 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes readOnly(getMalformedByteBuffer()), true); 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteReadOnlyIncompleteBufferMalformedException() 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferMalformedException( 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes readOnly(getMalformedByteBuffer()), false); 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes void implTestDecodeCharBufferByteBufferMalformedException(ByteBuffer in, 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean endOfInput) throws CharacterCodingException, 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes UnsupportedEncodingException { 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (null == in) { 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = CharBuffer.allocate(getString().length() * 3); 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.REPORT); 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult result = decoder.decode(in, out, endOfInput); 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(result.isMalformed()); 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.IGNORE); 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, endOfInput)); 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(getString(), out); 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.onMalformedInput(CodingErrorAction.REPLACE); 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.decode(in, out, endOfInput)); 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCharBufferValue(decoder.replacement() + getString(), out); 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteBufferException() 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferException(getExceptionByteArray(), 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes true); 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteIncompleteBufferException() 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferException(getExceptionByteArray(), 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes false); 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteReadOnlyBufferException() 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferException( 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes readOnly(getExceptionByteArray()), true); 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeCharBufferByteReadOnlyIncompleteBufferException() 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException, UnsupportedEncodingException { 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestDecodeCharBufferByteBufferException( 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes readOnly(getExceptionByteArray()), false); 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes void implTestDecodeCharBufferByteBufferException(ByteBuffer in, 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean endOfInput) throws CharacterCodingException, 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes UnsupportedEncodingException { 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = CharBuffer.allocate(50); 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, endOfInput); 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw runtime exception"); 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (RuntimeException e) { 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private ByteBuffer readOnly(ByteBuffer b) { 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (null == b) { 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return b.asReadOnlyBuffer(); 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected String getString() { 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return " buffer"; 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected ByteBuffer getByteBuffer() { 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ByteBuffer.wrap(new byte[] { 32, 98, 117, 102, 102, 101, 114 }); 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected ByteBuffer getHeadlessByteBuffer() { 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return getByteBuffer(); 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer getExceptionByteArray() throws UnsupportedEncodingException { 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // "runtime" 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ByteBuffer 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .wrap(new byte[] { 114, 117, 110, 116, 105, 109, 101 }); 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer getUnmappedByteBuffer() throws UnsupportedEncodingException { 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // "unmap buffer" 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] ba = new byte[] { 117, 110, 109, 97, 112, 32, 98, 117, 102, 102, 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 101, 114 }; 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ByteBuffer.wrap(ba); 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer getMalformedByteBuffer() throws UnsupportedEncodingException { 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // "malform buffer" 555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] ba = new byte[] { 109, 97, 108, 102, 111, 114, 109, 32, 98, 117, 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 102, 102, 101, 114 }; 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ByteBuffer.wrap(ba); 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void assertCharBufferValue(String expected, CharBuffer out) { 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (out.position() != 0) { 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.flip(); 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(expected, new String(out.array(), out.arrayOffset(), out 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .arrayOffset() + out.limit())); 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * test flush 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFlush() throws CharacterCodingException { 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = CharBuffer.allocate(10); 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer in = ByteBuffer.wrap(new byte[] { 12, 12 }); 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, true); 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder.flush(out)); 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode((ByteBuffer) in.rewind(), (CharBuffer) out.rewind(), 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes true); 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, decoder 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .flush(CharBuffer.allocate(10))); 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * ---------------------------------- methods to test illegal state 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * ----------------------------------- 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after reset, and it also means reset can be done 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // anywhere 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testResetIllegalState() throws CharacterCodingException { 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(getByteBuffer()); 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(3), false); 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(3), true); 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFlushIllegalState() throws CharacterCodingException { 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer in = ByteBuffer.wrap(new byte[] { 98, 98 }); 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = CharBuffer.allocate(5); 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: after decode with endOfInput is true 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, true); 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult result = decoder.flush(out); 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(result, CoderResult.UNDERFLOW); 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: flush twice 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.flush(out); 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalStateException"); 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: flush after decode with endOfInput is false 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, false); 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.flush(out); 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalStateException"); 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test illegal states for decode facade 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeFacadeIllegalState() throws CharacterCodingException { 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // decode facade can be execute in anywhere 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer in = getByteBuffer(); 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just created 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in); 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after decode facade 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in); 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after decode with that endOfInput is true 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(30), true); 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in); 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case:just after decode with that endOfInput is false 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(30), false); 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in); 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after flush 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(getByteBuffer(), CharBuffer.allocate(30), true); 655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.flush(CharBuffer.allocate(10)); 656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in); 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test illegal states for two decode method with endOfInput is true 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeTrueIllegalState() throws CharacterCodingException { 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer in = ByteBuffer.wrap(new byte[] { 98, 98 }); 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = CharBuffer.allocate(100); 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just created 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, true); 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after decode with that endOfInput is true 670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, CharBuffer.allocate(30), true); 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, true); 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case:just after decode with that endOfInput is false 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, CharBuffer.allocate(30), false); 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, true); 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after flush 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, CharBuffer.allocate(30), true); 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.flush(CharBuffer.allocate(10)); 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, true); 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should illegal state"); 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test illegal states for two decode method with endOfInput is false 701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecodeFalseIllegalState() throws CharacterCodingException { 702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer in = ByteBuffer.wrap(new byte[] { 98, 98 }); 703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer out = CharBuffer.allocate(5); 704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just created 705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, false); 706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after decode facade 710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in); 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, false); 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should illegal state"); 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after decode with that endOfInput is true 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, CharBuffer.allocate(30), true); 724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, false); 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should illegal state"); 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case:just after decode with that endOfInput is false 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, CharBuffer.allocate(30), false); 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, false); 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after flush 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.reset(); 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, CharBuffer.allocate(30), true); 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.flush(CharBuffer.allocate(10)); 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder.decode(in, out, false); 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should illegal state"); 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * --------------------------------- illegal state test end 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * --------------------------------- 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testImplFlush() { 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(CoderResult.UNDERFLOW, ((MockCharsetDecoder) decoder) 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .pubImplFlush(null)); 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testImplOnMalformedInput() { 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(CoderResult.UNDERFLOW, ((MockCharsetDecoder) decoder) 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .pubImplFlush(null)); 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testImplOnUnmappableCharacter() { 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((MockCharsetDecoder) decoder).pubImplOnUnmappableCharacter(null); 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testImplReplaceWith() { 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((MockCharsetDecoder) decoder).pubImplReplaceWith(null); 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testImplReset() { 782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes decoder = new MockCharsetDecoder(cs, 1, 3); 783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((MockCharsetDecoder) decoder).pubImplReset(); 784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * mock decoder 788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MockCharsetDecoder extends CharsetDecoder { 790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MockCharsetDecoder(Charset cs, float ave, float max) { 791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(cs, ave, max); 792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) { 795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int inPosition = in.position(); 796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] input = new byte[in.remaining()]; 797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.get(input); 798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String result; 799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = new String(input, "UTF-8"); 801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedEncodingException e) { 802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new AssertionError(e); 803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (result.startsWith("malform")) { 805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset the cursor to the error position 806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.position(inPosition); 807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set the error length 808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return CoderResult.malformedForLength("malform".length()); 809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else if (result.startsWith("unmap")) { 810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset the cursor to the error position 811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.position(inPosition); 812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set the error length 813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return CoderResult.unmappableForLength("unmap".length()); 814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else if (result.startsWith("runtime")) { 815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset the cursor to the error position 816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.position(0); 817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set the error length 818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new RuntimeException("runtime"); 819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int inLeft = input.length; 821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int outLeft = out.remaining(); 822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult r = CoderResult.UNDERFLOW; 823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int length = inLeft; 824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (outLeft < inLeft) { 825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes r = CoderResult.OVERFLOW; 826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes length = outLeft; 827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.position(inPosition + outLeft); 828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < length; i++) { 830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.put((char) input[i]); 831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return r; 833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected CoderResult implFlush(CharBuffer out) { 836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult result = super.implFlush(out); 837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (out.remaining() >= 5) { 838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // TODO 839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // out.put("flush"); 840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = CoderResult.UNDERFLOW; 841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // out.put("flush", 0, out.remaining()); 843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = CoderResult.OVERFLOW; 844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return result; 846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public CoderResult pubImplFlush(CharBuffer out) { 849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.implFlush(out); 850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void pubImplOnMalformedInput(CodingErrorAction newAction) { 853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.implOnMalformedInput(newAction); 854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void pubImplOnUnmappableCharacter(CodingErrorAction newAction) { 857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.implOnUnmappableCharacter(newAction); 858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void pubImplReplaceWith(String newReplacement) { 861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.implReplaceWith(newReplacement); 862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void pubImplReset() { 865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.implReset(); 866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 871