ef433f0bd0eaad0885a830ab3b340a8fec84a142
[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   public void testImmutableAnno() throws Throwable {
64     myFixture.addClass("package groovy.lang; public @interface Immutable {}");
65     doTest();
66   }
67
68   @Override
69   protected void tuneFixture(JavaModuleFixtureBuilder moduleBuilder) {
70     moduleBuilder.addLibraryJars("GROOVY", TestUtils.getMockGroovyLibraryHome(), "groovy-all.jar");
71     moduleBuilder.setMockJdkLevel(JavaModuleFixtureBuilder.MockJdkLevel.jdk15);
72   }
73
74   public void doTest() throws Exception {
75
76
77     final String relTestPath = getTestName(true) + ".test";
78     final List<String> data = TestUtils.readInput(getTestDataPath() + "/" + relTestPath);
79
80     final TempDirTestFixture tempDirFixture = myFixture.getTempDirFixture();
81
82     final StringBuffer buffer = new StringBuffer();
83     final GroovyToJavaGeneratorTester groovyToJavaGeneratorTester = new GroovyToJavaGeneratorTester(relTestPath, data.get(0), getProject());
84     final GroovyToJavaGenerator.GenerationItem[][] generatedItems = new GroovyToJavaGenerator.GenerationItem[1][1];
85
86     GroovyToJavaGenerator.GenerationItem[] generationItems = groovyToJavaGeneratorTester.getGenerationItems(null);
87
88     VirtualFile outputDirVirtualFile = tempDirFixture.getFile("");
89
90     generatedItems[0] = groovyToJavaGeneratorTester.generate(generationItems, outputDirVirtualFile);
91
92     for (GroovyToJavaGenerator.GenerationItem generatedItem : generatedItems[0]) {
93       final String path = tempDirFixture.getTempDirPath() + File.separator + generatedItem.getPath();
94
95       BufferedReader reader = new BufferedReader(new FileReader(path));
96       int ch = reader.read();
97
98       while (ch != -1) {
99         buffer.append((char) ch);
100         ch = reader.read();
101       }
102       reader.close();
103
104       buffer.append("\n");
105       buffer.append("---");
106       buffer.append("\n");
107     }
108
109     assertEquals(data.get(1).trim(), buffer.toString().trim());
110   }
111
112   class GroovyToJavaGeneratorTester extends GroovyToJavaGenerator {
113     private final String myRelTestPath;
114     private final String myFileContent;
115
116     public GroovyToJavaGeneratorTester(String relTestPath, String fileContent, Project project) {
117       super(project, null);
118       myRelTestPath = relTestPath;
119       myFileContent = fileContent;
120     }
121
122     protected VirtualFile[] getGroovyFilesToGenerate(CompileContext context) {
123       try {
124         final String testName = myRelTestPath.substring(0, myRelTestPath.lastIndexOf(".test"));
125         PsiFile psiFile = TestUtils.createPseudoPhysicalFile(getProject(), testName + ".groovy", myFileContent);
126         return new VirtualFile[]{psiFile.getVirtualFile()};
127       }
128       catch (IncorrectOperationException e) {
129       }
130
131       return VirtualFile.EMPTY_ARRAY;
132     }
133
134     protected Module getModuleByFile(CompileContext context, VirtualFile file) {
135       return myModule;
136     }
137
138     protected ProgressIndicator getProcessIndicator() {
139       return null;
140     }
141   }
142
143
144 }