package org.watertemplate.interpreter.parser;
import org.junit.Test;
import org.watertemplate.interpreter.parser.exception.IncorrectLocationForToken;
import static org.junit.Assert.assertNotNull;
import static org.watertemplate.interpreter.parser.TokenFixture.*;
public class NonTerminalIdWithNestedPropertiesTest {
@Test
public void singlePropertyKey() {
TokenStream tokenStream = new TokenStream(
Wave(), PropertyKey("x"), Wave()
);
assertNotNull(NonTerminal.EVALUATION.buildAbstractSyntaxTree(tokenStream));
}
@Test
public void nestedProperties() {
TokenStream tokenStream = new TokenStream(
Wave(),
PropertyKey("x"),
Accessor(),
PropertyKey("y"),
Accessor(),
PropertyKey("z"),
Wave()
);
assertNotNull(NonTerminal.EVALUATION.buildAbstractSyntaxTree(tokenStream));
}
@Test(expected = IncorrectLocationForToken.class)
public void doubleAccessor() {
TokenStream tokenStream = new TokenStream(
Wave(),
PropertyKey("x"),
Accessor(),
Accessor(),
PropertyKey("y"),
Wave()
);
NonTerminal.TEMPLATE.buildAbstractSyntaxTree(tokenStream);
}
@Test(expected = IncorrectLocationForToken.class)
public void extraAccessor() {
TokenStream tokenStream = new TokenStream(
Wave(),
PropertyKey("x"),
Accessor(),
PropertyKey("y"),
Accessor(),
Wave()
);
NonTerminal.TEMPLATE.buildAbstractSyntaxTree(tokenStream);
}
}