diff options
-rw-r--r-- | android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/UnitTestingSupportTest.java | 11 | ||||
-rw-r--r-- | android/src/com/android/tools/idea/gradle/invoker/GradleInvoker.java | 18 |
2 files changed, 24 insertions, 5 deletions
diff --git a/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/UnitTestingSupportTest.java b/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/UnitTestingSupportTest.java index aa2f9e591bf..19ecd559afc 100644 --- a/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/UnitTestingSupportTest.java +++ b/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/UnitTestingSupportTest.java @@ -140,6 +140,17 @@ public class UnitTestingSupportTest extends GuiTestCase { unitTestTree = getTestTree("Rerun Failed Tests"); assertTrue(unitTestTree.isAllTestsPassed()); assertEquals(1, unitTestTree.getAllTestsCount()); + + // Rebuild the project and run tests again, they should still run and pass. + myProjectFrame.invokeMenuPath("Build", "Rebuild Project"); + myProjectFrame.waitForBackgroundTasksToFinish(); + + myEditor.requestFocus(); + myEditor.moveTo(myEditor.findOffset("class ", testClass, true)); + runTestUnderCursor(); + unitTestTree = getTestTree(testClass); + assertTrue(unitTestTree.isAllTestsPassed()); + assertThat(unitTestTree.getAllTestsCount()).isGreaterThan(1); } @NotNull diff --git a/android/src/com/android/tools/idea/gradle/invoker/GradleInvoker.java b/android/src/com/android/tools/idea/gradle/invoker/GradleInvoker.java index 36784962c8d..3e0b287d3a7 100644 --- a/android/src/com/android/tools/idea/gradle/invoker/GradleInvoker.java +++ b/android/src/com/android/tools/idea/gradle/invoker/GradleInvoker.java @@ -272,12 +272,13 @@ public class GradleInvoker { AndroidFacet androidFacet = AndroidFacet.getInstance(module); if (androidFacet != null) { JpsAndroidModuleProperties properties = androidFacet.getProperties(); + + // Make sure all the generated sources, unpacked aars and mockable jars are in place. They are usually up to date, since we + // generate them at sync time, so Gradle will just skip those tasks. The generated files can be missing if this is a "Rebuild + // Project" run or if the user cleaned the project from the command line. The mockable jar is necessary to run unit tests, but the + // compilation tasks don't depend on it, so we have to call it explicitly. + addAfterSyncTasks(tasks, gradlePath, properties); switch (buildMode) { - case SOURCE_GEN: - for (String taskName : properties.AFTER_SYNC_TASK_NAMES) { - addTaskIfSpecified(tasks, gradlePath, taskName); - } - break; case ASSEMBLE: tasks.add(createBuildTask(gradlePath, properties.ASSEMBLE_TASK_NAME)); @@ -293,6 +294,7 @@ public class GradleInvoker { tasks.add(createBuildTask(gradlePath, properties.COMPILE_JAVA_TASK_NAME)); } addTaskIfSpecified(tasks, gradlePath, properties.COMPILE_JAVA_TEST_TASK_NAME); + break; } } else { @@ -309,6 +311,12 @@ public class GradleInvoker { } } + private static void addAfterSyncTasks(@NotNull List<String> tasks, String gradlePath, JpsAndroidModuleProperties properties) { + for (String taskName : properties.AFTER_SYNC_TASK_NAMES) { + addTaskIfSpecified(tasks, gradlePath, taskName); + } + } + private static void addTaskIfSpecified(@NotNull List<String> tasks, @NotNull String gradlePath, @Nullable String gradleTaskName) { |