package nl.helixsoft.graph;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import nl.helixsoft.graph.GmlTokenizer;
import nl.helixsoft.graph.GmlTokenizer.Token;
import nl.helixsoft.graph.GmlTokenizer.TokenType;
import junit.framework.TestCase;
public class TestTokenizer extends TestCase
{
private void failHelper(String x)
{
Reader reader = new StringReader (x);
GmlTokenizer tokenizer = new GmlTokenizer(reader);
try
{
tokenizer.getToken();
fail ("Expected an exception");
}
catch (IOException e)
{
fail("No IOException expected " + e.getMessage());
}
catch (IllegalStateException e)
{
// success!
}
}
private Token helper(String x, TokenType expected)
{
Reader reader = new StringReader (x);
GmlTokenizer tokenizer = new GmlTokenizer(reader);
Token result = null;
try
{
result = tokenizer.getToken();
assertEquals (expected, result.getType());
assertEquals (TokenType.EOF, tokenizer.getToken().getType());
}
catch (IOException e)
{
fail("No exception expected " + e.getMessage());
}
return result;
}
public void testIntegers()
{
Token token;
token = helper ("1", TokenType.INTEGER_LITERAL);
assertEquals (1, token.getIntValue());
token = helper ("-2", TokenType.INTEGER_LITERAL);
assertEquals (-2, token.getIntValue());
token = helper ("+3", TokenType.INTEGER_LITERAL);
assertEquals (3, token.getIntValue());
token = helper ("345", TokenType.INTEGER_LITERAL);
assertEquals (345, token.getIntValue());
}
public void testDoubles()
{
Token token;
token = helper (".1", TokenType.DOUBLE_LITERAL);
assertEquals (0.1, token.getDoubleValue(), 0.0001);
token = helper ("-.2", TokenType.DOUBLE_LITERAL);
assertEquals (-0.2, token.getDoubleValue(), 0.0001);
token = helper ("+.3", TokenType.DOUBLE_LITERAL);
assertEquals (0.3, token.getDoubleValue(), 0.0001);
token = helper ("1E2", TokenType.DOUBLE_LITERAL);
assertEquals (100, token.getDoubleValue(), 0.0001);
token = helper ("1E-2", TokenType.DOUBLE_LITERAL);
assertEquals (0.01, token.getDoubleValue(), 0.0001);
token = helper ("1E10", TokenType.DOUBLE_LITERAL);
assertEquals (1e10, token.getDoubleValue(), 1);
token = helper ("1.2E1", TokenType.DOUBLE_LITERAL);
assertEquals (12, token.getDoubleValue(), 0.0001);
token = helper ("1.2E-1", TokenType.DOUBLE_LITERAL);
assertEquals (0.12, token.getDoubleValue(), 0.0001);
token = helper ("-0.55", TokenType.DOUBLE_LITERAL);
assertEquals (-0.55, token.getDoubleValue(), 0.0001);
token = helper ("+0.56", TokenType.DOUBLE_LITERAL);
assertEquals (0.56, token.getDoubleValue(), 0.0001);
token = helper ("7.", TokenType.DOUBLE_LITERAL);
assertEquals (7, token.getDoubleValue(), 0.0001);
}
public void testFail()
{
// non-terminated string
failHelper ("\"abc");
// string must be closed on the same line
failHelper ("\"abc\n");
// unknown special character
failHelper ("<");
// unknown special character
failHelper ("&");
}
}