aboutsummaryrefslogtreecommitdiffstats
path: root/language/src/test/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'language/src/test/java/org')
-rw-r--r--language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend46
-rw-r--r--language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend33
-rw-r--r--language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend10
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
8import org.eclipse.xtext.testing.InjectWith 8import org.eclipse.xtext.testing.InjectWith
9import org.eclipse.xtext.testing.extensions.InjectionExtension 9import org.eclipse.xtext.testing.extensions.InjectionExtension
10import org.eclipse.xtext.testing.util.ParseHelper 10import org.eclipse.xtext.testing.util.ParseHelper
11import org.junit.jupiter.api.Assertions
12import org.junit.jupiter.api.Test 11import org.junit.jupiter.api.Test
13import org.junit.jupiter.api.^extension.ExtendWith 12import org.junit.jupiter.api.^extension.ExtendWith
14 13
14import static org.hamcrest.MatcherAssert.assertThat
15import static org.hamcrest.Matchers.*
16
15@ExtendWith(InjectionExtension) 17@ExtendWith(InjectionExtension)
16@InjectWith(ProblemInjectorProvider) 18@InjectWith(ProblemInjectorProvider)
17class ProblemParsingTest { 19class 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 @@
1package org.eclipse.viatra.solver.language.tests 1package org.eclipse.viatra.solver.language.tests
2 2
3import org.eclipse.emf.ecore.util.EcoreUtil
4import org.eclipse.viatra.solver.language.ProblemUtil 3import org.eclipse.viatra.solver.language.ProblemUtil
5import org.eclipse.viatra.solver.language.model.problem.Argument 4import org.eclipse.viatra.solver.language.model.problem.Argument
6import org.eclipse.viatra.solver.language.model.problem.Assertion 5import org.eclipse.viatra.solver.language.model.problem.Assertion
@@ -17,19 +16,14 @@ import org.eclipse.viatra.solver.language.model.problem.PredicateDefinition
17import org.eclipse.viatra.solver.language.model.problem.Problem 16import org.eclipse.viatra.solver.language.model.problem.Problem
18import org.eclipse.viatra.solver.language.model.problem.Variable 17import org.eclipse.viatra.solver.language.model.problem.Variable
19import org.eclipse.viatra.solver.language.model.problem.VariableOrNodeArgument 18import org.eclipse.viatra.solver.language.model.problem.VariableOrNodeArgument
20import org.junit.jupiter.api.Assertions
21 19
22class ProblemTestUtil { 20class 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) {