1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package libcore.java.io;
19
20import java.io.ByteArrayInputStream;
21import java.io.IOException;
22import java.io.StreamTokenizer;
23import java.io.StringReader;
24import junit.framework.Assert;
25import tests.support.Support_ASimpleInputStream;
26import tests.support.Support_StringReader;
27
28public class OldStreamTokenizerTest extends junit.framework.TestCase {
29    StreamTokenizer st;
30
31    public void test_nextToken() throws IOException {
32        st = new StreamTokenizer(new Support_StringReader("\n \r\n#"));
33        st.ordinaryChar('\n'); // make \n ordinary
34        st.eolIsSignificant(true);
35        assertTrue("Wrong token 2,1", st.nextToken() == '\n');
36        assertTrue("Wrong token 2,2", st.nextToken() == '\n');
37        assertEquals("Wrong token 2,3", '#', st.nextToken());
38
39        Support_ASimpleInputStream sis = new Support_ASimpleInputStream();
40        sis.throwExceptionOnNextUse = true;
41        st = new StreamTokenizer(sis);
42        try {
43            st.nextToken();
44            fail("IOException expected.");
45        } catch (IOException e) {
46            // Expected.
47        }
48    }
49
50    public void test_basicStringTokenizerMethods() throws IOException {
51        String str = "Testing 12345 \n alpha \r\n omega";
52        String strb = "-3.8 'BLIND mice' \r sEe /* how */ they run";
53        StringReader aa = new StringReader(str);
54        StringReader ba = new StringReader(strb);
55        StreamTokenizer a = new StreamTokenizer(aa);
56        StreamTokenizer b = new StreamTokenizer(ba);
57
58        Assert.assertTrue(a.lineno() == 1);
59        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_WORD);
60        Assert.assertTrue(a.toString().equals("Token[Testing], line 1"));
61        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_NUMBER);
62        Assert.assertTrue(a.toString().equals("Token[n=12345.0], line 1"));
63        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_WORD);
64        Assert.assertTrue(a.toString().equals("Token[alpha], line 2"));
65        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_WORD);
66        Assert.assertTrue(a.toString().equals("Token[omega], line 3"));
67        Assert.assertTrue(a.nextToken() == StreamTokenizer.TT_EOF);
68        Assert.assertTrue(a.toString().equals("Token[EOF], line 3"));
69
70        b.commentChar('u');
71        b.eolIsSignificant(true);
72        b.lowerCaseMode(true);
73        b.ordinaryChar('y');
74        b.slashStarComments(true);
75
76        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_NUMBER);
77        Assert.assertTrue(b.nval == -3.8);
78        Assert.assertTrue(b.toString().equals("Token[n=-3.8], line 1"));
79        Assert.assertTrue(b.nextToken() == 39); // '
80        Assert.assertTrue(b.toString().equals("Token[BLIND mice], line 1"));
81        Assert.assertTrue(b.nextToken() == 10); // \n
82        Assert.assertTrue(b.toString().equals("Token[EOL], line 2"));
83        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_WORD);
84        Assert.assertTrue(b.toString().equals("Token[see], line 2"));
85        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_WORD);
86        Assert.assertTrue(b.toString().equals("Token[the], line 2"));
87        Assert.assertTrue(b.nextToken() == 121); // y
88        Assert.assertTrue(b.toString().equals("Token['y'], line 2"));
89        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_WORD);
90        Assert.assertTrue(b.toString().equals("Token[r], line 2"));
91        Assert.assertTrue(b.nextToken() == StreamTokenizer.TT_EOF);
92        Assert.assertTrue(b.toString().equals("Token[EOF], line 2"));
93    }
94
95    public void test_harmonyRegressionTest() {
96        byte[] data = new byte[] {(byte) '-'};
97        StreamTokenizer tokenizer = new StreamTokenizer(new ByteArrayInputStream(data));
98        try {
99            tokenizer.nextToken();
100        } catch(Exception e) {
101            Assert.fail(e.getMessage());
102        }
103        String result = tokenizer.toString();
104        Assert.assertEquals("Token['-'], line 1", result);
105    }
106
107    public void test_harmonyRegressionTest2() {
108        byte[] data = new byte[] {(byte) '"',
109                                  (byte) 'H',
110                                  (byte) 'e',
111                                  (byte) 'l',
112                                  (byte) 'l',
113                                  (byte) 'o',
114                                  (byte) '"'};
115        StreamTokenizer tokenizer = new StreamTokenizer(new ByteArrayInputStream(data));
116        try {
117            tokenizer.nextToken();
118        } catch (Exception e) {
119            e.printStackTrace();
120        }
121        String result = tokenizer.toString();
122        Assert.assertEquals("Token[Hello], line 1", result);
123    }
124}
125