| package ioc.specs |
| |
| import org.apache.tapestry5.ioc.Configuration |
| import org.apache.tapestry5.ioc.ObjectLocator |
| import org.apache.tapestry5.ioc.internal.TypeCoercerProxy |
| import org.apache.tapestry5.ioc.internal.ValidatingConfigurationWrapper |
| import spock.lang.Specification |
| |
| class ValidatingConfigurationWrapperSpec extends Specification { |
| |
| TypeCoercerProxy tc = Mock() |
| ObjectLocator locator = Mock() |
| |
| def collection = [] |
| |
| def "valid contribution"() { |
| Runnable value = Mock() |
| |
| Configuration config = new ValidatingConfigurationWrapper(Runnable, null, tc, collection, "Baz") |
| |
| when: |
| |
| config.add(value) |
| |
| then: |
| |
| tc.coerce(value, Runnable) >> value |
| |
| collection == [value] |
| } |
| |
| def "contributed value may be coerced"() { |
| Runnable value = Mock() |
| Runnable coerced = Mock() |
| |
| Configuration config = new ValidatingConfigurationWrapper(Runnable, null, tc, collection, "Baz") |
| |
| when: |
| |
| config.add(value) |
| |
| then: |
| |
| tc.coerce(value, Runnable) >> coerced |
| |
| collection == [coerced] |
| } |
| |
| def "an instance of a class may be contributed"() { |
| HashMap contributed = new HashMap() |
| Map coerced = Mock() |
| |
| Configuration config = new ValidatingConfigurationWrapper(Map, locator, tc, collection, "Baz") |
| |
| when: |
| |
| config.addInstance(HashMap) |
| |
| then: |
| |
| locator.autobuild(HashMap) >> contributed |
| tc.coerce(contributed, Map) >> coerced |
| |
| collection == [coerced] |
| } |
| |
| def "null may not be contributed"() { |
| Configuration config = new ValidatingConfigurationWrapper(Runnable, null, tc, collection, "Baz") |
| |
| when: |
| |
| config.add(null) |
| |
| then: |
| |
| NullPointerException e = thrown() |
| |
| e.message == "Service contribution (to service 'Baz') was null." |
| } |
| } |