1 /* 2 * Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. 3 * Use of this file is governed by the BSD 3-clause license that 4 * can be found in the LICENSE.txt file in the project root. 5 */ 6 7 package org.antlr.v4.test.tool; 8 9 import org.antlr.runtime.ANTLRStringStream; 10 import org.antlr.runtime.Token; 11 import org.antlr.v4.parse.ActionSplitter; 12 import org.antlr.v4.semantics.BlankActionSplitterListener; 13 import org.junit.Before; 14 import org.junit.Test; 15 16 import java.util.ArrayList; 17 import java.util.List; 18 19 import static org.junit.Assert.assertEquals; 20 21 public class TestActionSplitter extends BaseJavaToolTest { 22 @Before 23 @Override testSetUp()24 public void testSetUp() throws Exception { 25 super.testSetUp(); 26 } 27 28 static String[] exprs = { 29 "foo", "['foo'<" + ActionSplitter.TEXT + ">]", 30 "$x", "['$x'<" + ActionSplitter.ATTR + ">]", 31 "\\$x", "['\\$x'<" + ActionSplitter.TEXT + ">]", 32 "$x.y", "['$x.y'<" + ActionSplitter.QUALIFIED_ATTR + ">]", 33 "$ID.text", "['$ID.text'<" + ActionSplitter.QUALIFIED_ATTR + ">]", 34 "$ID", "['$ID'<" + ActionSplitter.ATTR + ">]", 35 "$ID.getText()", "['$ID'<" + ActionSplitter.ATTR + ">, '.getText()'<" + ActionSplitter.TEXT + ">]", 36 "$ID.text = \"test\";", "['$ID.text'<" + ActionSplitter.QUALIFIED_ATTR + ">, ' = \"test\";'<" + ActionSplitter.TEXT + ">]", 37 "$a.line == $b.line", "['$a.line'<" + ActionSplitter.QUALIFIED_ATTR + ">, ' == '<" + ActionSplitter.TEXT + ">, '$b.line'<" + ActionSplitter.QUALIFIED_ATTR + ">]", 38 "$r.tree", "['$r.tree'<" + ActionSplitter.QUALIFIED_ATTR + ">]", 39 "foo $a::n bar", "['foo '<" + ActionSplitter.TEXT + ">, '$a::n'<" + ActionSplitter.NONLOCAL_ATTR + ">, ' bar'<" + ActionSplitter.TEXT + ">]", 40 "$rule::x;", "['$rule::x'<" + ActionSplitter.NONLOCAL_ATTR + ">, ';'<" + ActionSplitter.TEXT + ">]", 41 "$field::x = $field.st;", "['$field::x = $field.st;'<" + ActionSplitter.SET_NONLOCAL_ATTR + ">]", 42 "$foo.get(\"ick\");", "['$foo'<" + ActionSplitter.ATTR + ">, '.get(\"ick\");'<" + ActionSplitter.TEXT + ">]", 43 }; 44 testExprs()45 @Test public void testExprs() { 46 for (int i = 0; i < exprs.length; i+=2) { 47 String input = exprs[i]; 48 String expect = exprs[i+1]; 49 List<String> chunks = getActionChunks(input); 50 assertEquals("input: "+input, expect, chunks.toString()); 51 } 52 } 53 getActionChunks(String a)54 public static List<String> getActionChunks(String a) { 55 List<String> chunks = new ArrayList<String>(); 56 ActionSplitter splitter = new ActionSplitter(new ANTLRStringStream(a), 57 new BlankActionSplitterListener()); 58 Token t = splitter.nextToken(); 59 while ( t.getType()!=Token.EOF ) { 60 chunks.add("'"+t.getText()+"'<"+t.getType()+">"); 61 t = splitter.nextToken(); 62 } 63 return chunks; 64 } 65 } 66