diff options
Diffstat (limited to 'language/src/test/java/org')
3 files changed, 63 insertions, 26 deletions
diff --git a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend index 9b1bb698..7a6eec6a 100644 --- a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend +++ b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend | |||
@@ -8,23 +8,55 @@ import org.eclipse.viatra.solver.language.model.problem.Problem | |||
8 | import org.eclipse.xtext.testing.InjectWith | 8 | import org.eclipse.xtext.testing.InjectWith |
9 | import org.eclipse.xtext.testing.extensions.InjectionExtension | 9 | import org.eclipse.xtext.testing.extensions.InjectionExtension |
10 | import org.eclipse.xtext.testing.util.ParseHelper | 10 | import org.eclipse.xtext.testing.util.ParseHelper |
11 | import org.junit.jupiter.api.Assertions | ||
12 | import org.junit.jupiter.api.Test | 11 | import org.junit.jupiter.api.Test |
13 | import org.junit.jupiter.api.^extension.ExtendWith | 12 | import org.junit.jupiter.api.^extension.ExtendWith |
14 | 13 | ||
14 | import static org.hamcrest.MatcherAssert.assertThat | ||
15 | import static org.hamcrest.Matchers.* | ||
16 | |||
15 | @ExtendWith(InjectionExtension) | 17 | @ExtendWith(InjectionExtension) |
16 | @InjectWith(ProblemInjectorProvider) | 18 | @InjectWith(ProblemInjectorProvider) |
17 | class ProblemParsingTest { | 19 | class ProblemParsingTest { |
18 | @Inject | 20 | @Inject |
19 | ParseHelper<Problem> parseHelper | 21 | ParseHelper<Problem> parseHelper |
20 | 22 | ||
23 | @Inject | ||
24 | extension ProblemTestUtil | ||
25 | |||
21 | @Test | 26 | @Test |
22 | def void loadModel() { | 27 | def void exampleTest() { |
23 | val result = parseHelper.parse(''' | 28 | val it = parseHelper.parse(''' |
24 | Hello Xtext! | 29 | class Family { |
30 | contains Person[] members | ||
31 | } | ||
32 | |||
33 | class Person { | ||
34 | Person[0..*] children opposite parent | ||
35 | Person[0..1] parent opposite children | ||
36 | int age | ||
37 | TaxStatus taxStatus | ||
38 | } | ||
39 | |||
40 | enum TaxStatus { | ||
41 | child, student, adult, retired | ||
42 | } | ||
43 | |||
44 | % A child cannot have any dependents. | ||
45 | error invalidTaxStatus(Person p) :- | ||
46 | taxStatus(p, child), children(p, _q). | ||
47 | |||
48 | Family('family'). | ||
49 | members('family', anne): true. | ||
50 | members('family', bob). | ||
51 | members('family', ciri). | ||
52 | children(anne, ciri). | ||
53 | ?children(bob, ciri). | ||
54 | taxStatus(anne, adult). | ||
55 | age(anne, 35). | ||
56 | bobAge: 27. | ||
57 | age(bob, bobAge). | ||
58 | !age(ciri, bobAge). | ||
25 | ''') | 59 | ''') |
26 | Assertions.assertNotNull(result) | 60 | assertThat(errors, empty) |
27 | val errors = result.eResource.errors | ||
28 | Assertions.assertTrue(errors.isEmpty, '''Unexpected errors: «errors.join(", ")»''') | ||
29 | } | 61 | } |
30 | } | 62 | } |
diff --git a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend index 7872b0f7..7686e39e 100644 --- a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend +++ b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend | |||
@@ -27,7 +27,8 @@ class ProblemScopingTest { | |||
27 | def void builtInArgumentTypeTest() { | 27 | def void builtInArgumentTypeTest() { |
28 | val it = parseHelper.parse(''' | 28 | val it = parseHelper.parse(''' |
29 | pred predicate(node a, data b, int c). | 29 | pred predicate(node a, data b, int c). |
30 | ''').assertNoErrors | 30 | ''') |
31 | assertThat(errors, empty) | ||
31 | assertThat(pred('predicate').param(0).parameterType, equalTo(builtin.findClass('node'))) | 32 | assertThat(pred('predicate').param(0).parameterType, equalTo(builtin.findClass('node'))) |
32 | assertThat(pred('predicate').param(1).parameterType, equalTo(builtin.findClass('data'))) | 33 | assertThat(pred('predicate').param(1).parameterType, equalTo(builtin.findClass('data'))) |
33 | assertThat(pred('predicate').param(2).parameterType, equalTo(builtin.findClass('int'))) | 34 | assertThat(pred('predicate').param(2).parameterType, equalTo(builtin.findClass('int'))) |
@@ -37,7 +38,8 @@ class ProblemScopingTest { | |||
37 | def void builtiQualifiedArgumentTypeTest() { | 38 | def void builtiQualifiedArgumentTypeTest() { |
38 | val it = parseHelper.parse(''' | 39 | val it = parseHelper.parse(''' |
39 | pred predicate(builtin::node a, builtin::data b, builtin::int c). | 40 | pred predicate(builtin::node a, builtin::data b, builtin::int c). |
40 | ''').assertNoErrors | 41 | ''') |
42 | assertThat(errors, empty) | ||
41 | assertThat(pred('predicate').param(0).parameterType, equalTo(builtin.findClass('node'))) | 43 | assertThat(pred('predicate').param(0).parameterType, equalTo(builtin.findClass('node'))) |
42 | assertThat(pred('predicate').param(1).parameterType, equalTo(builtin.findClass('data'))) | 44 | assertThat(pred('predicate').param(1).parameterType, equalTo(builtin.findClass('data'))) |
43 | assertThat(pred('predicate').param(2).parameterType, equalTo(builtin.findClass('int'))) | 45 | assertThat(pred('predicate').param(2).parameterType, equalTo(builtin.findClass('int'))) |
@@ -49,7 +51,8 @@ class ProblemScopingTest { | |||
49 | pred predicate(node a, node b). | 51 | pred predicate(node a, node b). |
50 | predicate(a, a). | 52 | predicate(a, a). |
51 | ?predicate(a, b). | 53 | ?predicate(a, b). |
52 | ''').assertNoErrors | 54 | ''') |
55 | assertThat(errors, empty) | ||
53 | assertThat(nodeNames, hasItems('a', 'b')) | 56 | assertThat(nodeNames, hasItems('a', 'b')) |
54 | assertThat(assertion(0).arg(0).node, equalTo(node('a'))) | 57 | assertThat(assertion(0).arg(0).node, equalTo(node('a'))) |
55 | assertThat(assertion(0).arg(1).node, equalTo(node('a'))) | 58 | assertThat(assertion(0).arg(1).node, equalTo(node('a'))) |
@@ -63,7 +66,8 @@ class ProblemScopingTest { | |||
63 | pred predicate(node a, node b). | 66 | pred predicate(node a, node b). |
64 | predicate('a', 'a'). | 67 | predicate('a', 'a'). |
65 | ?predicate('a', 'b'). | 68 | ?predicate('a', 'b'). |
66 | ''').assertNoErrors | 69 | ''') |
70 | assertThat(errors, empty) | ||
67 | assertThat(nodeNames, hasItems("'a'", "'b'")) | 71 | assertThat(nodeNames, hasItems("'a'", "'b'")) |
68 | assertThat(assertion(0).arg(0).node, equalTo(node("'a'"))) | 72 | assertThat(assertion(0).arg(0).node, equalTo(node("'a'"))) |
69 | assertThat(assertion(0).arg(1).node, equalTo(node("'a'"))) | 73 | assertThat(assertion(0).arg(1).node, equalTo(node("'a'"))) |
@@ -76,7 +80,8 @@ class ProblemScopingTest { | |||
76 | val it = parseHelper.parse(''' | 80 | val it = parseHelper.parse(''' |
77 | pred predicate(node a). | 81 | pred predicate(node a). |
78 | predicate(int::new). | 82 | predicate(int::new). |
79 | ''').assertNoErrors | 83 | ''') |
84 | assertThat(errors, empty) | ||
80 | assertThat(nodes, empty) | 85 | assertThat(nodes, empty) |
81 | assertThat(assertion(0).arg(0).node, equalTo(builtin.findClass('int').newNode)) | 86 | assertThat(assertion(0).arg(0).node, equalTo(builtin.findClass('int').newNode)) |
82 | } | 87 | } |
@@ -86,7 +91,8 @@ class ProblemScopingTest { | |||
86 | val it = parseHelper.parse(''' | 91 | val it = parseHelper.parse(''' |
87 | pred predicate(node a). | 92 | pred predicate(node a). |
88 | predicate(builtin::int::new). | 93 | predicate(builtin::int::new). |
89 | ''').assertNoErrors | 94 | ''') |
95 | assertThat(errors, empty) | ||
90 | assertThat(nodes, empty) | 96 | assertThat(nodes, empty) |
91 | assertThat(assertion(0).arg(0).node, equalTo(builtin.findClass('int').newNode)) | 97 | assertThat(assertion(0).arg(0).node, equalTo(builtin.findClass('int').newNode)) |
92 | } | 98 | } |
@@ -97,7 +103,8 @@ class ProblemScopingTest { | |||
97 | class Foo. | 103 | class Foo. |
98 | pred predicate(node a). | 104 | pred predicate(node a). |
99 | predicate(Foo::new). | 105 | predicate(Foo::new). |
100 | ''').assertNoErrors | 106 | ''') |
107 | assertThat(errors, empty) | ||
101 | assertThat(nodes, empty) | 108 | assertThat(nodes, empty) |
102 | assertThat(assertion(0).arg(0).node, equalTo(findClass('Foo').newNode)) | 109 | assertThat(assertion(0).arg(0).node, equalTo(findClass('Foo').newNode)) |
103 | } | 110 | } |
@@ -110,7 +117,8 @@ class ProblemScopingTest { | |||
110 | class Foo. | 117 | class Foo. |
111 | pred predicate(node a). | 118 | pred predicate(node a). |
112 | predicate(test::Foo::new). | 119 | predicate(test::Foo::new). |
113 | ''').assertNoErrors | 120 | ''') |
121 | assertThat(errors, empty) | ||
114 | assertThat(nodes, empty) | 122 | assertThat(nodes, empty) |
115 | assertThat(assertion(0).arg(0).node, equalTo(findClass('Foo').newNode)) | 123 | assertThat(assertion(0).arg(0).node, equalTo(findClass('Foo').newNode)) |
116 | } | 124 | } |
@@ -121,7 +129,8 @@ class ProblemScopingTest { | |||
121 | class Foo. | 129 | class Foo. |
122 | pred predicate(node a). | 130 | pred predicate(node a). |
123 | predicate(new). | 131 | predicate(new). |
124 | ''').assertNoErrors | 132 | ''') |
133 | assertThat(errors, empty) | ||
125 | assertThat(nodeNames, hasItem('new')) | 134 | assertThat(nodeNames, hasItem('new')) |
126 | assertThat(assertion(0).arg(0).node, not(equalTo(findClass('Foo').newNode))) | 135 | assertThat(assertion(0).arg(0).node, not(equalTo(findClass('Foo').newNode))) |
127 | } | 136 | } |
@@ -131,7 +140,8 @@ class ProblemScopingTest { | |||
131 | val it = parseHelper.parse(''' | 140 | val it = parseHelper.parse(''' |
132 | pred predicate(node a) :- node(b). | 141 | pred predicate(node a) :- node(b). |
133 | predicate(b). | 142 | predicate(b). |
134 | ''').assertNoErrors | 143 | ''') |
144 | assertThat(errors, empty) | ||
135 | assertThat(nodeNames, hasItem("b")) | 145 | assertThat(nodeNames, hasItem("b")) |
136 | assertThat(pred("predicate").conj(0).lit(0).arg(0).node, equalTo(node("b"))) | 146 | assertThat(pred("predicate").conj(0).lit(0).arg(0).node, equalTo(node("b"))) |
137 | assertThat(assertion(0).arg(0).node, equalTo(node("b"))) | 147 | assertThat(assertion(0).arg(0).node, equalTo(node("b"))) |
@@ -141,7 +151,8 @@ class ProblemScopingTest { | |||
141 | def void quotedNodeInPredicateTest() { | 151 | def void quotedNodeInPredicateTest() { |
142 | val it = parseHelper.parse(''' | 152 | val it = parseHelper.parse(''' |
143 | pred predicate(node a) :- node('b'). | 153 | pred predicate(node a) :- node('b'). |
144 | ''').assertNoErrors | 154 | ''') |
155 | assertThat(errors, empty) | ||
145 | assertThat(nodeNames, hasItem("'b'")) | 156 | assertThat(nodeNames, hasItem("'b'")) |
146 | assertThat(pred("predicate").conj(0).lit(0).arg(0).node, equalTo(node("'b'"))) | 157 | assertThat(pred("predicate").conj(0).lit(0).arg(0).node, equalTo(node("'b'"))) |
147 | } | 158 | } |
diff --git a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend index 98b53675..b16de2b5 100644 --- a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend +++ b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend | |||
@@ -1,6 +1,5 @@ | |||
1 | package org.eclipse.viatra.solver.language.tests | 1 | package org.eclipse.viatra.solver.language.tests |
2 | 2 | ||
3 | import org.eclipse.emf.ecore.util.EcoreUtil | ||
4 | import org.eclipse.viatra.solver.language.ProblemUtil | 3 | import org.eclipse.viatra.solver.language.ProblemUtil |
5 | import org.eclipse.viatra.solver.language.model.problem.Argument | 4 | import org.eclipse.viatra.solver.language.model.problem.Argument |
6 | import org.eclipse.viatra.solver.language.model.problem.Assertion | 5 | import org.eclipse.viatra.solver.language.model.problem.Assertion |
@@ -17,19 +16,14 @@ import org.eclipse.viatra.solver.language.model.problem.PredicateDefinition | |||
17 | import org.eclipse.viatra.solver.language.model.problem.Problem | 16 | import org.eclipse.viatra.solver.language.model.problem.Problem |
18 | import org.eclipse.viatra.solver.language.model.problem.Variable | 17 | import org.eclipse.viatra.solver.language.model.problem.Variable |
19 | import org.eclipse.viatra.solver.language.model.problem.VariableOrNodeArgument | 18 | import org.eclipse.viatra.solver.language.model.problem.VariableOrNodeArgument |
20 | import org.junit.jupiter.api.Assertions | ||
21 | 19 | ||
22 | class ProblemTestUtil { | 20 | class ProblemTestUtil { |
23 | def builtin(Problem it) { | 21 | def builtin(Problem it) { |
24 | ProblemUtil.getBuiltInLibrary(it).get | 22 | ProblemUtil.getBuiltInLibrary(it).get |
25 | } | 23 | } |
26 | 24 | ||
27 | def assertNoErrors(Problem it) { | 25 | def errors(Problem it) { |
28 | Assertions.assertNotNull(it) | 26 | eResource.errors |
29 | EcoreUtil.resolveAll(it) | ||
30 | val errors = eResource.errors | ||
31 | Assertions.assertTrue(errors.isEmpty, '''Unexpected errors: «errors.join(", ")»''') | ||
32 | it | ||
33 | } | 27 | } |
34 | 28 | ||
35 | def nodeNames(Problem it) { | 29 | def nodeNames(Problem it) { |