/*
* Copyright (C) 2014 Civilian Framework.
*
* Licensed under the Civilian License (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.civilian-framework.org/license.txt
*
* 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 org.civilian.util;
import org.junit.Test;
import org.civilian.CivTest;
public class ScannerTest extends CivTest
{
@Test public void testNextQuotedString()
{
Scanner s = new Scanner("'abc' 'abc' \"\" 'ab\"c'#");
assertEquals('\'', s.current());
assertEquals("abc", s.consumeQuotedString(false));
s.skipWhitespace();
assertEquals("'abc'", s.consumeQuotedString(true));
s.skipWhitespace();
assertEquals("", s.consumeQuotedString(false));
s.skipWhitespace();
assertEquals("'ab\"c'", s.consumeQuotedString(true));
assertEquals('#', s.current());
}
@Test public void testNextKeyword()
{
Scanner s = new Scanner("encoding12");
assertFalse(s.nextKeyword("encoding"));
s = new Scanner("encoding");
assertTrue(s.nextKeyword("encoding"));
assertFalse(s.hasMore());
s = new Scanner("encoding ISO-8859-1");
assertTrue(s.nextKeyword("encoding"));
assertEquals("ISO-8859-1", s.consumeRest());
}
@Test public void testMultLines()
{
Scanner s = new Scanner("a", "b", "c");
assertEquals(3, s.getLines().length);
for (int i=0; i<3; i++)
{
assertEquals(i, s.getLineIndex());
assertEquals(i < 2, s.nextLine());
}
s = new Scanner(new String[0]);
assertEquals(1, s.getLines().length);
s = new Scanner((String[])null);
assertEquals(1, s.getLines().length);
}
@Test public void testAccessors()
{
Scanner s = new Scanner("123");
assertEquals(0, s.getLineIndex());
assertEquals(1, s.getLineCount());
assertEquals("123", s.getLine());
assertEquals(3, s.getLength());
assertEquals(0, s.getPos());
s.skip();
assertEquals(1, s.getPos());
assertEquals('2', s.current());
assertTrue (s.currentIsDigit());
assertFalse (s.currentHasType(Character.MATH_SYMBOL));
assertTrue (s.next("23"));
assertEquals(-1, s.current());
}
@Test public void testSkipWhitespace()
{
Scanner s = new Scanner(" 1 1", 0);
s.autoSkipWhitespace(false);
assertFalse(s.next("1"));
s.skipWhitespace();
assertTrue(s.next("1"));
assertFalse(s.next("1"));
s.autoSkipWhitespace(true);
assertTrue(s.next("1"));
}
@Test public void testNext()
{
Scanner s = new Scanner("abc");
assertFalse(s.next("abcd"));
assertFalse(s.next("abd"));
assertTrue(s.nextKeyword("abc"));
s.init("abc,");
assertTrue(s.nextKeyword("abc"));
}
@Test public void testConsumeAny()
{
Scanner s = new Scanner("a");
assertEquals(null, s.consumeAny("b"));
assertEquals("a", s.consumeAny("b", "a"));
}
@Test public void testConsumeToken()
{
Scanner s = new Scanner("a");
assertEquals("a", s.consumeToken());
s.init("a b,d");
assertEquals("a", s.consumeToken());
assertEquals("b", s.consumeToken(","));
s.init(" a");
s.autoSkipWhitespace(false);
assertNull(s.consumeToken());
}
@Test public void testConsumeIdentifier()
{
Scanner s = new Scanner("a a12 abc-");
assertEquals("a", s.consumeIdentifier());
assertEquals("a12", s.consumeIdentifier());
assertEquals("abc", s.consumeIdentifier());
assertEquals('-', s.current());
assertNull(s.consumeIdentifier());
}
@Test public void testConsumeNumber()
{
Scanner s = new Scanner("12 a 12.34 b");
assertEquals(12, s.consumeInt());
try
{
s.consumeInt();
fail();
}
catch(IllegalArgumentException e)
{
assertEquals("expected a integer (4): '12 a 12.34 b", e.getMessage());
}
s.expect("a");
assertEquals(12.34, s.consumeDouble(), 0.0);
try
{
s.consumeDouble();
fail();
}
catch(IllegalArgumentException e)
{
assertEquals("expected a double (12): '12 a 12.34 b", e.getMessage());
}
s.expect("b");
}
@Test public void testConsumeHex()
{
Scanner s = new Scanner("01Ff");
byte[] b = s.consumeBytes();
assertEquals(2, b.length);
assertEquals(1, b[0]);
assertEquals(-1, b[1]);
}
}