package org.nutz.resource; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.servlet.Servlet; import junit.extensions.ActiveTestSuite; import junit.extensions.RepeatedTest; import junit.extensions.TestSetup; import org.junit.Assert; import org.junit.Test; import org.nutz.lang.Files; import org.nutz.lang.Strings; public class ScansTest { @Test public void test_loadResource() throws IOException { String RNAME = "junit/runner/Version.class"; List<NutResource> nrs = Scans.me().loadResource(".*.class", RNAME); assertEquals(1, nrs.size()); NutResource nr = nrs.get(0); assertTrue(nr.getName().indexOf(RNAME) >= 0); InputStream ins = nr.getInputStream(); int len = 0; while (-1 != ins.read()) { len++; } ins.close(); assertTrue(len > 600); } @Test public void test_in_normal_file() throws IOException { String testPath = "~/nutz/unit/rs/test"; File testDir = Files.createDirIfNoExists(testPath); Files.clearDir(testDir); List<NutResource> list = Scans.me().scan(testPath, ".*"); assertEquals(0, list.size()); Files.createDirIfNoExists(testPath + "/a/b/c"); list = Scans.me().scan(testPath, ".*"); assertEquals(0, list.size()); Files.createFileIfNoExists(testPath + "/a/b/c/l.txt"); Files.createFileIfNoExists(testPath + "/a/b/c/m.doc"); Files.createFileIfNoExists(testPath + "/a/b/c/n.jpg"); Files.createFileIfNoExists(testPath + "/a/b/c/o.jpg"); list = Scans.me().scan(testPath, ".*"); assertEquals(4, list.size()); list = Scans.me().scan(testPath, null); assertEquals(4, list.size()); list = Scans.me().scan(testPath, ".+[.]jpg"); assertEquals(2, list.size()); list = Scans.me().scan(testPath, ".*[.]txt"); assertEquals(1, list.size()); Files.deleteDir(testDir); } @Test public void test_in_classpath() { String testPath = Scans.class.getName().replace('.', '/') + ".class"; String testFilter = "^" + Scans.class.getSimpleName() + ".class$"; List<NutResource> list = Scans.me().scan(testPath, testFilter); assertEquals(1, list.size()); } // @Ignore @Test public void test_in_jar() { String testPath = Assert.class.getPackage().getName().replace('.', '/'); String testFilter = "^.*(Assert|Test)\\.class$"; List<NutResource> list = Scans.me().scan(testPath, testFilter); //Collections.sort(list); assertEquals(2, list.size()); assertTrue(list.get(0).getName().endsWith("Assert.class") || list.get(0).getName().endsWith("Assert.class")); assertTrue(list.get(1).getName().endsWith("Test.class") || list.get(1).getName().endsWith("Test.class")); } // @Ignore @Test public void test_classes_in_jar() { List<Class<?>> list = Scans.me() .scanPackage( ActiveTestSuite.class, ".*(ActiveTestSuite|RepeatedTest|TestSetup)\\.class$"); assertEquals(3, list.size()); Collections.sort(list, new Comparator<Class<?>>() { public int compare(Class<?> o1, Class<?> o2) { return o1.getSimpleName().compareTo(o2.getSimpleName()); } }); assertTrue(ActiveTestSuite.class == list.get(0)); assertTrue(RepeatedTest.class == list.get(1)); assertTrue(TestSetup.class == list.get(2)); } @Test public void test_classes_in_package_path() { List<Class<?>> list = Scans.me().scanPackage("org.nutz", "Strings.class"); assertEquals(1, list.size()); assertTrue(Strings.class == list.get(0)); } @Test public void test_scan_with_unexists_file() { List<NutResource> list = Scans.me().scan("org/nutz/lang/notExist.class", null); assertEquals(0, list.size()); } @Test public void test_class_in_jar() { String testPath = Test.class.getName().replace('.', '/') + ".class"; String testFilter = "^Test.class$"; List<NutResource> list = Scans.me().scan(testPath, testFilter); assertEquals(1, list.size()); } @Test public void test_path_in_jar() { String testPath = Test.class.getPackage().getName().replace('.', '/'); List<NutResource> list = Scans.me().scan(testPath, null); assertTrue(list.size() > 10); } @Test public void test_scan_root() { Scans.me().scan("", ".+\\.xml"); } @Test public void test_resource_jar() throws MalformedURLException { Scans.me().registerLocation(Servlet.class); Scans.me().registerLocation(getClass().getClassLoader().getResource("javax/servlet/Servlet.class")); } }