class moved
[idea/community.git] / plugins / junit / src / com / intellij / execution / junit / codeInsight / JUnitExternalLibraryResolver.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.execution.junit.codeInsight;
17
18 import com.intellij.openapi.roots.ExternalLibraryDescriptor;
19 import com.intellij.codeInsight.daemon.quickFix.ExternalLibraryResolver;
20 import com.intellij.execution.junit.JUnit3Framework;
21 import com.intellij.execution.junit.JUnit4Framework;
22 import com.intellij.openapi.module.Module;
23 import com.intellij.testIntegration.JavaTestFramework;
24 import com.intellij.testIntegration.TestFramework;
25 import com.intellij.util.ThreeState;
26 import com.intellij.util.containers.ContainerUtil;
27 import org.jetbrains.annotations.NotNull;
28 import org.jetbrains.annotations.Nullable;
29
30 import java.util.List;
31 import java.util.Set;
32
33 /**
34  * @author nik
35  */
36 public class JUnitExternalLibraryResolver extends ExternalLibraryResolver {
37   public static final ExternalLibraryDescriptor JUNIT3 = createJUnitDescriptor("3", JUnit3Framework.class);
38   public static final ExternalLibraryDescriptor JUNIT4 = createJUnitDescriptor("4", JUnit4Framework.class);
39
40   @NotNull
41   private static ExternalLibraryDescriptor createJUnitDescriptor(final String version, final Class<? extends JavaTestFramework> frameworkClass) {
42     return new ExternalLibraryDescriptor("junit", "junit", version) {
43       @NotNull
44       @Override
45       public List<String> getLibraryClassesRoots() {
46         return TestFramework.EXTENSION_NAME.findExtension(frameworkClass).getLibraryPaths();
47       }
48
49       @Override
50       public String getPresentableName() {
51         return "JUnit" + version;
52       }
53     };
54   }
55
56   private static Set<String> JUNIT4_ANNOTATIONS = ContainerUtil.set(
57     "Test", "Ignore", "RunWith", "Before", "BeforeClass", "After", "AfterClass"
58   );
59   @Nullable
60   @Override
61   public ExternalClassResolveResult resolveClass(@NotNull String shortClassName, @NotNull ThreeState isAnnotation, @NotNull Module contextModule) {
62     if ("TestCase".equals(shortClassName)) {
63       return new ExternalClassResolveResult("junit.framework.TestCase", JUNIT3);
64     }
65     if (isAnnotation == ThreeState.YES && JUNIT4_ANNOTATIONS.contains(shortClassName)) {
66       return new ExternalClassResolveResult("org.junit." + shortClassName, JUNIT4);
67     }
68     return null;
69   }
70
71   @Nullable
72   @Override
73   public ExternalLibraryDescriptor resolvePackage(@NotNull String packageName) {
74     if (packageName.equals("org.junit")) {
75       return JUNIT4;
76     }
77     if (packageName.equals("junit.framework")) {
78       return JUNIT3;
79     }
80     return null;
81   }
82 }