import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import dev.peerat.parser.Parser; import dev.peerat.parser.TokenType; import dev.peerat.parser.TokenValidator; import dev.peerat.parser.Tokenizer; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.state.InitialStateTree; import dev.peerat.parser.state.StateTree; public class ForCase { private static Parser parser = new Parser(){ { setTokenizer(new Tokenizer()); InitialStateTree operation = new InitialStateTree<>(); StateTree operation_for = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("for"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("("))); StateTree operation_for_first_part = operation_for.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); StateTree operation_for_assign = operation_for.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))); StateTree operation_for_assign_end = operation_for_assign.then((validator) -> validator.validate((token) -> token.getValue().equals("="))) .then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))); operation_for_assign.then(operation_for_assign); operation_for_assign.then(operation_for_first_part); operation_for_assign_end.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) .then(operation_for_assign); operation_for_assign_end.then(operation_for_first_part); StateTree operation_for_second_part = operation_for_first_part.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); operation_for_first_part.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))) .then(operation_for_second_part); StateTree operation_for_end = operation_for_second_part.then((validator) -> validator.validate((token) -> token.getValue().equals(")"))); operation_for_end.end((a,b) -> a); operation_for_assign.then((validator) -> validator.validate((token) -> token.getValue().equals(":"))) .then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))) .then(operation_for_end); operation_for_second_part.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))) .then(operation_for_end); setStateTree(operation); } }; void testCase(String value) throws Exception{ parser.parse(value, null); } @Test void empty() throws Exception{ testCase("for(;;)"); } @Test void case1() throws Exception{ testCase("for(i=4;;)"); } @Test void case2() throws Exception{ testCase("for(i=4,j=3;;)"); } @Test void case3() throws Exception{ testCase("for(int i=4;;)"); } @Test void case4() throws Exception{ testCase("for(int i=4,j=3;;)"); } @Test void case5() throws Exception{ testCase("for(int i;;)"); } @Test void case6() throws Exception{ testCase("for(int i =0,j;;)"); } @Test void case7() throws Exception{ testCase("for(;value;)"); } @Test void case8() throws Exception{ testCase("for(;;i)"); } @Test void case9() throws Exception{ testCase("for(final int i = 4;;i)"); } @Test void case10() throws Exception{ testCase("for(private static final int i=4,k;value;)"); } @Test void case11() throws Exception{ testCase("for(Test test : tests)"); } }