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.nio.ByteBuffer; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.CharBuffer; 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.CharacterCodingException; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.Charset; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.CharsetDecoder; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.CharsetEncoder; 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 Hughesimport java.nio.charset.UnsupportedCharsetException; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * API unit test for java.nio.charset.CharsetEncoder 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class CharsetEncoderTest extends TestCase { 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static final int MAX_BYTES = 3; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static final float AVER_BYTES = 0.5f; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // charset for mock class 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final Charset MOCKCS = new MockCharset("CharsetEncoderTest_mock", new String[0]); 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Charset cs = MOCKCS; 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // default encoder 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharsetEncoder encoder; 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // default for Charset abstract class 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] defaultReplacement = new byte[] { 63 }; 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // specific for Charset implementation subclass 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] specifiedReplacement = new byte[] { 63 }; 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static final String unistr = " buffer";// \u8000\u8001\u00a5\u3000\r\n"; 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] unibytes = new byte[] { 32, 98, 117, 102, 102, 101, 114 }; 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] unibytesWithRep = null; 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] surrogate = new byte[0]; 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder = cs.newEncoder(); 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (null == unibytesWithRep) { 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] replacement = encoder.replacement(); 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes unibytesWithRep = new byte[replacement.length + unibytes.length]; 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(replacement, 0, unibytesWithRep, 0, 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes replacement.length); 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(unibytes, 0, unibytesWithRep, replacement.length, 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes unibytes.length); 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @see TestCase#tearDown() 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() throws Exception { 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.tearDown(); 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSpecificDefaultValue() { 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.averageBytesPerChar() == AVER_BYTES); 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.maxBytesPerChar() == MAX_BYTES); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDefaultValue() { 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(CodingErrorAction.REPORT, encoder.malformedInputAction()); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(CodingErrorAction.REPORT, encoder 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .unmappableCharacterAction()); 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.onMalformedInput(CodingErrorAction.IGNORE)); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .onUnmappableCharacter(CodingErrorAction.IGNORE)); 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (encoder instanceof MockCharsetEncoder) { 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(Arrays.equals(encoder.replacement(), defaultReplacement)); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(Arrays.equals(encoder.replacement(), 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes specifiedReplacement)); 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for constructor CharsetEncoder(Charset, float, float) 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCharsetEncoderCharsetfloatfloat() { 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // default value 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder = new MockCharsetEncoder(cs, (float) AVER_BYTES, MAX_BYTES); 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder.charset(), cs); 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.averageBytesPerChar() == AVER_BYTES); 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.maxBytesPerChar() == MAX_BYTES); 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(CodingErrorAction.REPORT, encoder.malformedInputAction()); 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(CodingErrorAction.REPORT, encoder 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .unmappableCharacterAction()); 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(new String(encoder.replacement()), new String( 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes defaultReplacement)); 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.onMalformedInput(CodingErrorAction.IGNORE)); 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .onUnmappableCharacter(CodingErrorAction.IGNORE)); 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharsetEncoder ec = new MockCharsetEncoder(cs, 1, MAX_BYTES); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(ec.charset(), cs); 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1.0, ec.averageBytesPerChar(), 0); 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(ec.maxBytesPerChar() == MAX_BYTES); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * ------------------------ Exceptional cases ------------------------- 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // NullPointerException: null charset 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(null, 1, MAX_BYTES); 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(new MockCharset("mock", new String[0]), 1, 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MAX_BYTES); 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Commented out since the comment is wrong since MAX_BYTES > 1 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // // OK: average length less than max length 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ec = new MockCharsetEncoder(cs, MAX_BYTES, 1); 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertTrue(ec.averageBytesPerChar() == MAX_BYTES); 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertTrue(ec.maxBytesPerChar() == 1); 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: zero length 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 0, MAX_BYTES); 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 1, 0); 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: negative length 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, -1, MAX_BYTES); 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 1, -1); 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for constructor CharsetEncoder(Charset, float, float, 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * byte[]) 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCharsetEncoderCharsetfloatfloatbyteArray() { 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] ba = getLegalByteArray(); 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharsetEncoder ec = new MockCharsetEncoder(cs, 1, MAX_BYTES, ba); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(ec.charset(), cs); 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1.0, ec.averageBytesPerChar(), 0.0); 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(ec.maxBytesPerChar() == MAX_BYTES); 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(ba, ec.replacement()); 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * ------------------------ Exceptional cases ------------------------- 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // NullPointerException: null charset 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(null, 1, MAX_BYTES, ba); 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: null byte array 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 1, MAX_BYTES, null); 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: empty byte array 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 1, MAX_BYTES, new byte[0]); 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: byte array is longer than max length 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 1, MAX_BYTES, new byte[] { 1, 2, 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MAX_BYTES, 4 }); 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Commented out since the comment is wrong since MAX_BYTES > 1 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // This test throws IllegalArgumentException on Harmony and RI 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // // OK: average length less than max length 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ec = new MockCharsetEncoder(cs, MAX_BYTES, ba.length, ba); 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertTrue(ec.averageBytesPerChar() == MAX_BYTES); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertTrue(ec.maxBytesPerChar() == ba.length); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: zero length 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 0, MAX_BYTES, ba); 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 1, 0, ba); 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal Argument: negative length 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, -1, MAX_BYTES, ba); 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ec = new MockCharsetEncoder(cs, 1, -1, ba); 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for boolean canEncode(char) 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCanEncodechar() throws CharacterCodingException { 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // for non-mapped char 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.canEncode('\uc2c0')); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // surrogate char for unicode 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 1st byte: d800-dbff 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 2nd byte: dc00-dfff 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.canEncode('\ud800')); 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // valid surrogate pair 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.canEncode('\udc00')); 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /*----------------------------------------- 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for illegal state case 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * methods which can change internal states are two encode, flush, two canEncode, reset 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * ----------------------------------------- 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after reset, and it also means reset can be done 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // anywhere 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testResetIllegalState() throws CharacterCodingException { 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode('\ud901'); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud901\udc00"); 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("aaa")); 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("aaa"), ByteBuffer.allocate(3), false); 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("aaa"), ByteBuffer.allocate(3), true); 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFlushIllegalState() throws CharacterCodingException { 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out = ByteBuffer.allocate(5); 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: after encode with endOfInput is true 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, true); 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult result = encoder.flush(out); 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: flush twice 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.flush(out); 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalStateException"); 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: flush after encode with endOfInput is false 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, false); 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.flush(out); 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalStateException"); 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFlushAfterConstructing() { 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out = ByteBuffer.allocate(5); 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //Illegal state: flush after instance created 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.flush(out); 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalStateException"); 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test illegal states for encode facade 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeFacadeIllegalState() throws CharacterCodingException { 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // encode facade can be execute in anywhere 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just created 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after encode facade 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after canEncode 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud902\udc00"); 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode('\ud902'); 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after encode with that endOfInput is true 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState2"), 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), true); 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case:just after encode with that endOfInput is false 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState3"), 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), false); 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after flush 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState4"), 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), true); 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.flush(ByteBuffer.allocate(10)); 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test illegal states for two encode method with endOfInput is true 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeTrueIllegalState() throws CharacterCodingException { 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out = ByteBuffer.allocate(5); 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just created 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, true); 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after encode with that endOfInput is true 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState2"), 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), true); 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, true); 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case:just after encode with that endOfInput is false 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState3"), 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), false); 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, true); 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after flush 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState4"), 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), true); 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.flush(ByteBuffer.allocate(10)); 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, true); 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should illegal state"); 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: after canEncode 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud906\udc00"); 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, true); 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode('\ud905'); 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, true); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test illegal states for two encode method with endOfInput is false 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeFalseIllegalState() throws CharacterCodingException { 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out = ByteBuffer.allocate(5); 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just created 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, false); 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after encode facade 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState1")); 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, false); 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should illegal state"); 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after encode with that endOfInput is true 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState2"), 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), true); 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, false); 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should illegal state"); 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case:just after encode with that endOfInput is false 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState3"), 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), false); 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, false); 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after flush 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState4"), 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), true); 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.flush(ByteBuffer.allocate(10)); 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, false); 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should illegal state"); 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: after canEncode 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud906\udc00"); 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, false); 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode('\ud905'); 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, out, false); 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test illegal states for two canEncode methods 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCanEncodeIllegalState() throws CharacterCodingException { 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just created 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud900\udc00"); 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode('\ud900'); 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state: just after encode with that endOfInput is true 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState2"), 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), true); 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud903\udc00"); 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw illegal state exception"); 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Illegal state:just after encode with that endOfInput is false 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState3"), 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), false); 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud904\udc00"); 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw illegal state exception"); 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalStateException e) { 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: just after flush 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testCanEncodeIllegalState4"), 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer.allocate(30), true); 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.flush(ByteBuffer.allocate(10)); 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud905\udc00"); 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode('\ud906'); 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Normal case: after reset again 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode("\ud906\udc00"); 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.canEncode('\ud905'); 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * --------------------------------- illegal state test end 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * --------------------------------- 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for boolean canEncode(CharSequence) 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCanEncodeCharSequence() { 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // for non-mapped char 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.canEncode("\uc2c0")); 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // surrogate char for unicode 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 1st byte: d800-dbff 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 2nd byte: dc00-dfff 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.canEncode("\ud800")); 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // valid surrogate pair 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.canEncode("\ud800\udc00")); 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // invalid surrogate pair 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.canEncode("\ud800\udb00")); 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for Charset charset() 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCharset() { 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder = new MockCharsetEncoder(Charset.forName("gbk"), 1, 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MAX_BYTES); 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertSame(encoder.charset(), Charset.forName("gbk")); 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedCharsetException e) { 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.err 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .println("Don't support GBK encoding, ignore current test"); 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for ByteBuffer encode(CharBuffer) 555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeCharBuffer() throws CharacterCodingException { 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Null pointer 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(null); 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // empty input buffer 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out = encoder.encode(CharBuffer.wrap("")); 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.position(), 0); 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, new byte[0]); 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assertByteArray(out, surrogate); 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = encoder.encode(CharBuffer.wrap(unistr)); 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.position(), 0); 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(unibytes)); 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for harmony-3378 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Charset cs = Charset.forName("UTF-8"); 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharsetEncoder encoder = cs.newEncoder(); 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.REPLACE); 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder = encoder.replaceWith(new byte[] { (byte) 0xef, (byte) 0xbf, 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0xbd, }); 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in = CharBuffer.wrap("\ud800"); 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = encoder.encode(in); 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(out); 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private byte[] addSurrogate(byte[] expected) { 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (surrogate.length > 0) { 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] temp = new byte[surrogate.length + expected.length]; 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(surrogate, 0, temp, 0, surrogate.length); 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(expected, 0, temp, surrogate.length, 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expected.length); 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expected = temp; 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return expected; 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @return 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected byte[] getEmptyByteArray() { 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new byte[0]; 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer getMalformedCharBuffer() { 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return CharBuffer.wrap("malform buffer"); 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer getUnmapCharBuffer() { 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return CharBuffer.wrap("unmap buffer"); 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer getExceptionCharBuffer() { 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return CharBuffer.wrap("runtime buffer"); 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeCharBufferException() throws CharacterCodingException { 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out; 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in; 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // MalformedException: 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = getMalformedCharBuffer(); 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.REPORT); 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (in != null) { 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // regression test for Harmony-1379 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw MalformedInputException"); 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (MalformedInputException e) { 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.IGNORE); 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = encoder.encode(in); 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(unibytes)); 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.REPLACE); 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = encoder.encode(in); 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(unibytesWithRep)); 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Unmapped Exception: 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = getUnmapCharBuffer(); 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.REPORT); 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (in != null) { 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in); 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw UnmappableCharacterException"); 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnmappableCharacterException e) { 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = encoder.encode(in); 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, unibytes); 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPLACE); 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = encoder.encode(in); 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, unibytesWithRep); 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // RuntimeException 670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(getExceptionCharBuffer()); 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw runtime exception"); 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (RuntimeException e) { 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * utility method, extract given bytebuffer to a string and compare with 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * give string 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes void assertByteArray(ByteBuffer out, byte[] expected) { 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = out.duplicate(); 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (out.position() != 0) { 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.flip(); 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] ba = new byte[out.limit() - out.position()]; 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.get(ba); 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // byte[] ba = out.array(); 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(Arrays.equals(ba, expected)); 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for CoderResult encode(CharBuffer, ByteBuffer, boolean) 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeCharBufferByteBufferboolean() 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException { 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out = ByteBuffer.allocate(200); 698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in = CharBuffer.wrap(unistr); 699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Null pointer 700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(null, out, true); 702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(in, null, true); 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case, one complete operation 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, true)); 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 200); 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.position() > 0); 718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.remaining() > 0); 719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 200); 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(unibytes)); 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.flush(out); 724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case, one complete operation, but call twice, first time set 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // endOfInput to false 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = ByteBuffer.allocate(200); 730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, false)); 731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 200); 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.position() > 0); 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.remaining() > 0); 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 200); 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(unibytes)); 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, false)); 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, true)); 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 200); 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.position() > 0); 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.remaining() > 0); 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 200); 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(duplicateByteArray(unibytes, 3))); 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // overflow 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = ByteBuffer.allocate(4); 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.rewind(); 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.OVERFLOW, encoder.encode(in, out, true)); 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 4); 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.position(), 4); 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.remaining(), 0); 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 4); 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer temp = ByteBuffer.allocate(200); 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.flip(); 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes temp.put(out); 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = temp; 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, true)); 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 200); 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.position() > 0); 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.remaining() > 0); 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 200); 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(unibytes)); 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.reset()); 770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = ByteBuffer.allocate(4); 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.OVERFLOW, encoder.encode(in, out, false)); 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 4); 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.position(), 4); 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.remaining(), 0); 776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 4); 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes temp = ByteBuffer.allocate(200); 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.flip(); 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes temp.put(out); 780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out = temp; 781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, false)); 782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.limit(), 200); 783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.position() > 0); 784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(out.remaining() > 0); 785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(out.capacity(), 200); 786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(unibytes)); 787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes void printByteBuffer(ByteBuffer buffer) { 790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.out.println("print buffer"); 791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (buffer.position() != 0) { 792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes buffer.flip(); 793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] ba = buffer.array(); 795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < ba.length; i++) { 796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.out.println(Integer.toHexString(ba[i])); 797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeCharBufferByteBufferbooleanExceptionFalse() 801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException { 802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestEncodeCharBufferByteBufferbooleanException(false); 803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeCharBufferByteBufferbooleanExceptionTrue() 806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws CharacterCodingException { 807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implTestEncodeCharBufferByteBufferbooleanException(true); 808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private byte[] duplicateByteArray(byte[] ba, int times) { 811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] result = new byte[ba.length * times]; 812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < times; i++) { 813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(ba, 0, result, i * ba.length, ba.length); 814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return result; 816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void implTestEncodeCharBufferByteBufferbooleanException( 819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean endOfInput) throws CharacterCodingException { 820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out = ByteBuffer.allocate(100); 821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // MalformedException: 823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in = getMalformedCharBuffer(); 824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.REPORT); 825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (in != null) { 827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult r = encoder.encode(in, out, endOfInput); 829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(r.isMalformed()); 830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.IGNORE); 835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes endOfInput)); 837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCodingErrorAction(endOfInput, out, in, unibytes); 838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.REPLACE); 843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes endOfInput)); 845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCodingErrorAction(endOfInput, out, in, unibytesWithRep); 846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.out.println("Cannot find malformed char buffer for " 848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + cs.name()); 849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Unmapped Exception: 852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = getUnmapCharBuffer(); 853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.REPORT); 854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (in != null) { 856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.encode(in, out, endOfInput).isUnmappable()); 859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes endOfInput)); 866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCodingErrorAction(endOfInput, out, in, unibytes); 867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.reset(); 869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.clear(); 870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.REPLACE); 872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes endOfInput)); 874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertCodingErrorAction(endOfInput, out, in, unibytesWithRep); 875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.out.println("Cannot find unmapped char buffer for " 877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + cs.name()); 878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // RuntimeException 881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(getExceptionCharBuffer()); 883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw runtime exception"); 884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (RuntimeException e) { 885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void assertCodingErrorAction(boolean endOfInput, ByteBuffer out, 889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in, byte[] expect) { 890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (endOfInput) { 891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(expect)); 892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, 895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes endOfInput)); 896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.rewind(); 897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder.encode(in, out, true)); 898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertByteArray(out, addSurrogate(duplicateByteArray(expect, 3))); 899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for CoderResult flush(ByteBuffer) 904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFlush() throws CharacterCodingException { 906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteBuffer out = ByteBuffer.allocate(6); 907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CharBuffer in = CharBuffer.wrap("aaa"); 908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(in.remaining(), 3); 909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // by encode facade, so that internal state will be wrong 911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.encode(CharBuffer.wrap("testFlush"), ByteBuffer.allocate(20), 912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes true); 913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CoderResult.UNDERFLOW, encoder 914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .flush(ByteBuffer.allocate(50))); 915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * test isLegalReplacement(byte[]) 919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testIsLegalReplacement() { 921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.isLegalReplacement(null); 923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.isLegalReplacement(specifiedReplacement)); 927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.isLegalReplacement(new byte[200])); 929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] ba = getIllegalByteArray(); 930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (ba != null) { 931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(encoder.isLegalReplacement(ba)); 932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testIsLegalReplacementEmptyArray() { 936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ISO, ASC, GB, UTF8 encoder will throw exception in RI 937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // others will pass 938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try { 939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(encoder.isLegalReplacement(new byte[0])); 940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // fail("should throw ArrayIndexOutOfBoundsException"); 941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // } catch (ArrayIndexOutOfBoundsException e) { 942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // } 943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testOnMalformedInput() { 946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.REPORT, encoder.malformedInputAction()); 947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(null); 949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onMalformedInput(CodingErrorAction.IGNORE); 953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.IGNORE, encoder.malformedInputAction()); 954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testOnUnmappableCharacter() { 957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.REPORT, encoder 958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .unmappableCharacterAction()); 959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(null); 961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.onUnmappableCharacter(CodingErrorAction.IGNORE); 965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(CodingErrorAction.IGNORE, encoder 966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .unmappableCharacterAction()); 967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testReplacement() { 970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.replaceWith(null); 972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.replaceWith(new byte[0]); 977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.replaceWith(new byte[100]); 982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] nr = getLegalByteArray(); 987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(encoder, encoder.replaceWith(nr)); 988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(nr, encoder.replacement()); 989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nr = getIllegalByteArray(); 991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoder.replaceWith(new byte[100]); 993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null pointer exception"); 994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected byte[] getLegalByteArray() { 999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new byte[] { 'a' }; 1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected byte[] getIllegalByteArray() { 1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new byte[155]; 1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Mock subclass of CharsetEncoder For protected method test 1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MockCharsetEncoder extends CharsetEncoder { 1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean flushed = false; 1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean isFlushed() { 1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean result = flushed; 1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes flushed = false; 1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return result; 1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean isLegalReplacement(byte[] ba) { 1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (ba.length == 155) {// specified magic number, return false 1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.isLegalReplacement(ba); 1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MockCharsetEncoder(Charset cs, float aver, float max) { 1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(cs, aver, max); 1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MockCharsetEncoder(Charset cs, float aver, float max, 1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] replacement) { 1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(cs, aver, max, replacement); 1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) { 1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int inPosition = in.position(); 1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes char[] input = new char[in.remaining()]; 1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.get(input); 1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String result = new String(input); 1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (result.startsWith("malform")) { 1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset the cursor to the error position 1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.position(inPosition); 1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // in.position(0); 1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set the error length 1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return CoderResult.malformedForLength("malform".length()); 1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else if (result.startsWith("unmap")) { 1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset the cursor to the error position 1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.position(inPosition); 1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // in.position(0); 1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set the error length 1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return CoderResult.unmappableForLength("unmap".length()); 1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else if (result.startsWith("runtime")) { 1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // reset the cursor to the error position 1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.position(0); 1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set the error length 1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new RuntimeException("runtime"); 1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int inLeft = input.length; 1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int outLeft = out.remaining(); 1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult r = CoderResult.UNDERFLOW; 1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int length = inLeft; 1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (outLeft < inLeft) { 1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes r = CoderResult.OVERFLOW; 1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes length = outLeft; 1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.position(inPosition + outLeft); 1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < length; i++) { 1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.put((byte) input[i]); 1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return r; 1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected CoderResult implFlush(ByteBuffer out) { 1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CoderResult result = super.implFlush(out); 1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int length = 0; 1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (out.remaining() >= 5) { 1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes length = 5; 1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = CoderResult.UNDERFLOW; 1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes flushed = true; 1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // for (int i = 0; i < length; i++) { 1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // out.put((byte)'f'); 1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // } 1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes length = out.remaining(); 1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = CoderResult.OVERFLOW; 1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return result; 1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void implReplaceWith(byte[] ba) { 1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(ba, replacement()); 1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * mock charset for test encoder initialization 1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MockCharset extends Charset { 1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected MockCharset(String arg0, String[] arg1) { 1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(arg0, arg1); 1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean contains(Charset arg0) { 1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public CharsetDecoder newDecoder() { 1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new CharsetDecoderTest.MockCharsetDecoder(this, 1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (float) AVER_BYTES, MAX_BYTES); 1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public CharsetEncoder newEncoder() { 1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new MockCharsetEncoder(this, (float) AVER_BYTES, MAX_BYTES); 1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 1119