Index: editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/analysis/AnalysisServerTest.java |
=================================================================== |
--- editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/analysis/AnalysisServerTest.java (revision 9776) |
+++ editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/analysis/AnalysisServerTest.java (working copy) |
@@ -21,6 +21,11 @@ |
import com.google.dart.tools.core.test.util.FileUtilities; |
import com.google.dart.tools.core.test.util.TestUtilities; |
+import static com.google.dart.tools.core.analysis.AnalysisTestUtilities.assertQueuedTasks; |
+import static com.google.dart.tools.core.analysis.AnalysisTestUtilities.assertTrackedLibraryFiles; |
+import static com.google.dart.tools.core.analysis.AnalysisTestUtilities.getServerTaskQueue; |
+import static com.google.dart.tools.core.analysis.AnalysisTestUtilities.getTrackedLibraryFiles; |
+ |
import junit.framework.TestCase; |
import org.junit.Assert; |
@@ -34,8 +39,6 @@ |
import java.lang.reflect.Field; |
import java.lang.reflect.InvocationTargetException; |
import java.lang.reflect.Method; |
-import java.util.Arrays; |
-import java.util.HashSet; |
import java.util.Set; |
public class AnalysisServerTest extends TestCase { |
@@ -46,7 +49,6 @@ |
private static final long FIVE_MINUTES_MS = 300000; |
private AnalysisServer server; |
- private AnalysisServer defaultServer; |
private Listener listener; |
public void test_analyzeLibrary() throws Exception { |
@@ -61,14 +63,14 @@ |
public File test_analyzeLibrary(File tempDir) throws Exception, InterruptedException { |
File libFile = setupMoneyLibrary(tempDir); |
setupServer(); |
- assertTrackedLibraryFiles(); |
+ assertTrackedLibraryFiles(server); |
server.analyze(libFile); |
listener.waitForResolved(FIVE_MINUTES_MS, libFile); |
listener.assertResolvedCount(3); |
listener.assertNoDuplicates(); |
listener.assertNoDiscards(); |
- assertTrackedLibraryFiles(libFile); |
+ assertTrackedLibraryFiles(server, libFile); |
assertTrue(isLibraryResolved(libFile)); |
return libFile; |
} |
@@ -108,21 +110,21 @@ |
public File test_discardLib(File tempDir, boolean discardParent) throws Exception { |
File libFile = test_analyzeLibrary(tempDir); |
- assertTrackedLibraryFiles(libFile); |
+ assertTrackedLibraryFiles(server, libFile); |
listener.reset(); |
server.discard(discardParent ? libFile.getParentFile() : libFile); |
listener.waitForDiscarded(FIVE_MINUTES_MS, libFile); |
listener.assertResolvedCount(0); |
listener.assertNoDuplicates(); |
- assertTrackedLibraryFiles(); |
+ assertTrackedLibraryFiles(server); |
assertFalse(isLibraryCached(libFile)); |
listener.reset(); |
// Use blocking task to ensure we can add 2 tasks to the queue without being processed |
BlockingTask blockingTask = new BlockingTask(); |
- getServerTaskQueue().addNewTask(blockingTask); |
+ getServerTaskQueue(server).addNewTask(blockingTask); |
// The discard task should prevent the analysis task from being executed |
server.analyze(libFile); |
@@ -133,7 +135,7 @@ |
listener.assertResolvedCount(0); |
listener.assertNoDuplicates(); |
listener.assertNoDiscards(); |
- assertTrackedLibraryFiles(); |
+ assertTrackedLibraryFiles(server); |
assertFalse(isLibraryCached(libFile)); |
return libFile; |
@@ -179,60 +181,60 @@ |
public void test_read_analyzeContext() throws Exception { |
initServer(new StringReader( |
"v3\none\n</end-libraries>\n</end-cache>\nAnalyzeContextTask\n</end-queue>")); |
- File[] trackedLibraryFiles = getTrackedLibraryFiles(); |
+ File[] trackedLibraryFiles = getTrackedLibraryFiles(server); |
assertEquals(1, trackedLibraryFiles.length); |
assertEquals("one", trackedLibraryFiles[0].getName()); |
- assertQueuedTasks("AnalyzeContextTask"); |
+ assertQueuedTasks(server, "AnalyzeContextTask"); |
} |
public void test_read_analyzeLibrary() throws Exception { |
initServer(new StringReader("v3\none\n</end-libraries>\n</end-cache>\none\n</end-queue>")); |
- File[] trackedLibraryFiles = getTrackedLibraryFiles(); |
+ File[] trackedLibraryFiles = getTrackedLibraryFiles(server); |
assertEquals(1, trackedLibraryFiles.length); |
assertEquals("one", trackedLibraryFiles[0].getName()); |
- assertQueuedTasks("AnalyzeLibraryTask"); |
+ assertQueuedTasks(server, "AnalyzeLibraryTask"); |
} |
public void test_read_empty() throws Exception { |
initServer(new StringReader(EMPTY_CACHE_CONTENT)); |
- assertEquals(0, getTrackedLibraryFiles().length); |
- assertQueuedTasks("AnalyzeLibraryTask"); |
+ assertEquals(0, getTrackedLibraryFiles(server).length); |
+ assertQueuedTasks(server, "AnalyzeLibraryTask"); |
} |
public void test_read_empty_v1() throws Exception { |
initServer(new StringReader("v1\n</end-libraries>\nsome-stuff")); |
- assertEquals(0, getTrackedLibraryFiles().length); |
- assertQueuedTasks("AnalyzeContextTask"); |
+ assertEquals(0, getTrackedLibraryFiles(server).length); |
+ assertQueuedTasks(server, "AnalyzeContextTask"); |
} |
public void test_read_empty_v2() throws Exception { |
initServer(new StringReader("v2\n</end-libraries>\n</end-cache>")); |
- assertEquals(0, getTrackedLibraryFiles().length); |
- assertQueuedTasks("AnalyzeContextTask"); |
+ assertEquals(0, getTrackedLibraryFiles(server).length); |
+ assertQueuedTasks(server, "AnalyzeContextTask"); |
} |
public void test_read_one() throws Exception { |
initServer(new StringReader("v3\none\n</end-libraries>\n</end-cache>\n</end-queue>")); |
- File[] trackedLibraryFiles = getTrackedLibraryFiles(); |
+ File[] trackedLibraryFiles = getTrackedLibraryFiles(server); |
assertEquals(1, trackedLibraryFiles.length); |
assertEquals("one", trackedLibraryFiles[0].getName()); |
- assertQueuedTasks("AnalyzeLibraryTask"); |
+ assertQueuedTasks(server, "AnalyzeLibraryTask"); |
} |
public void test_read_one_v1() throws Exception { |
initServer(new StringReader("v1\none\n</end-libraries>\nsome-stuff")); |
- File[] trackedLibraryFiles = getTrackedLibraryFiles(); |
+ File[] trackedLibraryFiles = getTrackedLibraryFiles(server); |
assertEquals(1, trackedLibraryFiles.length); |
assertEquals("one", trackedLibraryFiles[0].getName()); |
- assertQueuedTasks("AnalyzeContextTask"); |
+ assertQueuedTasks(server, "AnalyzeContextTask"); |
} |
public void test_read_one_v2() throws Exception { |
initServer(new StringReader("v2\none\n</end-libraries>\n</end-cache>")); |
- File[] trackedLibraryFiles = getTrackedLibraryFiles(); |
+ File[] trackedLibraryFiles = getTrackedLibraryFiles(server); |
assertEquals(1, trackedLibraryFiles.length); |
assertEquals("one", trackedLibraryFiles[0].getName()); |
- assertQueuedTasks("AnalyzeContextTask"); |
+ assertQueuedTasks(server, "AnalyzeContextTask"); |
} |
public void test_read_version_invalid() throws Exception { |
@@ -257,95 +259,13 @@ |
} |
} |
- public void test_scan() throws Exception { |
- TestUtilities.runWithTempDirectory(new FileOperation() { |
- @Override |
- public void run(File tempDir) throws Exception { |
- File libFile = setupMoneyLibrary(tempDir); |
- setupServer(); |
- assertTrackedLibraryFiles(); |
- |
- listener.reset(); |
- server.scan(libFile, true); |
- listener.waitForResolved(FIVE_MINUTES_MS, libFile); |
- assertTrackedLibraryFiles(libFile); |
- listener.assertResolvedCount(3); |
- listener.assertNoDuplicates(); |
- listener.assertNoDiscards(); |
- } |
- }); |
- } |
- |
- public void test_scanAndIndex() throws Exception { |
- TestUtilities.runWithTempDirectory(new FileOperation() { |
- @Override |
- public void run(File tempDir) throws Exception { |
- File libFile = setupMoneyLibrary(tempDir); |
- File sourcedFile = new File(libFile.getParent(), "currency.dart"); |
- setupServer(); |
- assertTrackedLibraryFiles(); |
- |
- // final InMemoryIndex index = InMemoryIndex.newInstanceForTesting(); |
- // new Thread(getClass().getSimpleName() + " scanAndIndex") { |
- // @Override |
- // public void run() { |
- // index.getOperationProcessor().run(); |
- // }; |
- // }.start(); |
- // server.addAnalysisListener(new AnalysisIndexManager(index)); |
- // assertEquals(0, index.getRelationshipCount()); |
- // |
- // Resource libResource = new Resource(composeResourceId( |
- // libFile.toURI().toString(), |
- // libFile.toURI().toString())); |
- // libElement = new Element(libResource, "#library"); |
- |
- listener.reset(); |
- server.scan(tempDir, true); |
- listener.waitForResolved(FIVE_MINUTES_MS, libFile); |
- assertTrackedLibraryFiles(libFile); |
- listener.assertResolvedCount(3); |
- listener.assertNoDuplicates(); |
- listener.assertNoDiscards(); |
- |
- listener.reset(); |
- server.scan(sourcedFile, true); |
- waitForIdle(); |
- assertTrackedLibraryFiles(libFile); |
- listener.assertResolvedCount(0); |
- listener.assertNoDuplicates(); |
- listener.assertNoDiscards(); |
- } |
- }); |
- } |
- |
- public void test_stop() throws Exception { |
- TestUtilities.runWithTempDirectory(new FileOperation() { |
- @Override |
- public void run(File tempDir) throws Exception { |
- File libFile = setupMoneyLibrary(tempDir); |
- setupServer(); |
- |
- server.getSavedContext().resolve(libFile, FIVE_MINUTES_MS); |
- server.stop(); |
- |
- assertTrue(server.waitForIdle(FIVE_MINUTES_MS)); |
- listener.waitForIdle(FIVE_MINUTES_MS); |
- |
- assertQueuedTasks(); |
- server.getSavedContext().resolve(libFile, null); |
- assertQueuedTasks("AnalyzeLibraryTask"); |
- } |
- }); |
- } |
- |
public void test_write_1() throws Exception { |
final String libraryFileName1 = "myLibrary.dart"; |
final String libraryFileName2 = "someOtherAbcLibrary.dart"; |
initServer(null); |
server.analyze(new File(libraryFileName1).getAbsoluteFile()); |
- assertQueuedTasks("AnalyzeContextTask"); |
+ assertQueuedTasks(server, "AnalyzeContextTask"); |
synchronized (getServerTaskQueueLock()) { |
server.start(); |
server.stop(); |
@@ -361,7 +281,7 @@ |
public void test_write_empty() throws Exception { |
initServer(null); |
- assertQueuedTasks(); |
+ assertQueuedTasks(server); |
StringWriter writer = new StringWriter(5000); |
writeCache(writer); |
Assert.assertEquals(EMPTY_CACHE_CONTENT, writer.toString()); |
@@ -374,7 +294,7 @@ |
File libFile = test_analyzeLibrary(tempDir); |
waitForIdle(); |
- assertQueuedTasks(); |
+ assertQueuedTasks(server); |
StringWriter writer = new StringWriter(5000); |
server.stop(); |
@@ -384,14 +304,14 @@ |
writeCache(writer); |
initServer(new StringReader(writer.toString())); |
- assertQueuedTasks("AnalyzeLibraryTask", "AnalyzeLibraryTask"); // someFile, otherFile |
+ assertQueuedTasks(server, "AnalyzeLibraryTask", "AnalyzeLibraryTask"); // someFile, otherFile |
server.start(); |
waitForIdle(); |
- assertTrackedLibraryFiles(libFile); |
+ assertTrackedLibraryFiles(server, libFile); |
assertTrue(isLibraryCached(libFile)); |
assertFalse(isLibraryResolved(libFile)); |
- assertQueuedTasks(); |
+ assertQueuedTasks(server); |
} |
}); |
} |
@@ -402,7 +322,7 @@ |
public void run(File tempDir) throws Exception { |
File libFile = setupMoneyLibrary(tempDir); |
setupServer(); |
- assertTrackedLibraryFiles(); |
+ assertTrackedLibraryFiles(server); |
String contents = FileUtilities.getContents(libFile); |
String libraryDirective = "#library(\"Money\");"; |
@@ -423,7 +343,7 @@ |
server.analyze(libFile); |
listener.waitForResolved(FIVE_MINUTES_MS, libFile); |
- assertTrackedLibraryFiles(libFile); |
+ assertTrackedLibraryFiles(server, libFile); |
assertTrue(isLibraryResolved(libFile)); |
StringWriter writer = new StringWriter(5000); |
@@ -432,8 +352,8 @@ |
initServer(new StringReader(writer.toString())); |
- assertQueuedTasks("AnalyzeLibraryTask"); // dart:core |
- assertTrackedLibraryFiles(libFile); |
+ assertQueuedTasks(server, "AnalyzeLibraryTask"); // dart:core |
+ assertTrackedLibraryFiles(server, libFile); |
assertTrue(isLibraryCached(libFile)); |
assertFalse(isLibraryResolved(libFile)); |
} |
@@ -482,43 +402,11 @@ |
@Override |
protected void tearDown() throws Exception { |
- if (server != null && server != defaultServer) { |
+ if (server != null) { |
server.stop(); |
} |
} |
- private void assertNoTopDeclaration(DartUnit unit) { |
- assertNotNull(unit); |
- Set<String> actualNames = unit.getTopDeclarationNames(); |
- if (actualNames.size() != 0) { |
- fail("Expected no top level declarations, but found " + actualNames); |
- } |
- } |
- |
- private void assertQueuedTasks(String... expectedTaskNames) throws Exception { |
- Task[] actualTasks = getServerTaskQueue().getTasks(); |
- int index = 0; |
- for (String name : expectedTaskNames) { |
- if (index >= actualTasks.length) { |
- fail("Expected task(" + index + ") to be " + name + ", but end of queue"); |
- } |
- String taskClassName = actualTasks[index].getClass().getSimpleName(); |
- if (!name.equals(taskClassName)) { |
- fail("Expected task(" + index + ") to be " + name + ", but found " + taskClassName); |
- } |
- index++; |
- } |
- if (index < actualTasks.length) { |
- String message = "Expected " + expectedTaskNames.length + " tasks, but found " |
- + actualTasks.length; |
- while (index < actualTasks.length) { |
- message += "\n " + actualTasks[index].getClass().getSimpleName(); |
- index++; |
- } |
- fail(message); |
- } |
- } |
- |
private void assertTopDeclarationExists(DartUnit unit, String expectedName) { |
assertNotNull(unit); |
Set<String> actualNames = unit.getTopDeclarationNames(); |
@@ -527,55 +415,13 @@ |
} |
} |
- private void assertTrackedLibraryFiles(File... expected) throws Exception { |
- File[] actual = getTrackedLibraryFiles(); |
- if (actual.length == expected.length) { |
- HashSet<File> files = new HashSet<File>(); |
- files.addAll(Arrays.asList(actual)); |
- if (actual.length == files.size()) { |
- for (File file : expected) { |
- if (!files.remove(file)) { |
- break; |
- } |
- } |
- } |
- if (files.size() == 0) { |
- return; |
- } |
- } |
- String msg = "Expected:"; |
- for (File file : expected) { |
- msg += "\n " + file; |
- } |
- msg += "\nbut found:"; |
- for (File file : actual) { |
- msg += "\n " + file; |
- } |
- fail(msg); |
- } |
- |
- @SuppressWarnings("unchecked") |
- private TaskQueue getServerTaskQueue() throws Exception { |
- Field field = server.getClass().getDeclaredField("queue"); |
- field.setAccessible(true); |
- return (TaskQueue) field.get(server); |
- } |
- |
- @SuppressWarnings("unchecked") |
private Object getServerTaskQueueLock() throws Exception { |
- TaskQueue queue = getServerTaskQueue(); |
+ TaskQueue queue = getServerTaskQueue(server); |
Field field = queue.getClass().getDeclaredField("queue"); |
field.setAccessible(true); |
return field.get(queue); |
} |
- private File[] getTrackedLibraryFiles() throws Exception { |
- Method method = server.getClass().getDeclaredMethod("getTrackedLibraryFiles"); |
- method.setAccessible(true); |
- Object result = method.invoke(server); |
- return (File[]) result; |
- } |
- |
private void initServer(Reader reader) throws Exception { |
EditorLibraryManager libraryManager = SystemLibraryManagerProvider.getAnyLibraryManager(); |
server = new AnalysisServer(libraryManager); |
@@ -610,13 +456,6 @@ |
} |
} |
- private void setupDefaultServer() throws Exception { |
- defaultServer = SystemLibraryManagerProvider.getDefaultAnalysisServer(); |
- server = defaultServer; |
- listener = new Listener(server); |
- waitForIdle(); |
- } |
- |
private File setupMoneyLibrary(File tempDir) throws IOException { |
File targetDir = new File(tempDir, TEST_CLASS_SIMPLE_NAME); |
TestUtilities.copyPluginRelativeContent("Money", targetDir); |