blob: 91a05bed6d8823cc2cc3042ff4b2c63015671d16 [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.*
class ServiceProxySpec extends AbstractRegistrySpecification {
def "shutdown deactivaties proxies"() {
buildRegistry FredModule, BarneyModule
def fred = getService "Fred", Runnable
fred.run()
shutdown()
when:
fred.run()
then:
RuntimeException ex = thrown()
ex.message.contains "Proxy for service Fred is no longer active because the IOC Registry has been shut down."
fred.toString() == "<Proxy for Fred(java.lang.Runnable)>"
cleanup:
registry = null
}
def "show that services defined without a implementation are instantiated immediately"() {
buildRegistry NonProxiedServiceModule
when:
def holder = getService StringHolder
then:
holder instanceof StringHolderImpl // and not some proxy
}
def "service builder methods with a class (not interface) return type are not proxied, but are cached"() {
buildRegistry ConcreteServiceBuilderModule
when:
def h1 = getService StringHolder
then: "not proxied"
h1 instanceof StringHolderImpl
when:
def h2 = getService StringHolder
then: "cached"
h2.is h1
}
def "verify that a proxy for an autobuilt object lazily instantiates the implementation"() {
buildRegistry()
expect:
IntegrationTestFixture.countingGreeterInstantiationCount == 0
when: "obtaining the proxy"
def g = proxy Greeter, CountingGreeterImpl
then: "the implementation is not yet instantiated"
IntegrationTestFixture.countingGreeterInstantiationCount == 0
when: "invoking toString() on the proxy"
assert g.toString() == "<Autoreload proxy org.apache.tapestry5.ioc.CountingGreeterImpl(org.apache.tapestry5.ioc.Greeter)>"
then: "the implementation is not yet instantiated"
IntegrationTestFixture.countingGreeterInstantiationCount == 0
when: "invoking other methods on the proxy"
assert g.greeting == "Hello"
then: "the implementation is now instantiated"
IntegrationTestFixture.countingGreeterInstantiationCount == 1
}
}