mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 08:48:55 +00:00
Added test for grammar access fragments
This commit is contained in:
parent
717f3f7ebd
commit
5fe8fab3c9
5 changed files with 65 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ Model:
|
|||
Element :
|
||||
super::Element
|
||||
| {Element} "element" name=super::ID
|
||||
| {Element} "element" name=Terminals::ID
|
||||
| {Element} "element" name=super::STRING
|
||||
;
|
||||
|
||||
|
|
|
@ -18,4 +18,6 @@ Model :
|
|||
|
||||
Element :
|
||||
"element" name=ID
|
||||
;
|
||||
;
|
||||
|
||||
terminal ID: ('a'..'z')+;
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue