package nl.ipo.cds.nagios.parser;
import static org.junit.Assert.*;
import java.io.StringReader;
import org.junit.Test;
public class LexerTest {
private static class Result {
private TokenType tokenType;
private String value;
public Result (TokenType tokenType, String value) {
this.tokenType = tokenType;
this.value = value;
}
public TokenType getTokenType() {
return tokenType;
}
public String getValue() {
return value;
}
}
@Test
public void testNameTokens () throws Exception {
testLexer ("name1 name2 name_underscore_3 ", new Result[] {
new Result (TokenType.NAME, "name1"),
new Result (TokenType.NAME, "name2"),
new Result (TokenType.NAME, "name_underscore_3")
});
}
@Test
public void testPunctuationTokens () throws Exception {
testLexer ("{ } = ", new Result[] {
new Result (TokenType.LCURLY, "{"),
new Result (TokenType.RCURLY, "}"),
new Result (TokenType.ASSIGN, "="),
new Result (TokenType.VALUE, "")
});
}
@Test
public void testComments () throws Exception {
testLexer ("# Single line comment\n # Single line comment 2\n name1 { # Single line comment", new Result[] {
new Result (TokenType.NAME, "name1"),
new Result (TokenType.LCURLY, "{")
});
}
@Test
public void testValues () throws Exception {
testLexer ("objectName {\n key=value\nkey2=complex value =\nkey3= complex trimmed = value \n}", new Result[] {
new Result (TokenType.NAME, "objectName"),
new Result (TokenType.LCURLY, "{"),
new Result (TokenType.NAME, "key"),
new Result (TokenType.ASSIGN, "="),
new Result (TokenType.VALUE, "value"),
new Result (TokenType.NAME, "key2"),
new Result (TokenType.ASSIGN, "="),
new Result (TokenType.VALUE, "complex value ="),
new Result (TokenType.NAME, "key3"),
new Result (TokenType.ASSIGN, "="),
new Result (TokenType.VALUE, "complex trimmed = value"),
new Result (TokenType.RCURLY, "}")
});
}
private void testLexer (final String input, final Result[] expectedResult) throws Exception {
final LexerContext context = new LexerContext ("unittest");
final Lexer lexer = new Lexer (context, new StringReader (input));
for (Result result: expectedResult) {
final Token token = lexer.accept ();
assertEquals (result.getTokenType (), token.getTokenType ());
assertEquals (result.getValue (), token.getValue ());
}
assertEquals (TokenType.EOF, lexer.accept ().getTokenType ());
}
}