blob: 7638df03c451a4aec34c53ff45c485bf0f4cdd5e [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.services.ChainBuilder
interface ChainCommand {
void run();
int workInt(int input);
boolean workBoolean(boolean input);
double workDouble(double input);
String workString(String input);
}
class ChainBuilderImplSpec extends AbstractSharedRegistrySpecification {
ChainCommand c1 = Mock()
ChainCommand c2 = Mock()
ChainCommand chain = getService(ChainBuilder).build(ChainCommand, [c1, c2])
def "chaining of simple void method with no parameters"() {
when:
chain.run()
then:
1 * c1.run()
then:
1 * c2.run()
0 * _
}
def "chaining of method with int parameter and return type"() {
when:
assert chain.workInt(7) == 99
then:
1 * c1.workInt(7) >> 0
then:
1 * c2.workInt(7) >> 99
0 * _
}
def "verify that an int method that returns a non-zero value short-circuits the chain"() {
when:
assert chain.workInt(7) == 88
then:
1 * c1.workInt(7) >> 88
0 * _
}
def "verify boolean parameters, return type, and short circuiting"() {
when:
assert chain.workBoolean(true) == true
then:
1 * c1.workBoolean(true) >> false
then:
1 * c2.workBoolean(true) >> true
0 * _
}
def "verify string method parameter, return type, and short circuiting"() {
when:
assert chain.workString("fred") == "flintstone"
then:
1 * c1.workString("fred") >> null
then:
1 * c2.workString("fred") >> "flintstone"
0 * _
}
def "verify double method parameter, return type, and short circuiting"() {
when:
assert chain.workDouble(1.2d) == 3.14d
then:
1 * c1.workDouble(1.2d) >> 0d
then:
1 * c2.workDouble(1.2d) >> 3.14d
0 * _
}
def "chain instance has reasonable toString()"() {
expect:
chain.toString() == "<Command chain of ioc.specs.ChainCommand>"
}
}