CharsetDecoderTest.java revision b7bfb47e9720ecc6e10f43878f27e40542a9c800
1b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes/* 2b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * Copyright (C) 2009 The Android Open Source Project 3b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * 4b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 5b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * you may not use this file except in compliance with the License. 6b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * You may obtain a copy of the License at 7b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * 8b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * 10b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * Unless required by applicable law or agreed to in writing, software 11b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * See the License for the specific language governing permissions and 14b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes * limitations under the License. 15b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes */ 16b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 17b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughespackage java.nio.charset; 18b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 19b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughesimport java.nio.ByteBuffer; 20b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughesimport java.nio.CharBuffer; 21b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 22b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughesimport junit.framework.Test; 23b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughesimport junit.framework.TestSuite; 24b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 25b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughespublic class CharsetDecoderTest extends junit.framework.TestCase { 26b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes private static final String CHARSET = "UTF-16"; 27b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 28b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes private static final String SAMPLE_STRING = "Android"; 29b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 30b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes // http://code.google.com/p/android/issues/detail?id=4237 31b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes public void test_ByteArray_decode_no_offset() throws Exception { 32b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CharsetDecoder decoder = getCharsetDecoderUnderTest(); 33b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes byte[] arr = getEncodedByteArrayFixture(); 34b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes ByteBuffer inBuffer = ByteBuffer.wrap(arr, 0, arr.length).slice(); 35b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CharBuffer outBuffer = CharBuffer.allocate(arr.length); 36b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes decoder.reset(); 37b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CoderResult coderResult = decoder.decode(inBuffer, outBuffer, true); 38b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes assertFalse(coderResult.toString(), coderResult.isError()); 39b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes decoder.flush(outBuffer); 40b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes outBuffer.flip(); 41b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes assertEquals(SAMPLE_STRING, outBuffer.toString().trim()); 42b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes } 43b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 44b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes // http://code.google.com/p/android/issues/detail?id=4237 45b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes public void test_ByteArray_decode_with_offset() throws Exception { 46b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CharsetDecoder decoder = getCharsetDecoderUnderTest(); 47b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes byte[] arr = getEncodedByteArrayFixture(); 48b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes arr = prependByteToByteArray(arr, new Integer(1).byteValue()); 49b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes int offset = 1; 50b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes ByteBuffer inBuffer = ByteBuffer.wrap(arr, offset, arr.length - offset).slice(); 51b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CharBuffer outBuffer = CharBuffer.allocate(arr.length - offset); 52b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes decoder.reset(); 53b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CoderResult coderResult = decoder.decode(inBuffer, outBuffer, true); 54b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes assertFalse(coderResult.toString(), coderResult.isError()); 55b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes decoder.flush(outBuffer); 56b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes outBuffer.flip(); 57b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes assertEquals(SAMPLE_STRING, outBuffer.toString().trim()); 58b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes } 59b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 60b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes // http://code.google.com/p/android/issues/detail?id=4237 61b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes public void test_ByteArray_decode_with_offset_using_facade_method() throws Exception { 62b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CharsetDecoder decoder = getCharsetDecoderUnderTest(); 63b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes byte[] arr = getEncodedByteArrayFixture(); 64b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes arr = prependByteToByteArray(arr, new Integer(1).byteValue()); 65b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes int offset = 1; 66b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CharBuffer outBuffer = decoder.decode(ByteBuffer.wrap(arr, offset, arr.length - offset)); 67b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes assertEquals(SAMPLE_STRING, outBuffer.toString().trim()); 68b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes } 69b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 70b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes private static byte[] prependByteToByteArray(byte[] arr, byte b) { 71b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes byte[] result = new byte[arr.length + 1]; 72b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes result[0] = b; 73b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes System.arraycopy(arr, 0, result, 1, arr.length); 74b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes return result; 75b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes } 76b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 77b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes private static CharsetDecoder getCharsetDecoderUnderTest() { 78b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes return Charset.forName(CHARSET).newDecoder(); 79b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes } 80b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes 81b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes private byte[] getEncodedByteArrayFixture() throws CharacterCodingException { 82b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes CharsetEncoder encoder = Charset.forName(CHARSET).newEncoder(); 83b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes return encoder.encode(CharBuffer.wrap(SAMPLE_STRING)).array(); 84b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes } 85b7bfb47e9720ecc6e10f43878f27e40542a9c800Elliott Hughes} 86