/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package tests.api.java.io; import java.io.ByteArrayInputStream; import java.io.CharArrayReader; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.io.Reader; import java.io.StreamTokenizer; import java.io.StringBufferInputStream; import java.io.StringReader; import junit.framework.Assert; import tests.support.Support_StringReader; import tests.support.Support_ASimpleInputStream; import dalvik.annotation.TestLevel; import dalvik.annotation.TestTargetClass; import dalvik.annotation.TestTargetNew; import dalvik.annotation.TestTargets; // TODO: most of the assertTrue calls in this test case should be // replaced with assertEquals (possibly two assertEquals) see // test_ConstructorLjava_io_InputStream for example. // This gives much more helpful error messages. @TestTargetClass(StreamTokenizer.class) public class StreamTokenizerTest extends junit.framework.TestCase { Support_StringReader r; StreamTokenizer st; String testString; /** * @tests java.io.StreamTokenizer#StreamTokenizer(java.io.InputStream) */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "StreamTokenizer", args = {java.io.InputStream.class} ) public void test_ConstructorLjava_io_InputStream() throws IOException { st = new StreamTokenizer(new StringBufferInputStream( "/comments\n d 8 'h'")); assertEquals("the next token returned should be the letter d", StreamTokenizer.TT_WORD, st.nextToken()); assertEquals("the next token returned should be the letter d", "d", st.sval); assertEquals("the next token returned should be the digit 8", StreamTokenizer.TT_NUMBER, st.nextToken()); assertEquals("the next token returned should be the digit 8", 8.0, st.nval); assertEquals("the next token returned should be the quote character", 39, st.nextToken()); assertEquals("the next token returned should be the quote character", "h", st.sval); } /** * @tests java.io.StreamTokenizer#StreamTokenizer(java.io.Reader) */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "StreamTokenizer", args = {java.io.Reader.class} ) public void test_ConstructorLjava_io_Reader() throws IOException { setTest("/testing\n d 8 'h' "); assertEquals("the next token returned should be the letter d skipping the comments", StreamTokenizer.TT_WORD, st.nextToken()); assertEquals("the next token returned should be the letter d", "d", st.sval); assertEquals("the next token returned should be the digit 8", StreamTokenizer.TT_NUMBER, st.nextToken()); assertEquals("the next token returned should be the digit 8", 8.0, st.nval); assertEquals("the next token returned should be the quote character", 39, st.nextToken()); assertEquals("the next token returned should be the quote character", "h", st.sval); } /** * @tests java.io.StreamTokenizer#commentChar(int) */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "commentChar", args = {int.class} ) public void test_commentCharI() throws IOException { setTest("*comment \n / 8 'h' "); st.ordinaryChar('/'); st.commentChar('*'); assertEquals("nextToken() did not return the character / skiping the comments starting with *", 47, st.nextToken()); assertTrue("the next token returned should be the digit 8", st .nextToken() == StreamTokenizer.TT_NUMBER && st.nval == 8.0); assertTrue("the next token returned should be the quote character", st.nextToken() == 39 && st.sval.equals("h")); } /** * @tests java.io.StreamTokenizer#eolIsSignificant(boolean) */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "eolIsSignificant", args = {boolean.class} ) public void test_eolIsSignificantZ() throws IOException { setTest("d 8\n"); // by default end of line characters are not significant assertTrue("nextToken did not return d", st.nextToken() == StreamTokenizer.TT_WORD && st.sval.equals("d")); assertTrue("nextToken did not return 8", st.nextToken() == StreamTokenizer.TT_NUMBER && st.nval == 8.0); assertTrue("nextToken should be the end of file", st.nextToken() == StreamTokenizer.TT_EOF); setTest("d\n"); st.eolIsSignificant(true); // end of line characters are significant assertTrue("nextToken did not return d", st.nextToken() == StreamTokenizer.TT_WORD && st.sval.equals("d")); assertTrue("nextToken is the end of line", st.nextToken() == StreamTokenizer.TT_EOL); } /** * @tests java.io.StreamTokenizer#lineno() */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "lineno", args = {} ) public void test_lineno() throws IOException { setTest("d\n 8\n"); assertEquals("the lineno should be 1", 1, st.lineno()); st.nextToken(); st.nextToken(); assertEquals("the lineno should be 2", 2, st.lineno()); st.nextToken(); assertEquals("the next line no should be 3", 3, st.lineno()); } /** * @tests java.io.StreamTokenizer#lowerCaseMode(boolean) */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "lowerCaseMode", args = {boolean.class} ) public void test_lowerCaseModeZ() throws Exception { // SM. setTest("HELLOWORLD"); st.lowerCaseMode(true); st.nextToken(); assertEquals("sval not converted to lowercase.", "helloworld", st.sval ); } /** * @tests java.io.StreamTokenizer#nextToken() */ @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, method = "nextToken", args = {} ) public void test_nextToken() throws IOException { setTest("\r\n/* fje fje 43.4 f \r\n f g */ 456.459 \r\n" + "Hello / \r\n \r\n \n \r \257 Hi \'Hello World\'"); st.ordinaryChar('/'); st.slashStarComments(true); st.nextToken(); assertTrue("Wrong Token type1: " + (char) st.ttype, st.ttype == StreamTokenizer.TT_NUMBER); st.nextToken(); assertTrue("Wrong Token type2: " + st.ttype, st.ttype == StreamTokenizer.TT_WORD); st.nextToken(); assertTrue("Wrong Token type3: " + st.ttype, st.ttype == '/'); st.nextToken(); assertTrue("Wrong Token type4: " + st.ttype, st.ttype == StreamTokenizer.TT_WORD); st.nextToken(); assertTrue("Wrong Token type5: " + st.ttype, st.ttype == StreamTokenizer.TT_WORD); st.nextToken(); assertTrue("Wrong Token type6: " + st.ttype, st.ttype == '\''); assertTrue("Wrong Token type7: " + st.ttype, st.sval .equals("Hello World")); st.nextToken(); assertTrue("Wrong Token type8: " + st.ttype, st.ttype == -1); final PipedInputStream pin = new PipedInputStream(); PipedOutputStream pout = new PipedOutputStream(pin); pout.write("hello\n\r\r".getBytes()); st = new StreamTokenizer(pin); st.eolIsSignificant(true); assertTrue("Wrong token 1,1", st.nextToken() == StreamTokenizer.TT_WORD && st.sval.equals("hello")); assertTrue("Wrong token 1,2", st.nextToken() == '\n'); assertTrue("Wrong token 1,3", st.nextToken() == '\n'); assertTrue("Wrong token 1,4", st.nextToken() == '\n'); pout.close(); assertTrue("Wrong token 1,5", st.nextToken() == StreamTokenizer.TT_EOF); st = new StreamTokenizer(new Support_StringReader("\n \r\n#")); st.ordinaryChar('\n'); // make \n ordinary st.eolIsSignificant(true); assertTrue("Wrong token 2,1", st.nextToken() == '\n'); assertTrue("Wrong token 2,2", st.nextToken() == '\n'); assertEquals("Wrong token 2,3", '#', st.nextToken()); Support_ASimpleInputStream sis = new Support_ASimpleInputStream(); sis.throwExceptionOnNextUse = true; st = new StreamTokenizer(sis); try { st.nextToken(); fail("IOException expected."); } catch (IOException e) { // Expected. } } /** * @tests java.io.StreamTokenizer#ordinaryChar(int) */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "ordinaryChar", args = {int.class} ) public void test_ordinaryCharI() throws IOException { // SM. setTest("Ffjein 893"); st.ordinaryChar('F'); st.nextToken(); assertTrue("OrdinaryChar failed." + (char) st.ttype, st.ttype == 'F'); } /** * @tests java.io.StreamTokenizer#ordinaryChars(int, int) */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "ordinaryChars", args = {int.class, int.class} ) public void test_ordinaryCharsII() throws IOException { // SM. setTest("azbc iof z 893"); st.ordinaryChars('a', 'z'); assertEquals("OrdinaryChars failed.", 'a', st.nextToken()); assertEquals("OrdinaryChars failed.", 'z', st.nextToken()); } /** * @tests java.io.StreamTokenizer#parseNumbers() */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "parseNumbers", args = {} ) public void test_parseNumbers() throws IOException { // SM setTest("9.9 678"); assertTrue("Base behavior failed.", st.nextToken() == StreamTokenizer.TT_NUMBER); st.ordinaryChars('0', '9'); assertEquals("setOrdinary failed.", '6', st.nextToken()); st.parseNumbers(); assertTrue("parseNumbers failed.", st.nextToken() == StreamTokenizer.TT_NUMBER); } /** * @tests java.io.StreamTokenizer#pushBack() */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "pushBack", args = {} ) public void test_pushBack() throws IOException { // SM. setTest("Hello 897"); st.nextToken(); st.pushBack(); assertTrue("PushBack failed.", st.nextToken() == StreamTokenizer.TT_WORD); } /** * @tests java.io.StreamTokenizer#quoteChar(int) */ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "quoteChar", args = {int.class} ) public void test_quoteCharI() throws IOException { // SM setTest("