ceb2bbd93df6fe43525f21d15a92488bc8a4347d
[idea/community.git] / java / java-tests / testSrc / com / intellij / psi / resolve / ResolveInLibrariesTest.groovy
1 /*
2  * Copyright 2000-2012 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.psi.resolve
17
18 import com.intellij.openapi.application.ex.PathManagerEx
19 import com.intellij.openapi.vfs.LocalFileSystem
20 import com.intellij.psi.JavaPsiFacade
21 import com.intellij.psi.search.GlobalSearchScope
22 import com.intellij.testFramework.PsiTestUtil
23 import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
24
25 /**
26  * @author peter
27  */
28 class ResolveInLibrariesTest extends JavaCodeInsightFixtureTestCase {
29
30   public void "test prefer current library when navigation from its source"() {
31     def lib = LocalFileSystem.getInstance().refreshAndFindFileByPath(PathManagerEx.getTestDataPath() + "/../../../lib")
32     def nanoJar = lib.children.find { it.name.startsWith("nanoxml") }
33     def nanoSrc = lib.findChild("src").children.find { it.name.startsWith("nanoxml") }
34
35     def jarCopy = myFixture.copyFileToProject(nanoJar.path, 'lib/nanoJar.jar')
36     def srcCopy = myFixture.copyFileToProject(nanoSrc.path, 'lib/nanoSrc.zip')
37
38     PsiTestUtil.addLibrary(myModule, 'nano1', lib.path, ["/$nanoJar.name!/"] as String[], ["/src/$nanoSrc.name!/"] as String[])
39     PsiTestUtil.addLibrary(myModule, 'nano2', jarCopy.parent.path, ["/$jarCopy.name!/"] as String[], ["/$srcCopy.name!/"] as String[])
40
41     def parsers = JavaPsiFacade.getInstance(project).findClasses('net.n3.nanoxml.IXMLParser', GlobalSearchScope.allScope(project))
42     assert parsers.size() == 2
43
44     def file0 = parsers[0].navigationElement.containingFile
45     assert file0.virtualFile.path.startsWith(nanoSrc.path)
46     assert file0.findReferenceAt(file0.text.indexOf('IXMLReader reader')).resolve().navigationElement.containingFile.virtualFile.path.startsWith(nanoSrc.path)
47
48     def file1 = parsers[1].navigationElement.containingFile
49     assert file1.virtualFile.path.startsWith(srcCopy.path)
50     assert file1.findReferenceAt(file1.text.indexOf('IXMLReader reader')).resolve().navigationElement.containingFile.virtualFile.path.startsWith(srcCopy.path)
51
52   }
53
54 }