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.v4.Tool; 10 import org.antlr.v4.test.runtime.BaseRuntimeTest; 11 import org.antlr.v4.test.runtime.ErrorQueue; 12 import org.antlr.v4.test.runtime.java.BaseJavaTest; 13 14 import java.io.File; 15 16 import static org.junit.Assert.assertEquals; 17 18 public class BaseJavaToolTest extends BaseJavaTest { testErrors(String[] pairs, boolean printTree)19 public void testErrors(String[] pairs, boolean printTree) { 20 for (int i = 0; i < pairs.length; i+=2) { 21 String grammarStr = pairs[i]; 22 String expect = pairs[i+1]; 23 24 String[] lines = grammarStr.split("\n"); 25 String fileName = getFilenameFromFirstLineOfGrammar(lines[0]); 26 ErrorQueue equeue = BaseRuntimeTest.antlrOnString(tmpdir, null, fileName, grammarStr, false); // use default language target in case test overrides 27 28 String actual = equeue.toString(true); 29 actual = actual.replace(tmpdir + File.separator, ""); 30 // System.err.println(actual); 31 String msg = grammarStr; 32 msg = msg.replace("\n","\\n"); 33 msg = msg.replace("\r","\\r"); 34 msg = msg.replace("\t","\\t"); 35 36 assertEquals("error in: "+msg,expect,actual); 37 } 38 } 39 getFilenameFromFirstLineOfGrammar(String line)40 public String getFilenameFromFirstLineOfGrammar(String line) { 41 String fileName = "A" + Tool.GRAMMAR_EXTENSION; 42 int grIndex = line.lastIndexOf("grammar"); 43 int semi = line.lastIndexOf(';'); 44 if ( grIndex>=0 && semi>=0 ) { 45 int space = line.indexOf(' ', grIndex); 46 fileName = line.substring(space+1, semi)+Tool.GRAMMAR_EXTENSION; 47 } 48 if ( fileName.length()==Tool.GRAMMAR_EXTENSION.length() ) fileName = "A" + Tool.GRAMMAR_EXTENSION; 49 return fileName; 50 } 51 } 52