dig deeper than one level in retrieving chained constructor calls' throws lists ...
[idea/community.git] / plugins / groovy / test / org / jetbrains / plugins / groovy / compiler / GeneratorTest.java
1 package org.jetbrains.plugins.groovy.compiler;
2
3 import com.intellij.openapi.compiler.CompileContext;
4 import com.intellij.openapi.module.Module;
5 import com.intellij.openapi.progress.ProgressIndicator;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.vfs.VirtualFile;
8 import com.intellij.psi.PsiFile;
9 import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
10 import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase;
11 import com.intellij.testFramework.fixtures.TempDirTestFixture;
12 import com.intellij.util.IncorrectOperationException;
13 import org.jetbrains.plugins.groovy.compiler.generator.GroovyToJavaGenerator;
14 import org.jetbrains.plugins.groovy.util.TestUtils;
15
16 import java.io.BufferedReader;
17 import java.io.File;
18 import java.io.FileReader;
19 import java.util.List;
20
21 /**
22  * User: Dmitry.Krasilschikov
23  * Date: 06.06.2007
24  */
25 public class GeneratorTest extends JavaCodeInsightFixtureTestCase {
26
27   @Override
28   protected String getBasePath() {
29     return TestUtils.getTestDataPath() + "groovy/stubGenerator";
30   }
31
32 public void testArrayType1() throws Throwable { doTest(); }
33   public void testAtInterface() throws Throwable { doTest(); }
34   public void testDefInInterface() throws Throwable { doTest(); }
35   public void testExtends1() throws Throwable { doTest(); }
36   public void testExtendsImplements() throws Throwable { doTest(); }
37   public void testGetterAlreadyDefined() throws Throwable { doTest(); }
38   public void testGrvy1098() throws Throwable { doTest(); }
39   public void testGrvy118() throws Throwable { doTest(); }
40   public void testGrvy1358() throws Throwable { doTest(); }
41   public void testGrvy1376() throws Throwable { doTest(); }
42   public void testGrvy170() throws Throwable { doTest(); }
43   public void testGrvy903() throws Throwable { doTest(); }
44   public void testGrvy908() throws Throwable { doTest(); }
45   public void testGRVY915() throws Throwable { doTest(); }
46   public void testImplements1() throws Throwable { doTest(); }
47   public void testKireyev() throws Throwable { doTest(); }
48   public void testMethodTypeParameters() throws Throwable { doTest(); }
49   public void testOptionalParameter() throws Throwable { doTest(); }
50   public void testOverrideFinalGetter() throws Throwable { doTest(); }
51   public void testPackage1() throws Throwable { doTest(); }
52   public void testScript() throws Throwable { doTest(); }
53   public void testSetterAlreadyDefined1() throws Throwable { doTest(); }
54   public void testSetUpper1() throws Throwable { doTest(); }
55   public void testSingletonConstructor() throws Throwable { doTest(); }
56   public void testStringMethodName() throws Throwable { doTest(); }
57   public void testSuperInvocation() throws Throwable { doTest(); }
58   public void testSuperInvocation1() throws Throwable { doTest(); }
59   public void testToGenerate() throws Throwable { doTest(); }
60   public void testToGenerate1() throws Throwable { doTest(); }
61   public void testVararg1() throws Throwable { doTest(); }
62   public void testInaccessibleConstructor() throws Throwable { doTest(); }
63
64   public void testCheckedExceptionInConstructorDelegate() throws Throwable {
65     myFixture.addClass("package foo;" +
66                        "public class SuperClass {" +
67                        "  public SuperClass(String s) throws java.io.IOException {}" +
68                        "}");
69     doTest();
70   }
71
72   public void testImmutableAnno() throws Throwable {
73     myFixture.addClass("package groovy.lang; public @interface Immutable {}");
74     doTest();
75   }
76
77   @Override
78   protected void tuneFixture(JavaModuleFixtureBuilder moduleBuilder) {
79     moduleBuilder.addLibraryJars("GROOVY", TestUtils.getMockGroovyLibraryHome(), "groovy-all.jar");
80     moduleBuilder.setMockJdkLevel(JavaModuleFixtureBuilder.MockJdkLevel.jdk15);
81   }
82
83   public void doTest() throws Exception {
84
85
86     final String relTestPath = getTestName(true) + ".test";
87     final List<String> data = TestUtils.readInput(getTestDataPath() + "/" + relTestPath);
88
89     final TempDirTestFixture tempDirFixture = myFixture.getTempDirFixture();
90
91     final StringBuffer buffer = new StringBuffer();
92     final GroovyToJavaGeneratorTester groovyToJavaGeneratorTester = new GroovyToJavaGeneratorTester(relTestPath, data.get(0), getProject());
93     final GroovyToJavaGenerator.GenerationItem[][] generatedItems = new GroovyToJavaGenerator.GenerationItem[1][1];
94
95     GroovyToJavaGenerator.GenerationItem[] generationItems = groovyToJavaGeneratorTester.getGenerationItems(null);
96
97     VirtualFile outputDirVirtualFile = tempDirFixture.getFile("");
98
99     generatedItems[0] = groovyToJavaGeneratorTester.generate(generationItems, outputDirVirtualFile);
100
101     for (GroovyToJavaGenerator.GenerationItem generatedItem : generatedItems[0]) {
102       final String path = tempDirFixture.getTempDirPath() + File.separator + generatedItem.getPath();
103
104       BufferedReader reader = new BufferedReader(new FileReader(path));
105       int ch = reader.read();
106
107       while (ch != -1) {
108         buffer.append((char) ch);
109         ch = reader.read();
110       }
111       reader.close();
112
113       buffer.append("\n");
114       buffer.append("---");
115       buffer.append("\n");
116     }
117
118     assertEquals(data.get(1).trim(), buffer.toString().trim());
119   }
120
121   class GroovyToJavaGeneratorTester extends GroovyToJavaGenerator {
122     private final String myRelTestPath;
123     private final String myFileContent;
124
125     public GroovyToJavaGeneratorTester(String relTestPath, String fileContent, Project project) {
126       super(project, null);
127       myRelTestPath = relTestPath;
128       myFileContent = fileContent;
129     }
130
131     protected VirtualFile[] getGroovyFilesToGenerate(CompileContext context) {
132       try {
133         final String testName = myRelTestPath.substring(0, myRelTestPath.lastIndexOf(".test"));
134         PsiFile psiFile = TestUtils.createPseudoPhysicalFile(getProject(), testName + ".groovy", myFileContent);
135         return new VirtualFile[]{psiFile.getVirtualFile()};
136       }
137       catch (IncorrectOperationException e) {
138       }
139
140       return VirtualFile.EMPTY_ARRAY;
141     }
142
143     protected Module getModuleByFile(CompileContext context, VirtualFile file) {
144       return myModule;
145     }
146
147     protected ProgressIndicator getProcessIndicator() {
148       return null;
149     }
150   }
151
152
153 }