aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java
diff options
context:
space:
mode:
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.java82
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) {