Esempio n. 1
0
  /**
   * Assert adding and removing an import directive in an application does not cause the imported
   * nested library to be discarded and does not change the context of the imported nested library
   * because that library is in the application directory hierarchy.
   */
  public void test_changed_import_directive() throws Exception {
    final String directive = "import 'nested/nestedLib.dart';";
    final String oldContent = FileUtilities.getContents(bankLibFile);
    int index = oldContent.indexOf(directive);
    assertTrue(index > 0);
    final String newContent =
        oldContent.substring(0, index) + oldContent.substring(index + directive.length());

    server.scan(bankDir, null);
    server.start();
    listener.waitForIdle(1, FIVE_MINUTES_MS);
    assertPackageContexts(server, bankDir);
    assertCachedLibraries(server, null);
    assertCachedLibraries(server, bankDir, bankLibFile, nestedLibFile, nestedAppFile);
    ParseResult parse1 = savedContext.parse(bankLibFile, bankLibFile, FIVE_MINUTES_MS);
    assertNotNull(parse1.getDartUnit());
    listener.waitForIdle(2, FIVE_MINUTES_MS);
    ParseResult parse1a = savedContext.parse(nestedLibFile, nestedLibFile, FIVE_MINUTES_MS);
    assertNotNull(parse1a.getDartUnit());
    listener.waitForIdle(3, FIVE_MINUTES_MS);

    final long oldLastModified = bankLibFile.lastModified();
    FileUtilities.setContents(bankLibFile, newContent);
    // Ensure marked as modified... lastModified is only accurate to the second
    bankLibFile.setLastModified(oldLastModified + 1000);
    ParseResult parse2;
    ParseResult parse2a;
    try {
      server.changed(bankLibFile);
      listener.waitForIdle(4, FIVE_MINUTES_MS);

      assertPackageContexts(server, bankDir);
      assertCachedLibraries(server, null);
      assertCachedLibraries(server, bankDir, bankLibFile, nestedLibFile, nestedAppFile);
      parse2 = savedContext.parse(bankLibFile, bankLibFile, FIVE_MINUTES_MS);
      listener.waitForIdle(5, FIVE_MINUTES_MS);
      parse2a = savedContext.parse(nestedLibFile, nestedLibFile, FIVE_MINUTES_MS);
      listener.waitForIdle(6, FIVE_MINUTES_MS);

      assertNotNull(parse2.getDartUnit());
      assertNotSame(parse2.getDartUnit(), parse1.getDartUnit());
      assertNotNull(parse2a.getDartUnit());
      assertSame(parse2a.getDartUnit(), parse1a.getDartUnit());
    } finally {
      FileUtilities.setContents(bankLibFile, oldContent);
      bankLibFile.setLastModified(oldLastModified);
    }
    server.changed(bankLibFile);
    listener.waitForIdle(7, FIVE_MINUTES_MS);
    assertPackageContexts(server, bankDir);
    assertCachedLibraries(server, null);
    assertCachedLibraries(server, bankDir, bankLibFile, nestedLibFile, nestedAppFile);
    ParseResult parse3 = savedContext.parse(bankLibFile, bankLibFile, FIVE_MINUTES_MS);
    ParseResult parse3a = savedContext.parse(nestedLibFile, nestedLibFile, FIVE_MINUTES_MS);
    assertNotNull(parse3.getDartUnit());
    assertNotSame(parse3.getDartUnit(), parse1.getDartUnit());
    assertNotSame(parse3.getDartUnit(), parse2.getDartUnit());
    assertSame(parse3a.getDartUnit(), parse2a.getDartUnit());
  }
Esempio n. 2
0
  /** Assert cache discarded only if file has changed on disk */
  public void test_changed() {
    server.start();
    ParseResult parse1 = savedContext.parse(moneyLibFile, moneyLibFile, FIVE_MINUTES_MS);
    assertNotNull(parse1.getDartUnit());
    ParseResult parse2 = savedContext.parse(moneyLibFile, moneyLibFile, FIVE_MINUTES_MS);
    assertSame(parse1.getDartUnit(), parse2.getDartUnit());

    listener.reset();
    server.changed(moneyLibFile);
    ParseResult parse3 = savedContext.parse(moneyLibFile, moneyLibFile, FIVE_MINUTES_MS);
    assertSame(parse1.getDartUnit(), parse3.getDartUnit());
    listener.assertDiscarded();
    server.assertAnalyze(false);

    listener.reset();
    server.resetAnalyze();
    final long oldLastModified = moneyLibFile.lastModified();
    try {
      // Ensure marked as modified... lastModified is only accurate to the second
      moneyLibFile.setLastModified(System.currentTimeMillis() + 1000);
      server.changed(moneyLibFile);
      ParseResult parse4 = savedContext.parse(moneyLibFile, moneyLibFile, FIVE_MINUTES_MS);
      assertNotSame(parse1.getDartUnit(), parse4.getDartUnit());
      listener.assertDiscarded(moneyLibFile);
      server.assertAnalyze(false, moneyLibFile);
    } finally {
      moneyLibFile.setLastModified(oldLastModified);
    }
  }
Esempio n. 3
0
  /** Assert removing #source directive causes sourced file to become analyzed as library */
  public void test_changed_library() throws Exception {
    final String directive = "part \"simple_money.dart\";";
    final String oldContent = FileUtilities.getContents(moneyLibFile);
    int index = oldContent.indexOf(directive);
    assertTrue(index > 0);
    final String newContent =
        oldContent.substring(0, index) + oldContent.substring(index + directive.length());

    server.scan(moneyLibFile, null);
    server.start();
    listener.waitForIdle(1, FIVE_MINUTES_MS);
    assertTrackedLibraryFiles(server, moneyLibFile);
    Object lib1 = getCachedLibrary(savedContext, moneyLibFile);
    assertNotNull(lib1);
    assertNull(getCachedLibrary(savedContext, simpleMoneySrcFile));

    server.resetAnalyze();
    final long oldLastModified = moneyLibFile.lastModified();
    FileUtilities.setContents(moneyLibFile, newContent);
    // Ensure marked as modified... lastModified is only accurate to the second
    moneyLibFile.setLastModified(oldLastModified + 1000);
    try {
      server.changed(moneyLibFile);
      listener.waitForIdle(2, FIVE_MINUTES_MS);
      assertTrackedLibraryFiles(server, moneyLibFile);
      server.assertAnalyze(false, moneyLibFile);
      Object lib2 = getCachedLibrary(savedContext, moneyLibFile);
      assertNotNull(lib2);
      assertNotSame(lib1, lib2);
      lib1 = lib2;
      // Files with "part of" are never considered libraries
      assertNull(getCachedLibrary(savedContext, simpleMoneySrcFile));
    } finally {
      FileUtilities.setContents(moneyLibFile, oldContent);
      moneyLibFile.setLastModified(oldLastModified);
    }

    server.resetAnalyze();
    server.changed(moneyLibFile);
    listener.waitForIdle(3, FIVE_MINUTES_MS);
    assertTrackedLibraryFiles(server, moneyLibFile);
    server.assertAnalyze(false, moneyLibFile);
    Object lib2 = getCachedLibrary(savedContext, moneyLibFile);
    assertNotNull(lib2);
    assertNotSame(lib1, lib2);
    assertNull(getCachedLibrary(savedContext, simpleMoneySrcFile));
  }
Esempio n. 4
0
  /** Assert adding library directive causes sourced file to become analyzed as library */
  public void test_changed_library_directive() throws Exception {
    final String oldContent = FileUtilities.getContents(simpleMoneySrcFile);
    PrintStringWriter writer = new PrintStringWriter();
    writer.println("library \"foobar\";\n");
    writer.append(oldContent);
    final String newContent = writer.toString();

    server.scan(moneyLibFile, null);
    server.start();
    listener.waitForIdle(1, FIVE_MINUTES_MS);
    assertTrackedLibraryFiles(server, moneyLibFile);
    Object lib1 = getCachedLibrary(savedContext, moneyLibFile);
    assertNotNull(lib1);
    assertNull(getCachedLibrary(savedContext, simpleMoneySrcFile));

    server.resetAnalyze();
    final long oldLastModified = simpleMoneySrcFile.lastModified();
    try {
      FileUtilities.setContents(simpleMoneySrcFile, newContent);
      // Ensure marked as modified... lastModified is only accurate to the second
      simpleMoneySrcFile.setLastModified(oldLastModified + 1000);
      server.changed(simpleMoneySrcFile);
      listener.waitForIdle(2, FIVE_MINUTES_MS);
      assertTrackedLibraryFiles(server, moneyLibFile, simpleMoneySrcFile);
      server.assertAnalyze(false, moneyLibFile, simpleMoneySrcFile);
      Object lib2 = getCachedLibrary(savedContext, moneyLibFile);
      assertNotNull(lib2);
      assertNotSame(lib1, lib2);
      lib1 = lib2;
      assertNotNull(getCachedLibrary(savedContext, simpleMoneySrcFile));
    } finally {
      FileUtilities.setContents(simpleMoneySrcFile, oldContent);
      simpleMoneySrcFile.setLastModified(oldLastModified);
    }

    server.resetAnalyze();
    server.changed(simpleMoneySrcFile);
    listener.waitForIdle(3, FIVE_MINUTES_MS);
    assertTrackedLibraryFiles(server, moneyLibFile);
    server.assertAnalyze(false, moneyLibFile, simpleMoneySrcFile);
    Object lib2 = getCachedLibrary(savedContext, moneyLibFile);
    assertNotNull(lib2);
    assertNotSame(lib1, lib2);
    assertNull(getCachedLibrary(savedContext, simpleMoneySrcFile));
  }
Esempio n. 5
0
 @Override
 protected void tearDown() throws Exception {
   server.stop();
 }
Esempio n. 6
0
 @Override
 protected void setUp() throws Exception {
   server = new AnalysisServerAdapter();
   savedContext = server.getSavedContext();
   listener = new Listener(server);
 }