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