blob: bfd1c59205c6a7752ac45942b6cd4607e5c6682e [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.ObjectCreator
import org.apache.tapestry5.ioc.internal.ServiceActivityTracker
import org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator
import org.apache.tapestry5.ioc.services.Status
import spock.lang.Specification
class JustInTimeObjectCreatorSpec extends Specification {
static final String SERVICE_ID = "FooBar";
def "can not create object after shutdown"() {
ObjectCreator creator = Mock()
def jit = new JustInTimeObjectCreator(null, creator, SERVICE_ID)
// Simulate the invocation from the Registry when it shuts down.
jit.run()
when:
jit.createObject()
then:
RuntimeException e = thrown()
e.message.contains "Proxy for service FooBar is no longer active because the IOC Registry has been shut down."
}
def "lazily instantiates the object via its delegate creator"() {
ObjectCreator creator = Mock()
Object service = new Object()
ServiceActivityTracker tracker = Mock()
def jit = new JustInTimeObjectCreator(tracker, creator, SERVICE_ID)
when:
jit.eagerLoadService()
then:
1 * creator.createObject() >> service
1 * tracker.setStatus(SERVICE_ID, Status.REAL)
0 * _
jit.createObject().is service
}
}