9d3ec5986cd9480bd5c0f34b984b7b287779fdfa
[idea/community.git] / java / java-tests / testSrc / com / intellij / codeInsight / MultipleJdksHighlightingTest.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
17 package com.intellij.codeInsight;
18
19 import com.intellij.openapi.application.ex.PathManagerEx;
20 import com.intellij.openapi.module.Module;
21 import com.intellij.openapi.roots.ModifiableRootModel;
22 import com.intellij.openapi.roots.ModuleRootModificationUtil;
23 import com.intellij.openapi.vfs.VfsUtilCore;
24 import com.intellij.testFramework.IdeaTestCase;
25 import com.intellij.testFramework.IdeaTestUtil;
26 import com.intellij.testFramework.UsefulTestCase;
27 import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
28 import com.intellij.testFramework.fixtures.*;
29 import com.intellij.util.Consumer;
30
31 public class MultipleJdksHighlightingTest extends UsefulTestCase {
32
33   private CodeInsightTestFixture myFixture;
34   private Module myJava7Module;
35   private Module myJava8Module;
36
37   @SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors")
38   public MultipleJdksHighlightingTest() {
39     IdeaTestCase.initPlatformPrefix();
40   }
41
42   @Override
43   protected void tearDown() throws Exception {
44     super.tearDown();
45     myFixture.tearDown();
46     myFixture = null;
47     myJava7Module = null;
48     myJava8Module = null;
49   }
50   
51   @Override
52   public void setUp() throws Exception {
53     super.setUp();
54     TestFixtureBuilder<IdeaProjectTestFixture> projectBuilder = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName());
55     myFixture = JavaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(projectBuilder.getFixture());
56     myFixture.setTestDataPath(PathManagerEx.getTestDataPath() + "/codeInsight/multipleJdks");
57     final JavaModuleFixtureBuilder[] builders = new JavaModuleFixtureBuilder[2];
58     builders[0] = projectBuilder.addModule(JavaModuleFixtureBuilder.class);
59     builders[1] = projectBuilder.addModule(JavaModuleFixtureBuilder.class);
60     myFixture.setUp();
61     myJava7Module = builders[0].getFixture().getModule();
62     myJava8Module = builders[1].getFixture().getModule();
63     ModuleRootModificationUtil.updateModel(myJava7Module, new Consumer<ModifiableRootModel>() {
64       @Override
65       public void consume(ModifiableRootModel model) {
66         model.addModuleOrderEntry(myJava8Module);
67         model.setSdk(IdeaTestUtil.getMockJdk17());
68         String contentUrl = VfsUtilCore.pathToUrl(myFixture.getTempDirPath()) + "/java7";
69         model.addContentEntry(contentUrl).addSourceFolder(contentUrl, false);
70       }
71     });
72
73     ModuleRootModificationUtil.updateModel(myJava8Module, new Consumer<ModifiableRootModel>() {
74       @Override
75       public void consume(ModifiableRootModel model) {
76         model.setSdk(IdeaTestUtil.getMockJdk18());
77         String contentUrl = VfsUtilCore.pathToUrl(myFixture.getTempDirPath()) + "/java8";
78         model.addContentEntry(contentUrl).addSourceFolder(contentUrl, false);
79       }
80     });
81   }
82
83   public void testGetClass() throws Exception {
84     doTest();
85   }
86
87   protected void doTest() {
88     final String name = getTestName(false);
89     for (Module module : new Module[] {myJava7Module, myJava8Module}) {
90       ModuleRootModificationUtil.updateModel(module, new Consumer<ModifiableRootModel>() {
91         @Override
92         public void consume(ModifiableRootModel model) {
93           ClsGenericsHighlightingTest.commitLibraryModel(model, myFixture.getTestDataPath(), name + ".jar");
94         }
95       });
96     }
97
98     myFixture.configureByFiles("java7/p/" + name + ".java", "java8/p/" + name + ".java");
99     myFixture.checkHighlighting();
100   }
101 }