Added test for grammar access fragments

This commit is contained in:
Sebastian Zarnekow 2015-11-15 18:14:47 +01:00
parent 717f3f7ebd
commit 5fe8fab3c9
5 changed files with 65 additions and 1 deletions

View file

@ -9,6 +9,8 @@
package org.eclipse.xtext.grammarinheritance;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.AbstractRule;
import org.eclipse.xtext.grammarinheritance.ametamodel.AmetamodelPackage;
import org.eclipse.xtext.grammarinheritance.services.InheritanceTest2LanguageGrammarAccess;
import org.eclipse.xtext.junit4.AbstractXtextTests;
@ -27,6 +29,14 @@ public class AnotherInheritanceTest extends AbstractXtextTests {
@Test public void testSimple() throws Exception {
InheritanceTest2LanguageGrammarAccess g = (InheritanceTest2LanguageGrammarAccess) getGrammarAccess();
assertNotNull(g.getFQNAccess());
AbstractRule fromFQN = g.getFQNAccess().getIDTerminalRuleCall_0().getRule();
assertEquals(fromFQN, g.getIDRule());
assertNotNull(g.getModelAccess());
}
@Test public void testFQNWithNumbers() throws Exception {
Resource resource = getModelAndExpect("model a { ab.ab01 }", 1).eResource();
String msg = resource.getErrors().get(0).getMessage();
assertEquals("extraneous input '01' expecting '}'", msg);
}
}

View file

@ -17,6 +17,7 @@ Model:
Element :
super::Element
| {Element} "element" name=super::ID
| {Element} "element" name=Terminals::ID
| {Element} "element" name=super::STRING
;

View file

@ -18,4 +18,6 @@ Model :
Element :
"element" name=ID
;
;
terminal ID: ('a'..'z')+;

View file

@ -67,4 +67,14 @@ public class ParserTest extends AbstractXtextTests {
assertTrue(nodesForFeature.size() == 1);
assertEquals("'with spaces'", nodesForFeature.get(0).getText());
}
@Test public void test_05() throws Exception {
Model model = (Model) getModel("model id { element withNumbers01 }");
assertEquals("id", model.getName());
Element element = model.getElements().get(0);
assertEquals("withNumbers01", element.getName());
List<INode> nodesForFeature = NodeModelUtils.findNodesForFeature(element, InheritanceTestPackage.Literals.ELEMENT__NAME);
assertTrue(nodesForFeature.size() == 1);
assertEquals("withNumbers01", nodesForFeature.get(0).getText());
}
}

View file

@ -8,17 +8,27 @@
package org.eclipse.xtext.serializer;
import org.eclipse.emf.common.util.URI;
import org.eclipse.xtext.AbstractRule;
import org.eclipse.xtext.Grammar;
import org.eclipse.xtext.GrammarUtil;
import org.eclipse.xtext.Group;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.TerminalRule;
import org.eclipse.xtext.XtextStandaloneSetup;
import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
import org.eclipse.xtext.grammarinheritance.services.BaseInheritanceTestLanguageGrammarAccess;
import org.eclipse.xtext.grammarinheritance.services.InheritanceTestLanguageGrammarAccess;
import org.eclipse.xtext.junit4.AbstractXtextTests;
import org.eclipse.xtext.junit4.serializer.SerializerTester;
import org.eclipse.xtext.resource.XtextResourceSet;
import org.eclipse.xtext.service.GrammarProvider;
import org.eclipse.xtext.services.XtextGrammarAccess;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import com.google.inject.Inject;
import com.google.inject.Provider;
/**
* @author Moritz Eysholdt - Initial contribution and API
@ -62,4 +72,35 @@ public class XtextSerializerTest extends AbstractXtextTests {
String string = get(ISerializer.class).serialize(grammarAccess.getGrammarAccess().getGroup_2());
Assert.assertEquals("(\"with\" usedGrammars+=[Grammar|GrammarID] (\",\" usedGrammars+=[Grammar|GrammarID])*)?", string);
}
@Test
public void testFQNInSuper_01() {
GrammarProvider grammarProvider = new GrammarProvider("org.eclipse.xtext.grammarinheritance.InheritanceTestLanguage", new Provider<XtextResourceSet>() {
@Override
public XtextResourceSet get() {
return XtextSerializerTest.this.get(XtextResourceSet.class);
}
});
TerminalsGrammarAccess gaTerminals = new TerminalsGrammarAccess(grammarProvider);
BaseInheritanceTestLanguageGrammarAccess gaBaseInheritanceTestLanguage = new BaseInheritanceTestLanguageGrammarAccess(grammarProvider, gaTerminals);
InheritanceTestLanguageGrammarAccess grammarAccess = new InheritanceTestLanguageGrammarAccess(grammarProvider, gaBaseInheritanceTestLanguage, gaTerminals);
String string = get(ISerializer.class).serialize(grammarAccess.getFQNRule().getAlternatives());
Assert.assertEquals("ID (\".\" ID)*", string);
}
@Ignore("Serialization does not have the correct context information")
@Test
public void testFQNInSuper_02() {
Grammar grammar = load(URI.createURI("classpath:/org/eclipse/xtext/grammarinheritance/InheritanceTestLanguage.xtext"));
AbstractRule rule = GrammarUtil.findRuleForName(grammar, "FQN");
Assert.assertNotNull(rule);
Group group = (Group) rule.getAlternatives();
RuleCall ruleCall = (RuleCall) group.getElements().get(0);
TerminalRule id = (TerminalRule) ruleCall.getRule();
Assert.assertSame(grammar, GrammarUtil.getGrammar(id));
String string = get(ISerializer.class).serialize(rule.getAlternatives());
Assert.assertEquals("ID (\".\" ID)*", string);
// currently wrong result is
Assert.assertEquals("super::ID (\".\" super::ID)*", string);
}
}