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