blob: 5e76926ee2bddbd881423b8cde56f240928933fe [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.internal.services.UpdateListenerHubImpl
import org.apache.tapestry5.services.UpdateListener
import org.apache.tapestry5.services.UpdateListenerHub
import spock.lang.Specification
import java.lang.ref.WeakReference
class UpdateListenerHubImplSpec extends Specification {
UpdateListenerHub hub = new UpdateListenerHubImpl()
def "add a listener and invoke it"() {
UpdateListener listener = Mock()
hub.addUpdateListener(listener)
when:
hub.fireCheckForUpdates()
then:
1 * listener.checkForUpdates()
}
def "weak references are not invoked once cleared"() {
// Can't do this with a mock, because we hold a live reference to a mock!
def listener = {
throw new RuntimeException("checkForUpdates() should not be invoked on a dead reference.")
} as UpdateListener
WeakReference ref = new WeakReference(listener)
hub.addUpdateListener(listener)
// Release the only live reference and wait for GC to reclaim it
listener = null
while (ref.get()) { System.gc() }
when:
hub.fireCheckForUpdates()
then:
noExceptionThrown()
}
}