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