blob: f8fbc843828ca75a31d3af2b538f439b1e2559d9 [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.AnnotationProvider
import org.apache.tapestry5.ioc.ObjectLocator
import org.apache.tapestry5.ioc.ObjectProvider
import org.apache.tapestry5.ioc.OperationTracker
import org.apache.tapestry5.ioc.internal.QuietOperationTracker
import org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl
import org.apache.tapestry5.ioc.services.MasterObjectProvider
import spock.lang.Shared
import spock.lang.Specification
class MasterObjectProviderImplSpec extends Specification {
@Shared
OperationTracker tracker = new QuietOperationTracker()
def "found match via first provider"() {
ObjectProvider prov1 = Mock()
ObjectProvider prov2 = Mock()
AnnotationProvider ap = Mock()
ObjectLocator locator = Mock()
Runnable expected = Mock()
MasterObjectProvider mop = new MasterObjectProviderImpl([prov1, prov2], tracker)
when:
assert mop.provide(Runnable, ap, locator, true).is(expected)
then:
1 * prov1.provide(Runnable, ap, locator) >> expected
0 * _
}
def "found match after first provider"() {
ObjectProvider prov1 = Mock()
ObjectProvider prov2 = Mock()
AnnotationProvider ap = Mock()
ObjectLocator locator = Mock()
Runnable expected = Mock()
MasterObjectProvider mop = new MasterObjectProviderImpl([prov1, prov2], tracker)
when:
assert mop.provide(Runnable, ap, locator, true).is(expected)
then:
1 * prov1.provide(Runnable, ap, locator) >> null
then:
1 * prov2.provide(Runnable, ap, locator) >> expected
0 * _
}
def "no match found on optional search returns null"() {
ObjectProvider prov1 = Mock()
ObjectProvider prov2 = Mock()
AnnotationProvider ap = Mock()
ObjectLocator locator = Mock()
MasterObjectProvider mop = new MasterObjectProviderImpl([prov1, prov2], tracker)
when:
assert mop.provide(Runnable, ap, locator, false) == null
then:
1 * prov1.provide(Runnable, ap, locator) >> null
then:
1 * prov2.provide(Runnable, ap, locator) >> null
0 * _
}
def "no match for a required search delegates to the ObjectLocator.getService(Class)"() {
ObjectProvider prov1 = Mock()
ObjectProvider prov2 = Mock()
AnnotationProvider ap = Mock()
ObjectLocator locator = Mock()
Runnable expected = Mock()
MasterObjectProvider mop = new MasterObjectProviderImpl([prov1, prov2], tracker)
when:
assert mop.provide(Runnable, ap, locator, true).is(expected)
then:
1 * prov1.provide(Runnable, ap, locator) >> null
then:
1 * prov2.provide(Runnable, ap, locator) >> null
then:
1 * locator.getService(Runnable) >> expected
0 * _
}
}