blob: 8c23fc8f47a6dea6442972539a4649bf622380d4 [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.RegistryBuilder
import org.apache.tapestry5.ioc.internal.services.RegistryStartup
import org.apache.tapestry5.ioc.internal.services.StartupModule
import org.slf4j.Logger
import spock.lang.Specification
class RegistryStartupSpec extends Specification {
def "ensure that RegistryStartup service runs each of its contributed callbacks"() {
Runnable r1 = Mock()
Runnable r2 = Mock()
Logger logger = Mock()
def configuration = [r1, r2]
Runnable startup = new RegistryStartup(logger, configuration)
when:
startup.run()
then:
1 * r1.run()
then:
1 * r2.run()
then:
configuration.empty
}
def "callback failure is logged and execution continues"() {
Runnable r1 = Mock()
Runnable r2 = Mock()
Logger logger = Mock()
RuntimeException ex = new RuntimeException("Crunch!")
Runnable startup = new RegistryStartup(logger, [r1, r2])
when:
startup.run()
then:
1 * r1.run() >> { throw ex }
1 * logger.error("An exception occurred during startup: Crunch!", ex)
1 * r2.run()
}
def "run may only be invoked once"() {
Logger logger = Mock()
Runnable startup = new RegistryStartup(logger, [])
startup.run()
when:
startup.run()
then:
IllegalStateException e = thrown()
e.message.contains "Method org.apache.tapestry5.ioc.internal.services.RegistryStartup.run"
e.message.contains "may no longer be invoked."
}
def "integration test"() {
when:
def registry = new RegistryBuilder().add(StartupModule).build()
then:
!StartupModule.startupInvoked
when:
registry.performRegistryStartup()
then:
StartupModule.startupInvoked
cleanup:
registry.shutdown()
}
}