blob: 70791b5c35e89ab628a1f9e025c7f5e1f928e790 [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.commons.internal.util.InheritanceSearch
import org.apache.tapestry5.ioc.test.internal.util.Drivable
import org.apache.tapestry5.ioc.test.internal.util.DrivableImpl
import org.apache.tapestry5.ioc.test.internal.util.Playable
import org.apache.tapestry5.ioc.test.internal.util.PlayableImpl
import org.apache.tapestry5.ioc.test.internal.util.ToyTruck
import org.apache.tapestry5.ioc.test.internal.util.ToyTruckImpl
import org.apache.tapestry5.plastic.PlasticUtils
import spock.lang.IgnoreIf
import spock.lang.Specification
import spock.lang.Unroll
class InheritanceSearchSpec extends Specification {
def "remove() is always a failure"() {
when:
new InheritanceSearch(Object).remove()
then:
thrown(UnsupportedOperationException)
}
def "exception thrown when invoking next() after Object has been reached"() {
def s = new InheritanceSearch(Object)
expect:
s.next() == Object
!s.hasNext()
when:
s.next()
then:
thrown(IllegalStateException)
}
@Unroll
def "inheritance of #className is #expectedNames"() {
def search = new InheritanceSearch(clazz)
def result = []
while (search.hasNext()) {
result << search.next()
}
expect:
result == expected
where:
clazz | expected
Object | [Object]
Comparable | [Comparable, Object]
ToyTruck | [ToyTruck, Playable, Drivable, Object]
ToyTruckImpl | [ToyTruckImpl, PlayableImpl, DrivableImpl, Drivable, ToyTruck, Playable, Object]
void | [void, Object]
long[] | [long[], Cloneable, Serializable, Object]
int[][] | [int[][], Cloneable, Serializable, Object]
String[] | [String[], Object[], Cloneable, Serializable, Object]
String[][] | [String[][], Object[], Cloneable, Serializable, Object]
className = PlasticUtils.toTypeName(clazz)
expectedNames = expected.collect { PlasticUtils.toTypeName(it) }.join(", ")
}
@IgnoreIf(value = { jvm.java12Compatible }, reason = "The class hierarchy for the classes listed in the 'where' section changed in Java 12. A complementary spec was added to 'tapestry-latest-java-tests' to account for the added classes.")
@Unroll
def "inheritance of #className is #expectedNames (Java < 12)"() {
def search = new InheritanceSearch(clazz)
def result = []
while (search.hasNext()) {
result << search.next()
}
expect:
result == expected
where:
clazz | expected
String | [String, Serializable, Comparable, CharSequence, Object]
long | [long, Long, Number, Comparable, Serializable, Object]
className = PlasticUtils.toTypeName(clazz)
expectedNames = expected.collect { PlasticUtils.toTypeName(it) }.join(", ")
}
}