1990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/*
2990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Copyright (C) 2008 The Android Open Source Project
3990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
4990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
5990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * you may not use this file except in compliance with the License.
6990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * You may obtain a copy of the License at
7990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
8990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
9990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
10990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Unless required by applicable law or agreed to in writing, software
11990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * See the License for the specific language governing permissions and
14990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * limitations under the License.
15990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */
16990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
17990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpackage libcore.java.io;
18990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
19990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.ByteArrayInputStream;
20990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.InputStreamReader;
21990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport junit.framework.TestCase;
22990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
23990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/**
24990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Checks basic InputStreamReader functionality.
25990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */
26990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpublic class OldAndroidInputStreamReaderTest extends TestCase {
27990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
28990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    /**
29990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson     * Checks if ASCII encoding works with InputStreamReader
30990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson     */
31990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testAscii() throws Exception {
32990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        String str = "AbCdEfGhIjKlMnOpQrStUvWxYzX";
33990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        ByteArrayInputStream aa = new ByteArrayInputStream(str.getBytes("ISO8859_1"));
34990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        InputStreamReader a = new InputStreamReader(aa, "ISO8859_1");
35990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
36990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
37990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            int x = a.read();
38990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals('A', x);
39990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            char[] c = new char[26];
40990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            x = a.read(c, 0, 26);
41f11138adb49be63f25188fc29a699cc5cd12df3dElliott Hughes            assertEquals("ISO-8859-1", a.getEncoding());
42990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals(26, x);
43990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals("bCdEfGhIjKlMnOpQrStUvWxYzX", String.valueOf(c));
44990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
45990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            a.close();
46990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
47990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
48990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
49990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    /**
50990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson     * Checks if Utf8 encoding works with InputStreamReader
51990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson     */
52990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testUtf8() throws Exception {
53990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        String str = "AbCdEfGhIjKlMnOpQrStUvWxYzX" +
54990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                "\u00a3\u00c5\u00c9";       // total of 30 characters
55990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        ByteArrayInputStream aa =
56990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                new ByteArrayInputStream(str.getBytes());
57990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
58990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        InputStreamReader a = new InputStreamReader(aa);
59990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
60990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
61f11138adb49be63f25188fc29a699cc5cd12df3dElliott Hughes            assertEquals("UTF-8", a.getEncoding());
62990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
63990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            int x = a.read();
64990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals('A', x);
65990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
66990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            char[] c = new char[29];
67990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            x = a.read(c, 0, 3);
68990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals(3, x);
69990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals("bCd", new String(c, 0, 3));
70990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
71990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            x = a.read(c, 3, 26);
72990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals(26, x);
73990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals("EfGhIjKlMnOpQrStUvWxYzX\u00a3\u00c5\u00c9", new String(c, 3, 26));
74990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
75990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            a.close();
76990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
77990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
78990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
79990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    /**
80990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson     * Checks if several encodings works with InputStreamReader
81990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson     */
82990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testStringy() throws Exception {
83990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        String src = "The quick brown fox\u00A0\u00FF" +
84990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                "\uFFFC\uD7C5\uDC03bloof";
85990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
86990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        String[] enc = new String[]{
87990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                "utf-8", "us-ascii", "iso-8859-1", "utf-16be", "utf-16le",
88990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                "utf-16",
89990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        };
90990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
91990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        for (int i = 0; i < enc.length; i++) {
92990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            byte[] ba = src.getBytes(enc[i]);
93990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
94990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            String s1 = new String(ba, enc[i]);
95990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
96990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            ByteArrayInputStream bais = new ByteArrayInputStream(ba);
97990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            InputStreamReader r = new InputStreamReader(bais, enc[i]);
98990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            try {
99990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                char[] ca = new char[600];
100990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                int n = r.read(ca, 0, 600);
101990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
102990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                String s2 = new String(ca, 0, n);
103990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                assertEquals(s1, s2);
104990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            } finally {
105990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                r.close();
106990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            }
107990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
108990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
109990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson}
110