diff options
Diffstat (limited to 'subprojects/language/src/test/java/tools')
-rw-r--r-- | subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java index e2e3218c..a05f3335 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/utils/SymbolCollectorTest.java | |||
@@ -12,6 +12,7 @@ import org.junit.jupiter.params.provider.MethodSource; | |||
12 | import tools.refinery.language.model.problem.*; | 12 | import tools.refinery.language.model.problem.*; |
13 | import tools.refinery.language.model.tests.utils.ProblemParseHelper; | 13 | import tools.refinery.language.model.tests.utils.ProblemParseHelper; |
14 | import tools.refinery.language.tests.ProblemInjectorProvider; | 14 | import tools.refinery.language.tests.ProblemInjectorProvider; |
15 | import tools.refinery.language.utils.ContainmentRole; | ||
15 | import tools.refinery.language.utils.ProblemDesugarer; | 16 | import tools.refinery.language.utils.ProblemDesugarer; |
16 | 17 | ||
17 | import java.util.stream.Stream; | 18 | import java.util.stream.Stream; |
@@ -61,7 +62,7 @@ class SymbolCollectorTest { | |||
61 | assertThat(collectedSymbols.relations(), hasKey(classDeclaration)); | 62 | assertThat(collectedSymbols.relations(), hasKey(classDeclaration)); |
62 | var classInfo = collectedSymbols.relations().get(classDeclaration); | 63 | var classInfo = collectedSymbols.relations().get(classDeclaration); |
63 | assertThat(classInfo.parameters(), hasSize(1)); | 64 | assertThat(classInfo.parameters(), hasSize(1)); |
64 | assertThat(classInfo.kind(), is(PredicateKind.CONTAINED)); | 65 | assertThat(classInfo.containmentRole(), is(ContainmentRole.CONTAINED)); |
65 | assertThat(classInfo.hasDefinition(), is(false)); | 66 | assertThat(classInfo.hasDefinition(), is(false)); |
66 | var newNode = classDeclaration.getNewNode(); | 67 | var newNode = classDeclaration.getNewNode(); |
67 | assertThat(collectedSymbols.nodes(), hasKey(newNode)); | 68 | assertThat(collectedSymbols.nodes(), hasKey(newNode)); |
@@ -96,11 +97,11 @@ class SymbolCollectorTest { | |||
96 | var barInfo = collectedSymbols.relations().get(barReference); | 97 | var barInfo = collectedSymbols.relations().get(barReference); |
97 | var quuxReference = fooClass.reference("quux"); | 98 | var quuxReference = fooClass.reference("quux"); |
98 | var quuxInfo = collectedSymbols.relations().get(quuxReference); | 99 | var quuxInfo = collectedSymbols.relations().get(quuxReference); |
99 | assertThat(barInfo.kind(), is(PredicateKind.DEFAULT)); | 100 | assertThat(barInfo.containmentRole(), is(ContainmentRole.NONE)); |
100 | assertThat(barInfo.opposite(), is(quuxReference)); | 101 | assertThat(barInfo.opposite(), is(quuxReference)); |
101 | assertThat(barInfo.multiplicity(), is(instanceOf(UnboundedMultiplicity.class))); | 102 | assertThat(barInfo.multiplicity(), is(instanceOf(UnboundedMultiplicity.class))); |
102 | assertThat(barInfo.hasDefinition(), is(false)); | 103 | assertThat(barInfo.hasDefinition(), is(false)); |
103 | assertThat(quuxInfo.kind(), is(PredicateKind.DEFAULT)); | 104 | assertThat(quuxInfo.containmentRole(), is(ContainmentRole.NONE)); |
104 | assertThat(quuxInfo.opposite(), is(barReference)); | 105 | assertThat(quuxInfo.opposite(), is(barReference)); |
105 | assertThat(quuxInfo.multiplicity(), is(instanceOf(ExactMultiplicity.class))); | 106 | assertThat(quuxInfo.multiplicity(), is(instanceOf(ExactMultiplicity.class))); |
106 | assertThat(quuxInfo.multiplicity(), hasProperty("exactValue", is(1))); | 107 | assertThat(quuxInfo.multiplicity(), hasProperty("exactValue", is(1))); |
@@ -115,8 +116,8 @@ class SymbolCollectorTest { | |||
115 | } | 116 | } |
116 | """); | 117 | """); |
117 | var collectedSymbols = desugarer.collectSymbols(problem.get()); | 118 | var collectedSymbols = desugarer.collectSymbols(problem.get()); |
118 | assertThat(collectedSymbols.relations().get(problem.findClass("Foo").reference("bar")).kind(), | 119 | assertThat(collectedSymbols.relations().get(problem.findClass("Foo").reference("bar")).containmentRole(), |
119 | is(PredicateKind.CONTAINMENT)); | 120 | is(ContainmentRole.CONTAINMENT)); |
120 | } | 121 | } |
121 | 122 | ||
122 | @Test | 123 | @Test |
@@ -127,8 +128,8 @@ class SymbolCollectorTest { | |||
127 | } | 128 | } |
128 | """); | 129 | """); |
129 | var collectedSymbols = desugarer.collectSymbols(problem.get()); | 130 | var collectedSymbols = desugarer.collectSymbols(problem.get()); |
130 | assertThat(collectedSymbols.relations().get(problem.findClass("Foo").reference("bar")).kind(), | 131 | assertThat(collectedSymbols.relations().get(problem.findClass("Foo").reference("bar")).containmentRole(), |
131 | is(PredicateKind.CONTAINMENT)); | 132 | is(ContainmentRole.CONTAINMENT)); |
132 | } | 133 | } |
133 | 134 | ||
134 | @Test | 135 | @Test |
@@ -141,27 +142,27 @@ class SymbolCollectorTest { | |||
141 | var collectedSymbols = desugarer.collectSymbols(problem.get()); | 142 | var collectedSymbols = desugarer.collectSymbols(problem.get()); |
142 | var enumDeclaration = problem.findEnum("Foo"); | 143 | var enumDeclaration = problem.findEnum("Foo"); |
143 | var enumInfo = collectedSymbols.relations().get(enumDeclaration.get()); | 144 | var enumInfo = collectedSymbols.relations().get(enumDeclaration.get()); |
144 | assertThat(enumInfo.kind(), is(PredicateKind.DEFAULT)); | 145 | assertThat(enumInfo.containmentRole(), is(ContainmentRole.NONE)); |
145 | assertThat(enumInfo.assertions(), assertsNode(enumDeclaration.literal("bar"), LogicValue.TRUE)); | 146 | assertThat(enumInfo.assertions(), assertsNode(enumDeclaration.literal("bar"), LogicValue.TRUE)); |
146 | assertThat(enumInfo.assertions(), assertsNode(enumDeclaration.literal("quux"), LogicValue.TRUE)); | 147 | assertThat(enumInfo.assertions(), assertsNode(enumDeclaration.literal("quux"), LogicValue.TRUE)); |
147 | } | 148 | } |
148 | 149 | ||
149 | @ParameterizedTest | 150 | @ParameterizedTest |
150 | @MethodSource | 151 | @MethodSource |
151 | void predicateTest(String keyword, PredicateKind kind) { | 152 | void predicateTest(String keyword, ContainmentRole containmentRole) { |
152 | var problem = parseHelper.parse(keyword + " foo(node x) <-> domain(x); data(x)."); | 153 | var problem = parseHelper.parse(keyword + " foo(node x) <-> domain(x); data(x)."); |
153 | var collectedSymbols = desugarer.collectSymbols(problem.get()); | 154 | var collectedSymbols = desugarer.collectSymbols(problem.get()); |
154 | var predicateInfo = collectedSymbols.relations().get(problem.pred("foo").get()); | 155 | var predicateInfo = collectedSymbols.relations().get(problem.pred("foo").get()); |
155 | assertThat(predicateInfo.kind(), is(kind)); | 156 | assertThat(predicateInfo.containmentRole(), is(containmentRole)); |
156 | assertThat(predicateInfo.parameters(), hasSize(1)); | 157 | assertThat(predicateInfo.parameters(), hasSize(1)); |
157 | assertThat(predicateInfo.bodies(), hasSize(2)); | 158 | assertThat(predicateInfo.bodies(), hasSize(2)); |
158 | assertThat(predicateInfo.hasDefinition(), is(true)); | 159 | assertThat(predicateInfo.hasDefinition(), is(true)); |
159 | } | 160 | } |
160 | 161 | ||
161 | static Stream<Arguments> predicateTest() { | 162 | static Stream<Arguments> predicateTest() { |
162 | return Stream.of(Arguments.of("pred", PredicateKind.DEFAULT), Arguments.of("error", PredicateKind.ERROR), | 163 | return Stream.of(Arguments.of("pred", ContainmentRole.NONE), Arguments.of("error", ContainmentRole.NONE), |
163 | Arguments.of("contained", PredicateKind.CONTAINED), Arguments.of("containment", | 164 | Arguments.of("contained", ContainmentRole.CONTAINED), Arguments.of("containment", |
164 | PredicateKind.CONTAINMENT)); | 165 | ContainmentRole.CONTAINMENT)); |
165 | } | 166 | } |
166 | 167 | ||
167 | @ParameterizedTest | 168 | @ParameterizedTest |
@@ -184,7 +185,7 @@ class SymbolCollectorTest { | |||
184 | default foo(a): %s. | 185 | default foo(a): %s. |
185 | """.formatted(keyword)); | 186 | """.formatted(keyword)); |
186 | var collectedSymbols = desugarer.collectSymbols(problem.get()); | 187 | var collectedSymbols = desugarer.collectSymbols(problem.get()); |
187 | assertThat(collectedSymbols.relations().get(problem.pred("foo").get()).defaultAssertions(), | 188 | assertThat(collectedSymbols.relations().get(problem.pred("foo").get()).assertions(), |
188 | assertsNode(problem.node("a"), value)); | 189 | assertsNode(problem.node("a"), value)); |
189 | } | 190 | } |
190 | 191 | ||
@@ -254,6 +255,10 @@ class SymbolCollectorTest { | |||
254 | LogicValue.UNKNOWN)); | 255 | LogicValue.UNKNOWN)); |
255 | } | 256 | } |
256 | 257 | ||
258 | static Stream<Arguments> valueTypes() { | ||
259 | return Stream.of(Arguments.of("3", "int"), Arguments.of("3.14", "real"), Arguments.of("\"foo\"", "string")); | ||
260 | } | ||
261 | |||
257 | @Test | 262 | @Test |
258 | void invalidProblemTest() { | 263 | void invalidProblemTest() { |
259 | var problem = parseHelper.parse(""" | 264 | var problem = parseHelper.parse(""" |
@@ -265,8 +270,18 @@ class SymbolCollectorTest { | |||
265 | assertDoesNotThrow(() -> desugarer.collectSymbols(problem)); | 270 | assertDoesNotThrow(() -> desugarer.collectSymbols(problem)); |
266 | } | 271 | } |
267 | 272 | ||
268 | static Stream<Arguments> valueTypes() { | 273 | @Test |
269 | return Stream.of(Arguments.of("3", "int"), Arguments.of("3.14", "real"), Arguments.of("\"foo\"", "string")); | 274 | void errorAssertionTest() { |
275 | var problem = parseHelper.parse(""" | ||
276 | error foo(node a, node b) <-> equals(a, b). | ||
277 | """); | ||
278 | var collectedSymbols = desugarer.collectSymbols(problem.get()); | ||
279 | var fooInfo = collectedSymbols.relations().get(problem.pred("foo").get()); | ||
280 | assertThat(fooInfo.assertions(), hasSize(1)); | ||
281 | var assertion = fooInfo.assertions().stream().findFirst().orElseThrow(); | ||
282 | assertThat(assertion.getValue(), is(LogicValue.FALSE)); | ||
283 | assertThat(assertion.getArguments(), hasSize(2)); | ||
284 | assertThat(assertion.getArguments(), everyItem(instanceOf(WildcardAssertionArgument.class))); | ||
270 | } | 285 | } |
271 | 286 | ||
272 | private static Matcher<Iterable<? super Assertion>> assertsNode(Node node, LogicValue value) { | 287 | private static Matcher<Iterable<? super Assertion>> assertsNode(Node node, LogicValue value) { |