4 package com
.intellij
.psi
;
6 import com
.intellij
.JavaTestUtil
;
7 import com
.intellij
.openapi
.projectRoots
.Sdk
;
8 import com
.intellij
.openapi
.projectRoots
.impl
.JavaSdkImpl
;
9 import com
.intellij
.openapi
.roots
.OrderRootType
;
10 import com
.intellij
.openapi
.util
.io
.FileUtil
;
11 import com
.intellij
.openapi
.util
.text
.StringUtil
;
12 import com
.intellij
.openapi
.vfs
.LocalFileSystem
;
13 import com
.intellij
.openapi
.vfs
.VirtualFile
;
14 import com
.intellij
.psi
.impl
.compiled
.ClsStubBuilder
;
15 import com
.intellij
.psi
.stubs
.PsiFileStub
;
16 import com
.intellij
.psi
.stubs
.StubBase
;
17 import com
.intellij
.testFramework
.LightIdeaTestCase
;
18 import com
.intellij
.util
.cls
.ClsFormatException
;
20 import java
.io
.FileNotFoundException
;
21 import java
.io
.FileReader
;
22 import java
.io
.FileWriter
;
23 import java
.io
.IOException
;
25 public class ClsBuilderTest
extends LightIdeaTestCase
{
26 protected Sdk
getProjectJDK() {
27 return JavaSdkImpl
.getMockJdk15("1.5");
30 public void testUtilList() throws Exception
{
31 doTest("java/util/List.class");
34 public void testNullable() throws Exception
{
35 doTest("org/jetbrains/annotations/Nullable.class");
38 public void testUtilCollections() throws Exception
{
39 doTest("java/util/Collections.class");
42 public void testUtilHashMap() throws Exception
{
43 doTest("java/util/HashMap.class");
46 public void testUtilMap() throws Exception
{
47 doTest("java/util/Map.class");
50 public void testTimeUnit() throws Exception
{
51 doTest("java/util/concurrent/TimeUnit.class");
54 public void testTestSuite() throws Exception
{
55 final String clsFilePath
= JavaTestUtil
.getJavaTestDataPath() + "/psi/cls/stubBuilder/TestSuite.class";
56 VirtualFile clsFile
= LocalFileSystem
.getInstance().findFileByPath(clsFilePath
);
57 doTest(clsFile
, "TestSuite.txt");
60 private void doTest(final String classname
) throws IOException
, ClsFormatException
{
61 VirtualFile vFile
= findFile(classname
);
62 doTest(vFile
, getTestName(false)+".txt");
65 private static void doTest(VirtualFile vFile
, String goldFile
) throws ClsFormatException
, IOException
{
66 final PsiFileStub stub
= ClsStubBuilder
.build(vFile
, vFile
.contentsToByteArray());
67 final String butWas
= ((StubBase
)stub
).printTree();
69 final String goldFilePath
= JavaTestUtil
.getJavaTestDataPath() + "/psi/cls/stubBuilder/" + goldFile
;
72 expected
= FileUtil
.loadTextAndClose(new FileReader(goldFilePath
));
73 expected
= StringUtil
.convertLineSeparators(expected
);
75 catch (FileNotFoundException e
) {
76 System
.out
.println("No expected data found at:" + goldFilePath
);
77 System
.out
.println("Creating one.");
78 final FileWriter fileWriter
= new FileWriter(goldFilePath
);
79 fileWriter
.write(butWas
);
81 fail("No test data found. Created one");
84 assertEquals(expected
, butWas
);
87 private VirtualFile
findFile(final String classname
) {
88 final VirtualFile
[] roots
= getProjectJDK().getRootProvider().getFiles(OrderRootType
.CLASSES
);
89 for (VirtualFile root
: roots
) {
90 VirtualFile vFile
= root
.findFileByRelativePath(classname
);
91 if (vFile
!= null) return vFile
;
94 fail("Cannot file classfile for: " + classname
);