blob: d79c6ce03dfbcea8378a20849fd1ab51a24c05a0 [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.PerThreadModule
import org.apache.tapestry5.ioc.ScopeMismatchModule
import org.apache.tapestry5.ioc.StringHolder
class PerThreadScopeSpec extends AbstractRegistrySpecification {
def "ensure that different threads see different implementations"() {
def threadExecuted = false
buildRegistry PerThreadModule
def holder = getService StringHolder
when:
holder.value = "fred"
then:
holder.value == "fred"
when:
Thread t = new Thread({
assert holder.value == null
holder.value = "barney"
assert holder.value == "barney"
threadExecuted = true
cleanupThread()
})
t.start()
t.join()
then:
threadExecuted
holder.value == "fred"
}
def "services with out a service interface must use the default scope"() {
buildRegistry ScopeMismatchModule
when:
getService StringBuilder
then:
Exception e = thrown()
e.message.contains "Error building service proxy for service 'ScopeRequiresAProxyAndNoInterfaceIsProvided'"
e.message.contains "Service scope 'perthread' requires a proxy"
}
def "ensure that perthread services are discarded by cleanupThread()"() {
buildRegistry PerThreadModule
when:
def holder = getService StringHolder
then:
holder.value == null
when:
holder.value = "fred"
then:
holder.value == "fred"
when:
cleanupThread()
then:
holder.value == null
}
}