protected @Override void setUp() throws Exception {
    MockLookup.setLayersAndInstances(TestUtil.testProjectFactory());
    ProjectManager.getDefault().reset();
    FileOwnerQuery.reset();
    scratch = TestUtil.makeScratchDir(this);
    projdir = scratch.createFolder("my-project");
    projdir.createFolder("testproject");
    randomfile = scratch.createData("randomfile");
    projfile = projdir.createData("projfile");
    FileObject projsubdir = projdir.createFolder("projsubdir");
    projfile2 = projsubdir.createData("projfile2");
    subprojdir = projdir.createFolder("subproject");
    subprojdir.createFolder("testproject");
    subprojfile = subprojdir.createData("subprojfile");
    scratch.createFolder("external1").createFolder("subdir").createData("file");
    scratch.createFolder("external2").createFolder("subdir").createData("file");
    scratch.createFolder("external3").createFolder("subproject").createFolder("testproject");
    p = ProjectManager.getDefault().findProject(projdir);
    assertNotNull("found a project successfully", p);

    // make jar:file:/.../projdir/foo.jar!/zipfile/zippedfile
    FileObject foojar = TestFileUtils.writeZipFile(projdir, "foo.jar", "zipdir/zippedfile:");
    FileObject foojarRoot = FileUtil.getArchiveRoot(foojar);
    assertNotNull("have an archive in " + foojar, foojarRoot);
    zippedfile = foojarRoot.getFileObject("zipdir/zippedfile");
    assertNotNull("zippedfile found in it", zippedfile);

    hashedFile = TestFileUtils.writeZipFile(projdir, ".#webapp.jar.1.45", "zipdir/zippedfile:");
    foojarRoot = FileUtil.getArchiveRoot(hashedFile);
    assertNotNull("have an archive in " + hashedFile, foojarRoot);
    hashedFile = foojarRoot.getFileObject("zipdir/zippedfile");
  }
 public void testGeneratedSources() throws Exception { // #187595
   TestFileUtils.writeFile(
       d,
       "pom.xml",
       "<project xmlns='http://maven.apache.org/POM/4.0.0'>"
           + "<modelVersion>4.0.0</modelVersion>"
           + "<groupId>grp</groupId>"
           + "<artifactId>art</artifactId>"
           + "<packaging>jar</packaging>"
           + "<version>0</version>"
           + "</project>");
   FileObject src = FileUtil.createFolder(d, "src/main/java");
   FileObject gsrc = FileUtil.createFolder(d, "target/generated-sources/xjc");
   gsrc.createData("Whatever.class");
   FileObject tsrc = FileUtil.createFolder(d, "src/test/java");
   FileObject gtsrc = FileUtil.createFolder(d, "target/generated-test-sources/jaxb");
   gtsrc.createData("Whatever.class");
   assertEquals(
       Arrays.asList(src, gsrc),
       Arrays.asList(
           SourceForBinaryQuery.findSourceRoots(new URL(d.toURL(), "target/classes/"))
               .getRoots()));
   assertEquals(
       Arrays.asList(tsrc, gtsrc),
       Arrays.asList(
           SourceForBinaryQuery.findSourceRoots(new URL(d.toURL(), "target/test-classes/"))
               .getRoots()));
 }
  public void testForeignClassBundler() throws Exception { // #155091 and deps
    TestFileUtils.writeFile(
        d,
        "a/pom.xml",
        "<project xmlns='http://maven.apache.org/POM/4.0.0'>"
            + "<modelVersion>4.0.0</modelVersion>"
            + "<groupId>grp</groupId>"
            + "<artifactId>art</artifactId>"
            + "<packaging>jar</packaging>"
            + "<version>0</version>"
            + "</project>");
    FileObject src = FileUtil.createFolder(d, "a/src/main/java");

    File repo = EmbedderFactory.getProjectEmbedder().getLocalRepositoryFile();
    File art =
        new File(
            repo,
            "grp" + File.separator + "art" + File.separator + "0" + File.separator + "art-0.jar");
    URL root = FileUtil.getArchiveRoot(Utilities.toURI(art).toURL());
    Project p = ProjectManager.getDefault().findProject(d.getFileObject("a"));
    FileOwnerQuery.markExternalOwner(
        Utilities.toURI(art), p, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT);
    MavenFileOwnerQueryImpl.getInstance()
        .registerCoordinates("grp", "art", "0", d.getFileObject("a").toURL());

    SourceForBinaryQuery.Result2 r = SourceForBinaryQuery.findSourceRoots2(root);
    assertEquals(Collections.singletonList(src), Arrays.asList(r.getRoots()));
    assertTrue(r.preferSources());
    TestFileUtils.writeFile(
        d,
        "b/pom.xml",
        "<project xmlns='http://maven.apache.org/POM/4.0.0'>"
            + "<modelVersion>4.0.0</modelVersion>"
            + "<groupId>grp</groupId>"
            + "<artifactId>art</artifactId>"
            + "<packaging>war</packaging>"
            + "<version>0</version>"
            + "</project>");
    src = FileUtil.createFolder(d, "b/src/main/java");

    art =
        new File(
            repo,
            "grp" + File.separator + "art" + File.separator + "0" + File.separator + "art-0.jar");
    FileOwnerQuery.markExternalOwner(
        Utilities.toURI(art),
        ProjectManager.getDefault().findProject(d.getFileObject("b")),
        FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT);
    root = FileUtil.getArchiveRoot(Utilities.toURI(art).toURL());
    p = ProjectManager.getDefault().findProject(d.getFileObject("b"));
    FileOwnerQuery.markExternalOwner(
        Utilities.toURI(art), p, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT);
    MavenFileOwnerQueryImpl.getInstance()
        .registerCoordinates("grp", "art", "0", d.getFileObject("b").toURL());

    r = SourceForBinaryQuery.findSourceRoots2(root);
    assertEquals(Collections.singletonList(src), Arrays.asList(r.getRoots()));
    assertFalse(r.preferSources());

    // 215242 assert that output dir does prefer sources
    r = SourceForBinaryQuery.findSourceRoots2(new URL(d.toURL(), "b/target/classes/"));
    assertEquals(Collections.singletonList(src), Arrays.asList(r.getRoots()));
    assertTrue(r.preferSources());
  }