/** 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); } }
/** 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)); }
/** 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)); }