use of io.github.wysohn.triggerreactor.core.script.lexer.Lexer in project TriggerReactor by wysohn.
the class TriggerTest method testGlobalVariable.
@Test
public void testGlobalVariable() throws Exception {
Charset charset = Charset.forName("UTF-8");
String text = "" + "{text+\".something\"} = 12.54\n" + "#MESSAGE {text+\".something\"}\n";
Lexer lexer = new Lexer(text, charset);
Parser parser = new Parser(lexer);
Node root = parser.parse();
Map<String, Executor> executorMap = new HashMap<>();
executorMap.put("MESSAGE", new Executor() {
@Override
public Integer execute(boolean sync, Object context, Object... args) {
Assert.assertEquals(12.54, args[0]);
return null;
}
});
Map<String, Object> map = new HashMap<String, Object>();
Interpreter interpreter = new Interpreter(root, executorMap, new HashMap<>(), map, new HashMap<>(), new CommonFunctions(null));
interpreter.getVars().put("text", "someplayername");
interpreter.startWithContext(null);
Assert.assertTrue(map.containsKey("someplayername.something"));
Assert.assertEquals(12.54, map.get("someplayername.something"));
}
use of io.github.wysohn.triggerreactor.core.script.lexer.Lexer in project TriggerReactor by wysohn.
the class ParserTest method testIf.
@Test
public void testIf() throws Exception {
Charset charset = Charset.forName("UTF-8");
String text = "" + "IF i == 0;" + " #MESSAGE 0;" + "ELSEIF i == 1;" + " #MESSAGE 1;" + "ELSEIF i == 2;" + " #MESSAGE 2;" + "ELSE;" + " #MESSAGE 3;" + "ENDIF;";
Lexer lexer = new Lexer(text, charset);
Parser parser = new Parser(lexer);
Node root = parser.parse();
Queue<Node> queue = new LinkedList<Node>();
serializeNode(queue, root);
assertEquals(new Node(new Token(Type.THIS, "<This>")), queue.poll());
assertEquals(new Node(new Token(Type.ID, "i")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR, ".")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "0")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "==")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "0")), queue.poll());
assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
assertEquals(new Node(new Token(Type.THIS, "<This>")), queue.poll());
assertEquals(new Node(new Token(Type.ID, "i")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR, ".")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "==")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
assertEquals(new Node(new Token(Type.THIS, "<This>")), queue.poll());
assertEquals(new Node(new Token(Type.ID, "i")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR, ".")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "==")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "3")), queue.poll());
assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
assertEquals(new Node(new Token(Type.ID, "ELSEIF")), queue.poll());
assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
assertEquals(new Node(new Token(Type.ID, "ELSEIF")), queue.poll());
assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
assertEquals(new Node(new Token(Type.ID, "IF")), queue.poll());
assertEquals(new Node(new Token(Type.ROOT, "<ROOT>")), queue.poll());
assertEquals(0, queue.size());
}
use of io.github.wysohn.triggerreactor.core.script.lexer.Lexer in project TriggerReactor by wysohn.
the class ParserTest method testParse.
@Test
public void testParse() throws IOException, LexerException, ParserException {
Charset charset = Charset.forName("UTF-8");
String text = "#MESSAGE (1+(4/2.0)/3*4-(2/(3*-4)) >= 0)\n" + "#MESSAGE \"text\"\n";
Lexer lexer = new Lexer(text, charset);
Parser parser = new Parser(lexer);
Node root = parser.parse();
Queue<Node> queue = new LinkedList<Node>();
serializeNode(queue, root);
assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "4")), queue.poll());
assertEquals(new Node(new Token(Type.DECIMAL, "2.0")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_A, "/")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "3")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_A, "/")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "4")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_A, "*")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_A, "+")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "3")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "4")), queue.poll());
assertEquals(new Node(new Token(Type.UNARYMINUS, "<UNARYMINUS>")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_A, "*")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_A, "/")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_A, "-")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "0")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, ">=")), queue.poll());
assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
assertEquals(new Node(new Token(Type.STRING, "text")), queue.poll());
assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
assertEquals(new Node(new Token(Type.ROOT, "<ROOT>")), queue.poll());
assertEquals(0, queue.size());
}
use of io.github.wysohn.triggerreactor.core.script.lexer.Lexer in project TriggerReactor by wysohn.
the class ParserTest method testNegation.
@Test
public void testNegation() throws Exception {
Charset charset = Charset.forName("UTF-8");
String text = "" + "IF !(true && false && true || 2 < 1 && 1 < 2)\n" + " #MESSAGE \"test i=\"+i\n" + "ENDIF\n";
Lexer lexer = new Lexer(text, charset);
Parser parser = new Parser(lexer);
Node root = parser.parse();
Queue<Node> queue = new LinkedList<Node>();
serializeNode(queue, root);
assertEquals(new Node(new Token(Type.BOOLEAN, "true")), queue.poll());
assertEquals(new Node(new Token(Type.BOOLEAN, "false")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "&&")), queue.poll());
assertEquals(new Node(new Token(Type.BOOLEAN, "true")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "&&")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "<")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "||")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "<")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "&&")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_L, "!")), queue.poll());
assertEquals(new Node(new Token(Type.STRING, "test i=")), queue.poll());
assertEquals(new Node(new Token(Type.THIS, "<This>")), queue.poll());
assertEquals(new Node(new Token(Type.ID, "i")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR, ".")), queue.poll());
assertEquals(new Node(new Token(Type.OPERATOR_A, "+")), queue.poll());
assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
assertEquals(new Node(new Token(Type.ID, "IF")), queue.poll());
assertEquals(new Node(new Token(Type.ROOT, "<ROOT>")), queue.poll());
assertEquals(0, queue.size());
}
use of io.github.wysohn.triggerreactor.core.script.lexer.Lexer in project TriggerReactor by wysohn.
the class LexerTest method testSemicolon.
@Test
public void testSemicolon() throws Exception {
Charset charset = Charset.forName("UTF-8");
String text = "#MESSAGE !true;#MESSAGE \"next\"";
Lexer lexer = new Lexer(text, charset);
assertEquals(new Token(Type.ID, "#MESSAGE"), lexer.getToken());
assertEquals(new Token(Type.OPERATOR_L, "!"), lexer.getToken());
assertEquals(new Token(Type.ID, "true"), lexer.getToken());
assertEquals(new Token(Type.ENDL, null), lexer.getToken());
assertEquals(new Token(Type.ID, "#MESSAGE"), lexer.getToken());
assertEquals(new Token(Type.STRING, "next"), lexer.getToken());
assertNull(lexer.getToken());
}
Aggregations