1935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson/*
2935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  Licensed to the Apache Software Foundation (ASF) under one or more
3935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  contributor license agreements.  See the NOTICE file distributed with
4935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  this work for additional information regarding copyright ownership.
5935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  The ASF licenses this file to You under the Apache License, Version 2.0
6935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  (the "License"); you may not use this file except in compliance with
7935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  the License.  You may obtain a copy of the License at
8935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *
9935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
10935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *
11935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  Unless required by applicable law or agreed to in writing, software
12935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  distributed under the License is distributed on an "AS IS" BASIS,
13935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  See the License for the specific language governing permissions and
15935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson *  limitations under the License.
16935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson */
17935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
18935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpackage libcore.java.io;
19935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
20935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.ByteArrayInputStream;
21935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.IOException;
22935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.StreamTokenizer;
23935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.StringReader;
24935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport junit.framework.Assert;
25935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport tests.support.Support_ASimpleInputStream;
26935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport tests.support.Support_StringReader;
27935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
28935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpublic class OldStreamTokenizerTest extends junit.framework.TestCase {
29935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    StreamTokenizer st;
30935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
31935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    public void test_nextToken() throws IOException {
32935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        st = new StreamTokenizer(new Support_StringReader("\n \r\n#"));
33935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        st.ordinaryChar('\n'); // make \n ordinary
34935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        st.eolIsSignificant(true);
35935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        assertTrue("Wrong token 2,1", st.nextToken() == '\n');
36935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        assertTrue("Wrong token 2,2", st.nextToken() == '\n');
37935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        assertEquals("Wrong token 2,3", '#', st.nextToken());
38935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
39935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Support_ASimpleInputStream sis = new Support_ASimpleInputStream();
40935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        sis.throwExceptionOnNextUse = true;
41935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        st = new StreamTokenizer(sis);
42935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        try {
43935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson            st.nextToken();
44935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson            fail("IOException expected.");
45935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        } catch (IOException e) {
46935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson            // Expected.
47935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        }
48935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    }
49935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
50935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    public void test_basicStringTokenizerMethods() throws IOException {
51935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        String str = "Testing 12345 \n alpha \r\n omega";
52935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        String strb = "-3.8 'BLIND mice' \r sEe /* how */ they run";
53935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        StringReader aa = new StringReader(str);
54935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        StringReader ba = new StringReader(strb);
55935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        StreamTokenizer a = new StreamTokenizer(aa);
56935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        StreamTokenizer b = new StreamTokenizer(ba);
57935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
58935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.lineno() == 1);
59935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_WORD);
60935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.toString().equals("Token[Testing], line 1"));
61935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_NUMBER);
62935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.toString().equals("Token[n=12345.0], line 1"));
63935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_WORD);
64935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.toString().equals("Token[alpha], line 2"));
65935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_WORD);
66935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.toString().equals("Token[omega], line 3"));
67935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_EOF);
68935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(a.toString().equals("Token[EOF], line 3"));
69935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
70935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        b.commentChar('u');
71935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        b.eolIsSignificant(true);
72935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        b.lowerCaseMode(true);
73935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        b.ordinaryChar('y');
74935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        b.slashStarComments(true);
75935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
76935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_NUMBER);
77935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nval == -3.8);
78935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.toString().equals("Token[n=-3.8], line 1"));
79935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nextToken() == 39); // '
80935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.toString().equals("Token[BLIND mice], line 1"));
81935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nextToken() == 10); // \n
82935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.toString().equals("Token[EOL], line 2"));
83935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_WORD);
84935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.toString().equals("Token[see], line 2"));
85935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_WORD);
86935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.toString().equals("Token[the], line 2"));
87935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nextToken() == 121); // y
88935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.toString().equals("Token['y'], line 2"));
89935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_WORD);
90935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.toString().equals("Token[r], line 2"));
91935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_EOF);
92935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertTrue(b.toString().equals("Token[EOF], line 2"));
93935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    }
94935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
95935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    public void test_harmonyRegressionTest() {
96935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        byte[] data = new byte[] {(byte) '-'};
97935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        StreamTokenizer tokenizer = new StreamTokenizer(new ByteArrayInputStream(data));
98935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        try {
99935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson            tokenizer.nextToken();
100935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        } catch(Exception e) {
101935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson            Assert.fail(e.getMessage());
102935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        }
103935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        String result = tokenizer.toString();
104935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertEquals("Token['-'], line 1", result);
105935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    }
106935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson
107935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    public void test_harmonyRegressionTest2() {
108935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        byte[] data = new byte[] {(byte) '"',
109935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson                                  (byte) 'H',
110935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson                                  (byte) 'e',
111935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson                                  (byte) 'l',
112935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson                                  (byte) 'l',
113935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson                                  (byte) 'o',
114935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson                                  (byte) '"'};
115935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        StreamTokenizer tokenizer = new StreamTokenizer(new ByteArrayInputStream(data));
116935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        try {
117935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson            tokenizer.nextToken();
118935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        } catch (Exception e) {
119935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson            e.printStackTrace();
120935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        }
121935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        String result = tokenizer.toString();
122935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson        Assert.assertEquals("Token[Hello], line 1", result);
123935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson    }
124935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson}
125