Skip to content

Commit

Permalink
130: compiler test with several files
Browse files Browse the repository at this point in the history
  • Loading branch information
LorenzoBettini committed May 7, 2020
1 parent 7f379c0 commit 09d3a9a
Show file tree
Hide file tree
Showing 2 changed files with 301 additions and 1 deletion.
107 changes: 106 additions & 1 deletion edelta.parent/edelta.tests/src/edelta/tests/EdeltaCompilerTest.xtend
Expand Up @@ -21,6 +21,7 @@ import org.junit.runner.RunWith
import static edelta.testutils.EdeltaTestUtils.*

import static extension org.junit.Assert.*
import java.util.List

@RunWith(XtextRunner)
@InjectWith(EdeltaInjectorProviderTestableDerivedStateComputer)
Expand Down Expand Up @@ -1102,6 +1103,98 @@ class EdeltaCompilerTest extends EdeltaAbstractTest {
)
}

@Test
def void testCompilationOfSeveralFilesWithUseAs() {
#[
'''
import org.eclipse.emf.ecore.EClass
import org.eclipse.emf.ecore.EcorePackage
package test1
def enrichWithReference(EClass c, String prefix) : void {
c.addNewEReference(prefix + "Ref",
EcorePackage.eINSTANCE.EObject)
}
''',
'''
import org.eclipse.emf.ecore.EClass
import org.eclipse.emf.ecore.EcorePackage
import test1.MyFile0
package test2
use test1.MyFile0 as extension my
def enrichWithAttribute(EClass c, String prefix) : void {
c.addNewEAttribute(prefix + "Attr",
EcorePackage.eINSTANCE.EString)
c.enrichWithReference(prefix)
}
''',
'''
import org.eclipse.emf.ecore.EClass
import test2.MyFile1
package test3
metamodel "foo"
use test2.MyFile1 as extension my
modifyEcore aModificationTest epackage foo {
ecoreref(FooClass)
.enrichWithAttribute("prefix")
// attribute and reference are added by the calls
// to external operations!
ecoreref(prefixAttr).changeable = true
ecoreref(prefixRef).containment = true
}
'''].checkCompilationOfSeveralFiles(
#[
"test3.MyFile2" ->
'''
package test3;
import edelta.lib.AbstractEdelta;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.xtext.xbase.lib.Extension;
import test2.MyFile1;
@SuppressWarnings("all")
public class MyFile2 extends AbstractEdelta {
@Extension
private MyFile1 my;
public MyFile2() {
my = new MyFile1(this);
}
public MyFile2(final AbstractEdelta other) {
super(other);
}
public void aModificationTest(final EPackage it) {
this.my.enrichWithAttribute(getEClass("foo", "FooClass"), "prefix");
getEAttribute("foo", "FooClass", "prefixAttr").setChangeable(true);
getEReference("foo", "FooClass", "prefixRef").setContainment(true);
}
@Override
public void performSanityChecks() throws Exception {
ensureEPackageIsLoaded("foo");
}
@Override
protected void doExecute() throws Exception {
aModificationTest(getEPackage("foo"));
}
}
'''
]
)
}

@Test
def void testCompilationOfPersonListExampleModifyEcore() {
val rs = createResourceSetWithEcore(
Expand Down Expand Up @@ -1204,7 +1297,7 @@ class EdeltaCompilerTest extends EdeltaAbstractTest {
val rs = createResourceSet(input)
checkCompilation(rs, expectedGeneratedJava, checkValidationErrors)
}

private def void checkCompilation(ResourceSet rs, CharSequence expectedGeneratedJava, boolean checkValidationErrors) {
rs.compile [
if (checkValidationErrors) {
Expand All @@ -1219,6 +1312,18 @@ class EdeltaCompilerTest extends EdeltaAbstractTest {
]
}

private def void checkCompilationOfSeveralFiles(List<? extends CharSequence> inputs,
List<Pair<String, CharSequence>> expectations) {
createResourceSet(inputs).compile [
assertNoValidationErrors
for (expectation : expectations) {
expectation.value.toString.assertEquals
(getGeneratedCode(expectation.key))
}
assertGeneratedJavaCodeCompiles
]
}

private def assertNoValidationErrors(Result it) {
val allErrors = getErrorsAndWarnings.filter[severity == Severity.ERROR]
if (!allErrors.empty) {
Expand Down
Expand Up @@ -7,6 +7,8 @@
import edelta.tests.EdeltaInjectorProviderTestableDerivedStateComputer;
import edelta.testutils.EdeltaTestUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.diagnostics.Severity;
Expand Down Expand Up @@ -2299,6 +2301,188 @@ public void testExecutionOfComplexOperationsWithSubPackages() {
true);
}

@Test
public void testCompilationOfSeveralFilesWithUseAs() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("import org.eclipse.emf.ecore.EClass");
_builder.newLine();
_builder.append("import org.eclipse.emf.ecore.EcorePackage");
_builder.newLine();
_builder.newLine();
_builder.append("package test1");
_builder.newLine();
_builder.newLine();
_builder.append("def enrichWithReference(EClass c, String prefix) : void {");
_builder.newLine();
_builder.append("\t");
_builder.append("c.addNewEReference(prefix + \"Ref\",");
_builder.newLine();
_builder.append("\t\t");
_builder.append("EcorePackage.eINSTANCE.EObject)");
_builder.newLine();
_builder.append("}");
_builder.newLine();
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("import org.eclipse.emf.ecore.EClass");
_builder_1.newLine();
_builder_1.append("import org.eclipse.emf.ecore.EcorePackage");
_builder_1.newLine();
_builder_1.append("import test1.MyFile0");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("package test2");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("use test1.MyFile0 as extension my");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("def enrichWithAttribute(EClass c, String prefix) : void {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("c.addNewEAttribute(prefix + \"Attr\",");
_builder_1.newLine();
_builder_1.append("\t\t");
_builder_1.append("EcorePackage.eINSTANCE.EString)");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("c.enrichWithReference(prefix)");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("import org.eclipse.emf.ecore.EClass");
_builder_2.newLine();
_builder_2.append("import test2.MyFile1");
_builder_2.newLine();
_builder_2.newLine();
_builder_2.append("package test3");
_builder_2.newLine();
_builder_2.newLine();
_builder_2.append("metamodel \"foo\"");
_builder_2.newLine();
_builder_2.newLine();
_builder_2.append("use test2.MyFile1 as extension my");
_builder_2.newLine();
_builder_2.newLine();
_builder_2.append("modifyEcore aModificationTest epackage foo {");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("ecoreref(FooClass)");
_builder_2.newLine();
_builder_2.append("\t\t");
_builder_2.append(".enrichWithAttribute(\"prefix\")");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("// attribute and reference are added by the calls");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("// to external operations!");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("ecoreref(prefixAttr).changeable = true");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("ecoreref(prefixRef).containment = true");
_builder_2.newLine();
_builder_2.append("}");
_builder_2.newLine();
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append("package test3;");
_builder_3.newLine();
_builder_3.newLine();
_builder_3.append("import edelta.lib.AbstractEdelta;");
_builder_3.newLine();
_builder_3.append("import org.eclipse.emf.ecore.EPackage;");
_builder_3.newLine();
_builder_3.append("import org.eclipse.xtext.xbase.lib.Extension;");
_builder_3.newLine();
_builder_3.append("import test2.MyFile1;");
_builder_3.newLine();
_builder_3.newLine();
_builder_3.append("@SuppressWarnings(\"all\")");
_builder_3.newLine();
_builder_3.append("public class MyFile2 extends AbstractEdelta {");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("@Extension");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("private MyFile1 my;");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("public MyFile2() {");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("my = new MyFile1(this);");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("}");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("public MyFile2(final AbstractEdelta other) {");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("super(other);");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("}");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("public void aModificationTest(final EPackage it) {");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("this.my.enrichWithAttribute(getEClass(\"foo\", \"FooClass\"), \"prefix\");");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("getEAttribute(\"foo\", \"FooClass\", \"prefixAttr\").setChangeable(true);");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("getEReference(\"foo\", \"FooClass\", \"prefixRef\").setContainment(true);");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("}");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("@Override");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("public void performSanityChecks() throws Exception {");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("ensureEPackageIsLoaded(\"foo\");");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("}");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("@Override");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("protected void doExecute() throws Exception {");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("aModificationTest(getEPackage(\"foo\"));");
_builder_3.newLine();
_builder_3.append(" ");
_builder_3.append("}");
_builder_3.newLine();
_builder_3.append("}");
_builder_3.newLine();
Pair<String, CharSequence> _mappedTo = Pair.<String, CharSequence>of("test3.MyFile2", _builder_3.toString());
this.checkCompilationOfSeveralFiles(Collections.<String>unmodifiableList(CollectionLiterals.<String>newArrayList(_builder.toString(), _builder_1.toString(), _builder_2.toString())),
Collections.<Pair<String, CharSequence>>unmodifiableList(CollectionLiterals.<Pair<String, CharSequence>>newArrayList(_mappedTo)));
}

@Test
public void testCompilationOfPersonListExampleModifyEcore() {
final ResourceSet rs = this.createResourceSetWithEcore(
Expand Down Expand Up @@ -2542,6 +2726,17 @@ private void checkCompilation(final ResourceSet rs, final CharSequence expectedG
this.compilationTestHelper.compile(rs, _function);
}

private void checkCompilationOfSeveralFiles(final List<? extends CharSequence> inputs, final List<Pair<String, CharSequence>> expectations) {
final IAcceptor<CompilationTestHelper.Result> _function = (CompilationTestHelper.Result it) -> {
this.assertNoValidationErrors(it);
for (final Pair<String, CharSequence> expectation : expectations) {
Assert.assertEquals(expectation.getValue().toString(), it.getGeneratedCode(expectation.getKey()));
}
this.assertGeneratedJavaCodeCompiles(it);
};
this.compilationTestHelper.compile(this.createResourceSet(((CharSequence[])Conversions.unwrapArray(inputs, CharSequence.class))), _function);
}

private void assertNoValidationErrors(final CompilationTestHelper.Result it) {
final Function1<Issue, Boolean> _function = (Issue it_1) -> {
Severity _severity = it_1.getSeverity();
Expand Down

0 comments on commit 09d3a9a

Please sign in to comment.