Skip to content

Commit

Permalink
155: validator test for real type mismatch
Browse files Browse the repository at this point in the history
  • Loading branch information
LorenzoBettini committed May 8, 2020
1 parent 0a2e307 commit 87aa2fd
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
Expand Up @@ -11,6 +11,7 @@ import org.junit.Test
import org.junit.runner.RunWith

import static edelta.edelta.EdeltaPackage.Literals.*
import org.eclipse.xtext.xbase.validation.IssueCodes

@RunWith(XtextRunner)
@InjectWith(EdeltaInjectorProviderCustom)
Expand Down Expand Up @@ -342,4 +343,30 @@ class EdeltaValidatorTest extends EdeltaAbstractTest {
"Invalid direct subpackage modification 'mainsubpackage'"
)
}

@Test
def void testTypeMismatchOfEcoreRefExp() {
val input = '''
import org.eclipse.emf.ecore.EClass
import org.eclipse.emf.ecore.EPackage
metamodel "foo"
modifyEcore aTest epackage foo {
ecoreref(foo.FooClass).name = "RenamedClass"
val EClass c = ecoreref(RenamedClass) // OK after interpretation
val EPackage p = ecoreref(RenamedClass) // ERROR also after interpretation
}
'''
input.parseWithTestEcore => [
assertError(
EDELTA_ECORE_REFERENCE_EXPRESSION,
IssueCodes.INCOMPATIBLE_TYPES,
input.lastIndexOf("ecoreref(RenamedClass)"), "ecoreref(RenamedClass)".length,
"Type mismatch: cannot convert from EClass to EPackage"
)
assertErrorsAsStrings("Type mismatch: cannot convert from EClass to EPackage")
]
}

}
Expand Up @@ -14,6 +14,7 @@
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xbase.validation.IssueCodes;
import org.junit.Test;
import org.junit.runner.RunWith;

Expand Down Expand Up @@ -486,4 +487,41 @@ public void testInvalidModifyEcoreOfSubPackage() {
EdeltaValidator.INVALID_SUBPACKAGE_MODIFICATION, start, _minus,
"Invalid direct subpackage modification \'mainsubpackage\'");
}

@Test
public void testTypeMismatchOfEcoreRefExp() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("import org.eclipse.emf.ecore.EClass");
_builder.newLine();
_builder.append("import org.eclipse.emf.ecore.EPackage");
_builder.newLine();
_builder.newLine();
_builder.append("metamodel \"foo\"");
_builder.newLine();
_builder.newLine();
_builder.append("modifyEcore aTest epackage foo {");
_builder.newLine();
_builder.append("\t");
_builder.append("ecoreref(foo.FooClass).name = \"RenamedClass\"");
_builder.newLine();
_builder.append("\t");
_builder.append("val EClass c = ecoreref(RenamedClass) // OK after interpretation");
_builder.newLine();
_builder.append("\t");
_builder.append("val EPackage p = ecoreref(RenamedClass) // ERROR also after interpretation");
_builder.newLine();
_builder.append("}");
_builder.newLine();
final String input = _builder.toString();
EdeltaProgram _parseWithTestEcore = this.parseWithTestEcore(input);
final Procedure1<EdeltaProgram> _function = (EdeltaProgram it) -> {
this._validationTestHelper.assertError(it,
EdeltaPackage.Literals.EDELTA_ECORE_REFERENCE_EXPRESSION,
IssueCodes.INCOMPATIBLE_TYPES,
input.lastIndexOf("ecoreref(RenamedClass)"), "ecoreref(RenamedClass)".length(),
"Type mismatch: cannot convert from EClass to EPackage");
this.assertErrorsAsStrings(it, "Type mismatch: cannot convert from EClass to EPackage");
};
ObjectExtensions.<EdeltaProgram>operator_doubleArrow(_parseWithTestEcore, _function);
}
}

0 comments on commit 87aa2fd

Please sign in to comment.