1 package org.antlr.works.test.ut; 2 3 import junit.framework.TestSuite; 4 import junit.textui.TestRunner; 5 import org.antlr.works.ate.syntax.misc.ATEToken; 6 import org.antlr.works.editor.EditorInspector; 7 import org.antlr.works.editor.EditorRules; 8 import org.antlr.works.syntax.GrammarSyntax; 9 import org.antlr.works.syntax.GrammarSyntaxDelegate; 10 import org.antlr.works.syntax.GrammarSyntaxEngine; 11 import org.antlr.works.syntax.element.ElementBlock; 12 import org.antlr.works.syntax.element.ElementGrammarName; 13 import org.antlr.works.syntax.element.ElementReference; 14 import org.antlr.works.syntax.element.ElementRule; 15 import org.antlr.works.test.AbstractTest; 16 import org.antlr.works.test.TestConstants; 17 18 import java.util.*; 19 49 50 public class TestParser extends AbstractTest implements GrammarSyntaxDelegate { 51 52 private String vocabFile; 53 54 public static void main(String [] args) { 55 new TestRunner().doRun(new TestSuite(TestParser.class)); 56 } 57 58 public void testDoubleQuoteStringInArgument() throws Exception { 59 parseFile(TestConstants.PREFIX+"arguments.g"); 60 assertInspector(0); 61 } 62 63 public void testEmptyRewriteSyntax() throws Exception { 64 parseFile(TestConstants.PREFIX+"empty_rewrite.g"); 65 assertInspector(0); 66 } 67 68 public void testGroups() throws Exception { 69 parseFile(TestConstants.PREFIX+"groups.g"); 70 assertInspector(0); 71 } 72 73 public void testIgnoreRules() throws Exception { 74 parseFile(TestConstants.PREFIX+"ignore_rules.g"); 75 EditorRules.findTokensToIgnore(getParser().rules, true); 76 int ignored = 0; 77 for(ElementRule r : getParser().rules) { 78 if(r.ignored) ignored++; 79 } 80 assertEquals("ignored rules", 3, ignored); 81 } 82 83 public void testGrammarType() throws Exception { 84 parseFile(TestConstants.PREFIX+"type/combined.g"); 85 assertEquals("combined grammar", ElementGrammarName.COMBINED, getParser().name.getType()); 86 87 parseFile(TestConstants.PREFIX+"type/parser.g"); 88 assertEquals("parser grammar", ElementGrammarName.PARSER, getParser().name.getType()); 89 90 parseFile(TestConstants.PREFIX+"type/lexer.g"); 91 assertEquals("lexer grammar", ElementGrammarName.LEXER, getParser().name.getType()); 92 93 parseFile(TestConstants.PREFIX+"type/tree.g"); 94 assertEquals("tree grammar", ElementGrammarName.TREEPARSER, getParser().name.getType()); 95 } 96 97 public void testSyntaxBlock() throws Exception { 98 parseFile(TestConstants.BLOCKS); 99 assertInspector(0); 100 101 assertEquals("grammar name", "demo", getParser().name.getName()); 102 103 ElementBlock tokensBlock = getParser().blocks.get(0); 104 assertEquals("tokens block", Arrays.asList("FOO", "OTHER", "LAST"), tokensBlock.getDeclaredTokensAsString()); 105 106 ElementBlock optionsBlock = getParser().blocks.get(1); 107 assertEquals("tokenVocab", "DataViewExpressions", optionsBlock.getTokenVocab()); 108 } 109 110 public void testReferences() throws Exception { 111 parseFile(TestConstants.REFERENCES); 112 assertInspector(0); 113 114 assertEquals("grammar name", "references", getParser().name.getName()); 115 116 assertEquals("declarations", Arrays.asList("FOO", "OTHER", "LAST", "rule_a", "BAR"), getDeclsAsString(getParser().decls)); 117 assertEquals("references", Arrays.asList("FOO", "BAR", "OTHER"), getRefsAsString(getParser().references)); 118 } 119 120 public void testMantra() throws Exception { 121 parseFile(TestConstants.MANTRA); 122 assertInspector(0); 123 124 assertParserProperties(65, 32, 28, 115, 274); } 126 127 public void testCodeGenPhase() throws Exception { 128 parseFile(TestConstants.CODE_GEN_PHASE); 129 assertInspector(76); 130 131 assertParserProperties(40, 18, 7, 40, 199); 133 Set<String > names = new HashSet<String >(); 135 GrammarSyntax.readTokenVocabFromFile(vocabFile = getResourceFile(TestConstants.PREFIX+"mantra/Mantra.tokens"), names); 136 getParser().resolveReferencesWithExternalNames(names); 137 assertParserProperties(40, 18, 7, 40, 199+4); 139 assertInspector(0); 140 } 141 142 public void testResolvePhase() throws Exception { 143 parseFile(TestConstants.RESOLVE_PHASE); 144 assertInspector(69); 145 146 Set<String > names = new HashSet<String >(); 147 GrammarSyntax.readTokenVocabFromFile(vocabFile = getResourceFile(TestConstants.PREFIX+"mantra/Mantra.tokens"), names); 148 getParser().resolveReferencesWithExternalNames(names); 149 150 assertParserProperties(36, 14, 7, 36, 170); assertInspector(0); 152 } 153 154 public void testSemanticPhase() throws Exception { 155 parseFile(TestConstants.SEMANTIC_PHASE); 156 assertInspector(69); 157 158 Set<String > names = new HashSet<String >(); 159 GrammarSyntax.readTokenVocabFromFile(vocabFile = getResourceFile(TestConstants.PREFIX+"mantra/Mantra.tokens"), names); 161 getParser().resolveReferencesWithExternalNames(names); 162 163 assertParserProperties(36, 37, 23, 36, 177); assertInspector(0); 165 } 166 167 168 169 private void printParserProperties() { 170 System.out.println("Rules="+getParser().rules.size()); 171 System.out.println("Actions="+getParser().actions.size()); 172 System.out.println("Blocks="+getParser().blocks.size()); 173 System.out.println("Decls="+getParser().decls.size()); 174 System.out.println("Refs="+getParser().references.size()); 175 } 176 177 private void assertParserProperties(int rules, int actions, int blocks, int decls, int references) { 178 assertEquals("Number of rules", rules, getParser().rules.size()); 179 assertEquals("Number of actions", actions, getParser().actions.size()); 180 assertEquals("Number of blocks", blocks, getParser().blocks.size()); 181 assertEquals("Number of declarations", decls, getParser().decls.size()); 182 assertEquals("Number of references", references, getParser().references.size()); 183 } 184 185 private void assertInspector(int errors) { 186 GrammarSyntax syntax = new GrammarSyntax(this); 187 syntax.rebuildAll(); 188 EditorInspector inspector = new EditorInspector(syntax, null, new MockInspectorDelegate()); 189 assertEquals("Errors", errors, inspector.getErrors().size()); 190 } 191 192 private List<String > getDeclsAsString(List<ATEToken> tokens) { 193 List<String > names = new ArrayList<String >(); 194 for(ATEToken token : tokens) { 195 names.add(token.getAttribute()); 196 } 197 return names; 198 } 199 200 private List<String > getRefsAsString(List<ElementReference> tokens) { 201 List<String > names = new ArrayList<String >(); 202 for(ElementReference token : tokens) { 203 names.add(token.token.getAttribute()); 204 } 205 return names; 206 } 207 208 public String getTokenVocabFile(String tokenVocabName) { 209 return vocabFile; 210 } 211 212 public GrammarSyntaxEngine getParserEngine() { 213 return engine; 214 } 215 216 } 217 | Popular Tags |