public void testEarScan() throws Exception {
    File ear = File.createTempFile("helloworld", ".ear");

    JavaArchive jarArchive =
        ShrinkWrap.create(JavaArchive.class, "my-lib-1.0.jar")
            .addClass(FunAnnotatedClientClass2.class);
    WebArchive warArchive =
        ShrinkWrap.create(WebArchive.class, "helloworld.war")
            .addClasses(FunAnnotatedClientClass.class)
            .addAsLibrary(jarArchive);
    EnterpriseArchive earArchive =
        ShrinkWrap.create(EnterpriseArchive.class).addAsModule(warArchive);
    earArchive.as(ZipExporter.class).exportTo(ear, true);

    URL earUrl = new URL(ear.toURI() + "/helloworld.war!/WEB-INF/classes");
    URL libUrl = new URL(ear.toURI() + "/helloworld.war!/WEB-INF/lib/my-lib-1.0.jar");

    List<URL> urlList = new ArrayList<URL>();
    urlList.add(earUrl);
    urlList.add(libUrl);

    MetaDataScanner scanner = createScanner(urlList);

    // nested in ear/war/WEB-INF/classes
    assertTrue(
        "Didn't find @Local annotated class FunAnnotatedClientClass in ear-war nesting",
        scanner
            .getStore()
            .getTypesAnnotatedWith(Local.class.getName())
            .contains("org.jboss.errai.bus.client.tests.support.FunAnnotatedClientClass"));

    // nested in ear/war/WEB-INF/lib
    assertTrue(
        "Didn't find @Service annotated class FunAnnotatedClientClass2 in ear-war-jar nesting",
        scanner
            .getStore()
            .getTypesAnnotatedWith(Service.class.getName())
            .contains("org.jboss.errai.bus.client.tests.support.FunAnnotatedClientClass2"));
  }
  public void testWarScan() throws Exception {
    final File war = File.createTempFile("test", ".war");
    WebArchive archive =
        ShrinkWrap.create(WebArchive.class).addClasses(FunAnnotatedClientClass.class);
    archive.as(ZipExporter.class).exportTo(war, true);

    assertTrue(war.exists());
    URL warUrl = war.toURI().toURL();

    List<URL> urlList = new ArrayList<URL>();
    urlList.add(warUrl);
    MetaDataScanner scanner = createScanner(urlList);

    String annotationToSearchFor = Local.class.getName();
    Set<String> annotated = scanner.getStore().getTypesAnnotatedWith(annotationToSearchFor);
    assertFalse("Cannot find " + annotationToSearchFor + " in " + war, annotated.isEmpty());
    war.delete();
  }
  public void testExplodedWarScan() throws Exception {
    final File warParentDir = Files.createTempDir();
    assertTrue(warParentDir.isDirectory());

    WebArchive archive =
        ShrinkWrap.create(WebArchive.class, "explode-me").addClasses(FunAnnotatedClientClass.class);
    archive.as(ExplodedExporter.class).exportExploded(warParentDir);

    File warBaseDir = new File(warParentDir, "explode-me");
    assertTrue(
        "Missing exploded war at " + warBaseDir, new File(warBaseDir, "WEB-INF").isDirectory());

    URL warUrl = new URL(warBaseDir.toURI().toURL() + "/WEB-INF/classes");

    List<URL> urlList = new ArrayList<URL>();
    urlList.add(warUrl);
    MetaDataScanner scanner = createScanner(urlList);

    String annotationToSearchFor = Local.class.getName();
    Set<String> annotated = scanner.getStore().getTypesAnnotatedWith(annotationToSearchFor);
    assertFalse("Cannot find " + annotationToSearchFor + " in " + warBaseDir, annotated.isEmpty());
    FileUtils.deleteDirectory(warParentDir);
    warParentDir.delete();
  }