From 075cf5282f0088ae94db6749144c7ee7118930be Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 28 Aug 2015 11:20:05 +0300 Subject: [PATCH] suggest 'test' scope for JUnit4 library by default --- .../junit/JUnitDependencyScopeSuggester.java | 25 ++++++-- .../JUnitDependencyScopeSuggesterTest.java | 63 +++++++++++++++++++ 2 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 plugins/junit/test/com/intellij/execution/junit/JUnitDependencyScopeSuggesterTest.java diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitDependencyScopeSuggester.java b/plugins/junit/src/com/intellij/execution/junit/JUnitDependencyScopeSuggester.java index addb0b6fbc5e..f398e5183a42 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitDependencyScopeSuggester.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitDependencyScopeSuggester.java @@ -24,18 +24,35 @@ import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; + /** * @author nik */ public class JUnitDependencyScopeSuggester extends LibraryDependencyScopeSuggester { + private static final String[] JUNIT_JAR_MARKERS = { + "org.junit.Test", "junit.framework.TestCase", "org.hamcrest.Matcher", "org.hamcrest.Matchers" + }; + @Nullable @Override public DependencyScope getDefaultDependencyScope(@NotNull Library library) { VirtualFile[] files = library.getFiles(OrderRootType.CLASSES); - if (files.length == 1 && (LibraryUtil.isClassAvailableInLibrary(files, "junit.framework.TestCase") - || LibraryUtil.isClassAvailableInLibrary(library, "org.junit.Test"))) { - return DependencyScope.TEST; + if (files.length == 0) return null; + for (VirtualFile file : files) { + if (!isTestJarRoot(file)) { + return null; + } + } + return DependencyScope.TEST; + } + + private static boolean isTestJarRoot(VirtualFile file) { + for (String marker : JUNIT_JAR_MARKERS) { + if (LibraryUtil.isClassAvailableInLibrary(Collections.singletonList(file), marker)) { + return true; + } } - return null; + return false; } } diff --git a/plugins/junit/test/com/intellij/execution/junit/JUnitDependencyScopeSuggesterTest.java b/plugins/junit/test/com/intellij/execution/junit/JUnitDependencyScopeSuggesterTest.java new file mode 100644 index 000000000000..9bcd6938db7c --- /dev/null +++ b/plugins/junit/test/com/intellij/execution/junit/JUnitDependencyScopeSuggesterTest.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2015 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.intellij.execution.junit; + +import com.intellij.openapi.projectRoots.ex.JavaSdkUtil; +import com.intellij.openapi.roots.DependencyScope; +import com.intellij.openapi.roots.LibraryOrderEntry; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.impl.OrderEntryUtil; +import com.intellij.openapi.roots.libraries.Library; +import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; +import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase; +import com.intellij.util.ArrayUtil; + +/** + * @author nik + */ +public class JUnitDependencyScopeSuggesterTest extends JavaCodeInsightFixtureTestCase { + @Override + protected void tuneFixture(JavaModuleFixtureBuilder moduleBuilder) throws Exception { + moduleBuilder.addLibrary("junit3", JavaSdkUtil.getJunit3JarPath()); + moduleBuilder.addLibrary("junit4", ArrayUtil.toStringArray(JavaSdkUtil.getJUnit4JarPaths())); + moduleBuilder.addLibrary("ideaRt", JavaSdkUtil.getIdeaRtJarPath()); + moduleBuilder.addLibrary("empty"); + } + + public void testJunit3() throws Exception { + assertSame(DependencyScope.TEST, getScope("junit3")); + } + + public void testJunit4() throws Exception { + assertSame(DependencyScope.TEST, getScope("junit4")); + } + + public void testOrdinaryLibrary() throws Exception { + assertNull(getScope("ideaRt")); + } + + public void testEmptyLibrary() throws Exception { + assertNull(getScope("empty")); + } + + private DependencyScope getScope(String name) { + LibraryOrderEntry entry = OrderEntryUtil.findLibraryOrderEntry(ModuleRootManager.getInstance(myModule), name); + assertNotNull(entry); + Library library = entry.getLibrary(); + assertNotNull(library); + return new JUnitDependencyScopeSuggester().getDefaultDependencyScope(library); + } +} \ No newline at end of file -- 2.32.0