This commit is contained in:
sefftinge 2008-05-13 13:04:45 +00:00 committed by sefftinge
parent d7d72b11b7
commit 547326464c
8 changed files with 84 additions and 18 deletions

View file

@ -2,6 +2,7 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="src-gen"/>
<classpathentry kind="src" path="emf-gen"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="output" path="bin"/>

View file

@ -18,7 +18,7 @@ import org.eclipse.emf.ecore.EPackage;
import org.eclipse.m2t.type.emf.EmfRegistryMetaModel;
import org.eclipse.xtext.generator.tests.AbstractGeneratorTest;
import org.eclipse.xtext.generator.tests.Invocation;
import org.eclipse.xtext.parser.XtextGrammarTestFactory;
import org.eclipse.xtext.parser.XtextGrammarTestASTFactory;
import org.openarchitectureware.expression.ExecutionContextImpl;
import org.openarchitectureware.xtend.XtendFacade;
@ -43,7 +43,7 @@ public class XtextGrammarTest extends AbstractGeneratorTest {
assertEquals("set(name,[@6,19:21='Foo',<4>,1:19])", iter.next().toString());
assertEquals("create(Assignment)", iter.next().toString());
assertEquals("set(feature,[@10,25:28='name',<4>,1:25])", iter.next().toString());
assertEquals("set(operator,[@11,29:29='=',<23>,1:29])", iter.next().toString());
assertEquals("set(operator,[@11,29:29='=',<24>,1:29])", iter.next().toString());
assertEquals("create(RuleCall)", iter.next().toString());
assertEquals("set(name,[@12,30:31='ID',<4>,1:30])", iter.next().toString());
assertEquals("set(terminal,RuleCall)", iter.next().toString());
@ -52,14 +52,14 @@ public class XtextGrammarTest extends AbstractGeneratorTest {
}
public void testInstantiate() throws Exception {
EObject grammar = (EObject) parse("generate foo 'bar' Foo : name=ID;", new XtextGrammarTestFactory());
EObject grammar = (EObject) parse("generate foo 'bar' Foo : name=ID;", new XtextGrammarTestASTFactory());
assertWithXtend("'Foo'","parserRules.first().name",grammar);
assertWithXtend("'name'","parserRules.first().alternatives.feature",grammar);
}
public void testInstantiateXtextGrammar() throws Exception {
InputStream bootGrammar = getClass().getClassLoader().getResourceAsStream(getClass().getName().replace('.','/')+".xtext");
EObject grammar = (EObject) parse(bootGrammar , new XtextGrammarTestFactory());
EObject grammar = (EObject) parse(bootGrammar , new XtextGrammarTestASTFactory());
assertWithXtend("true","parserRules.select(e|e.name=='AbstractToken').first()!=null",grammar);
assertWithXtend("'AbstractElement'","parserRules.select(e|e.name=='AbstractToken').first().type.name",grammar);
// Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(

View file

@ -7,7 +7,7 @@
*
*******************************************************************************/
generate XtextTest "http://www.eclipse.org/2008/Test/XtextTest"
generate XtextTest "http://www.eclipse.org/2008/Test/XtextTest"
Grammar :
metamodelDeclarations+=AbstractMetamodelDeclaration*
@ -39,9 +39,8 @@ ParserRule :
;
TypeRef :
name=ID
(alias=ID '::')? name=ID
;
Alternatives returns AbstractElement:
Group ({Alternatives.groups+=current} '|' groups+=Group)*
;

View file

@ -20,10 +20,10 @@ import org.openarchitectureware.xtend.XtendFacade;
/**
* @author Sven Efftinge - Initial contribution and API
*
*
*/
public abstract class AbstractGeneratorTest extends TestCase {
public Object parse(String model, IElementFactory factory) throws Exception {
String name = getClass().getPackage().getName() + ".parser." + getClass().getSimpleName();
String parser = name + "Parser";
@ -33,15 +33,15 @@ public abstract class AbstractGeneratorTest extends TestCase {
return parserClass.getMethod("parse", InputStream.class, IElementFactory.class).invoke(parserInstance,
new StringInputStream(model), factory);
}
public Object parse(InputStream model, IElementFactory factory) throws Exception {
String name = getClass().getPackage().getName() + ".parser." + getClass().getSimpleName();
String parser = name + "Parser";
Class<?> parserClass = getClass().getClassLoader().loadClass(parser);
Object parserInstance = parserClass.newInstance();
return parserClass.getMethod("parse", InputStream.class, IElementFactory.class).invoke(parserInstance,
model, factory);
return parserClass.getMethod("parse", InputStream.class, IElementFactory.class).invoke(parserInstance, model,
factory);
}
public List<Invocation> parse(String model) throws Exception {
@ -65,12 +65,21 @@ public abstract class AbstractGeneratorTest extends TestCase {
}
protected void assertWithXtend(String left, String right, Object _this) {
assertWithXtend(left+" != "+right, left, right, _this);
assertWithXtend(left + " != " + right, left, right, _this);
}
protected void assertWithXtend(String message, String left, String right, Object _this) {
XtendFacade f = getXtendFacade();
f = f.cloneWithExtensions("__compare(Object this) : __left(this) == __right(this);__left(Object this) : "+left+"; __right(Object this) :"+right+";");
assertTrue(message,(Boolean) f.call("__compare",_this));
f = f.cloneWithExtensions("__compare(Object this) : __left(this) == __right(this);__left(Object this) : "
+ left + "; __right(Object this) :" + right + ";");
Boolean result = (Boolean) f.call("__compare", _this);
if (!result) {
Object leftResult = f.call("__left", _this);
Object rightResult = f.call("__right", _this);
fail(message + " was : " + leftResult + "("
+ (leftResult != null ? leftResult.getClass().getSimpleName() : "") + ") != " + rightResult + "("
+ (leftResult != null ? leftResult.getClass().getSimpleName() : "") + ")");
}
}
protected XtendFacade getXtendFacade() {

View file

@ -18,6 +18,7 @@ import org.eclipse.xtext.XtextGrammarTest;
import org.eclipse.xtext.XtextPackage;
import org.eclipse.xtext.grammargen.tests.SimpleTest;
import org.eclipse.xtext.grammargen.tests.SimpleTest2;
import org.eclipse.xtext.metamodelreferencing.tests.MetamodelRefTest;
import org.eclipse.xtext.parser.XtextFactory;
import org.eclipse.xtext.parser.XtextParser;
@ -28,7 +29,9 @@ import org.eclipse.xtext.parser.XtextParser;
public class GenerateAllTestGrammars {
private static final String PATH = "./src-gen";
private final static Class<?>[] testclasses = new Class[] { SimpleTest.class, SimpleTest2.class, XtextGrammarTest.class };
private final static Class<?>[] testclasses = new Class[] {
SimpleTest.class, SimpleTest2.class, XtextGrammarTest.class,
MetamodelRefTest.class};
public static void main(String[] args) throws Exception {
for (Class<?> c : testclasses) {

View file

@ -0,0 +1,37 @@
package org.eclipse.xtext.metamodelreferencing.tests;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.m2t.type.emf.EmfRegistryMetaModel;
import org.eclipse.xtext.XtextPackage;
import org.eclipse.xtext.generator.tests.AbstractGeneratorTest;
import org.eclipse.xtext.metamodelreferencing.tests.parser.MetamodelRefTestASTFactory;
import org.openarchitectureware.expression.ExecutionContextImpl;
import org.openarchitectureware.xtend.XtendFacade;
public class MetamodelRefTest extends AbstractGeneratorTest {
@Override
protected void setUp() throws Exception {
super.setUp();
XtextPackage.eINSTANCE.getRuleCall(); // register Xtext EPackage
}
public void testStuff() throws Exception {
Object parse = parse("foo 'bar'", new MetamodelRefTestASTFactory());
assertWithXtend("'SimpleTest::Foo'","metaType.name",parse);
assertWithXtend("'xtext::RuleCall'","nameRefs.first().metaType.name",parse);
}
@Override
protected XtendFacade getXtendFacade() {
ExecutionContextImpl ctx = new ExecutionContextImpl();
ctx.registerMetaModel(new EmfRegistryMetaModel() {
@Override
protected EPackage[] allPackages() {
return new EPackage[]{MetamodelRefTestEPackageAccess.getSimpleTestEPackage()};
}
});
XtendFacade facade = XtendFacade.create(ctx);
return facade;
}
}

View file

@ -0,0 +1,17 @@
/*******************************************************************************
* Copyright (c) 2008 itemis AG (http://www.itemis.eu) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
import "http://www.eclipse.org/2008/Xtext" as xtext
generate SimpleTest "http://eclipse.org/xtext/tests/SimpleTest"
Foo :
name=ID (nameRefs+=NameRef)*;
NameRef returns xtext::RuleCall :
name=STRING;

View file

@ -103,7 +103,7 @@ public class EcoreModelComparator {
System.err.println("\t" + change.getRightElement());
} else {
// TODO: add more sysouts here...
System.err.println(diffElement.getClass());
System.err.println(diffElement.toString());
}
}
}