/** Test adding and removing a symlinked package in the "packages" directory */
  public void test_traverse_package_added_removed() throws Exception {

    if (!symlinkPackage(projDir)) {
      return;
    }

    // add package
    MockDelta delta = new MockDelta(projectContainer);
    delta.add(PACKAGES_DIRECTORY_NAME).add("pkg1", ADDED);

    DeltaProcessor processor = new DeltaProcessor(project);
    ProjectUpdater updater = new ProjectUpdater();
    processor.addDeltaListener(updater);
    processor.traverse(delta);
    updater.applyChanges();

    // Canonical locations
    File pkg1SomeDir = new File(pkg1Dir, "some_folder");
    File[] added =
        new File[] {
          new File(pkg1Dir, "build.dart"), new File(pkg1Dir, "bar.dart"),
          new File(pkg1SomeDir, "build.dart"), new File(pkg1SomeDir, "bar.dart")
        };

    project.assertChanged(projectContainer, added, null, null, null);
    project.assertNoCalls();

    // remove package
    FileUtilities2.deleteSymLink(new File(packagesDir, "pkg1"));
    delta = new MockDelta(projectContainer);
    delta.add(PACKAGES_DIRECTORY_NAME).add("pkg1", REMOVED);

    processor = new DeltaProcessor(project);
    updater = new ProjectUpdater();
    processor.addDeltaListener(updater);
    processor.traverse(delta);
    updater.applyChanges();

    project.assertPackagesRemoved(projectContainer);
    project.assertNoCalls();
  }
  public void test_getInvertedSourceContainer() throws Exception {
    if (!setupSymlinks()) {
      return;
    }
    File file1 = new File(pkg1CanonicalDir, "file1.dart");
    File file2 = new File(pkg2CanonicalDir, "file2.dart");
    FileBasedSource source1 = new FileBasedSource(file1);
    FileBasedSource source2 = new FileBasedSource(file2);

    PubFolderImpl pubFolder = newTarget();
    InvertedSourceContainer container1 = pubFolder.getInvertedSourceContainer();

    assertFalse(container1.contains(source1));
    assertFalse(container1.contains(source2));

    FileUtilities2.deleteSymLink(new File(packagesDir, "pkg2"));
    InvertedSourceContainer container2 = pubFolder.getInvertedSourceContainer();

    assertFalse(container2.contains(source1));
    assertTrue(container2.contains(source2));
  }