Delete Android JUnit code & enable GRADLE test runner per default.
This should help us avoid problems related to the upcoming PLATFORM
merge happening next week.
Bug: 173775738
Bug: 165193589
Test: this is a cleanup change, GRADLE tests are to come in future
changes.
Change-Id: I694bbbd18da437dacb561c83cb9bff48a36133e0
diff --git a/android-common/src/com/android/tools/idea/flags/StudioFlags.java b/android-common/src/com/android/tools/idea/flags/StudioFlags.java
index ebdce87..fe8ce3f 100755
--- a/android-common/src/com/android/tools/idea/flags/StudioFlags.java
+++ b/android-common/src/com/android/tools/idea/flags/StudioFlags.java
@@ -534,14 +534,6 @@
"Enables Studio to understand feature-on-feature dependencies when launching dynamic apps.",
false
);
-
- public static final Flag<Boolean> GRADLE_UNIT_TESTING = Flag.create(
- RUNDEBUG,
- "run.unit.tests.via.gradle",
- "Run Android unit tests through Gradle",
- "Switch to running unit tests via Gradle Tooling API instead of JUnit",
- false
- );
//endregion
//region Gradle Project System
diff --git a/android-test-framework/testSrc/com/android/tools/idea/testartifacts/TestConfigurationTesting.java b/android-test-framework/testSrc/com/android/tools/idea/testartifacts/TestConfigurationTesting.java
index f239794..2b4f8eb 100644
--- a/android-test-framework/testSrc/com/android/tools/idea/testartifacts/TestConfigurationTesting.java
+++ b/android-test-framework/testSrc/com/android/tools/idea/testartifacts/TestConfigurationTesting.java
@@ -17,7 +17,6 @@
import com.google.common.annotations.VisibleForTesting;
import com.android.tools.idea.testartifacts.instrumented.AndroidTestRunConfiguration;
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfiguration;
import com.intellij.execution.Location;
import com.intellij.execution.PsiLocation;
import com.intellij.execution.RunManager;
@@ -41,7 +40,7 @@
import static org.junit.Assert.assertNotNull;
/**
- * Collection of utility methods for testing {@link AndroidTestRunConfiguration}s, {@link AndroidJUnitConfiguration}s and their interactions
+ * Collection of utility methods for testing {@link AndroidTestRunConfiguration}s.
*/
public class TestConfigurationTesting {
@Nullable
@@ -50,26 +49,11 @@
}
@Nullable
- public static AndroidJUnitConfiguration createJUnitConfigurationFromClass(@NotNull Project project, @NotNull String qualifiedName) {
- return createConfigurationFromClass(project, qualifiedName, AndroidJUnitConfiguration.class);
- }
-
- @Nullable
- public static AndroidJUnitConfiguration createJUnitConfigurationFromDirectory(@NotNull Project project, @NotNull String directory) {
- return createConfigurationFromDirectory(project, directory, AndroidJUnitConfiguration.class);
- }
-
- @Nullable
public static AndroidTestRunConfiguration createAndroidTestConfigurationFromDirectory(@NotNull Project project, @NotNull String directory) {
return createConfigurationFromDirectory(project, directory, AndroidTestRunConfiguration.class);
}
@Nullable
- public static AndroidJUnitConfiguration createJUnitConfigurationFromFile(@NotNull Project project, @NotNull String file) {
- return createConfigurationFromFile(project, file, AndroidJUnitConfiguration.class);
- }
-
- @Nullable
public static AndroidTestRunConfiguration createAndroidTestConfigurationFromFile(@NotNull Project project, @NotNull String file) {
return createConfigurationFromFile(project, file, AndroidTestRunConfiguration.class);
}
@@ -125,7 +109,7 @@
runManager.addConfiguration(settings);
RunConfiguration configuration = settings.getConfiguration();
- if (configuration instanceof AndroidTestRunConfiguration || configuration instanceof AndroidJUnitConfiguration) {
+ if (configuration instanceof AndroidTestRunConfiguration) {
return configuration;
}
return null;
diff --git a/android/src/META-INF/android-junit.xml b/android/src/META-INF/android-junit.xml
deleted file mode 100644
index 0c9125c..0000000
--- a/android/src/META-INF/android-junit.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- ~ Copyright (C) 2016 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<idea-plugin>
- <extensions defaultExtensionNs="com.intellij">
- <runConfigurationProducer implementation="com.android.tools.idea.testartifacts.junit.TestDirectoryAndroidConfigurationProducer"/>
- <runConfigurationProducer implementation="com.android.tools.idea.testartifacts.junit.TestPackageAndroidConfigurationProducer"/>
- <runConfigurationProducer implementation="com.android.tools.idea.testartifacts.junit.TestClassAndroidConfigurationProducer"/>
- <runConfigurationProducer implementation="com.android.tools.idea.testartifacts.junit.TestMethodAndroidConfigurationProducer"/>
- <runConfigurationProducer implementation="com.android.tools.idea.testartifacts.junit.TestPatternConfigurationProducer"/>
- <configurationType implementation="com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurationType"/>
- </extensions>
-
- <actions>
- <group>
- <action class="com.android.tools.idea.testartifacts.junit.AndroidJUnitExcludeFromRunAction" text="Exclude from suite" id="androidExcludeFromSuite"/>
- <separator/>
- <add-to-group relative-to-action="openAssertEqualsDiff" anchor="after" group-id="TestTreePopupMenu"/>
- </group>
- <group>
- <action class="com.android.tools.idea.testartifacts.junit.AndroidJUnitAddToTestsPatternAction" id="androidAddToISuite" text="Add to Android JUnit pattern suite"/>
- <add-to-group anchor="last" group-id="RunContextGroup"/>
- </group>
- </actions>
-</idea-plugin>
diff --git a/android/src/META-INF/android-plugin.xml b/android/src/META-INF/android-plugin.xml
index 8570483..c07c7c5 100644
--- a/android/src/META-INF/android-plugin.xml
+++ b/android/src/META-INF/android-plugin.xml
@@ -32,7 +32,6 @@
<depends optional="true" config-file="database-support.xml">com.intellij.database</depends>
<xi:include href="android-kotlin.xml" xpointer="xpointer(/idea-plugin/*)"/>
- <xi:include href="android-junit.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/org/jetbrains/android/dom/android-xml.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/com/android/tools/idea/lint/android-lint.xml" xpointer="xpointer(/idea-plugin/*)"/>
@@ -752,7 +751,6 @@
<spellchecker.support language="JSON" implementationClass="org.jetbrains.android.spellchecker.GoogleServicesJsonSpellcheckingStrategy" order="first"/>
<spellchecker.support language="Shell Script" implementationClass="org.jetbrains.android.spellchecker.AndroidShellSpellcheckingStrategy" order="first"/>
<deadCode implementation="org.jetbrains.android.inspections.AndroidComponentEntryPoint"/>
- <junitPatcher implementation="com.android.tools.idea.testartifacts.scopes.AndroidJunitPatcher" />
<debugger.nodeRenderer implementation="com.android.tools.idea.debug.BitmapRenderer" />
<debugger.nodeRenderer implementation="com.android.tools.idea.debug.BitmapDrawableRenderer" />
diff --git a/android/src/META-INF/androidstudio.xml b/android/src/META-INF/androidstudio.xml
index c71cda2..fd365a5 100755
--- a/android/src/META-INF/androidstudio.xml
+++ b/android/src/META-INF/androidstudio.xml
@@ -161,7 +161,6 @@
displayName="Memory Settings"
provider="com.android.tools.idea.memorysettings.MemorySettingsConfigurableProvider"
id="memory.settings"/>
- <project.converterProvider implementation="com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurationConverterProvider"/>
<statistic.eventLog.eventLoggerProvider implementation="com.android.tools.idea.stats.AndroidStudioStatisticsEventLoggerProvider"/>
</extensions>
diff --git a/android/src/com/android/tools/idea/gradle/project/AndroidStudioGradleSettings.java b/android/src/com/android/tools/idea/gradle/project/AndroidStudioGradleSettings.java
index 93a1a7d..eaa7657 100644
--- a/android/src/com/android/tools/idea/gradle/project/AndroidStudioGradleSettings.java
+++ b/android/src/com/android/tools/idea/gradle/project/AndroidStudioGradleSettings.java
@@ -37,12 +37,7 @@
static void configureForAndroidStudio(@NotNull GradleProjectSettings projectSettings) {
projectSettings.setResolveModulePerSourceSet(StudioFlags.USE_MODULE_PER_SOURCE_SET.get());
- if (!StudioFlags.GRADLE_UNIT_TESTING.get()) {
- projectSettings.setTestRunner(TestRunner.PLATFORM);
- }
- else {
- projectSettings.setTestRunner(TestRunner.GRADLE);
- }
+ projectSettings.setTestRunner(TestRunner.GRADLE);
projectSettings.setUseQualifiedModuleNames(true);
}
}
diff --git a/android/src/com/android/tools/idea/startup/AndroidStudioInitializer.java b/android/src/com/android/tools/idea/startup/AndroidStudioInitializer.java
index f6795ab..6c6585c 100644
--- a/android/src/com/android/tools/idea/startup/AndroidStudioInitializer.java
+++ b/android/src/com/android/tools/idea/startup/AndroidStudioInitializer.java
@@ -34,14 +34,9 @@
import com.android.tools.idea.serverflags.ServerFlagInitializer;
import com.android.tools.idea.stats.AndroidStudioUsageTracker;
import com.android.tools.idea.stats.GcPauseWatcher;
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurationProducer;
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurationType;
import com.intellij.analytics.AndroidStudioAnalytics;
import com.intellij.concurrency.JobScheduler;
import com.intellij.execution.actions.RunConfigurationProducer;
-import com.intellij.execution.configurations.ConfigurationType;
-import com.intellij.execution.junit.JUnitConfigurationProducer;
-import com.intellij.execution.junit.JUnitConfigurationType;
import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.ide.fileTemplates.FileTemplateManager;
import com.intellij.lang.injection.MultiHostInjector;
@@ -96,7 +91,6 @@
scheduler.execute(ServerFlagDownloader::downloadServerFlagList);
setupAnalytics();
- disableIdeaJUnitConfigurations(actionManager);
disableKaptImportHandlers();
hideRarelyUsedIntellijActions(actionManager);
setupResourceManagerActions(actionManager);
@@ -259,34 +253,6 @@
resolverExtensionPoint.unregisterExtension(KaptProjectResolverExtension.class);
}
- // JUnit original Extension JUnitConfigurationType is disabled so it can be replaced by its child class AndroidJUnitConfigurationType
- private static void disableIdeaJUnitConfigurations(ActionManager actionManager) {
- // First we unregister the ConfigurationProducers, and after the ConfigurationType
-
- //noinspection rawtypes: RunConfigurationProducer.EP_NAME uses raw types.
- ExtensionPoint<RunConfigurationProducer> configurationProducerExtensionPoint = RunConfigurationProducer.EP_NAME.getPoint();
- //noinspection rawtypes: RunConfigurationProducer.EP_NAME uses raw types.
- for (RunConfigurationProducer runConfigurationProducer : configurationProducerExtensionPoint.getExtensions()) {
- if (runConfigurationProducer instanceof JUnitConfigurationProducer
- && !(runConfigurationProducer instanceof AndroidJUnitConfigurationProducer)) {
- // In AndroidStudio these ConfigurationProducer s are replaced
- configurationProducerExtensionPoint.unregisterExtension(runConfigurationProducer.getClass());
- }
- }
-
- ExtensionPoint<ConfigurationType> configurationTypeExtensionPoint = ConfigurationType.CONFIGURATION_TYPE_EP.getPoint();
- for (ConfigurationType configurationType : configurationTypeExtensionPoint.getExtensions()) {
- if (configurationType instanceof JUnitConfigurationType && !(configurationType instanceof AndroidJUnitConfigurationType)) {
- // In Android Studio the user is forced to use AndroidJUnitConfigurationType instead of JUnitConfigurationType
- configurationTypeExtensionPoint.unregisterExtension(configurationType.getClass());
- }
- }
-
- // We hide actions registered by the JUnit plugin and instead we use those registered in android-junit.xml
- Actions.hideAction(actionManager, "excludeFromSuite");
- Actions.hideAction(actionManager, "AddToISuite");
- }
-
private static void hideRarelyUsedIntellijActions(ActionManager actionManager) {
// Hide the Save File as Template action due to its rare use in Studio.
Actions.hideAction(actionManager, "SaveFileAsTemplate");
diff --git a/android/src/com/android/tools/idea/stats/AnalyticsTestRunnerEventsListener.kt b/android/src/com/android/tools/idea/stats/AnalyticsTestRunnerEventsListener.kt
index 016b262..dcc4650 100644
--- a/android/src/com/android/tools/idea/stats/AnalyticsTestRunnerEventsListener.kt
+++ b/android/src/com/android/tools/idea/stats/AnalyticsTestRunnerEventsListener.kt
@@ -19,20 +19,17 @@
import com.android.tools.analytics.recordTestLibrary
import com.android.tools.idea.gradle.project.model.AndroidModuleModel
import com.android.tools.idea.gradle.project.model.JavaModuleModel
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfiguration
import com.android.tools.idea.util.androidFacet
import com.google.wireless.android.sdk.stats.AndroidStudioEvent
import com.google.wireless.android.sdk.stats.TestLibraries
import com.google.wireless.android.sdk.stats.TestRun
import com.intellij.execution.ExecutionListener
-import com.intellij.execution.ExecutionManager
+import com.intellij.execution.junit.JUnitConfiguration
import com.intellij.execution.process.ProcessHandler
import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.execution.testframework.sm.runner.SMTRunnerEventsAdapter
-import com.intellij.execution.testframework.sm.runner.SMTRunnerEventsListener
import com.intellij.execution.testframework.sm.runner.SMTestProxy
import com.intellij.openapi.application.runReadAction
-import com.intellij.openapi.components.ProjectComponent
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key
@@ -49,7 +46,8 @@
}
override fun processStarted(executorId: String, env: ExecutionEnvironment, handler: ProcessHandler) {
- val runConfiguration = env.runProfile as? AndroidJUnitConfiguration ?: return
+ // TODO(karimai): add tracking gradle test run configuration.
+ val runConfiguration = env.runProfile as? JUnitConfiguration ?: return
val testRunProtoBuilder = TestRun.newBuilder().apply {
testInvocationType = TestRun.TestInvocationType.ANDROID_STUDIO_TEST
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitAddToTestsPatternAction.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitAddToTestsPatternAction.java
deleted file mode 100644
index 5c1f276..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitAddToTestsPatternAction.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.execution.actions.AbstractAddToTestsPatternAction;
-import com.intellij.execution.actions.RunConfigurationProducer;
-import com.intellij.execution.configurations.ConfigurationType;
-import com.intellij.execution.junit.JUnitConfiguration;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Set;
-
-public class AndroidJUnitAddToTestsPatternAction extends AbstractAddToTestsPatternAction<AndroidJUnitConfiguration> {
-
- @Override
- @NotNull
- protected TestPatternConfigurationProducer getPatternBasedProducer() {
- return RunConfigurationProducer.getInstance(TestPatternConfigurationProducer.class);
- }
-
- @Override
- @NotNull
- protected ConfigurationType getConfigurationType() {
- return AndroidJUnitConfigurationType.getInstance();
- }
-
- @Override
- protected boolean isPatternBasedConfiguration(AndroidJUnitConfiguration configuration) {
- return configuration.getPersistentData().TEST_OBJECT == JUnitConfiguration.TEST_PATTERN;
- }
-
- @Override
- protected Set<String> getPatterns(AndroidJUnitConfiguration configuration) {
- return configuration.getPersistentData().getPatterns();
- }
-}
\ No newline at end of file
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurable.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurable.java
deleted file mode 100644
index 7bd5477..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurable.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.execution.junit2.configuration.JUnitConfigurable;
-import com.intellij.openapi.project.Project;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Android implementation of {@link JUnitConfigurable} so some behaviors can be overridden.
- */
-public class AndroidJUnitConfigurable extends JUnitConfigurable<AndroidJUnitConfiguration> {
- public AndroidJUnitConfigurable(@NotNull Project project) {
- super(project);
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfiguration.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfiguration.java
deleted file mode 100644
index 3aea340..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfiguration.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.diagnostic.logging.LogConfigurationPanel;
-import com.intellij.execution.ExecutionBundle;
-import com.intellij.execution.ExecutionException;
-import com.intellij.execution.Executor;
-import com.intellij.execution.JavaRunConfigurationExtensionManager;
-import com.intellij.execution.configurations.ConfigurationFactory;
-import com.intellij.execution.configurations.RunConfiguration;
-import com.intellij.execution.executors.DefaultRunExecutor;
-import com.intellij.execution.junit.JUnitConfiguration;
-import com.intellij.execution.junit.TestObject;
-import com.intellij.execution.runners.ExecutionEnvironment;
-import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
-import com.intellij.execution.testframework.TestSearchScope;
-import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtilCore;
-import com.intellij.openapi.options.SettingsEditor;
-import com.intellij.openapi.options.SettingsEditorGroup;
-import com.intellij.openapi.project.Project;
-import java.util.HashSet;
-import java.util.Set;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Android implementation of {@link JUnitConfiguration} so some behaviors can be overridden.
- */
-public class AndroidJUnitConfiguration extends JUnitConfiguration {
- public AndroidJUnitConfiguration(@NotNull Project project, @NotNull ConfigurationFactory configurationFactory) {
- super(project, new JUnitConfiguration.Data() {
- @Override
- public TestObject getTestObject(@NotNull JUnitConfiguration configuration) {
- AndroidTestObject testObject = fromString(TEST_OBJECT, configuration, ExecutionEnvironmentBuilder.create(
- DefaultRunExecutor.getRunExecutorInstance(), configuration).build());
- return testObject != null ? testObject : super.getTestObject(configuration);
- }
- }, configurationFactory);
- }
-
- @Override
- public TestObject getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException {
- AndroidTestObject testObject = fromString(getPersistentData().TEST_OBJECT, this, env);
- return testObject != null ? testObject : super.getState(executor, env);
- }
-
- @NotNull
- @Override
- public SMTRunnerConsoleProperties createTestConsoleProperties(@NotNull Executor executor) {
- return new AndroidJUnitConsoleProperties(this, executor);
- }
-
- @Override
- @NotNull
- public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() {
- SettingsEditorGroup<AndroidJUnitConfiguration> group = new SettingsEditorGroup<>();
- group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new AndroidJUnitConfigurable(getProject()));
- JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group);
- group.addEditor(ExecutionBundle.message("logs.tab.title"), new LogConfigurationPanel<>());
- return group;
- }
-
- @NotNull
- public Module[] getModulesToCompile() {
- if (TEST_PACKAGE.equals(getPersistentData().TEST_OBJECT)) {
- TestSearchScope scope = getPersistentData().getScope();
- if (scope == TestSearchScope.WHOLE_PROJECT) {
- return getAllModules().toArray(Module.EMPTY_ARRAY);
- }
- if (scope == TestSearchScope.MODULE_WITH_DEPENDENCIES) {
- Module classpathModule = getConfigurationModule().getModule();
- if (classpathModule != null) {
- Set<Module> modules = new HashSet<>();
- ModuleUtilCore.getDependencies(classpathModule, modules);
- return modules.toArray(Module.EMPTY_ARRAY);
- }
- }
- }
-
- return getModules();
- }
-
- private static AndroidTestObject fromString(String id,
- @NotNull JUnitConfiguration configuration,
- @NotNull ExecutionEnvironment environment) {
- if (JUnitConfiguration.TEST_PACKAGE.equals(id)) {
- return new AndroidTestObject(new AndroidTestPackage(configuration, environment));
- }
- if (JUnitConfiguration.TEST_PATTERN.equals(id)) {
- return new AndroidTestObject(new AndroidTestsPattern(configuration, environment));
- }
- return null;
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverter.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverter.java
deleted file mode 100644
index 1e423d9..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverter.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.android.tools.idea.IdeInfo;
-import com.intellij.conversion.CannotConvertException;
-import com.intellij.conversion.ConversionProcessor;
-import com.intellij.conversion.ProjectConverter;
-import com.intellij.conversion.RunManagerSettings;
-import org.jdom.Element;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Collection;
-import java.util.HashSet;
-
-/**
- * {@link ProjectConverter} to convert {@link com.intellij.execution.junit.JUnitConfiguration}s to {@link AndroidJUnitConfiguration}s.
- * They are converted only in Android Studio.
- */
-public class AndroidJUnitConfigurationConverter extends ProjectConverter {
- // Same as RunnerAndConfigurationSettingsImpl.CONFIGURATION_TYPE_ATTRIBUTE
- static final String CONFIGURATION_TYPE_ATTRIBUTE = "type";
- // Same as RunnerAndConfigurationSettingsImpl.FACTORY_NAME_ATTRIBUTE
- static final String FACTORY_NAME_ATTRIBUTE = "factoryName";
- // Same as RunnerAndConfigurationSettingsImpl.TEMPLATE_FLAG_ATTRIBUTE
- static final String TEMPLATE_FLAG_ATTRIBUTE = "default";
- // Same as JUnitConfigurationType#getId()
- static final String JUNIT_CONFIGURATION_TYPE = "JUnit";
- // Same as JUnitConfigurationType#getDisplayName()
- static final String JUNIT_CONFIGURATION_FACTORY_NAME = "JUnit";
- // Same as AndroidJUnitConfigurationType#getId()
- static final String ANDROID_JUNIT_CONFIGURATION_TYPE = "AndroidJUnit";
- // Same as AndroidJUnitConfigurationType#getDisplayName()
- static final String ANDROID_JUNIT_CONFIGURATION_FACTORY_NAME = "Android JUnit";
-
- @NotNull
- @Override
- public ConversionProcessor<RunManagerSettings> createRunConfigurationsConverter() {
- return new ConversionProcessor<RunManagerSettings>() {
- @Override
- public boolean isConversionNeeded(RunManagerSettings settings) {
- return !getConfigurationsToConvert(settings).isEmpty();
- }
-
- @Override
- public void process(RunManagerSettings settings) throws CannotConvertException {
- // Converts the factory identifications from JUnitConfigurationType to AndroidJUnitConfigurationType
- for (Element element : getConfigurationsToConvert(settings)) {
- element.setAttribute(CONFIGURATION_TYPE_ATTRIBUTE, ANDROID_JUNIT_CONFIGURATION_TYPE);
- element.setAttribute(FACTORY_NAME_ATTRIBUTE, ANDROID_JUNIT_CONFIGURATION_FACTORY_NAME);
- }
- }
-
- @NotNull
- private Collection<Element> getConfigurationsToConvert(RunManagerSettings settings) {
- Collection<? extends Element> configurationElements = settings.getRunConfigurations();
- Collection<Element> toConvert = new HashSet<>();
-
- // Searches for RunConfiguration persistent elements of type JUnit and adds them to the ones to be converted
- for (Element element : configurationElements) {
- String typeName = element.getAttributeValue(CONFIGURATION_TYPE_ATTRIBUTE);
- String factoryName = element.getAttributeValue(FACTORY_NAME_ATTRIBUTE);
- Boolean isTemplate = Boolean.valueOf(element.getAttributeValue(TEMPLATE_FLAG_ATTRIBUTE)).booleanValue();
- if (!isTemplate && typeName.equals(JUNIT_CONFIGURATION_TYPE) && factoryName.equals(JUNIT_CONFIGURATION_FACTORY_NAME)) {
- toConvert.add(element);
- }
- }
- return toConvert;
- }
- };
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverterProvider.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverterProvider.java
deleted file mode 100644
index a348471..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverterProvider.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.android.tools.idea.IdeInfo;
-import com.intellij.conversion.ConversionContext;
-import com.intellij.conversion.ConverterProvider;
-import com.intellij.conversion.ProjectConverter;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * {@link ConverterProvider} providing {@link AndroidJUnitConfigurationConverter}.
- */
-public class AndroidJUnitConfigurationConverterProvider extends ConverterProvider {
- protected AndroidJUnitConfigurationConverterProvider() {
- super("junit-to-android-junit-configurations");
- }
-
- @NotNull
- @Override
- public String getConversionDescription() {
- return "RunConfigurations of type JUnitConfiguration will be converted to AndroidJUnitConfiguration. "
- + "JUnit tests and Android Instrumented tests will work properly together.";
- }
-
- @NotNull
- @Override
- public ProjectConverter createConverter(@NotNull ConversionContext context) {
- return new AndroidJUnitConfigurationConverter();
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationProducer.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationProducer.java
deleted file mode 100644
index 25728ba..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationProducer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-/**
- * Indicates that instance of {@link com.intellij.execution.actions.RunConfigurationProducer} is used in Android projects.
- */
-public interface AndroidJUnitConfigurationProducer {
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationType.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationType.java
deleted file mode 100644
index 8fc9f9d..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationType.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.android.tools.idea.IdeInfo;
-import com.android.tools.idea.help.AndroidWebHelpProvider;
-import com.intellij.execution.configuration.ConfigurationFactoryEx;
-import com.intellij.execution.configurations.ConfigurationFactory;
-import com.intellij.execution.configurations.ConfigurationTypeUtil;
-import com.intellij.execution.configurations.ModuleBasedConfiguration;
-import com.intellij.execution.configurations.RunConfiguration;
-import com.intellij.execution.junit.JUnitConfigurationType;
-import com.intellij.icons.AllIcons;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.NotNullLazyValue;
-import com.intellij.ui.LayeredIcon;
-import icons.StudioIcons;
-import org.jetbrains.annotations.NotNull;
-
-import javax.swing.*;
-
-/**
- * Android implementation of {@link JUnitConfigurationType} for running local unit tests. Dual test scopes is supported.
- */
-public class AndroidJUnitConfigurationType extends JUnitConfigurationType {
- private static final String ANDROID_JUNIT_DESCRIPTION = "Android JUnit test configuration";
- private static final String ANDROID_JUNIT_NAME = "Android JUnit";
- private static final String ANDROID_JUNIT_ID = "AndroidJUnit";
- private static final NotNullLazyValue<Icon> ANDROID_TEST_ICON = new NotNullLazyValue<Icon>() {
- @NotNull
- @Override
- protected Icon compute() {
- LayeredIcon icon = new LayeredIcon(2);
- icon.setIcon(StudioIcons.Shell.Filetree.ANDROID_PROJECT, 0);
- icon.setIcon(AllIcons.Nodes.JunitTestMark, 1);
- return icon;
- }
- };
-
- private final ConfigurationFactory myFactory;
-
- public AndroidJUnitConfigurationType() {
- myFactory = new ConfigurationFactoryEx(this) {
- @NotNull
- @Override
- public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
- AndroidJUnitConfiguration configuration = new AndroidJUnitConfiguration(project, this);
- configuration.setVMParameters("-ea");
- configuration.setWorkingDirectory("$MODULE_DIR$");
- return configuration;
- }
-
- @Override
- public @NotNull String getId() {
- // This string must be non-localized.
- return ANDROID_JUNIT_NAME;
- }
-
- @Override
- public void onNewConfigurationCreated(@NotNull RunConfiguration configuration) {
- ((ModuleBasedConfiguration)configuration).onNewConfigurationCreated();
- }
- };
- }
-
- @Override
- @NotNull
- public String getDisplayName() {
- return ANDROID_JUNIT_NAME;
- }
-
- @Override
- public String getConfigurationTypeDescription() {
- return ANDROID_JUNIT_DESCRIPTION;
- }
-
- @Override
- public Icon getIcon() {
- // Uses the standard JUnit icon if in AndroidStudio and otherwise, another icon
- return IdeInfo.getInstance().isAndroidStudio() ? AllIcons.RunConfigurations.Junit : ANDROID_TEST_ICON.getValue();
- }
-
- @Override
- public ConfigurationFactory[] getConfigurationFactories() {
- return new ConfigurationFactory[]{myFactory};
- }
-
- @Override
- @NotNull
- public String getId() {
- return ANDROID_JUNIT_ID;
- }
-
- @NotNull
- public static AndroidJUnitConfigurationType getInstance() {
- return ConfigurationTypeUtil.findConfigurationType(AndroidJUnitConfigurationType.class);
- }
-
- @Override
- public String getHelpTopic() {
- return AndroidWebHelpProvider.HELP_PREFIX + "r/studio-ui/rundebugconfig.html";
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurations.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurations.java
deleted file mode 100644
index c5a6be4..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurations.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.android.tools.idea.AndroidPsiUtils;
-import com.android.tools.idea.gradle.util.GradleProjects;
-import com.intellij.execution.*;
-import com.intellij.execution.actions.ConfigurationContext;
-import com.intellij.execution.actions.ConfigurationFromContext;
-import com.intellij.execution.actions.RunConfigurationProducer;
-import com.intellij.execution.configurations.ConfigurationFactory;
-import com.intellij.execution.configurations.ModuleBasedConfiguration;
-import com.intellij.execution.configurations.RunConfiguration;
-import com.intellij.execution.junit.JUnitConfiguration;
-import com.intellij.execution.junit.JUnitUtil;
-import com.intellij.execution.junit.PatternConfigurationProducer;
-import com.intellij.execution.junit.TestObject;
-import com.intellij.openapi.module.Module;
-import com.intellij.psi.*;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Common code for the {@link RunConfigurationProducer}s in Android JUnit configurations.
- */
-public class AndroidJUnitConfigurations {
- public static boolean shouldUseAndroidJUnitConfigurations(@NotNull ConfigurationFromContext self,
- @NotNull ConfigurationFromContext other) {
- RunConfiguration androidConfiguration = self.getConfiguration();
- RunConfiguration otherConfiguration = other.getConfiguration();
- if (androidConfiguration instanceof ModuleBasedConfiguration &&
- (otherConfiguration instanceof JUnitConfiguration) &&
- !(otherConfiguration instanceof AndroidJUnitConfiguration)) {
- Module module = ((ModuleBasedConfiguration)androidConfiguration).getConfigurationModule().getModule();
- if (module != null && GradleProjects.isIdeaAndroidModule(module)) {
- return true;
- }
- }
- return false;
- }
-
- public static boolean isFromContext(@NotNull JUnitConfiguration junitConfiguration,
- @NotNull ConfigurationContext context,
- @NotNull ConfigurationFactory configurationFactory) {
- if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
- return false;
- }
-
- Location contextLocation = context.getLocation();
- if (contextLocation == null) {
- return false;
- }
-
- PsiElement leaf = contextLocation.getPsiElement();
- Location<PsiMethod> methodLocation = getTestMethodLocation(leaf);
- PsiClass testClass = getTestClass(leaf);
- TestObject testObject = junitConfiguration.getTestObject();
-
- if (!testObject.isConfiguredByElement(junitConfiguration, testClass, methodLocation == null ? null : methodLocation.getPsiElement(), null, null)) {
- return false;
- }
-
- return settingsMatchTemplate(junitConfiguration, context, configurationFactory);
- }
-
- private static boolean settingsMatchTemplate(@NotNull JUnitConfiguration junitConfiguration,
- @NotNull ConfigurationContext configurationContext,
- @NotNull ConfigurationFactory configurationFactory) {
- RunConfiguration predefinedConfiguration = configurationContext.getOriginalConfiguration(AndroidJUnitConfigurationType.getInstance());
-
- if (predefinedConfiguration != null && predefinedConfiguration instanceof CommonJavaRunConfigurationParameters) {
- String vmParameters = ((CommonJavaRunConfigurationParameters)predefinedConfiguration).getVMParameters();
- if (vmParameters != null && !junitConfiguration.getVMParameters().equals(vmParameters)) {
- return false;
- }
- }
-
- RunnerAndConfigurationSettings template = RunManager.getInstance(junitConfiguration.getProject()).getConfigurationTemplate(configurationFactory);
- Module predefinedModule = ((ModuleBasedConfiguration)template.getConfiguration()).getConfigurationModule().getModule();
- Module configurationModule = junitConfiguration.getConfigurationModule().getModule();
- Module contextModule = configurationContext.getLocation() == null ? null : configurationContext.getLocation().getModule();
-
- return configurationModule == contextModule || configurationModule == predefinedModule;
- }
-
- @Nullable
- private static PsiClass getTestClass(@NotNull PsiElement leaf) {
- PsiClass psiClass = AndroidPsiUtils.getPsiParentOfType(leaf, PsiClass.class, false);
- if (psiClass != null && JUnitUtil.isTestClass(psiClass)) {
- return psiClass;
- }
- return null;
- }
-
- @Nullable
- private static Location<PsiMethod> getTestMethodLocation(@NotNull PsiElement leaf) {
- PsiMethod method = AndroidPsiUtils.getPsiParentOfType(leaf, PsiMethod.class, false);
- if (method != null) {
- Location<PsiMethod> methodLocation = PsiLocation.fromPsiElement(method);
- if (methodLocation != null && JUnitUtil.isTestMethod(methodLocation, false)) {
- return methodLocation;
- }
- }
- return null;
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConsoleProperties.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConsoleProperties.java
deleted file mode 100644
index fef86f2..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitConsoleProperties.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.android.tools.idea.projectsystem.TestArtifactSearchScopes;
-import com.intellij.execution.Executor;
-import com.intellij.execution.junit2.ui.properties.JUnitConsoleProperties;
-import com.intellij.openapi.module.Module;
-import com.intellij.psi.search.GlobalSearchScope;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Android implementation of {@link JUnitConsoleProperties} so some behaviors can be overridden.
- */
-public class AndroidJUnitConsoleProperties extends JUnitConsoleProperties {
- public AndroidJUnitConsoleProperties(@NotNull AndroidJUnitConfiguration configuration,
- Executor executor) {
- super(configuration, executor);
- }
-
- @NotNull
- @Override
- protected GlobalSearchScope initScope() {
- GlobalSearchScope scope = super.initScope();
-
- for (Module each : getConfiguration().getModules()) {
- // AndroidTest scope in each module is excluded from the scope used to find JUnitTests
- TestArtifactSearchScopes testArtifactSearchScopes = TestArtifactSearchScopes.getInstance(each);
- if (testArtifactSearchScopes != null) {
- scope = scope.intersectWith(GlobalSearchScope.notScope(testArtifactSearchScopes.getAndroidTestSourceScope()));
- }
- }
- return scope;
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitExcludeFromRunAction.java b/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitExcludeFromRunAction.java
deleted file mode 100644
index 350ac1f..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidJUnitExcludeFromRunAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.execution.actions.AbstractExcludeFromRunAction;
-import com.intellij.execution.configurations.RunConfiguration;
-import com.intellij.execution.junit.JUnitConfiguration;
-
-import java.util.Set;
-
-public class AndroidJUnitExcludeFromRunAction extends AbstractExcludeFromRunAction<AndroidJUnitConfiguration> {
-
- @Override
- protected Set<String> getPattern(AndroidJUnitConfiguration configuration) {
- return configuration.getPersistentData().getPatterns();
- }
-
- @Override
- protected boolean isPatternBasedConfiguration(RunConfiguration configuration) {
- return configuration instanceof AndroidJUnitConfiguration &&
- ((AndroidJUnitConfiguration)configuration).getPersistentData().TEST_OBJECT == JUnitConfiguration.TEST_PATTERN;
- }
-}
\ No newline at end of file
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/AndroidTestObjects.kt b/android/src/com/android/tools/idea/testartifacts/junit/AndroidTestObjects.kt
deleted file mode 100644
index 74503a8..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/AndroidTestObjects.kt
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit
-
-import com.android.tools.idea.projectsystem.TestArtifactSearchScopes
-import com.google.common.annotations.VisibleForTesting
-import com.intellij.execution.Executor
-import com.intellij.execution.junit.JUnitConfiguration
-import com.intellij.execution.junit.TestClassFilter
-import com.intellij.execution.junit.TestObject
-import com.intellij.execution.junit.TestPackage
-import com.intellij.execution.junit.TestsPattern
-import com.intellij.execution.runners.ExecutionEnvironment
-import com.intellij.execution.runners.ProgramRunner
-import com.intellij.execution.testframework.SourceScope
-import com.intellij.openapi.module.Module
-import com.intellij.openapi.project.Project
-import com.intellij.psi.PsiClass
-import com.intellij.psi.PsiDirectory
-import com.intellij.psi.PsiElement
-import com.intellij.psi.PsiMethod
-import com.intellij.psi.PsiPackage
-import com.intellij.psi.search.GlobalSearchScope
-import com.intellij.refactoring.listeners.RefactoringElementListener
-
-/**
- * Returns a new [GlobalSearchScope] with exclusion rules for unit tests from [TestArtifactSearchScopes] for all modules relevant to the
- * [JUnitConfiguration].
- *
- * @see TestArtifactSearchScopes.unitTestExcludeScope
- */
-private fun fixScope(originalScope: GlobalSearchScope, jUnitConfiguration: JUnitConfiguration): GlobalSearchScope {
- return (jUnitConfiguration as AndroidJUnitConfiguration).modulesToCompile
- .asSequence()
- .mapNotNull { TestArtifactSearchScopes.getInstance(it) }
- .fold(originalScope) { scope, testArtifactSearchScopes ->
- scope.intersectWith(GlobalSearchScope.notScope(testArtifactSearchScopes.unitTestExcludeScope))
- }
-}
-
-/**
- * Android implementation of [TestObject] so the method [getSourceScope] can be overridden. Since [TestObject] is not
- * a final class (many others inherit from it and override its methods), this class receives an instance of another [TestObject] in
- * the constructor and uses it to call the right methods of the subclasses. Uses delegation.
- */
-class AndroidTestObject(private val myTestObject: TestObject) : TestObject(myTestObject.configuration, myTestObject.environment) {
- override fun getModulesToCompile(): Array<Module> = myTestObject.modulesToCompile
- override fun checkConfiguration() = myTestObject.checkConfiguration()
- override fun execute(executor: Executor, runner: ProgramRunner<*>) = myTestObject.execute(executor, runner)
- override fun getConfiguration() = myTestObject.configuration
-
- /**
- * Returns the suggested context menu action name or null.
- * @see com.intellij.execution.configurations.LocatableConfigurationBase.getActionName
- */
- override fun suggestActionName(): String? = myTestObject.suggestActionName()
-
- override fun getListener(element: PsiElement, configuration: JUnitConfiguration): RefactoringElementListener? {
- return myTestObject.getListener(element, configuration)
- }
-
- override fun isConfiguredByElement(
- configuration: JUnitConfiguration,
- testClass: PsiClass?,
- testMethod: PsiMethod?,
- testPackage: PsiPackage?,
- testDir: PsiDirectory?
- ): Boolean {
- return myTestObject.isConfiguredByElement(configuration, testClass, testMethod, testPackage, testDir)
- }
-
- override fun getSourceScope(): SourceScope? {
- return myTestObject.sourceScope?.let { original ->
- object : SourceScope() {
- override fun getProject(): Project {
- return original.project
- }
-
- override fun getGlobalSearchScope(): GlobalSearchScope {
- return fixScope(original.globalSearchScope, configuration)
- }
-
- override fun getLibrariesScope(): GlobalSearchScope {
- return fixScope(original.librariesScope, configuration)
- }
-
- override fun getModulesToCompile(): Array<Module> {
- return original.modulesToCompile
- }
- }
- }
- }
-}
-/**
- * Android implementation of [TestsPattern] so the method [getClassFilter] can be overridden. This
- * imposes the right [com.intellij.psi.search.GlobalSearchScope] all around [TestsPattern] configurations.
- */
-class AndroidTestsPattern(
- configuration: JUnitConfiguration,
- environment: ExecutionEnvironment
-) : TestsPattern(configuration, environment) {
- override fun getClassFilter(data: JUnitConfiguration.Data): TestClassFilter {
- val originalFilter = super.getClassFilter(data)
- return originalFilter.intersectionWith(fixScope(originalFilter.scope, configuration))
- }
-}
-
-/**
- * Android implementation of [TestPackage] so the method [getClassFilter] can be overridden. This
- * imposes the right [com.intellij.psi.search.GlobalSearchScope] all around [TestPackage] configurations.
- */
-class AndroidTestPackage(
- configuration: JUnitConfiguration,
- environment: ExecutionEnvironment
-) : TestPackage(configuration, environment) {
- @VisibleForTesting
- public override fun getClassFilter(data: JUnitConfiguration.Data): TestClassFilter {
- val originalFilter = super.getClassFilter(data)
- return originalFilter.intersectionWith(fixScope(originalFilter.scope, configuration))
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/TestClassAndroidConfigurationProducer.java b/android/src/com/android/tools/idea/testartifacts/junit/TestClassAndroidConfigurationProducer.java
deleted file mode 100644
index 1e9f0b3..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/TestClassAndroidConfigurationProducer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.execution.actions.ConfigurationContext;
-import com.intellij.execution.actions.ConfigurationFromContext;
-import com.intellij.execution.junit.AbstractTestClassConfigurationProducer;
-import com.intellij.execution.junit.JUnitConfiguration;
-import org.jetbrains.annotations.NotNull;
-
-import static com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurations.isFromContext;
-import static com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurations.shouldUseAndroidJUnitConfigurations;
-
-/**
- * Android implementation of {@link AbstractTestClassConfigurationProducer} so some behaviors can be overridden.
- */
-public class TestClassAndroidConfigurationProducer extends AbstractTestClassConfigurationProducer implements AndroidJUnitConfigurationProducer {
- protected TestClassAndroidConfigurationProducer() {
- super(AndroidJUnitConfigurationType.getInstance());
- }
-
- @Override
- public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) {
- return super.isPreferredConfiguration(self, other)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-
- @Override
- public boolean shouldReplace(@NotNull ConfigurationFromContext self, @NotNull ConfigurationFromContext other) {
- return super.isPreferredConfiguration(self, other)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-
- @Override
- public boolean isConfigurationFromContext(@NotNull JUnitConfiguration unitConfiguration, @NotNull ConfigurationContext context) {
- return isFromContext(unitConfiguration, context, getConfigurationFactory());
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/TestDirectoryAndroidConfigurationProducer.java b/android/src/com/android/tools/idea/testartifacts/junit/TestDirectoryAndroidConfigurationProducer.java
deleted file mode 100644
index d7d36d1..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/TestDirectoryAndroidConfigurationProducer.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.execution.actions.ConfigurationFromContext;
-import com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer;
-import org.jetbrains.annotations.NotNull;
-
-import static com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurations.shouldUseAndroidJUnitConfigurations;
-
-/**
- * Android implementation of {@link AbstractAllInDirectoryConfigurationProducer} so some behaviors can be overridden.
- */
-public class TestDirectoryAndroidConfigurationProducer extends AbstractAllInDirectoryConfigurationProducer implements AndroidJUnitConfigurationProducer {
- protected TestDirectoryAndroidConfigurationProducer() {
- super(AndroidJUnitConfigurationType.getInstance());
- }
-
- @Override
- public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) {
- return super.isPreferredConfiguration(self, other)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-
- @Override
- public boolean shouldReplace(@NotNull ConfigurationFromContext self, @NotNull ConfigurationFromContext other) {
- return super.isPreferredConfiguration(self, other)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/TestMethodAndroidConfigurationProducer.java b/android/src/com/android/tools/idea/testartifacts/junit/TestMethodAndroidConfigurationProducer.java
deleted file mode 100644
index 4151b2c..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/TestMethodAndroidConfigurationProducer.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.android.tools.idea.AndroidPsiUtils;
-import com.intellij.execution.JavaRunConfigurationExtensionManager;
-import com.intellij.execution.Location;
-import com.intellij.execution.actions.ConfigurationContext;
-import com.intellij.execution.actions.ConfigurationFromContext;
-import com.intellij.execution.actions.RunConfigurationProducer;
-import com.intellij.execution.junit.JUnitConfiguration;
-import com.intellij.execution.junit.JUnitConfigurationProducer;
-import com.intellij.execution.junit.JUnitUtil;
-import com.intellij.execution.junit.PatternConfigurationProducer;
-import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
-import com.intellij.execution.junit2.info.MethodLocation;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.util.Ref;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiMethod;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import static com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurations.isFromContext;
-import static com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurations.shouldUseAndroidJUnitConfigurations;
-
-/**
- * Android implementation of {@link AbstractTestMethodConfigurationProducer} so some behaviors can be overridden.
- */
-public class TestMethodAndroidConfigurationProducer extends JUnitConfigurationProducer implements AndroidJUnitConfigurationProducer {
- protected TestMethodAndroidConfigurationProducer() {
- super(AndroidJUnitConfigurationType.getInstance());
- }
-
- @Override
- public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) {
- return super.isPreferredConfiguration(self, other)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-
- @Override
- public boolean shouldReplace(@NotNull ConfigurationFromContext self, @NotNull ConfigurationFromContext other) {
- return super.isPreferredConfiguration(self, other)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-
- @Override
- protected boolean setupConfigurationFromContext(
- @NotNull JUnitConfiguration configuration,
- @NotNull ConfigurationContext context,
- @NotNull Ref<PsiElement> sourceElement) {
-
- if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
- return false;
- }
- final Location contextLocation = context.getLocation();
- assert contextLocation != null;
- PsiMethod method = getTestMethod(contextLocation);
- if (method == null || method.getContainingClass() == null) {
- return false;
- }
- Location<PsiMethod> methodLocation = MethodLocation.elementInClass(method, method.getContainingClass());
- if (methodLocation == null) return false;
-
- if (contextLocation instanceof PsiMemberParameterizedLocation) {
- final String paramSetName = ((PsiMemberParameterizedLocation)contextLocation).getParamSetName();
- if (paramSetName != null) {
- configuration.setProgramParameters(paramSetName);
- }
- PsiClass containingClass = ((PsiMemberParameterizedLocation)contextLocation).getContainingClass();
- if (containingClass != null) {
- methodLocation = MethodLocation.elementInClass(methodLocation.getPsiElement(), containingClass);
- }
- }
- sourceElement.set(methodLocation.getPsiElement());
- setupConfigurationModule(context, configuration);
- final Module originalModule = configuration.getConfigurationModule().getModule();
- configuration.beMethodConfiguration(methodLocation);
- configuration.restoreOriginalModule(originalModule);
- JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, contextLocation);
- configuration.setForkMode(JUnitConfiguration.FORK_NONE);
- return true;
- }
-
- private static PsiMethod getTestMethod(final Location<?> location) {
- PsiMethod elementMethod = AndroidPsiUtils.getPsiParentOfType(location.getPsiElement(), PsiMethod.class, false);
- return isTestMethod(elementMethod) ? elementMethod : null;
- }
-
- private static boolean isTestMethod(@Nullable PsiMethod method) {
- if (method == null) {
- return false;
- }
-
- PsiClass testClass = method.getContainingClass();
- if (testClass != null && JUnitUtil.isTestClass(testClass)) {
- return new JUnitUtil.TestMethodFilter(testClass).value(method);
- }
- return false;
- }
-
- @Override
- public boolean isConfigurationFromContext(@NotNull JUnitConfiguration unitConfiguration, @NotNull ConfigurationContext context) {
- return isFromContext(unitConfiguration, context, getConfigurationFactory());
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/TestPackageAndroidConfigurationProducer.java b/android/src/com/android/tools/idea/testartifacts/junit/TestPackageAndroidConfigurationProducer.java
deleted file mode 100644
index 711cf68..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/TestPackageAndroidConfigurationProducer.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.execution.actions.ConfigurationFromContext;
-import com.intellij.execution.junit.AbstractAllInPackageConfigurationProducer;
-import org.jetbrains.annotations.NotNull;
-
-import static com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurations.shouldUseAndroidJUnitConfigurations;
-
-/**
- * Android implementation of {@link AbstractAllInPackageConfigurationProducer} so some behaviors can be overridden.
- */
-public class TestPackageAndroidConfigurationProducer extends AbstractAllInPackageConfigurationProducer implements AndroidJUnitConfigurationProducer {
- protected TestPackageAndroidConfigurationProducer() {
- super(AndroidJUnitConfigurationType.getInstance());
- }
-
- @Override
- public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) {
- return super.isPreferredConfiguration(self, other)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-
- @Override
- public boolean shouldReplace(@NotNull ConfigurationFromContext self, @NotNull ConfigurationFromContext other) {
- return super.isPreferredConfiguration(self, other)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/junit/TestPatternConfigurationProducer.java b/android/src/com/android/tools/idea/testartifacts/junit/TestPatternConfigurationProducer.java
deleted file mode 100644
index ae7f1c7..0000000
--- a/android/src/com/android/tools/idea/testartifacts/junit/TestPatternConfigurationProducer.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.execution.Location;
-import com.intellij.execution.actions.ConfigurationContext;
-import com.intellij.execution.actions.ConfigurationFromContext;
-import com.intellij.execution.junit.*;
-import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
-import com.intellij.execution.testframework.AbstractPatternBasedConfigurationProducer;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.util.Ref;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiMethod;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import static com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurations.shouldUseAndroidJUnitConfigurations;
-
-/**
- * Android implementation of {@link AbstractPatternBasedConfigurationProducer} so some behaviors can be overridden.
- */
-public class TestPatternConfigurationProducer extends AbstractPatternBasedConfigurationProducer<AndroidJUnitConfiguration> implements AndroidJUnitConfigurationProducer {
- public TestPatternConfigurationProducer() {
- super(AndroidJUnitConfigurationType.getInstance());
- }
-
- @Override
- protected boolean isTestClass(PsiClass psiClass) {
- return JUnitUtil.isTestClass(psiClass);
- }
-
- @Override
- protected boolean isTestMethod(boolean checkAbstract, PsiMethod psiElement) {
- return JUnitUtil.getTestMethod(psiElement, checkAbstract) != null;
- }
-
- @Override
- protected boolean setupConfigurationFromContext(
- @NotNull AndroidJUnitConfiguration configuration,
- @NotNull ConfigurationContext context,
- @NotNull Ref<PsiElement> sourceElement) {
-
- LinkedHashSet<String> classes = new LinkedHashSet<String>();
- PsiElement element = checkPatterns(context, classes);
- if (element == null) {
- return false;
- }
- sourceElement.set(element);
- JUnitConfiguration.Data data = configuration.getPersistentData();
- data.setPatterns(classes);
- data.TEST_OBJECT = JUnitConfiguration.TEST_PATTERN;
- data.setScope(setupPackageConfiguration(context, configuration, data.getScope()));
- configuration.setGeneratedName();
- Location contextLocation = context.getLocation();
- if (contextLocation instanceof PsiMemberParameterizedLocation) {
- String paramSetName = ((PsiMemberParameterizedLocation)contextLocation).getParamSetName();
- if (paramSetName != null) {
- configuration.setProgramParameters(paramSetName);
- }
- }
- return true;
- }
-
- @Override
- protected Module findModule(AndroidJUnitConfiguration configuration, Module contextModule) {
- Set<String> patterns = configuration.getPersistentData().getPatterns();
- return findModule(configuration, contextModule, patterns);
- }
-
- @Override
- public boolean isConfigurationFromContext(@NotNull AndroidJUnitConfiguration unitConfiguration, @NotNull ConfigurationContext context) {
- if (JUnitConfiguration.TEST_PATTERN.equals(unitConfiguration.getPersistentData().TEST_OBJECT)) {
- Set<String> patterns = unitConfiguration.getPersistentData().getPatterns();
- if (isConfiguredFromContext(context, patterns)) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) {
- return !other.isProducedBy(TestMethodConfigurationProducer.class)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-
- @Override
- public boolean shouldReplace(@NotNull ConfigurationFromContext self, @NotNull ConfigurationFromContext other) {
- return !other.isProducedBy(TestMethodConfigurationProducer.class)
- && shouldUseAndroidJUnitConfigurations(self, other);
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcher.java b/android/src/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcher.java
deleted file mode 100644
index 32a9dde..0000000
--- a/android/src/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcher.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.scopes;
-
-import static com.android.SdkConstants.DOT_JAR;
-import static com.android.sdklib.IAndroidTarget.ANDROID_JAR;
-import static com.android.tools.idea.io.FilePaths.toSystemDependentPath;
-import static com.intellij.openapi.util.io.FileUtil.pathsEqual;
-
-import com.android.ide.common.gradle.model.IdeAndroidArtifact;
-import com.android.ide.common.gradle.model.IdeJavaArtifact;
-import com.android.tools.idea.gradle.project.GradleProjectInfo;
-import com.android.tools.idea.gradle.project.model.AndroidModuleModel;
-import com.android.tools.idea.gradle.project.model.JavaModuleModel;
-import com.android.tools.idea.projectsystem.TestArtifactSearchScopes;
-import com.intellij.execution.JUnitPatcher;
-import com.intellij.execution.configurations.JavaParameters;
-import com.intellij.openapi.compiler.CompileScope;
-import com.intellij.openapi.compiler.CompilerManager;
-import com.intellij.openapi.module.Module;
-import com.intellij.util.PathsList;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import org.jetbrains.android.sdk.AndroidPlatform;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.gradle.model.ExtIdeaCompilerOutput;
-
-/**
- * Implementation of {@link JUnitPatcher} that removes android.jar from the class path. It's only applicable to
- * JUnit run configurations if the selected test artifact is "unit tests". In this case, the mockable android.jar is already in the
- * dependencies (taken from the model).
- */
-public class AndroidJunitPatcher extends JUnitPatcher {
- @Override
- public void patchJavaParameters(@Nullable Module module, @NotNull JavaParameters javaParameters) {
- // Only patch if the project is a Gradle project.
- if (module == null || !GradleProjectInfo.getInstance(module.getProject()).isBuildWithGradle()) {
- return;
- }
-
- AndroidModuleModel androidModel = AndroidModuleModel.get(module);
- if (androidModel == null) {
- // Add resource folders if Java module and for module dependencies
- addFoldersToClasspath(module, null, javaParameters.getClassPath());
- return;
- }
-
- // Modify the class path only if we're dealing with the unit test artifact.
- IdeJavaArtifact testArtifact = androidModel.getSelectedVariant().getUnitTestArtifact();
- if (testArtifact == null) {
- return;
- }
-
- PathsList classPath = javaParameters.getClassPath();
-
- TestArtifactSearchScopes testScopes = TestArtifactSearchScopes.getInstance(module);
- if (testScopes == null) {
- return;
- }
-
- // There is potential performance if we just call remove for all excluded items because every random remove operation has linear
- // complexity. TODO change the {@code PathList} API.
- for (String path : classPath.getPathList()) {
- if (!testScopes.includeInUnitTestClasspath(new File(path))) {
- classPath.remove(path);
- }
- }
-
- AndroidPlatform platform = AndroidPlatform.getInstance(module);
- if (platform == null) {
- return;
- }
-
- String originalClassPath = classPath.getPathsString();
- try {
- addRuntimeJarsToClasspath(testArtifact, classPath);
- replaceAndroidJarWithMockableJar(classPath, platform, testArtifact);
- addFoldersToClasspath(module, testArtifact, classPath);
- }
- catch (RuntimeException e) {
- throw new RuntimeException(String.format("Error patching the JUnit class path. Original class path:%n%s", originalClassPath), e);
- }
- }
-
- /**
- * Removes real android.jar from the classpath and puts the mockable one at the end.
- */
- private static void replaceAndroidJarWithMockableJar(@NotNull PathsList classPath,
- @NotNull AndroidPlatform platform,
- @NotNull IdeJavaArtifact artifact) {
- String androidJarPath = platform.getTarget().getPath(ANDROID_JAR);
- for (String entry : classPath.getPathList()) {
- if (pathsEqual(androidJarPath, entry)) {
- classPath.remove(entry);
- }
- }
-
- // Move the mockable android jar to the end. This is to make sure "empty" classes from android.jar don't end up shadowing real
- // classes needed by the testing code (e.g. XML/JSON related). Since mockable jars were introduced in 1.1, they were put in the model
- // as dependencies, which means a module which depends on Android libraries with different will end up with more than one mockable jar
- // in the classpath.
- List<String> mockableJars = new ArrayList<>();
- for (String path : classPath.getPathList()) {
- if (toSystemDependentPath(path).getName().startsWith("mockable-")) {
- // PathsList stores strings - use the one that's actually stored there.
- mockableJars.add(path);
- }
- }
-
- // Remove all mockable android.jars.
- for (String mockableJar : mockableJars) {
- classPath.remove(mockableJar);
- }
-
- File mockableJar = artifact.getMockablePlatformJar();
-
- if (mockableJar != null) {
- classPath.addTail(mockableJar.getPath());
- }
- else {
- // We're dealing with an old plugin, that puts the mockable jar in the dependencies. Just put the matching android.jar at the end of
- // the classpath.
- for (String mockableJarPath : mockableJars) {
- if (mockableJarPath.endsWith("-" + platform.getApiLevel() + DOT_JAR)) {
- classPath.addTail(mockableJarPath);
- return;
- }
- }
- }
- }
-
- /**
- * Puts additional necessary folders for the selected variant of every module on the classpath.
- *
- * <p>The problem we're solving here is that CompilerModuleExtension supports only one directory for "compiler output". When IJ compiles
- * Java projects, it copies resources and Kotlin classes to the output classes dir. This is something Gradle doesn't do, so we need to add
- * these directories to the classpath here.
- *
- * <p>We need to do this for every project dependency as well, since we're using classes and resources directories of these directly.
- *
- * @see <a href="http://b.android.com/172409">Bug 172409</a>
- */
- private static void addFoldersToClasspath(@NotNull Module module,
- @Nullable IdeJavaArtifact testArtifact,
- @NotNull PathsList classPath) {
- CompilerManager compilerManager = CompilerManager.getInstance(module.getProject());
- CompileScope scope = compilerManager.createModulesCompileScope(new Module[]{module}, true, true);
-
- if (testArtifact != null) {
- classPath.addAllFiles(ExcludedRoots.getAdditionalClasspathFolders(testArtifact));
- }
-
- TestArtifactSearchScopes testScopes = TestArtifactSearchScopes.getInstance(module);
-
- for (Module affectedModule : scope.getAffectedModules()) {
- AndroidModuleModel affectedAndroidModel = AndroidModuleModel.get(affectedModule);
- if (affectedAndroidModel != null) {
- IdeAndroidArtifact mainArtifact = affectedAndroidModel.getMainArtifact();
- for (File folder : ExcludedRoots.getAdditionalClasspathFolders(mainArtifact)) {
- addToClasspath(folder, classPath, testScopes);
- }
- }
-
- // Adds resources from java modules to the classpath (see b/37137712)
- JavaModuleModel javaModel = JavaModuleModel.get(affectedModule);
- if (javaModel != null) {
- ExtIdeaCompilerOutput output = javaModel.getCompilerOutput();
- File javaTestResources = output == null ? null : output.getTestResourcesDir();
- if (javaTestResources != null) {
- addToClasspath(javaTestResources, classPath, testScopes);
- }
- File javaMainResources = output == null ? null : output.getMainResourcesDir();
- if (javaMainResources != null) {
- addToClasspath(javaMainResources, classPath, testScopes);
- }
-
- if (javaModel.getBuildFolderPath() != null) {
- File kotlinClasses = javaModel.getBuildFolderPath().toPath().resolve("classes").resolve("kotlin").toFile();
-
- if (kotlinClasses.exists()) {
- // It looks like standard Gradle-4.0-style output directories are used. We add Kotlin equivalents speculatively, since we don't
- // yet have a way of passing the data all the way from Gradle to here.
- addToClasspath(new File(kotlinClasses, "main"), classPath, testScopes);
- addToClasspath(new File(kotlinClasses, "test"), classPath, testScopes);
- }
- }
- }
- }
- }
-
- private static void addToClasspath(@NotNull File folder, @NotNull PathsList classPath, @Nullable TestArtifactSearchScopes scopes) {
- if (scopes == null || scopes.includeInUnitTestClasspath(folder)) {
- classPath.add(folder);
- }
- }
-
- /**
- * Put runtime jars to classpath.
- * The runtime classpath is artifact-specific, there is no need to apply exclude scope.
- */
- private static void addRuntimeJarsToClasspath(@NotNull IdeJavaArtifact testArtifact,
- @NotNull PathsList classPath) {
- for (File runtimeClasspath : testArtifact.getLevel2Dependencies().getRuntimeOnlyClasses()) {
- classPath.add(runtimeClasspath);
- }
- }
-}
diff --git a/android/src/com/android/tools/idea/testartifacts/scopes/ExcludedRoots.java b/android/src/com/android/tools/idea/testartifacts/scopes/ExcludedRoots.java
index b617944..0db2665 100644
--- a/android/src/com/android/tools/idea/testartifacts/scopes/ExcludedRoots.java
+++ b/android/src/com/android/tools/idea/testartifacts/scopes/ExcludedRoots.java
@@ -158,9 +158,6 @@
/**
* Returns folders which are used for unit testing and stored in the model, but not represented in the IntelliJ project structure.
- *
- * <p>These folders are added to the classpath by {@link AndroidJunitPatcher} and potentially filtered out by this class via
- * {@link GradleTestArtifactSearchScopes}.
*/
public static List<File> getAdditionalClasspathFolders(@NotNull IdeBaseArtifact artifact) {
return ImmutableList.<File>builder()
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/AndroidTestAndJUnitConfigurationConflictsTest.java b/android/testSrc/com/android/tools/idea/testartifacts/AndroidTestAndJUnitConfigurationConflictsTest.java
deleted file mode 100644
index 886327f..0000000
--- a/android/testSrc/com/android/tools/idea/testartifacts/AndroidTestAndJUnitConfigurationConflictsTest.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts;
-
-import static com.android.tools.idea.testartifacts.TestConfigurationTesting.createAndroidTestConfigurationFromDirectory;
-import static com.android.tools.idea.testartifacts.TestConfigurationTesting.createJUnitConfigurationFromDirectory;
-import static com.android.tools.idea.testing.TestProjectPaths.TEST_ARTIFACTS_SAME_NAME_CLASSES;
-import static com.google.common.truth.Truth.assertThat;
-
-import com.android.tools.idea.testartifacts.instrumented.AndroidTestConsoleProperties;
-import com.android.tools.idea.testartifacts.instrumented.AndroidTestRunConfiguration;
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfiguration;
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurationType;
-import com.android.tools.idea.testartifacts.junit.AndroidTestPackage;
-import com.android.tools.idea.projectsystem.TestArtifactSearchScopes;
-import com.android.tools.idea.testing.AndroidGradleTestCase;
-import com.android.tools.idea.testing.TestProjectPaths;
-import com.intellij.execution.ConfigurationUtil;
-import com.intellij.execution.Executor;
-import com.intellij.execution.configurations.RunConfiguration;
-import com.intellij.execution.executors.DefaultRunExecutor;
-import com.intellij.execution.junit.JUnitConfiguration;
-import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
-import com.intellij.execution.testframework.TestSearchScope;
-import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.util.SystemInfo;
-import com.intellij.psi.JavaPsiFacade;
-import com.intellij.psi.PsiClass;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Tests for eventual conflicts between {@link AndroidTestRunConfiguration} and {@link AndroidJUnitConfiguration}
- */
-//TODO(karimai): Migrate this test when both Instrumented tests and unit tests use GRADLE.
-public class AndroidTestAndJUnitConfigurationConflictsTest extends AndroidGradleTestCase {
- // See http://b.android.com/215255
- public void testConfigurationsAreDifferent() throws Exception {
- loadSimpleApplication();
- if (SystemInfo.isWindows) {
- // Do not run tests on Windows (see http://b.android.com/222904)
- return;
- }
-
- RunConfiguration androidTestRunConfiguration = createAndroidTestConfigurationFromDirectory(getProject(), "app/src/androidTest/java");
- RunConfiguration jUnitConfiguration = createJUnitConfigurationFromDirectory(getProject(), "app/src/test/java");
-
- assertNotNull(jUnitConfiguration);
- assertNotNull(androidTestRunConfiguration);
-
- assertNotSame(androidTestRunConfiguration, jUnitConfiguration);
- }
-
- public void testDoubleClickRedirection() throws Exception {
- String commonTestClassName = "google.testartifacts.ExampleTest";
- loadProject(TEST_ARTIFACTS_SAME_NAME_CLASSES);
-
- Executor executor = DefaultRunExecutor.getRunExecutorInstance();
-
- AndroidJUnitConfiguration jUnitConfiguration = createJUnitConfigurationFromDirectory(getProject(), "app/src/test/java");
- RunConfiguration androidTestRunConfiguration = createAndroidTestConfigurationFromDirectory(getProject(), "app/src/androidTest/java");
-
- assertNotNull(jUnitConfiguration);
- assertNotNull(androidTestRunConfiguration);
-
- SMTRunnerConsoleProperties jUnitProperties = jUnitConfiguration.createTestConsoleProperties(executor);
- SMTRunnerConsoleProperties androidTestProperties = new AndroidTestConsoleProperties(androidTestRunConfiguration, executor);
-
- PsiClass[] jUnitClasses = JavaPsiFacade.getInstance(getProject()).findClasses(commonTestClassName, jUnitProperties.getScope());
- PsiClass[] aTestClasses = JavaPsiFacade.getInstance(getProject()).findClasses(commonTestClassName, androidTestProperties.getScope());
-
- assertSize(1, jUnitClasses);
- assertSize(1, aTestClasses);
- assertNotSame(jUnitClasses[0], aTestClasses[0]);
- }
-
- public void testCorrectJUnitConfigurationAllInPackageModule() throws Exception {
- loadSimpleApplication();
- checkClassesInAllInPackage(TestSearchScope.SINGLE_MODULE, "google.simpleapplication");
- }
-
- public void testCorrectJUnitConfigurationAllInPackageProject() throws Exception {
- loadSimpleApplication();
- checkClassesInAllInPackage(TestSearchScope.WHOLE_PROJECT, "google.simpleapplication");
- }
-
- public void testAllInProject() throws Exception {
- loadProject(TestProjectPaths.UNIT_TESTING);
- Set<PsiClass> testClasses = getClassesToTest(TestSearchScope.WHOLE_PROJECT, "", getModule("app"));
- assertThat(testClasses.stream().map(PsiClass::getQualifiedName).collect(Collectors.toSet())).containsExactly(
- "com.example.app.AppJavaUnitTest",
- "com.example.app.AppKotlinUnitTest",
- "com.example.javalib.JavaLibJavaTest",
- "com.example.javalib.JavaLibKotlinTest",
- "com.example.util_lib.UtilLibJavaTest",
- "com.example.util_lib.UtilLibKotlinTest"
- );
-
- }
-
- public void testAcrossModuleBoundaries() throws Exception {
- loadProject(TestProjectPaths.UNIT_TESTING);
- Set<PsiClass> testClasses = getClassesToTest(TestSearchScope.MODULE_WITH_DEPENDENCIES, "", getModule("app"));
- assertThat(testClasses.stream().map(PsiClass::getQualifiedName).collect(Collectors.toSet())).containsExactly(
- "com.example.app.AppJavaUnitTest",
- "com.example.app.AppKotlinUnitTest",
- "com.example.javalib.JavaLibJavaTest",
- "com.example.javalib.JavaLibKotlinTest",
- "com.example.util_lib.UtilLibJavaTest",
- "com.example.util_lib.UtilLibKotlinTest"
- );
- }
-
- private void checkClassesInAllInPackage(@NotNull TestSearchScope type,
- @SuppressWarnings("SameParameterValue") @NotNull String packageName) {
- Module module = getModule("app");
- Set<PsiClass> myClasses = getClassesToTest(type, packageName, module);
-
- assertSize(1, myClasses);
- TestArtifactSearchScopes scopes = TestArtifactSearchScopes.getInstance(module);
- assertNotNull(scopes);
- assertTrue(scopes.isUnitTestSource(myClasses.iterator().next().getContainingFile().getVirtualFile()));
- }
-
- @NotNull
- private Set<PsiClass> getClassesToTest(@NotNull TestSearchScope type, @NotNull String packageName, @NotNull Module module) {
- assertNotNull(module);
-
- AndroidJUnitConfiguration configuration = createAllInPackageRunConfiguration(module, packageName, type);
- AndroidTestPackage testPackage =
- new AndroidTestPackage(configuration,
- ExecutionEnvironmentBuilder.create(DefaultRunExecutor.getRunExecutorInstance(), configuration).build());
- Set<PsiClass> myClasses = new HashSet<>();
- ConfigurationUtil.findAllTestClasses(testPackage.getClassFilter(configuration.getPersistentData()), module, myClasses);
- return myClasses;
- }
-
- @NotNull
- private AndroidJUnitConfiguration createAllInPackageRunConfiguration(Module module, String packageName, TestSearchScope type) {
- AndroidJUnitConfiguration configuration =
- new AndroidJUnitConfiguration(getProject(), AndroidJUnitConfigurationType.getInstance().getConfigurationFactories()[0]);
- configuration.getPersistentData().TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE;
- configuration.getPersistentData().PACKAGE_NAME = packageName;
- configuration.getPersistentData().setScope(type);
- configuration.setModule(module);
- return configuration;
- }
-}
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/gradle/AndroidGradleConfigurationProducersTest.kt b/android/testSrc/com/android/tools/idea/testartifacts/gradle/AndroidGradleConfigurationProducersTest.kt
index c5e792a..a935a7c 100644
--- a/android/testSrc/com/android/tools/idea/testartifacts/gradle/AndroidGradleConfigurationProducersTest.kt
+++ b/android/testSrc/com/android/tools/idea/testartifacts/gradle/AndroidGradleConfigurationProducersTest.kt
@@ -28,16 +28,6 @@
* Tests for producing Gradle Run Configuration for Android unit test.
*/
class AndroidGradleConfigurationProducersTest : AndroidGradleTestCase() {
- override fun setUp() {
- super.setUp()
- StudioFlags.GRADLE_UNIT_TESTING.override(true)
- }
-
- @Throws(Exception::class)
- override fun tearDown() {
- super.tearDown()
- StudioFlags.GRADLE_UNIT_TESTING.clearOverride()
- }
@Throws(Exception::class)
fun testCanCreateGradleConfigurationFromTestClass() {
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/gradle/AndroidGradleTestTasksProviderTest.kt b/android/testSrc/com/android/tools/idea/testartifacts/gradle/AndroidGradleTestTasksProviderTest.kt
index eba52fc..82e0e67 100644
--- a/android/testSrc/com/android/tools/idea/testartifacts/gradle/AndroidGradleTestTasksProviderTest.kt
+++ b/android/testSrc/com/android/tools/idea/testartifacts/gradle/AndroidGradleTestTasksProviderTest.kt
@@ -30,16 +30,6 @@
* Tests for {@link AndroidGradleTestTasksProvider} to verify that GRADLE can create the right run configurations when having same name.
*/
class AndroidGradleTestTasksProviderTest: AndroidGradleTestCase() {
- override fun setUp() {
- super.setUp()
- StudioFlags.GRADLE_UNIT_TESTING.override(true)
- }
-
- @Throws(Exception::class)
- override fun tearDown() {
- super.tearDown()
- StudioFlags.GRADLE_UNIT_TESTING.clearOverride()
- }
@Throws(Exception::class)
fun testCanCreateGradleConfigurationFromTestClass() {
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitClasspathTest.java b/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitClasspathTest.java
deleted file mode 100644
index f50c3f6..0000000
--- a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitClasspathTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.android.tools.idea.gradle.project.build.invoker.GradleInvocationResult;
-import com.android.tools.idea.gradle.project.build.invoker.TestCompileType;
-import com.android.tools.idea.testing.AndroidGradleTestCase;
-import com.android.tools.idea.testing.TestModuleUtil;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.roots.CompilerModuleExtension;
-
-public class AndroidJUnitClasspathTest extends AndroidGradleTestCase {
-
- // See bug http://b.android.com/233410
- public void testRightPaths() throws Exception {
- loadSimpleApplication();
- Module module = TestModuleUtil.findModule(getProject(), "app");
- Module[] modulesToCompile = {module};
-
- GradleInvocationResult invocationResult =
- invokeGradle(getProject(), invoker -> invoker.compileJava(modulesToCompile, TestCompileType.UNIT_TESTS));
-
- assertTrue(invocationResult.isBuildSuccessful());
-
- CompilerModuleExtension originalCompilerModuleExtension = CompilerModuleExtension.getInstance(module);
- assertNotNull(originalCompilerModuleExtension);
- assertFalse(originalCompilerModuleExtension.isCompilerOutputPathInherited());
-
- String compilerOutputUrlForTests = originalCompilerModuleExtension.getCompilerOutputUrlForTests();
- assertNotNull(compilerOutputUrlForTests);
- assertTrue(compilerOutputUrlForTests.contains("app/build/intermediates/javac/debugUnitTest/classes"));
-
- String compilerOutputUrl = originalCompilerModuleExtension.getCompilerOutputUrl();
- assertNotNull(compilerOutputUrl);
- assertTrue(compilerOutputUrl.contains("app/build/intermediates/javac/debug/classes"));
-
- assertSize(2, originalCompilerModuleExtension.getOutputRootUrls(true));
- }
-}
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverterTest.java b/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverterTest.java
deleted file mode 100644
index 9e24874..0000000
--- a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationConverterTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.conversion.ConversionProcessor;
-import com.intellij.conversion.RunManagerSettings;
-import com.intellij.testFramework.PlatformTestCase;
-import org.jdom.Element;
-import org.jdom.input.SAXBuilder;
-import org.jetbrains.annotations.NotNull;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-
-import static com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurationConverter.*;
-import static com.android.tools.idea.testing.TestProjectPaths.TEST_ARTIFACTS_OLD_TESTS;
-import static org.jetbrains.android.AndroidTestBase.getTestDataPath;
-
-/**
- * Tests for {@link AndroidJUnitConfigurationConverter}.
- */
-public class AndroidJUnitConfigurationConverterTest extends PlatformTestCase {
-
- public void testConfigurationsAreConvertedInStudio() throws Exception {
-
- ConversionProcessor<RunManagerSettings> converter = new AndroidJUnitConfigurationConverter().createRunConfigurationsConverter();
- RunManagerSettings runManagerSettings = getStubRunManagerSettings();
- Collection<? extends Element> runConfigurations = runManagerSettings.getRunConfigurations();
-
- assertTrue(converter.isConversionNeeded(runManagerSettings));
- assertSize(2, getJUnitConfigurations(runConfigurations));
- assertEmpty(getAndroidJUnitConfigurations(runConfigurations));
-
- converter.process(runManagerSettings);
- assertEmpty(getJUnitConfigurations(runConfigurations));
- assertSize(2, getAndroidJUnitConfigurations(runConfigurations));
- }
-
- @NotNull
- private static RunManagerSettings getStubRunManagerSettings() {
- return new RunManagerSettings() {
- Collection<Element> myElements = null;
- @NotNull
- @Override
- public Collection<? extends Element> getRunConfigurations() {
- if (myElements == null) {
- Element root = null;
- try {
- root = readElement(getTestDataPath() + "/" + TEST_ARTIFACTS_OLD_TESTS + "/.idea/workspace.xml");
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- myElements = root != null ? root.getChild("component").getChildren("configuration") : Collections.emptySet();
- }
- return myElements;
- }
- };
- }
-
- private static Element readElement(String path) throws Exception {
- return new SAXBuilder().build(new File(path)).getRootElement();
- }
-
- @NotNull
- private static Collection<Element> getJUnitConfigurations(@NotNull Collection<? extends Element> configurations) {
- return getConfigurationsOfType(configurations, JUNIT_CONFIGURATION_TYPE, JUNIT_CONFIGURATION_FACTORY_NAME);
- }
-
- @NotNull
- private static Collection<Element> getAndroidJUnitConfigurations(@NotNull Collection<? extends Element> configurations) {
- return getConfigurationsOfType(configurations, ANDROID_JUNIT_CONFIGURATION_TYPE, ANDROID_JUNIT_CONFIGURATION_FACTORY_NAME);
- }
-
- @NotNull
- private static Collection<Element> getConfigurationsOfType(@NotNull Collection<? extends Element> configurations,
- @NotNull String configurationType,
- @NotNull String configurationFactoryName) {
- Collection<Element> aimConfigurations = new LinkedList<>();
- for (Element element : configurations) {
- String typeName = element.getAttributeValue(CONFIGURATION_TYPE_ATTRIBUTE);
- String factoryName = element.getAttributeValue(FACTORY_NAME_ATTRIBUTE);
- Boolean isTemplate = Boolean.valueOf(element.getAttributeValue(TEMPLATE_FLAG_ATTRIBUTE)).booleanValue();
- if (!isTemplate && typeName.equals(configurationType) && factoryName.equals(configurationFactoryName)) {
- aimConfigurations.add(element);
- }
- }
- return aimConfigurations;
- }
-}
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationProducersTest.java b/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationProducersTest.java
deleted file mode 100644
index 94d370a..0000000
--- a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationProducersTest.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import static com.android.tools.idea.testartifacts.TestConfigurationTesting.createContext;
-import static com.android.tools.idea.testartifacts.TestConfigurationTesting.createJUnitConfigurationFromClass;
-import static com.android.tools.idea.testartifacts.TestConfigurationTesting.createJUnitConfigurationFromDirectory;
-import static com.android.tools.idea.testartifacts.TestConfigurationTesting.createJUnitConfigurationFromFile;
-import static com.android.tools.idea.testartifacts.TestConfigurationTesting.getPsiElement;
-import static com.android.tools.idea.testing.TestProjectPaths.TEST_ARTIFACTS_KOTLIN;
-
-import com.android.tools.idea.gradle.run.MakeBeforeRunTaskProvider;
-import com.android.tools.idea.testing.AndroidGradleTestCase;
-import com.intellij.compiler.options.CompileStepBeforeRun;
-import com.intellij.execution.BeforeRunTask;
-import com.intellij.execution.BeforeRunTaskProvider;
-import com.intellij.execution.RunnerAndConfigurationSettings;
-import com.intellij.execution.actions.ConfigurationContext;
-import com.intellij.execution.configurations.RunConfiguration;
-import com.intellij.execution.impl.RunManagerImpl;
-import com.intellij.openapi.util.SystemInfo;
-import java.util.List;
-import org.gradle.internal.impldep.com.google.common.collect.Lists;
-
-
-/**
- * Tests for all the {@link AndroidJUnitConfigurationProducer}s
- */
-// TODO(karimai): delete this test when the test Runner is only Gradle.
-public class AndroidJUnitConfigurationProducersTest extends AndroidGradleTestCase {
-
- @Override
- protected boolean shouldRunTest() {
- // Do not run tests on Windows (see http://b.android.com/222904)
- return !SystemInfo.isWindows && super.shouldRunTest();
- }
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- }
-
- public void testCanCreateJUnitConfigurationFromJUnitTestClass() throws Exception {
- loadSimpleApplication();
- assertNotNull(createJUnitConfigurationFromClass(getProject(), "google.simpleapplication.UnitTest"));
- }
-
- public void testCannotCreateJUnitConfigurationFromAndroidTestClass() throws Exception {
- loadSimpleApplication();
- assertNull(createJUnitConfigurationFromClass(getProject(), "google.simpleapplication.ApplicationTest"));
- }
-
- public void testCanCreateJUnitConfigurationFromJUnitTestDirectory() throws Exception {
- loadSimpleApplication();
- assertNotNull(createJUnitConfigurationFromDirectory(getProject(), "app/src/test/java"));
- }
-
- public void testCannotCreateJUnitConfigurationFromAndroidTestDirectory() throws Exception {
- loadSimpleApplication();
- assertNull(createJUnitConfigurationFromDirectory(getProject(), "app/src/androidTest/java"));
- }
-
- public void testCannotCreateJUnitConfigurationFromAndroidTestClassKotlin() throws Exception {
- loadProject(TEST_ARTIFACTS_KOTLIN);
- assertNull(createJUnitConfigurationFromFile(
- getProject(), "app/src/androidTest/java/com/example/android/kotlin/ExampleInstrumentedTest.kt"));
- }
-
- public void testCanCreateJUnitConfigurationFromJUnitTestDirectoryKotlin() throws Exception {
- loadProject(TEST_ARTIFACTS_KOTLIN);
- assertNotNull(createJUnitConfigurationFromDirectory(getProject(), "app/src/test/java"));
- }
-
- public void testCannotCreateJUnitConfigurationFromAndroidTestDirectoryKotlin() throws Exception {
- loadProject(TEST_ARTIFACTS_KOTLIN);
- assertNull(createJUnitConfigurationFromDirectory(getProject(), "app/src/androidTest/java"));
- }
-
- public void testCreatedJUnitConfigurationHasGradleBeforeRunTask() throws Exception {
- loadSimpleApplication();
-
- // Create and add RunConfiguration to the RunManager
- RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(getProject());
- RunnerAndConfigurationSettings settings = runManager.createConfiguration(
- createJUnitConfigurationFromClass(getProject(), "google.simpleapplication.UnitTest"),
- AndroidJUnitConfigurationType.getInstance().getConfigurationFactories()[0]);
- runManager.addConfiguration(settings);
-
- // Get AndroidJUnitRunConfiguration from RunManager
- List<RunConfiguration> runConfigurations = runManager.getConfigurationsList(AndroidJUnitConfigurationType.getInstance());
- assertSize(1, runConfigurations);
- RunConfiguration runConfiguration = runConfigurations.iterator().next();
- assertInstanceOf(runConfiguration, AndroidJUnitConfiguration.class);
-
- // Check if BeforeRunTask is correct
- List<BeforeRunTask<?>> beforeRunTasks = runManager.getBeforeRunTasks(runConfiguration);
- assertSize(1, beforeRunTasks);
- assertEquals(MakeBeforeRunTaskProvider.ID, beforeRunTasks.get(0).getProviderId());
-
- // Re-sync and check again
- requestSyncAndWait();
- runConfigurations = runManager.getConfigurationsList(AndroidJUnitConfigurationType.getInstance());
- assertSize(1, runConfigurations);
- runConfiguration = runConfigurations.iterator().next();
- assertInstanceOf(runConfiguration, AndroidJUnitConfiguration.class);
-
- beforeRunTasks = RunManagerImpl.getInstanceImpl(getProject()).getBeforeRunTasks(runConfiguration);
- assertSize(1, beforeRunTasks);
- assertEquals(MakeBeforeRunTaskProvider.ID, beforeRunTasks.get(0).getProviderId());
- }
-
- public void testExistingJUnitConfigurationNotModifiedAfterSync() throws Exception {
- loadSimpleApplication();
-
- // Create and add RunConfiguration to the RunManager
- RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(getProject());
- RunnerAndConfigurationSettings settings = runManager.createConfiguration(
- createJUnitConfigurationFromClass(getProject(), "google.simpleapplication.UnitTest"),
- AndroidJUnitConfigurationType.getInstance().getConfigurationFactories()[0]);
- runManager.addConfiguration(settings);
-
- // Get AndroidJUnitRunConfiguration from RunManager
- List<RunConfiguration> runConfigurations = runManager.getConfigurationsList(AndroidJUnitConfigurationType.getInstance());
- assertSize(1, runConfigurations);
- RunConfiguration runConfiguration = runConfigurations.iterator().next();
- assertInstanceOf(runConfiguration, AndroidJUnitConfiguration.class);
-
- // Check if BeforeRunTask is correct
- List<BeforeRunTask<?>> beforeRunTasks = runManager.getBeforeRunTasks(runConfiguration);
- assertSize(1, beforeRunTasks);
- assertEquals(MakeBeforeRunTaskProvider.ID, beforeRunTasks.get(0).getProviderId());
-
- // Modify tasks
- CompileStepBeforeRun.MakeBeforeRunTask ideaMake = BeforeRunTaskProvider.getProvider(getProject(), CompileStepBeforeRun.ID).
- createTask(runConfiguration);
- runManager.setBeforeRunTasks(runConfiguration, Lists.<BeforeRunTask>newArrayList(ideaMake));
-
- // Re-sync and check again
- requestSyncAndWait();
- runConfigurations = runManager.getConfigurationsList(AndroidJUnitConfigurationType.getInstance());
- assertSize(1, runConfigurations);
- runConfiguration = runConfigurations.iterator().next();
- assertInstanceOf(runConfiguration, AndroidJUnitConfiguration.class);
-
- beforeRunTasks = RunManagerImpl.getInstanceImpl(getProject()).getBeforeRunTasks(runConfiguration);
- assertSize(1, beforeRunTasks);
- assertEquals(CompileStepBeforeRun.ID, beforeRunTasks.get(0).getProviderId());
- }
-
- public void testIsFromContextForDirectoryJUnitConfiguration() throws Exception {
- loadSimpleApplication();
- AndroidJUnitConfiguration configuration = createJUnitConfigurationFromDirectory(getProject(), "app/src/test/java");
- ConfigurationContext context = createContext(getProject(), getPsiElement(getProject(), "app/src/test/java", true));
- assertTrue(new TestDirectoryAndroidConfigurationProducer().isConfigurationFromContext(configuration, context));
- }
-}
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationTypeTest.java b/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationTypeTest.java
deleted file mode 100644
index d0284f8..0000000
--- a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidJUnitConfigurationTypeTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit;
-
-import com.intellij.execution.junit.JUnitConfigurationType;
-import org.jetbrains.android.AndroidTestCase;
-import org.jetbrains.android.util.AndroidBuildCommonUtils;
-import org.junit.Ignore;
-
-/**
- * Tests for {@link AndroidJUnitConfigurationType}
- */
-@Ignore // Broken after 2017.1 merge
-public class AndroidJUnitConfigurationTypeTest extends AndroidTestCase {
-
- public void testConfigurationTypeIdRegistered() {
- assertTrue(AndroidBuildCommonUtils.isTestConfiguration(AndroidJUnitConfigurationType.getInstance().getId()));
- }
-
- // Since JUnitConfigurationType is disabled in AndroidStudioInitializer, and AndroidJUnitConfigurationType
- // is registered as child, it should be returned when getInstance() of the parent is called
- public void testJUnitConfigurationTypeGetInstance() {
- JUnitConfigurationType configurationType = JUnitConfigurationType.getInstance();
- assertInstanceOf(configurationType, AndroidJUnitConfigurationType.class);
- }
-}
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidTestObjectTest.kt b/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidTestObjectTest.kt
deleted file mode 100644
index 66cfe69..0000000
--- a/android/testSrc/com/android/tools/idea/testartifacts/junit/AndroidTestObjectTest.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.junit
-
-import com.android.tools.idea.testartifacts.TestConfigurationTesting.createContext
-import com.android.tools.idea.testing.AndroidGradleTestCase
-import com.google.common.truth.Truth.assertThat
-import com.intellij.execution.RunManager
-import com.intellij.execution.RunnerAndConfigurationSettings
-
-// TODO (karimai) : delete this when test Runner is only through Gradle.
-class AndroidTestObjectTest : AndroidGradleTestCase() {
- fun testGetListener() {
- loadSimpleApplication()
-
- val testClass = myFixture.findClass("google.simpleapplication.UnitTest")
- val testMethod = testClass.findMethodsByName("passingTest", false).single()
- val testPackage = myFixture.findPackage("google.simpleapplication")
-
- val runManager = RunManager.getInstance(project)
- val testClassRunnerAndSettings = createContext(project, testClass).configuration!!.also(runManager::addConfiguration)
- val testMethodRunnerAndSettings = createContext(project, testMethod).configuration!!.also(runManager::addConfiguration)
- val testPackageRunnerAndSettings = createContext(project, testPackage).configuration!!.also(runManager::addConfiguration)
-
- // Different configurations may care or not about these, we exercise both code paths.
- myFixture.renameElement(testClass, "RenamedUnitTest")
- myFixture.renameElement(testMethod, "someTest")
- myFixture.renameElement(testPackage, "mypackage")
-
- assertThat(testClassRunnerAndSettings.toAndroidJUnit().persistentData.mainClassName)
- .isEqualTo("google.mypackage.RenamedUnitTest")
-
- assertThat(testMethodRunnerAndSettings.toAndroidJUnit().persistentData.mainClassName)
- .isEqualTo("google.mypackage.RenamedUnitTest")
- assertThat(testMethodRunnerAndSettings.toAndroidJUnit().persistentData.methodName)
- .isEqualTo("someTest")
-
- assertThat(testPackageRunnerAndSettings.toAndroidJUnit().persistentData.packageName)
- .isEqualTo("google.mypackage")
- }
-
- private fun RunnerAndConfigurationSettings.toAndroidJUnit() = configuration as AndroidJUnitConfiguration
-}
\ No newline at end of file
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcherTest.kt b/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcherTest.kt
deleted file mode 100644
index f2f69de..0000000
--- a/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcherTest.kt
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.scopes
-
-import com.android.testutils.TestUtils.getLatestAndroidPlatform
-import com.android.testutils.TestUtils.getPlatformFile
-import com.android.tools.idea.testing.AndroidModuleModelBuilder
-import com.android.tools.idea.testing.AndroidProjectBuilder
-import com.android.tools.idea.testing.buildDependenciesStub
-import com.android.tools.idea.testing.buildMainArtifactStub
-import com.android.tools.idea.testing.buildUnitTestArtifactStub
-import com.android.tools.idea.testing.setupTestProjectFromAndroidModel
-import com.google.common.collect.Iterables
-import com.google.common.collect.Sets
-import com.google.common.truth.Truth.assertThat
-import com.intellij.execution.configurations.JavaParameters
-import com.intellij.openapi.util.SystemInfo
-import com.intellij.openapi.util.io.FileUtil
-import com.intellij.openapi.util.io.FileUtil.normalize
-import com.intellij.testFramework.UsefulTestCase
-import junit.framework.TestCase
-import org.jetbrains.android.AndroidTestCase
-import org.jetbrains.android.sdk.AndroidPlatform
-import java.io.File
-
-/**
- * Tests for [AndroidJunitPatcher].
- */
-class AndroidJunitPatcherTest : AndroidTestCase() {
-
- private lateinit var exampleClassPathSet: Set<String>
- private lateinit var realAndroidJar: String
- private lateinit var mockableAndroidJar: String
- private lateinit var kotlinClasses: String
- private lateinit var testKotlinClasses: String
- private lateinit var resourcesDirs: Collection<String>
-
- private lateinit var patcher: AndroidJunitPatcher
- private lateinit var javaParameters: JavaParameters
- private lateinit var root: String
-
- private // Sanity check. These should be fixed by the patcher.
- fun getExampleClasspath(): List<String> {
- root = project.basePath!!
- val exampleClassPath = mutableListOf(
- root + "/build/intermediates/classes/debug",
- root + "/build/intermediates/classes/test/debug",
- root + "/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.0.0/classes.jar",
- root + "/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.0.0/res",
- root + "/build/intermediates/exploded-aar/com.android.support/support-v4/22.0.0/classes.jar",
- root + "/build/intermediates/exploded-aar/com.android.support/support-v4/22.0.0/libs/internal_impl-22.0.0.jar",
- root + "/build/intermediates/exploded-aar/com.android.support/support-v4/22.0.0/res",
- "/home/user/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar",
- "/idea/production/java-runtime", "/idea/production/junit_rt")
-
- mockableAndroidJar = root + "/build/intermediates/mockable-" + getLatestAndroidPlatform() + ".jar"
- kotlinClasses = root + "/build/tmp/kotlin-classes/debug"
- testKotlinClasses = root + "/build/tmp/kotlin-classes/debugUnitTest"
- val androidPlatform = AndroidPlatform.getInstance(myModule)
- TestCase.assertNotNull(androidPlatform)
- realAndroidJar = getPlatformFile("android.jar").toString()
- resourcesDirs = listOf(
- root + "/build/intermediates/java_res/debug/out",
- root + "/build/intermediates/java_res/debugUnitTest/out"
- )
-
- exampleClassPath.add(0, mockableAndroidJar)
- exampleClassPath.add(0, realAndroidJar)
-
- exampleClassPathSet = exampleClassPath.toSet()
- assertThat(exampleClassPath).containsAllOf(realAndroidJar, mockableAndroidJar)
- UsefulTestCase.assertDoesntContain(exampleClassPath, resourcesDirs)
- assertThat(Iterables.getLast(exampleClassPath)).isNotEqualTo(mockableAndroidJar)
-
- return exampleClassPath
- }
-
- @Throws(Exception::class)
- public override fun setUp() {
- super.setUp()
- patcher = AndroidJunitPatcher()
- javaParameters = JavaParameters()
- javaParameters.classPath.addAll(getExampleClasspath())
- }
-
- private fun setUpProject(builder: AndroidProjectBuilder) {
- setupTestProjectFromAndroidModel(
- project,
- File(root),
- AndroidModuleModelBuilder(":", "debug", builder)
- )
- }
-
- fun testPathChanges() {
- setUpProject(AndroidProjectBuilder())
- patcher.patchJavaParameters(myModule, javaParameters)
- val result = javaParameters.classPath.pathList.map { normalize(it) }
- val resultSet = result.toSet()
- assertThat(result).doesNotContain(realAndroidJar)
-
- // Mockable JAR is at the end:
- TestCase.assertEquals(mockableAndroidJar, Iterables.getLast(result))
- // Only the real android.jar was removed:
- assertThat(Sets.difference(exampleClassPathSet, resultSet)).contains(realAndroidJar)
- // Only expected entries were added:
- assertThat(Sets.difference(resultSet, exampleClassPathSet)).containsAllIn(resourcesDirs)
- }
-
- fun testCaseInsensitivity() {
- setUpProject(AndroidProjectBuilder())
- if (!SystemInfo.isWindows) {
- // This test only makes sense on Windows.
- println("Skipping AndroidJunitPatcherTest#testCaseInsensitivity: not running on Windows.")
- return
- }
-
- javaParameters.classPath.remove(realAndroidJar)
- // It's still the same file on Windows:
- val alsoRealAndroidJar = realAndroidJar.replace("platforms", "Platforms")
- javaParameters.classPath.addFirst(alsoRealAndroidJar)
-
- patcher.patchJavaParameters(myModule, javaParameters)
- val result = javaParameters.classPath.pathList
- assertThat(result).containsNoneOf(alsoRealAndroidJar, realAndroidJar)
- }
-
- fun testMultipleMockableJars_oldModel() {
- setUpProject(AndroidProjectBuilder())
- val jar22 = root + "lib1/build/intermediates/mockable-android-22.jar"
- val jar15 = root + "lib2/build/intermediates/mockable-android-15.jar"
- val classPath = javaParameters.classPath
- classPath.addFirst(jar22)
- classPath.addFirst(jar15)
-
- patcher.patchJavaParameters(myModule, javaParameters)
-
- val pathList = classPath.pathList
- TestCase.assertEquals(mockableAndroidJar, Iterables.getLast(pathList))
- assertThat(pathList).containsNoneOf(jar15, jar22)
- }
-
- fun testMultipleMockableJars_newModel() {
- setUpProject(AndroidProjectBuilder(
- unitTestArtifactStub = { buildUnitTestArtifactStub(it, mockablePlatformJar = File(mockableAndroidJar)) }
- ))
- javaParameters.classPath.remove(mockableAndroidJar)
-
- patcher.patchJavaParameters(myModule, javaParameters)
-
- TestCase.assertEquals(normalize(mockableAndroidJar), normalize(Iterables.getLast(javaParameters.classPath.pathList)))
- }
-
- fun testKotlinClasses() {
- val testKotlinClassesDir = File(testKotlinClasses)
- setUpProject(AndroidProjectBuilder(
- mainArtifactStub = { buildMainArtifactStub(it, classFolders = setOf(File(kotlinClasses))) },
- unitTestArtifactStub = { buildUnitTestArtifactStub(it, classFolders = setOf(testKotlinClassesDir)) }
- ))
- javaParameters.classPath.remove(mockableAndroidJar)
-
- patcher.patchJavaParameters(myModule, javaParameters)
-
- assertThat(javaParameters.classPath.pathList).contains(testKotlinClassesDir.path)
- }
-
- fun testRuntimeClasspath() {
- val runtimeJar = "/tmp/runtime.jar"
- // Fix for Windows since the drive will be prepended
- val canonicalName = FileUtil.toCanonicalPath(File(runtimeJar).absolutePath)
- setUpProject(AndroidProjectBuilder(
- unitTestArtifactStub = {
- buildUnitTestArtifactStub(it, dependencies = buildDependenciesStub(runtimeOnlyClasses = listOf(File(runtimeJar))))
- }
- ))
- patcher.patchJavaParameters(myModule, javaParameters)
- val result = javaParameters.classPath.pathList.map { normalize(it) }
- assertThat(result).contains(canonicalName)
- }
-}
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcherWithProjectsTest.java b/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcherWithProjectsTest.java
deleted file mode 100644
index 05b0b39..0000000
--- a/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidJunitPatcherWithProjectsTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.testartifacts.scopes;
-
-import static com.android.tools.idea.testing.TestProjectPaths.JAVA_LIB;
-import static com.android.tools.idea.testing.TestProjectPaths.SYNC_MULTIPROJECT;
-import static com.google.common.truth.Truth.assertThat;
-
-import com.android.tools.idea.testing.AndroidGradleTestCase;
-import com.android.tools.idea.testing.TestModuleUtil;
-import com.intellij.execution.JUnitPatcher;
-import com.intellij.execution.configurations.JavaParameters;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import java.io.File;
-import java.nio.file.Files;
-import org.jetbrains.annotations.NotNull;
-
-public class AndroidJunitPatcherWithProjectsTest extends AndroidGradleTestCase {
-
- public void testRemoveAndroidTestClasspath() throws Exception {
- loadProject(SYNC_MULTIPROJECT);
- JUnitPatcher myPatcher = new AndroidJunitPatcher();
-
- Module module1 = TestModuleUtil.findModule(getProject(), "module1");
- JavaParameters parameters = new JavaParameters();
- parameters.configureByModule(module1, JavaParameters.CLASSES_AND_TESTS);
-
- String classpath = parameters.getClassPath().getPathsString();
- assertThat(classpath).contains("junit-4.12.jar");
- assertThat(classpath).contains("gson-2.8.0.jar");
-
- // JUnit is in test dependency, gson and guava are android test dependency
- myPatcher.patchJavaParameters(module1, parameters);
- classpath = parameters.getClassPath().getPathsString();
- assertThat(classpath).contains("junit-4.12.jar");
- assertThat(classpath).doesNotContain("gson-2.8.0.jar");
- assertThat(classpath).doesNotContain("guava-18.0.jar");
- assertThat(classpath).doesNotContain("module3");
- }
-
- public void testJavaLibDependencyResourcesInClasspath() throws Exception {
- loadProject(JAVA_LIB);
- testJavaLibResources("app");
- testKotlinClasses("app");
- }
-
- public void testJavaLibModuleResourcesInClasspath() throws Exception {
- loadProject(JAVA_LIB);
- testJavaLibResources("lib");
- testKotlinClasses("lib");
- }
-
- private void testJavaLibResources(@NotNull String moduleToTest) throws Exception {
- JUnitPatcher myPatcher = new AndroidJunitPatcher();
-
- Module module = TestModuleUtil.findModule(getProject(), moduleToTest);
- JavaParameters parameters = new JavaParameters();
- parameters.configureByModule(module, JavaParameters.CLASSES_AND_TESTS);
-
- File projectPath = getProjectFolderPath();
- String javaTestResources = new File(projectPath, "/lib/build/resources/test").toString();
- String javaMainResources = new File(projectPath, "/lib/build/resources/main").toString();
-
- String classpath = parameters.getClassPath().getPathsString();
- assertThat(classpath).doesNotContain(javaTestResources);
- assertThat(classpath).doesNotContain(javaMainResources);
-
- myPatcher.patchJavaParameters(module, parameters);
- classpath = parameters.getClassPath().getPathsString();
-
- assertThat(classpath).contains(javaTestResources);
- assertThat(classpath).contains(javaMainResources);
- }
-
- private void testKotlinClasses(@NotNull String moduleToTest) throws Exception {
- File projectPath = getProjectFolderPath();
- File kotlinMainClasses = new File(projectPath, "/lib/build/classes/kotlin/main");
- File kotlinTestClasses = new File(projectPath, "/lib/build/classes/kotlin/test");
-
- // Simulate Kotlin Gradle plugin 1.1.4 and Gradle 4.0
- Files.createDirectories(kotlinMainClasses.toPath());
- Files.createDirectories(kotlinTestClasses.toPath());
-
- Module module = TestModuleUtil.findModule(getProject(), moduleToTest);
- JavaParameters parameters = new JavaParameters();
- parameters.configureByModule(module, JavaParameters.CLASSES_AND_TESTS);
-
- String classpath = parameters.getClassPath().getPathsString();
- assertThat(classpath).doesNotContain(kotlinMainClasses.toString());
- assertThat(classpath).doesNotContain(kotlinTestClasses.toString());
-
- JUnitPatcher myPatcher = new AndroidJunitPatcher();
- myPatcher.patchJavaParameters(module, parameters);
- classpath = parameters.getClassPath().getPathsString();
-
- assertThat(classpath).contains(kotlinMainClasses.toString());
- assertThat(classpath).contains(kotlinTestClasses.toString());
- }
-}
diff --git a/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidTestAndGradleConfigurationConflictsTest.kt b/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidTestAndGradleConfigurationConflictsTest.kt
index b43537a..305b8f7 100644
--- a/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidTestAndGradleConfigurationConflictsTest.kt
+++ b/android/testSrc/com/android/tools/idea/testartifacts/scopes/AndroidTestAndGradleConfigurationConflictsTest.kt
@@ -15,7 +15,6 @@
*/
package com.android.tools.idea.testartifacts.scopes
-import com.android.tools.idea.flags.StudioFlags
import com.android.tools.idea.testartifacts.TestConfigurationTesting
import com.android.tools.idea.testartifacts.createAndroidGradleConfigurationFromDirectory
import com.android.tools.idea.testing.AndroidGradleTestCase
@@ -29,17 +28,6 @@
*/
class AndroidTestAndGradleConfigurationConflictsTest : AndroidGradleTestCase() {
// See: http://b.android.com/173106394
- override fun setUp() {
- super.setUp()
- StudioFlags.GRADLE_UNIT_TESTING.override(true)
- }
-
- @Throws(Exception::class)
- override fun tearDown() {
- super.tearDown()
- StudioFlags.GRADLE_UNIT_TESTING.clearOverride()
- }
-
@Throws(Exception::class)
fun testCanCreateInstrumentedTestConfiguration() {
loadSimpleApplication()
diff --git a/kotlin-integration/testSrc/com/android/tools/idea/testing/UnitTestingSupportIntegrationTest.kt b/kotlin-integration/testSrc/com/android/tools/idea/testing/UnitTestingSupportIntegrationTest.kt
index 7ee9bdc..9974ab3 100644
--- a/kotlin-integration/testSrc/com/android/tools/idea/testing/UnitTestingSupportIntegrationTest.kt
+++ b/kotlin-integration/testSrc/com/android/tools/idea/testing/UnitTestingSupportIntegrationTest.kt
@@ -23,10 +23,8 @@
import com.android.tools.idea.gradle.project.build.invoker.GradleBuildInvoker
import com.android.tools.idea.gradle.project.build.invoker.GradleInvocationResult
import com.android.tools.idea.testartifacts.TestConfigurationTesting.createContext
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfiguration
import com.google.common.truth.Truth.assertThat
import com.google.wireless.android.sdk.stats.AndroidStudioEvent
-import com.google.wireless.android.sdk.stats.TestRun
import com.intellij.execution.ExecutionListener
import com.intellij.execution.ExecutionManager
import com.intellij.execution.RunnerAndConfigurationSettings
@@ -43,9 +41,9 @@
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.testFramework.TestRunnerUtil
import com.intellij.testFramework.runInEdtAndWait
+import org.junit.Ignore
import java.util.concurrent.ConcurrentSkipListSet
import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicReference
/**
@@ -69,6 +67,8 @@
*
* The test project uses 3.0 features, so you may need to set STUDIO_CUSTOM_REPO to point to a recent build of our gradle plugin.
*/
+@Ignore
+// TODO(karimai): Re-enable in a separate dedicated change.
class UnitTestingSupportIntegrationTest : AndroidGradleTestCase() {
override fun runInDispatchThread(): Boolean = false
override fun invokeTestRunnable(runnable: Runnable) = runnable.run()
@@ -266,7 +266,7 @@
runInEdtAndWait {
val runnerConfigurationSettings = createRunnerConfigurationSettingsForClass("com.example.app.AppJavaUnitTest")
- val androidJUnit = runnerConfigurationSettings.configuration as AndroidJUnitConfiguration
+ val androidJUnit = runnerConfigurationSettings.configuration as JUnitConfiguration
androidJUnit.persistentData.TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE
androidJUnit.persistentData.TEST_SEARCH_SCOPE.scope = TestSearchScope.MODULE_WITH_DEPENDENCIES
androidJUnit.persistentData.MAIN_CLASS_NAME = ""
@@ -283,7 +283,7 @@
*/
fun testPatternTestObject() = runInEdtAndWait {
val runnerConfigurationSettings = createRunnerConfigurationSettingsForClass("com.example.app.AppJavaUnitTest")
- val androidJUnit = runnerConfigurationSettings.configuration as AndroidJUnitConfiguration
+ val androidJUnit = runnerConfigurationSettings.configuration as JUnitConfiguration
androidJUnit.persistentData.TEST_OBJECT = JUnitConfiguration.TEST_PATTERN
androidJUnit.persistentData.TEST_SEARCH_SCOPE.scope = TestSearchScope.MODULE_WITH_DEPENDENCIES
androidJUnit.persistentData.MAIN_CLASS_NAME = ""
diff --git a/project-system-gradle-sync/src/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataService.kt b/project-system-gradle-sync/src/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataService.kt
index 909971c..521e791 100644
--- a/project-system-gradle-sync/src/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataService.kt
+++ b/project-system-gradle-sync/src/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataService.kt
@@ -38,15 +38,11 @@
import com.android.tools.idea.run.RunConfigurationChecker
import com.android.tools.idea.sdk.AndroidSdks
import com.android.tools.idea.sdk.IdeSdks
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfiguration
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurationType
import com.google.common.annotations.VisibleForTesting
import com.intellij.compiler.options.CompileStepBeforeRun
import com.intellij.execution.BeforeRunTask
import com.intellij.execution.BeforeRunTaskProvider
import com.intellij.execution.RunManagerEx
-import com.intellij.execution.RunnerAndConfigurationSettings
-import com.intellij.execution.configurations.ConfigurationType
import com.intellij.execution.configurations.RunConfiguration
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.externalSystem.model.DataNode
@@ -155,7 +151,6 @@
findConflicts(project).showSelectionConflicts()
ProjectSetup(project).setUpProject(false /* sync successful */)
- modifyJUnitRunConfigurations(project)
RunConfigurationChecker.getInstance(project).ensureRunConfigsInvokeBuild()
ProjectStructure.getInstance(project).analyzeProjectStructure()
@@ -225,35 +220,6 @@
}
// TODO: Find a better place for this method.
-private fun modifyJUnitRunConfigurations(project: Project) {
- val junitConfigurationType: ConfigurationType = AndroidJUnitConfigurationType.getInstance()
- val taskProviders = BeforeRunTaskProvider.EXTENSION_POINT_NAME.getExtensions(project)
- val runManager = RunManagerEx.getInstanceEx(project)
- // For Android Studio, use "Gradle-Aware Make" to run JUnit tests.
- // For IDEA, use regular "Make".
- val makeTaskId = if (IdeInfo.getInstance().isAndroidStudio) MakeBeforeRunTaskProvider.ID else CompileStepBeforeRun.ID
- val targetProvider: BeforeRunTaskProvider<*>? = taskProviders.first { it.id == makeTaskId }
-
- if (targetProvider != null) {
- // Store current before run tasks in each configuration to reset them after modifying the template, since modifying
- val currentTasks = runManager.getConfigurationsList(junitConfigurationType).associateWith { runManager.getBeforeRunTasks(it) }
- // Fix the "JUnit Run Configuration" templates.
- for (configurationFactory in junitConfigurationType.configurationFactories) {
- val template: RunnerAndConfigurationSettings = runManager.getConfigurationTemplate(configurationFactory)
- val runConfiguration = template.configuration as AndroidJUnitConfiguration
- // Set the correct "Make step" in the "JUnit Run Configuration" template.
- setMakeStepInJUnitConfiguration(project, targetProvider, runConfiguration)
- runConfiguration.workingDirectory = "$" + PathMacroUtil.MODULE_DIR_MACRO_NAME + "$"
- }
- // Fix existing JUnit Configurations.
- for (runConfiguration in runManager.getConfigurationsList(junitConfigurationType)) {
- // Keep the previous configurations in existing run configurations
- runManager.setBeforeRunTasks(runConfiguration, currentTasks[runConfiguration]!!)
- }
- }
-}
-
-// TODO: Find a better place for this method.
private fun setMakeStepInJUnitConfiguration(
project: Project,
targetProvider: BeforeRunTaskProvider<*>,
diff --git a/project-system-gradle-sync/testSrc/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataServiceTest.java b/project-system-gradle-sync/testSrc/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataServiceTest.java
index 05c1df4..d0d2421 100644
--- a/project-system-gradle-sync/testSrc/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataServiceTest.java
+++ b/project-system-gradle-sync/testSrc/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataServiceTest.java
@@ -26,23 +26,9 @@
import com.android.tools.idea.gradle.project.model.AndroidModuleModel;
import com.android.tools.idea.gradle.project.sync.ModuleSetupContext;
import com.android.tools.idea.gradle.project.sync.validation.android.AndroidModuleValidator;
-import com.android.tools.idea.gradle.run.MakeBeforeRunTaskProvider;
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfiguration;
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfigurationType;
import com.android.tools.idea.testing.AndroidGradleTestCase;
-import com.android.tools.idea.testing.AndroidGradleTestUtilsKt;
-import com.android.tools.idea.testing.AndroidModuleModelBuilder;
-import com.android.tools.idea.testing.AndroidProjectBuilder;
-import com.android.tools.idea.testing.IdeComponents;
import com.android.tools.idea.testing.ProjectFiles;
import com.android.tools.idea.testing.TestModuleUtil;
-import com.google.common.collect.ImmutableList;
-import com.intellij.execution.BeforeRunTask;
-import com.intellij.execution.RunManagerEx;
-import com.intellij.execution.RunnerAndConfigurationSettings;
-import com.intellij.execution.configurations.ConfigurationFactory;
-import com.intellij.execution.configurations.RunConfiguration;
-import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.facet.FacetManager;
import com.intellij.openapi.externalSystem.model.DataNode;
import com.intellij.openapi.externalSystem.model.project.ProjectData;
@@ -50,10 +36,7 @@
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
-import java.io.File;
import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
import org.jetbrains.android.facet.AndroidFacet;
import org.mockito.Mock;
@@ -130,43 +113,4 @@
assertFalse(gradleProjectInfo.isImportedProject());
assertFalse(gradleProjectInfo.isNewProject());
}
-
- public void testOnSuccessJUnitRunConfigurationSetup() throws Exception {
- AndroidGradleTestUtilsKt.setupTestProjectFromAndroidModel(
- getProject(),
- new File(getProject().getBasePath()),
- new AndroidModuleModelBuilder(":", "debug", new AndroidProjectBuilder()));
-
- RunManagerEx runManager = RunManagerImpl.getInstanceImpl(getProject());
-
- new AndroidModuleDataService().onSuccessImport(
- ImmutableList.of(), null, getProject(), mock(IdeModifiableModelsProvider.class)
- );
- ConfigurationFactory configurationFactory = AndroidJUnitConfigurationType.getInstance().getConfigurationFactories()[0];
- Project project = getProject();
- AndroidJUnitConfiguration jUnitConfiguration = new AndroidJUnitConfiguration(project, configurationFactory);
- RunnerAndConfigurationSettings settings = runManager.createConfiguration(jUnitConfiguration, configurationFactory);
- settings.storeInDotIdeaFolder();
- runManager.addConfiguration(settings);
-
- List<RunConfiguration> junitRunConfigurations = runManager.getConfigurationsList(AndroidJUnitConfigurationType.getInstance());
- for (RunConfiguration runConfiguration : junitRunConfigurations) {
- assertSize(1, runManager.getBeforeRunTasks(runConfiguration));
- assertEquals(MakeBeforeRunTaskProvider.ID, runManager.getBeforeRunTasks(runConfiguration).get(0).getProviderId());
- }
-
- RunConfiguration runConfiguration = junitRunConfigurations.get(0);
- List<BeforeRunTask> tasks = new LinkedList<>(runManager.getBeforeRunTasks(runConfiguration));
-
- MakeBeforeRunTaskProvider taskProvider = new MakeBeforeRunTaskProvider(project);
- BeforeRunTask newTask = taskProvider.createTask(runConfiguration);
- newTask.setEnabled(true);
- tasks.add(newTask);
- runManager.setBeforeRunTasks(runConfiguration, tasks);
-
- new AndroidModuleDataService().onSuccessImport(
- ImmutableList.of(), null, getProject(), mock(IdeModifiableModelsProvider.class)
- );
- assertSize(2, runManager.getBeforeRunTasks(runConfiguration));
- }
}
\ No newline at end of file
diff --git a/project-system-gradle/src/com/android/tools/idea/gradle/run/MakeBeforeRunTaskProvider.java b/project-system-gradle/src/com/android/tools/idea/gradle/run/MakeBeforeRunTaskProvider.java
index 7642ade..7b47236 100644
--- a/project-system-gradle/src/com/android/tools/idea/gradle/run/MakeBeforeRunTaskProvider.java
+++ b/project-system-gradle/src/com/android/tools/idea/gradle/run/MakeBeforeRunTaskProvider.java
@@ -61,7 +61,6 @@
import com.android.tools.idea.run.editor.ProfilerState;
import com.android.tools.idea.stats.RunStats;
import com.android.tools.idea.testartifacts.instrumented.AndroidTestRunConfiguration;
-import com.android.tools.idea.testartifacts.junit.AndroidJUnitConfiguration;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
@@ -628,11 +627,6 @@
@NotNull
private Module[] getModules(@Nullable DataContext context, @Nullable RunConfiguration configuration) {
if (configuration instanceof ModuleRunProfile) {
- // If running JUnit tests for "whole project", all the modules should be compiled, but getModules() return an empty array.
- // See http://b.android.com/230678
- if (configuration instanceof AndroidJUnitConfiguration) {
- return ((AndroidJUnitConfiguration)configuration).getModulesToCompile();
- }
// ModuleBasedConfiguration includes Android and JUnit run configurations, including "JUnit: Rerun Failed Tests",
// which is AbstractRerunFailedTestsAction.MyRunProfile.
return ((ModuleRunProfile)configuration).getModules();
diff --git a/studio/searchable-options/android/android.jar/search/android.jar.searchableOptions.xml b/studio/searchable-options/android/android.jar/search/android.jar.searchableOptions.xml
index 6ed6ac4..17d83ec 100644
--- a/studio/searchable-options/android/android.jar/search/android.jar.searchableOptions.xml
+++ b/studio/searchable-options/android/android.jar/search/android.jar.searchableOptions.xml
@@ -283,12 +283,6 @@
<option name="data" path="ActionManager" hit="Add sample data file" />
<option name="file" path="ActionManager" hit="Add sample data file" />
<option name="sample" path="ActionManager" hit="Add sample data file" />
- <option name="add" path="ActionManager" hit="Add to Android JUnit pattern suite" />
- <option name="android" path="ActionManager" hit="Add to Android JUnit pattern suite" />
- <option name="junit" path="ActionManager" hit="Add to Android JUnit pattern suite" />
- <option name="pattern" path="ActionManager" hit="Add to Android JUnit pattern suite" />
- <option name="suite" path="ActionManager" hit="Add to Android JUnit pattern suite" />
- <option name="to" path="ActionManager" hit="Add to Android JUnit pattern suite" />
<option name="a" path="ActionManager" hit="Adds a new data sample file" />
<option name="adds" path="ActionManager" hit="Adds a new data sample file" />
<option name="data" path="ActionManager" hit="Adds a new data sample file" />
@@ -504,9 +498,6 @@
<option name="instant" path="ActionManager" hit="Enables Instant Apps Support for a Module" />
<option name="module" path="ActionManager" hit="Enables Instant Apps Support for a Module" />
<option name="support" path="ActionManager" hit="Enables Instant Apps Support for a Module" />
- <option name="exclude" path="ActionManager" hit="Exclude from suite" />
- <option name="from" path="ActionManager" hit="Exclude from suite" />
- <option name="suite" path="ActionManager" hit="Exclude from suite" />
<option name="export" path="ActionManager" hit="Export to Zip File..." />
<option name="file" path="ActionManager" hit="Export to Zip File..." />
<option name="to" path="ActionManager" hit="Export to Zip File..." />