diff options
Diffstat (limited to 'subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java')
-rw-r--r-- | subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java | 82 |
1 files changed, 31 insertions, 51 deletions
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java index e76d2993..0704e026 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -68,37 +68,31 @@ class NodeScopingTest { | |||
68 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.node("b"))); | 68 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.node("b"))); |
69 | } | 69 | } |
70 | 70 | ||
71 | @ParameterizedTest | 71 | @Test |
72 | @MethodSource("individualNodeReferenceSource") | 72 | void atomNodeInAssertionTest() { |
73 | void individualNodeInAssertionTest(String qualifiedNamePrefix, boolean namedProblem) { | ||
74 | var problem = parse(""" | 73 | var problem = parse(""" |
75 | indiv a, b. | 74 | atom a, b. |
76 | pred predicate(node x, node y) <-> node(x). | 75 | pred predicate(node x, node y) <-> node(x). |
77 | predicate({PARAM}a, {PARAM}a). | 76 | predicate(a, a). |
78 | ?predicate({PARAM}a, {PARAM}b). | 77 | ?predicate(a, b). |
79 | """, qualifiedNamePrefix, namedProblem); | 78 | """); |
80 | assertThat(problem.getResourceErrors(), empty()); | 79 | assertThat(problem.getResourceErrors(), empty()); |
81 | assertThat(problem.nodeNames(), empty()); | 80 | assertThat(problem.nodeNames(), empty()); |
82 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.individualNode("a"))); | 81 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.atomNode("a"))); |
83 | assertThat(problem.assertion(0).arg(1).node(), equalTo(problem.individualNode("a"))); | 82 | assertThat(problem.assertion(0).arg(1).node(), equalTo(problem.atomNode("a"))); |
84 | assertThat(problem.assertion(1).arg(0).node(), equalTo(problem.individualNode("a"))); | 83 | assertThat(problem.assertion(1).arg(0).node(), equalTo(problem.atomNode("a"))); |
85 | assertThat(problem.assertion(1).arg(1).node(), equalTo(problem.individualNode("b"))); | 84 | assertThat(problem.assertion(1).arg(1).node(), equalTo(problem.atomNode("b"))); |
86 | } | 85 | } |
87 | 86 | ||
88 | @ParameterizedTest | 87 | @Test |
89 | @MethodSource("individualNodeReferenceSource") | 88 | void atomNodeInPredicateTest() { |
90 | void individualNodeInPredicateTest(String qualifiedNamePrefix, boolean namedProblem) { | ||
91 | var problem = parse(""" | 89 | var problem = parse(""" |
92 | indiv b. | 90 | atom b. |
93 | pred predicate(node a) <-> node({PARAM}b). | 91 | pred predicate(node a) <-> node(b). |
94 | """); | 92 | """); |
95 | assertThat(problem.getResourceErrors(), empty()); | 93 | assertThat(problem.getResourceErrors(), empty()); |
96 | assertThat(problem.nodeNames(), empty()); | 94 | assertThat(problem.nodeNames(), empty()); |
97 | assertThat(problem.pred("predicate").conj(0).lit(0).arg(0).node(), equalTo(problem.individualNode("b"))); | 95 | assertThat(problem.pred("predicate").conj(0).lit(0).arg(0).node(), equalTo(problem.atomNode("b"))); |
98 | } | ||
99 | |||
100 | static Stream<Arguments> individualNodeReferenceSource() { | ||
101 | return Stream.of(Arguments.of("", false), Arguments.of("", true), Arguments.of("test::", true)); | ||
102 | } | 96 | } |
103 | 97 | ||
104 | @Disabled("No nodes are present in builtin.problem currently") | 98 | @Disabled("No nodes are present in builtin.problem currently") |
@@ -131,37 +125,30 @@ class NodeScopingTest { | |||
131 | return Stream.of(Arguments.of("int::new"), Arguments.of("builtin::int::new")); | 125 | return Stream.of(Arguments.of("int::new"), Arguments.of("builtin::int::new")); |
132 | } | 126 | } |
133 | 127 | ||
134 | @ParameterizedTest | 128 | @Test |
135 | @MethodSource("classNewNodeReferencesSource") | 129 | void classNewNodeTest() { |
136 | void classNewNodeTest(String qualifiedName, boolean namedProblem) { | ||
137 | var problem = parse(""" | 130 | var problem = parse(""" |
138 | class Foo. | 131 | class Foo. |
139 | pred predicate(node x) <-> node(x). | 132 | pred predicate(node x) <-> node(x). |
140 | predicate({PARAM}). | 133 | predicate(Foo::new). |
141 | """, qualifiedName, namedProblem); | 134 | """); |
142 | assertThat(problem.getResourceErrors(), empty()); | 135 | assertThat(problem.getResourceErrors(), empty()); |
143 | assertThat(problem.nodeNames(), empty()); | 136 | assertThat(problem.nodeNames(), empty()); |
144 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.findClass("Foo").get().getNewNode())); | 137 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.findClass("Foo").get().getNewNode())); |
145 | } | 138 | } |
146 | 139 | ||
147 | @ParameterizedTest | 140 | @Test |
148 | @MethodSource("classNewNodeReferencesSource") | 141 | void classNewNodeInPredicateTest() { |
149 | void classNewNodeInPredicateTest(String qualifiedName, boolean namedProblem) { | ||
150 | var problem = parse(""" | 142 | var problem = parse(""" |
151 | class Foo. | 143 | class Foo. |
152 | pred predicate(node x) <-> node({PARAM}). | 144 | pred predicate(node x) <-> node(Foo::new). |
153 | """, qualifiedName, namedProblem); | 145 | """); |
154 | assertThat(problem.getResourceErrors(), empty()); | 146 | assertThat(problem.getResourceErrors(), empty()); |
155 | assertThat(problem.nodeNames(), empty()); | 147 | assertThat(problem.nodeNames(), empty()); |
156 | assertThat(problem.pred("predicate").conj(0).lit(0).arg(0).node(), | 148 | assertThat(problem.pred("predicate").conj(0).lit(0).arg(0).node(), |
157 | equalTo(problem.findClass("Foo").get().getNewNode())); | 149 | equalTo(problem.findClass("Foo").get().getNewNode())); |
158 | } | 150 | } |
159 | 151 | ||
160 | static Stream<Arguments> classNewNodeReferencesSource() { | ||
161 | return Stream.of(Arguments.of("Foo::new", false), Arguments.of("Foo::new", true), | ||
162 | Arguments.of("test::Foo::new", true)); | ||
163 | } | ||
164 | |||
165 | @Test | 152 | @Test |
166 | void newNodeIsNotSpecial() { | 153 | void newNodeIsNotSpecial() { |
167 | var problem = parse(""" | 154 | var problem = parse(""" |
@@ -176,12 +163,12 @@ class NodeScopingTest { | |||
176 | 163 | ||
177 | @ParameterizedTest | 164 | @ParameterizedTest |
178 | @MethodSource("enumLiteralReferencesSource") | 165 | @MethodSource("enumLiteralReferencesSource") |
179 | void enumLiteralTest(String qualifiedName, boolean namedProblem) { | 166 | void enumLiteralTest(String qualifiedName) { |
180 | var problem = parse(""" | 167 | var problem = parse(""" |
181 | enum Foo { alpha, beta } | 168 | enum Foo { alpha, beta } |
182 | pred predicate(Foo a) <-> node(a). | 169 | pred predicate(Foo a) <-> node(a). |
183 | predicate({PARAM}). | 170 | predicate({PARAM}). |
184 | """, qualifiedName, namedProblem); | 171 | """, qualifiedName); |
185 | assertThat(problem.getResourceErrors(), empty()); | 172 | assertThat(problem.getResourceErrors(), empty()); |
186 | assertThat(problem.nodeNames(), empty()); | 173 | assertThat(problem.nodeNames(), empty()); |
187 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.findEnum("Foo").literal("alpha"))); | 174 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.findEnum("Foo").literal("alpha"))); |
@@ -189,11 +176,11 @@ class NodeScopingTest { | |||
189 | 176 | ||
190 | @ParameterizedTest | 177 | @ParameterizedTest |
191 | @MethodSource("enumLiteralReferencesSource") | 178 | @MethodSource("enumLiteralReferencesSource") |
192 | void enumLiteralInPredicateTest(String qualifiedName, boolean namedProblem) { | 179 | void enumLiteralInPredicateTest(String qualifiedName) { |
193 | var problem = parse(""" | 180 | var problem = parse(""" |
194 | enum Foo { alpha, beta } | 181 | enum Foo { alpha, beta } |
195 | pred predicate(Foo a) <-> node({PARAM}). | 182 | pred predicate(Foo a) <-> node({PARAM}). |
196 | """, qualifiedName, namedProblem); | 183 | """, qualifiedName); |
197 | assertThat(problem.getResourceErrors(), empty()); | 184 | assertThat(problem.getResourceErrors(), empty()); |
198 | assertThat(problem.nodeNames(), empty()); | 185 | assertThat(problem.nodeNames(), empty()); |
199 | assertThat(problem.pred("predicate").conj(0).lit(0).arg(0).node(), | 186 | assertThat(problem.pred("predicate").conj(0).lit(0).arg(0).node(), |
@@ -201,9 +188,7 @@ class NodeScopingTest { | |||
201 | } | 188 | } |
202 | 189 | ||
203 | static Stream<Arguments> enumLiteralReferencesSource() { | 190 | static Stream<Arguments> enumLiteralReferencesSource() { |
204 | return Stream.of(Arguments.of("alpha", false), Arguments.of("alpha", true), Arguments.of("Foo::alpha", false), | 191 | return Stream.of(Arguments.of("alpha"), Arguments.of("Foo::alpha")); |
205 | Arguments.of("Foo::alpha", true), Arguments.of("test::alpha", true), | ||
206 | Arguments.of("test::Foo::alpha", true)); | ||
207 | } | 192 | } |
208 | 193 | ||
209 | @Disabled("No enum literals are present in builtin.problem currently") | 194 | @Disabled("No enum literals are present in builtin.problem currently") |
@@ -222,7 +207,7 @@ class NodeScopingTest { | |||
222 | @Disabled("No enum literals are present in builtin.problem currently") | 207 | @Disabled("No enum literals are present in builtin.problem currently") |
223 | @ParameterizedTest | 208 | @ParameterizedTest |
224 | @MethodSource("builtInEnumLiteralReferencesSource") | 209 | @MethodSource("builtInEnumLiteralReferencesSource") |
225 | void bultInEnumLiteralInPredicateTest(String qualifiedName) { | 210 | void builtInEnumLiteralInPredicateTest(String qualifiedName) { |
226 | var problem = parse(""" | 211 | var problem = parse(""" |
227 | pred predicate() <-> node({PARAM}). | 212 | pred predicate() <-> node({PARAM}). |
228 | """, qualifiedName); | 213 | """, qualifiedName); |
@@ -237,13 +222,8 @@ class NodeScopingTest { | |||
237 | Arguments.of("builtin::bool::true")); | 222 | Arguments.of("builtin::bool::true")); |
238 | } | 223 | } |
239 | 224 | ||
240 | private WrappedProblem parse(String text, String parameter, boolean namedProblem) { | ||
241 | var problemName = namedProblem ? "problem test.\n" : ""; | ||
242 | return parseHelper.parse(problemName + text.replace("{PARAM}", parameter)); | ||
243 | } | ||
244 | |||
245 | private WrappedProblem parse(String text, String parameter) { | 225 | private WrappedProblem parse(String text, String parameter) { |
246 | return parse(text, parameter, false); | 226 | return parseHelper.parse(text.replace("{PARAM}", parameter)); |
247 | } | 227 | } |
248 | 228 | ||
249 | private WrappedProblem parse(String text) { | 229 | private WrappedProblem parse(String text) { |