import groovy.mock.interceptor.MockFor
|
|
import static groovy.test.GroovyAssert.*
|
|
import groovy.util.GroovyTestCase
|
|
|
|
import org.wikimedia.integration.ExecutionGraph
|
|
import org.wikimedia.integration.ExecutionContext
|
|
|
|
class ExecutionContextTest extends GroovyTestCase {
|
|
void testNodeContextBindings() {
|
|
/*
|
|
* a
|
|
* ⇘
|
|
* b
|
|
* ⇘
|
|
* c x
|
|
* ⇘ ⇙
|
|
* d
|
|
* ⇙ ⇘
|
|
* y e
|
|
* ⇘ ⇙
|
|
* f
|
|
*/
|
|
def context = new ExecutionContext(new ExecutionGraph([
|
|
["a", "b", "c", "d", "e", "f"],
|
|
["x", "d", "y", "f"],
|
|
]))
|
|
|
|
def cContext = context.ofNode("c")
|
|
def eContext = context.ofNode("e")
|
|
|
|
context.ofNode("a").bind("foo", "afoo")
|
|
context.ofNode("a").bind("bar", "abar")
|
|
context.ofNode("b").bind("foo", "bfoo")
|
|
context.ofNode("x").bind("bar", "xbar")
|
|
|
|
assert cContext.binding("a", "foo") == "afoo"
|
|
assert cContext.binding("a", "bar") == "abar"
|
|
assert cContext.binding("b", "foo") == "bfoo"
|
|
|
|
shouldFail(ExecutionContext.AncestorNotFoundException) {
|
|
cContext.binding("x", "bar")
|
|
}
|
|
|
|
shouldFail(ExecutionContext.NameNotFoundException) {
|
|
cContext.binding("baz")
|
|
}
|
|
|
|
assert eContext.binding("a", "foo") == "afoo"
|
|
assert eContext.binding("a", "bar") == "abar"
|
|
assert eContext.binding("b", "foo") == "bfoo"
|
|
assert eContext.binding("x", "bar") == "xbar"
|
|
}
|
|
|
|
void testNodeContextBindings_immutable() {
|
|
/*
|
|
* a
|
|
* ⇘
|
|
* b
|
|
* ⇘
|
|
* c
|
|
*/
|
|
def context = new ExecutionContext(new ExecutionGraph([
|
|
["a", "b", "c"],
|
|
]))
|
|
|
|
context.ofNode("b").bind("foo", "bfoo")
|
|
|
|
shouldFail(ExecutionContext.NameAlreadyBoundException) {
|
|
context.ofNode("b").bind("foo", "newfoo")
|
|
}
|
|
|
|
assert context.ofNode("b").binding("foo") == "bfoo"
|
|
}
|
|
|
|
void testStringInterpolation() {
|
|
/*
|
|
* a
|
|
* ⇘
|
|
* b
|
|
* ⇘
|
|
* c x
|
|
* ⇘ ⇙
|
|
* d
|
|
* ⇙ ⇘
|
|
* y e
|
|
* ⇘ ⇙
|
|
* f
|
|
*/
|
|
def context = new ExecutionContext(new ExecutionGraph([
|
|
["a", "b", "c", "d", "e", "f"],
|
|
["x", "d", "y", "f"],
|
|
]))
|
|
|
|
context.ofNode("a").bind("foo", "afoo")
|
|
context.ofNode("a").bind("bar", "abar")
|
|
context.ofNode("b").bind("foo", "bfoo")
|
|
context.ofNode("x").bind("bar", "xbar")
|
|
|
|
assert (context.ofNode("b") % 'w-t-${a.foo} ${.foo}') == "w-t-afoo bfoo"
|
|
|
|
assert (context.ofNode("c") % 'w-t-${a.foo} ${b.foo}') == "w-t-afoo bfoo"
|
|
assert (context.ofNode("c") % 'w-t-${a.bar}') == "w-t-abar"
|
|
|
|
shouldFail(ExecutionContext.AncestorNotFoundException) {
|
|
context.ofNode("x") % 'w-t-${b.bar}'
|
|
}
|
|
|
|
shouldFail(ExecutionContext.NameNotFoundException) {
|
|
context.ofNode("b") % 'w-t-${.bar}'
|
|
}
|
|
}
|
|
|
|
void testStringInterpolation_selfScope() {
|
|
/*
|
|
* a
|
|
* ⇘
|
|
* b
|
|
* ⇘
|
|
* c
|
|
*/
|
|
def context = new ExecutionContext(new ExecutionGraph([
|
|
["a", "b", "c"],
|
|
]))
|
|
|
|
context.ofNode("c").bind("foo", "cfoo")
|
|
|
|
assert (context.ofNode("c") % 'w-t-${.foo}') == "w-t-cfoo"
|
|
}
|
|
|
|
void testNodeContextGetAll() {
|
|
def context = new ExecutionContext(new ExecutionGraph([
|
|
["a", "b", "c", "z"],
|
|
["x", "b", "y", "z"],
|
|
]))
|
|
|
|
context.ofNode("a").bind("foo", "afoo")
|
|
context.ofNode("c").bind("foo", "cfoo")
|
|
context.ofNode("y").bind("foo", "yfoo")
|
|
|
|
assert context.ofNode("z").getAll("foo") == [
|
|
a: "afoo",
|
|
c: "cfoo",
|
|
y: "yfoo",
|
|
]
|
|
}
|
|
|
|
void testNodeContextGetAt() {
|
|
def context = new ExecutionContext(new ExecutionGraph([
|
|
["a", "b", "c"],
|
|
]))
|
|
|
|
context.ofNode("a").bind("foo", "afoo")
|
|
context.ofNode("c").bind("foo", "cfoo")
|
|
|
|
assert context.ofNode("c")["a.foo"] == "afoo"
|
|
assert context.ofNode("c")["foo"] == "cfoo"
|
|
}
|
|
|
|
void testNodeContextGetAt_selfScope() {
|
|
/*
|
|
* a
|
|
* ⇘
|
|
* b
|
|
* ⇘
|
|
* c
|
|
*/
|
|
def context = new ExecutionContext(new ExecutionGraph([
|
|
["a", "b", "c"],
|
|
]))
|
|
|
|
def bContext = context.ofNode("b")
|
|
|
|
bContext["foo"] = "bfoo"
|
|
|
|
assert bContext[".foo"] == "bfoo"
|
|
}
|
|
}
|