1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * 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 */
16
17package android.core;
18
19import junit.framework.TestCase;
20
21import java.io.ByteArrayInputStream;
22import java.io.StreamTokenizer;
23import java.io.StringReader;
24import android.test.suitebuilder.annotation.MediumTest;
25
26/**
27 * Tests for the StreamTokenizer
28 */
29public class StreamTokenizerTest extends TestCase {
30
31    @MediumTest
32    public void testStreamTokenizer() throws Exception {
33        String str = "Testing 12345 \n alpha \r\n omega";
34        String strb = "-3.8 'BLIND mice' \r sEe /* how */ they run";
35        StringReader aa = new StringReader(str);
36        StringReader ba = new StringReader(strb);
37        StreamTokenizer a = new StreamTokenizer(aa);
38        StreamTokenizer b = new StreamTokenizer(ba);
39
40        assertEquals(1, a.lineno());
41        assertEquals(StreamTokenizer.TT_WORD, a.nextToken());
42        assertEquals("Token[Testing], line 1", a.toString());
43        assertEquals(StreamTokenizer.TT_NUMBER, a.nextToken());
44        assertEquals("Token[n=12345.0], line 1", a.toString());
45        assertEquals(StreamTokenizer.TT_WORD, a.nextToken());
46        assertEquals("Token[alpha], line 2", a.toString());
47        assertEquals(StreamTokenizer.TT_WORD, a.nextToken());
48        assertEquals("Token[omega], line 3", a.toString());
49        assertEquals(StreamTokenizer.TT_EOF, a.nextToken());
50        assertEquals("Token[EOF], line 3", a.toString());
51
52        b.commentChar('u');
53        b.eolIsSignificant(true);
54        b.lowerCaseMode(true);
55        b.ordinaryChar('y');
56        b.slashStarComments(true);
57
58        assertEquals(StreamTokenizer.TT_NUMBER, b.nextToken());
59        assertEquals(-3.8, b.nval);
60        assertEquals("Token[n=-3.8], line 1", b.toString());
61        assertEquals(39, b.nextToken()); // '
62        assertEquals("Token[BLIND mice], line 1", b.toString());
63        assertEquals(10, b.nextToken()); // \n
64        assertEquals("Token[EOL], line 2", b.toString());
65        assertEquals(StreamTokenizer.TT_WORD, b.nextToken());
66        assertEquals("Token[see], line 2", b.toString());
67        assertEquals(StreamTokenizer.TT_WORD, b.nextToken());
68        assertEquals("Token[the], line 2", b.toString());
69        assertEquals(121, b.nextToken()); // y
70        assertEquals("Token['y'], line 2", b.toString());
71        assertEquals(StreamTokenizer.TT_WORD, b.nextToken());
72        assertEquals("Token[r], line 2", b.toString());
73        assertEquals(StreamTokenizer.TT_EOF, b.nextToken());
74        assertEquals("Token[EOF], line 2", b.toString());
75
76        // A harmony regression test
77        byte[] data = new byte[]{(byte) '-'};
78        StreamTokenizer tokenizer = new StreamTokenizer(new ByteArrayInputStream(data));
79        tokenizer.nextToken();
80        String result = tokenizer.toString();
81        assertEquals("Token['-'], line 1", result);
82
83        // another harmony regression test
84        byte[] data2 = new byte[]{(byte) '"',
85                (byte) 'H',
86                (byte) 'e',
87                (byte) 'l',
88                (byte) 'l',
89                (byte) 'o',
90                (byte) '"'};
91        StreamTokenizer tokenizer2 = new StreamTokenizer(new ByteArrayInputStream(data2));
92        tokenizer2.nextToken();
93        result = tokenizer2.toString();
94        assertEquals("Token[Hello], line 1", result);
95    }
96}
97