1/* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package tests.api.java.nio.charset; 17 18import java.nio.ByteBuffer; 19import java.nio.CharBuffer; 20import java.nio.charset.CharacterCodingException; 21import java.nio.charset.Charset; 22import java.nio.charset.CoderResult; 23import java.nio.charset.CodingErrorAction; 24import java.nio.charset.UnmappableCharacterException; 25 26/** 27 * test case specific activity of iso-8859-1 charset encoder 28 */ 29public class ISOCharsetEncoderTest extends CharsetEncoderTest { 30 31 // charset for iso-8859-1 32 private static final Charset CS = Charset.forName("iso-8859-1"); 33 34 /* 35 * @see CharsetEncoderTest#setUp() 36 */ 37 protected void setUp() throws Exception { 38 cs = CS; 39 super.setUp(); 40 } 41 42 /* 43 * @see CharsetEncoderTest#tearDown() 44 */ 45 protected void tearDown() throws Exception { 46 super.tearDown(); 47 } 48 49 public void testCanEncodeCharSequence() { 50 // normal case for isoCS 51 assertTrue(encoder.canEncode("\u0077")); 52 assertFalse(encoder.canEncode("\uc2a3")); 53 assertFalse(encoder.canEncode("\ud800\udc00")); 54 try { 55 encoder.canEncode(null); 56 } catch (NullPointerException e) { 57 } 58 assertTrue(encoder.canEncode("")); 59 } 60 61 public void testCanEncodeICUBug() { 62 assertFalse(encoder.canEncode((char) '\ud800')); 63 assertFalse(encoder.canEncode((String) "\ud800")); 64 } 65 66 public void testCanEncodechar() throws CharacterCodingException { 67 assertTrue(encoder.canEncode('\u0077')); 68 assertFalse(encoder.canEncode('\uc2a3')); 69 } 70 71 public void testSpecificDefaultValue() { 72 assertEquals(1, encoder.averageBytesPerChar(), 0.001); 73 assertEquals(1, encoder.maxBytesPerChar(), 0.001); 74 } 75 76 CharBuffer getMalformedCharBuffer() { 77 return CharBuffer.wrap("\ud800 buffer"); 78 } 79 80 CharBuffer getUnmapCharBuffer() { 81 return CharBuffer.wrap("\ud800\udc00 buffer"); 82 } 83 84 CharBuffer getExceptionCharBuffer() { 85 return null; 86 } 87 88 protected byte[] getIllegalByteArray() { 89 return null; 90 } 91 92 public void testMultiStepEncode() throws CharacterCodingException { 93 encoder.onMalformedInput(CodingErrorAction.REPORT); 94 encoder.onUnmappableCharacter(CodingErrorAction.REPORT); 95 try { 96 encoder.encode(CharBuffer.wrap("\ud800\udc00")); 97 fail("should unmappable"); 98 } catch (UnmappableCharacterException e) { 99 } 100 encoder.reset(); 101 ByteBuffer out = ByteBuffer.allocate(10); 102 assertTrue(encoder.encode(CharBuffer.wrap("\ud800"), out, true) 103 .isMalformed()); 104 encoder.flush(out); 105 encoder.reset(); 106 out = ByteBuffer.allocate(10); 107 assertSame(CoderResult.UNDERFLOW, encoder.encode(CharBuffer 108 .wrap("\ud800"), out, false)); 109 assertTrue(encoder.encode(CharBuffer.wrap("\udc00"), out, true) 110 .isMalformed()); 111 } 112} 113