Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,16 @@ void expression() {

assertThat(result)
.hasInstance(
"Restaurant", named("Pizzeria Toni"), rest -> {
"Restaurant", named("Pizzeria Toni"), rest ->
assertThat(rest)
.hasAttribute("name", "Pizzeria Toni")
.hasAttribute("len", 13);
}
.hasAttribute("len", 13)
)
.hasInstance(
"Restaurant", named("Brauhaus"), rest -> {
"Restaurant", named("Brauhaus"), rest ->
assertThat(rest)
.hasAttribute("name", "Brauhaus")
.hasAttribute("len", 8);
}
.hasAttribute("len", 8)
)
.hasNoMoreInstances();
}
Expand Down Expand Up @@ -107,18 +105,15 @@ void multiClassWithReference() {

assertThat(result)
.hasInstance(
"Restaurant", named("Pizzeria Toni"), rest -> {
"Restaurant", named("Pizzeria Toni"), rest ->
assertThat(rest)
.hasManyReference(
"sells", named("Pizza Margherita"), named("Fanta")
);
}
)
)
.hasInstance(
"Restaurant", named("Brauhaus"), rest -> {
assertThat(rest)
.hasManyReference("sells", named("Maultaschen"), named("Fanta"));
}
"Restaurant", named("Brauhaus"), rest ->
assertThat(rest).hasManyReference("sells", named("Maultaschen"), named("Fanta"))
)
.hasInstance("Food", named("Pizza Margherita"))
.hasInstance("Food", named("Maultaschen"))
Expand Down Expand Up @@ -150,30 +145,30 @@ void renamedTarget() {

@Test
void missingTarget() {
assertThatThrownBy(() -> {
assertThatThrownBy(() ->
transform("""
from Restaurant create

from Food f
where false
create TastyFood {}
""");
}).hasMessage(
""")
).hasMessage(
"Failed to transform models: no target instance of class 'TastyFood' found for source instance of class 'Food'"
);
}

@Test
void ambiguousTarget() {
assertThatThrownBy(() -> {
assertThatThrownBy(() ->
transform("""
from Restaurant create

from Food f
join Food f2
create TastyFood {}
""");
}).hasMessage(
""")
).hasMessage(
"Failed to transform models: multiple target instances of class 'TastyFood' found for source instance of class 'Food'"
);
}
Expand Down Expand Up @@ -209,18 +204,16 @@ void selfReference() {

assertThat(result)
.hasInstance(
"Result", named("Pizzeria Toni"), rest -> {
"Result", named("Pizzeria Toni"), rest ->
assertThat(rest)
.hasAttribute("name", "Pizzeria Toni")
.hasReference("self", other -> other == rest);
}
.hasReference("self", other -> other == rest)
)
.hasInstance(
"Result", named("Brauhaus"), rest -> {
"Result", named("Brauhaus"), rest ->
assertThat(rest)
.hasAttribute("name", "Brauhaus")
.hasReference("self", other -> other == rest);
}
.hasReference("self", other -> other == rest)
)
.hasNoMoreInstances();
}
Expand All @@ -237,16 +230,14 @@ void nullValueInFeature() {

assertThat(result)
.hasInstance(
"Result", named("Pizzeria Toni"), rest -> {
"Result", named("Pizzeria Toni"), rest ->
assertThat(rest)
.hasReference("test", other -> other == null);
}
.hasReference("test", other -> other == null)
)
.hasInstance(
"Result", named("Brauhaus"), rest -> {
"Result", named("Brauhaus"), rest ->
assertThat(rest)
.hasReference("test", other -> other == null);
}
.hasReference("test", other -> other == null)
);
}

Expand All @@ -260,10 +251,9 @@ void noSourceTest() {

assertThat(result)
.hasInstance(
"Result", any(), res -> {
"Result", any(), res ->
assertThat(res)
.hasAttribute("test", 12);
}
.hasAttribute("test", 12)
)
.hasNoMoreInstances();
}
Expand All @@ -278,23 +268,22 @@ void manyAttribute() {

assertThat(result)
.hasInstance(
"Test", any(), test -> {
"Test", any(), test ->
assertThat(test)
.hasAttribute("test", List.of(1, 2));
}
.hasAttribute("test", List.of(1, 2))
)
.hasNoMoreInstances();
}

@Test
void containmentError() {
assertThatThrownBy(() -> {
assertThatThrownBy(() ->
transform("""
from Restaurant r create {
sells [containment] := r.sells
}
""");
}).hasMessage(
""")
).hasMessage(
"Failed to transform models: cannot add target instance of class 'Food' to containment reference 'Restaurant.sells' because it is already contained in another instance of class 'Restaurant'"
);
}
Expand All @@ -315,11 +304,10 @@ void subQuery() {

assertThat(result)
.hasInstance(
"Restaurant", named("Pizzeria Toni"), rest -> {
"Restaurant", named("Pizzeria Toni"), rest ->
assertThat(rest)
.hasAttribute("name", "Pizzeria Toni")
.hasManyReference("sells", named("Pizza Margherita"), named("Fanta"));
}
.hasManyReference("sells", named("Pizza Margherita"), named("Fanta"))
)
.hasInstance("Food", named("Pizza Margherita"))
.hasInstance("Food", named("Fanta"))
Expand All @@ -346,14 +334,13 @@ void typeCast() {

assertThat(result)
.hasInstance(
"Test", named("basic"), t -> {
"Test", named("basic"), t ->
assertThat(t)
.hasAttribute("p1", (byte) 30000)
.hasAttribute("p2", (int) 30000)
.hasAttribute("p3", (long) 30000)
.hasAttribute("p4", (float) 30000)
.hasAttribute("p5", (double) 30000);
}
.hasAttribute("p5", (double) 30000)
);
}

Expand All @@ -376,14 +363,13 @@ void typeCastFromBoxed() {

assertThat(result)
.hasInstance(
"Test", named("basic"), t -> {
"Test", named("basic"), t ->
assertThat(t)
.hasAttribute("p1", (byte) 30000)
.hasAttribute("p2", (int) 30000)
.hasAttribute("p3", (long) 30000)
.hasAttribute("p4", (float) 30000)
.hasAttribute("p5", (double) 30000);
}
.hasAttribute("p5", (double) 30000)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@
import java.util.List;

class EmslMetamodelGeneratorTest {
@TempDir Path tempDirectory;
@TempDir
Path tempDirectory;

private static final String ECORE_METAMODEL_FILENAME = "SimpleCarMetamodel.ecore";
private static final String METAMODEL_OUTPUT_FILENAME = "test-metamodel-output.msl";
Expand All @@ -41,9 +42,9 @@ void setup() {
// Setup ResourceSet
resourceSet = new ResourceSetImpl();
resourceSet
.getResourceFactoryRegistry()
.getExtensionToFactoryMap()
.put("ecore", new EcoreResourceFactoryImpl());
.getResourceFactoryRegistry()
.getExtensionToFactoryMap()
.put("ecore", new EcoreResourceFactoryImpl());

// Load test model
final URL resourceUrl = getClass().getClassLoader().getResource(ECORE_METAMODEL_FILENAME);
Expand All @@ -62,7 +63,7 @@ void generateMetamodels() {

// when
assertThatCode(() -> EmslMetamodelGenerator.generateMetamodels(resourceSet, outputPath))
.doesNotThrowAnyException();
.doesNotThrowAnyException();

// then
assertThat(outputPath).exists();
Expand All @@ -88,53 +89,56 @@ void generateMetamodels() {

// Wheel
final MetamodelNodeBlock wheelNodeBlock =
metamodel.getNodeBlocks().stream()
.filter(node -> node.getName().equals("Wheel"))
.findFirst()
.orElseThrow();
assertThat(wheelNodeBlock).hasName("Wheel").hasPropertyCount(3);
assertThat(wheelNodeBlock).hasProperty("wheelId", BuiltInDataTypes.EINT);
assertThat(wheelNodeBlock).hasProperty("pressure", BuiltInDataTypes.EDOUBLE);
assertThat(wheelNodeBlock).hasProperty("diameter", BuiltInDataTypes.EINT);
assertThat(wheelNodeBlock).hasNoRelations();
metamodel.getNodeBlocks().stream()
.filter(node -> node.getName().equals("Wheel"))
.findFirst()
.orElseThrow();
assertThat(wheelNodeBlock)
.hasName("Wheel")
.hasPropertyCount(3)
.hasProperty("wheelId", BuiltInDataTypes.EINT)
.hasProperty("pressure", BuiltInDataTypes.EDOUBLE)
.hasProperty("diameter", BuiltInDataTypes.EINT)
.hasNoRelations();

// Axis
final MetamodelNodeBlock axisNodeBlock =
metamodel.getNodeBlocks().stream()
.filter(node -> node.getName().equals("Axis"))
.findFirst()
.orElseThrow();
assertThat(axisNodeBlock).hasName("Axis").hasPropertyCount(2);
assertThat(axisNodeBlock).hasProperty("axisId", BuiltInDataTypes.EINT);
assertThat(axisNodeBlock).hasProperty("position", BuiltInDataTypes.ESTRING);

assertThat(axisNodeBlock).hasRelationCount(1);
metamodel.getNodeBlocks().stream()
.filter(node -> node.getName().equals("Axis"))
.findFirst()
.orElseThrow();
assertThat(axisNodeBlock)
.relation("wheels")
.hasKind(RelationKind.AGGREGATION)
.hasName("wheels")
.hasLowerBound("0")
.hasUpperBound("*")
.hasTarget(wheelNodeBlock);
.hasName("Axis").hasPropertyCount(2)
.hasProperty("axisId", BuiltInDataTypes.EINT)
.hasProperty("position", BuiltInDataTypes.ESTRING);

assertThat(axisNodeBlock)
.hasRelationCount(1)
.relation("wheels")
.hasKind(RelationKind.AGGREGATION)
.hasName("wheels")
.hasLowerBound("0")
.hasUpperBound("*")
.hasTarget(wheelNodeBlock);

// Car
final MetamodelNodeBlock carNodeBlock =
metamodel.getNodeBlocks().stream()
.filter(node -> node.getName().equals("Car"))
.findFirst()
.orElseThrow();
assertThat(carNodeBlock).hasName("Car").hasPropertyCount(3);
assertThat(carNodeBlock).hasProperty("carId", BuiltInDataTypes.EINT);
assertThat(carNodeBlock).hasProperty("manufacturer", BuiltInDataTypes.ESTRING);
assertThat(carNodeBlock).hasProperty("modelName", BuiltInDataTypes.ESTRING);

assertThat(carNodeBlock).hasRelationCount(1);
metamodel.getNodeBlocks().stream()
.filter(node -> node.getName().equals("Car"))
.findFirst()
.orElseThrow();
assertThat(carNodeBlock).hasName("Car").hasPropertyCount(3)
.hasProperty("carId", BuiltInDataTypes.EINT)
.hasProperty("manufacturer", BuiltInDataTypes.ESTRING)
.hasProperty("modelName", BuiltInDataTypes.ESTRING);

assertThat(carNodeBlock)
.relation("axes")
.hasKind(RelationKind.AGGREGATION)
.hasName("axes")
.hasLowerBound("0")
.hasUpperBound("*")
.hasTarget(axisNodeBlock);
.hasRelationCount(1)
.relation("axes")
.hasKind(RelationKind.AGGREGATION)
.hasName("axes")
.hasLowerBound("0")
.hasUpperBound("*")
.hasTarget(axisNodeBlock);
}
}
Loading
Loading