blob: a0aa7f72850466f1a0d394ab0d4306aec7feff1e [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.Registry
import org.apache.tapestry5.ioc.internal.services.ClasspathScannerImpl
import org.apache.tapestry5.ioc.internal.services.ClasspathURLConverterImpl
import org.apache.tapestry5.ioc.services.ClasspathMatcher
import org.apache.tapestry5.ioc.util.IdAllocator
import spock.lang.Specification
class ClasspathScannerImplSpec extends Specification {
// TAP5-2096
def "can locate classes inside a subpackage, inside an extracted JAR file"() {
setup:
ClasspathMatcher matchAll = { packagePage, fileName -> true } as ClasspathMatcher
def scannerJob = new ClasspathScannerImpl.Job(matchAll, Thread.currentThread().getContextClassLoader(), new ClasspathURLConverterImpl())
when:
URL url = Registry.class.getResource('Registry.class');
scannerJob.scanDir("org/apache/tapestry5/ioc/", new File(url.getPath()).parentFile)
while (!scannerJob.queue.isEmpty()) {
def queued = scannerJob.queue.pop();
queued.run();
}
def classes = scannerJob.matches
then:
// classes will contain many names, this choice is arbitrary. The point is, it is located on the file system
// (not in a JAR) and it is in a package somewhere beneath the scanDir.
classes.contains(IdAllocator.name.replaceAll(/\./, "/") + '.class')
}
}