From 70ab3b26024ffdede576118e2c67910f57a7454a Mon Sep 17 00:00:00 2001 From: Sebastian Zarnekow Date: Thu, 20 Aug 2015 08:55:31 +0200 Subject: [PATCH] [263773] Further improvements to grammar flattener --- .../normalization/GrammarFlatteningTest.xtend | 41 +++++++++++++++++++ .../fragments/FragmentsEagerLinkingTest.xtend | 2 +- .../parser/fragments/FragmentsSuite.java | 2 +- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/normalization/GrammarFlatteningTest.xtend b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/normalization/GrammarFlatteningTest.xtend index 5ddff3e0b..b1be48188 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/normalization/GrammarFlatteningTest.xtend +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/normalization/GrammarFlatteningTest.xtend @@ -25,9 +25,14 @@ class GrammarFlatteningTest extends AbstractXtextTests { } override Grammar getModel(String model) throws Exception { + return getModel(model, false) + } + + def Grammar getModel(String model, boolean dropUnreachable) throws Exception { var Grammar grammar = super.getModel(model) as Grammar var RuleNames ruleNames = RuleNames.getRuleNames(grammar, false) var RuleFilter filter = new RuleFilter() + filter.discardUnreachableRules = dropUnreachable var Grammar result = FlattenedGrammarProvider.flatten(grammar, ruleNames, filter) var XtextResource resource = get(XtextResource) resource.getContents().add(result) @@ -272,5 +277,41 @@ class GrammarFlatteningTest extends AbstractXtextTests { terminal RULE_ANY_OTHER: .;'''.toString, serialized) } + + @Test def void test_07() throws Exception { + var Grammar flattened = getModel( + ''' + grammar com.foo.bar with org.eclipse.xtext.common.Terminals + generate myPack 'http://myURI' + Rule: name=ID (child=Rule)?; + ''', true) + var String serialized = getSerializer().serialize(flattened) + assertEquals(''' + grammar com.foo.bar hidden(RULE_WS, RULE_ML_COMMENT, RULE_SL_COMMENT) + + norm0_Rule: + name=RULE_ID; + + terminal RULE_ID: + "^"? ("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*; + + terminal RULE_INT: + "0".."9"+; + + terminal RULE_STRING: + "\"" ("\\" . | !("\\" | "\""))* "\"" | "\'" ("\\" . | !("\\" | "\'"))* "\'"; + + terminal RULE_ML_COMMENT: + "/*"->"*/"; + + terminal RULE_SL_COMMENT: + "//" !("\n" | "\r")* ("\r"? "\n")?; + + terminal RULE_WS: + " " | "\t" | "\r" | "\n"+; + + terminal RULE_ANY_OTHER: + .;'''.toString, serialized) + } } diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/fragments/FragmentsEagerLinkingTest.xtend b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/fragments/FragmentsEagerLinkingTest.xtend index b6b768e7a..fdd583e3f 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/fragments/FragmentsEagerLinkingTest.xtend +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/fragments/FragmentsEagerLinkingTest.xtend @@ -16,5 +16,5 @@ import org.junit.runner.RunWith */ @RunWith(XtextRunner) @InjectWith(FragmentsEagerLinkingInjectorProvider) -class FragmentEagerLinkingTest extends AbstractFragmentsTest { +class FragmentsEagerLinkingTest extends AbstractFragmentsTest { } \ No newline at end of file diff --git a/tests/org.eclipse.xtext.tests/suites/org/eclipse/xtext/parser/fragments/FragmentsSuite.java b/tests/org.eclipse.xtext.tests/suites/org/eclipse/xtext/parser/fragments/FragmentsSuite.java index 1e1f49c9a..bb758c7a4 100644 --- a/tests/org.eclipse.xtext.tests/suites/org/eclipse/xtext/parser/fragments/FragmentsSuite.java +++ b/tests/org.eclipse.xtext.tests/suites/org/eclipse/xtext/parser/fragments/FragmentsSuite.java @@ -17,7 +17,7 @@ import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ FragmentsTest.class, - FragmentEagerLinkingTest.class, + FragmentsEagerLinkingTest.class, FragmentsExTest.class, FragmentsPlainParsingTest.class, FragmentExsPlainParsingTest.class,