package org.esmerilprogramming.overtown.scanner;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServlet;
import org.esmerilprogramming.overtown.scanner.exception.PackageNotFoundException;
import org.esmerilprogramming.overtown.scanner.testpackage.First;
import org.esmerilprogramming.overtown.scanner.testpackage.Second;
import org.esmerilprogramming.overtown.scanner.testpackage.Third;
import org.esmerilprogramming.overtown.scanner.testpackage.subpack.AnotherSeverEndpoint;
import org.esmerilprogramming.overtown.scanner.testpackage.subpack.Fifth;
import org.esmerilprogramming.overtown.scanner.testpackage.subpack.Fourth;
import org.esmerilprogramming.overtown.server.ConfigurationBuilder;
import org.esmerilprogramming.overtown.server.ConfigurationHolder;
import org.esmerilprogramming.overtown.server.handlers.ControllerMapping;
import org.junit.Before;
import org.junit.Test;
public class PackageScannerTest {
private PackageScanner scanner;
@Before
public void setUp() {
try {
ConfigurationHolder.getInstance().prepareConfiguration(new ConfigurationBuilder().build());
} catch (IOException e) {
e.printStackTrace();
}
scanner = new PackageScanner();
}
@Test
public void givenAPackagedShouldFindAllServerEndpointAnnotatedClassesInThisPackageAndSubPackages()
throws PackageNotFoundException, IOException {
ScannerResult pageClasses =
scanner.scan("org.esmerilprogramming.overtown.scanner.testpackage");
List<Class<?>> handlers = pageClasses.getServerEndpoints();
assertSame(2, handlers.size());
assertTrue("Should have found the Second.class", handlers.contains(Second.class));
assertTrue("Should have found the AnotherSeverEndpoint.class", handlers.contains(AnotherSeverEndpoint.class));
}
@Test
public void givenAPackagedShouldFindAllControllerAnnotatedClassesInThisPackageAndSubPackages()
throws PackageNotFoundException, IOException {
ScannerResult pageClasses =
scanner.scan("org.esmerilprogramming.overtown.scanner.testpackage");
List<ControllerMapping> handlers = pageClasses.getControllerMappings();
assertSame(2, handlers.size());
for(ControllerMapping mapping : handlers ){
boolean found = false;
if(mapping.getControllerClass().equals(First.class) )
found = true;
if(mapping.getControllerClass().equals(Fifth.class) )
found = true;
assertTrue("Should find at least one of the controllers" , found);
}
}
@Test
public void givenAPackagedShouldFindAllHttpServletClassesInThisPackageAndSubPackages()
throws PackageNotFoundException, IOException {
ScannerResult pageClasses =
scanner.scan("org.esmerilprogramming.overtown.scanner.testpackage");
List<Class<? extends HttpServlet>> servlets = pageClasses.getServlets();
assertSame(2, servlets.size());
assertTrue("Should have found the Third.class", servlets.contains(Third.class));
assertTrue("Should have found the Fourth.class", servlets.contains(Fourth.class));
}
}