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