package xapi.dev.scanner.test;
import org.junit.Test;
import xapi.bytecode.ClassFile;
import xapi.dev.scanner.X_Scanner;
import xapi.log.X_Log;
import xapi.time.X_Time;
import xapi.time.api.Moment;
import static org.junit.Assert.fail;
public class ScannerTest {
private static class PrivateSubclass extends ScannerTest{}
private static class SecondSubclass extends PrivateSubclass{}
@Test(timeout = 15_000)
public void testFindTestClasses() {
Moment start = X_Time.now();
for (ClassFile cls : X_Scanner.findMethodsWithAnnotations(getClass().getClassLoader(), Test.class)) {
if (cls.getName().equals(ScannerTest.class.getName())) {
X_Log.trace("Found self class in "+X_Time.difference(start));
return;
}
};
fail("Could not find "+ScannerTest.class.getName()+" using X_Scanner.findMethodWithAnnotations()");
}
@Test(timeout = 15_000)
public void testFindDirectSubclasses() {
Moment start = X_Time.now();
for (ClassFile cls : X_Scanner.findDirectSubclasses(getClass().getClassLoader(), ScannerTest.class)) {
if (cls.hasSuperClass(getClass().getName())) {
X_Log.info("Found private subclass in "+X_Time.difference(start), cls);
return;
}
};
fail("Could not find "+PrivateSubclass.class.getName()+" using X_Scanner.findDirectSubclasses()");
}
@Test(timeout = 15_000)
public void testFindImplementationsOf() {
Moment start = X_Time.now();
for (ClassFile cls : X_Scanner.findImplementationsOf(getClass().getClassLoader(), ScannerTest.class)) {
if (cls.hasSuperClass(PrivateSubclass.class.getName())) {
X_Log.info("Found class ancestor in "+X_Time.difference(start), cls);
return;
}
};
fail("Could not find "+SecondSubclass.class.getName()+" using X_Scanner.findImplementationsOf()");
}
@Test(timeout = 15_000)
public void testFindInPackage() {
Moment start = X_Time.now();
for (ClassFile cls : X_Scanner.findClassesInPackage(getClass().getClassLoader(),
ScannerTest.class.getPackage().getName())) {
X_Log.info(getClass(), cls);
if (cls.getName().equals(ScannerTest.class.getName())) {
X_Log.trace("Found self class in "+X_Time.difference(start));
return;
}
};
fail("Could not find "+ScannerTest.class+" using X_Scanner.findClassesInPackages()");
}
}