| 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>" |
| } |
| |
| |
| } |