move FileSetTestCase to platform testFramework
[idea/community.git] / platform / testFramework / src / com / intellij / FileSetTestCase.java
1 /*
2  * Created by IntelliJ IDEA.
3  * User: user
4  * Date: Sep 22, 2002
5  * Time: 2:45:20 PM
6  * To change template for new class use
7  * Code Style | Class Templates options (Tools | IDE Options).
8  */
9 package com.intellij;
10
11 import com.intellij.openapi.project.Project;
12 import com.intellij.openapi.util.io.FileUtil;
13 import com.intellij.openapi.util.text.StringUtil;
14 import com.intellij.testFramework.LightPlatformTestCase;
15 import com.intellij.util.ArrayUtil;
16 import junit.framework.TestSuite;
17
18 import java.io.File;
19 import java.util.ArrayList;
20 import java.util.List;
21
22 public abstract class FileSetTestCase extends TestSuite {
23   private final File[] myFiles;
24   protected Project myProject;
25
26   public FileSetTestCase(String path) {
27     File f = new File(path);
28     if (f.isDirectory()) {
29       myFiles = f.listFiles();
30     }
31     else if (f.exists()) {
32       myFiles = new File[] {f};
33     }
34     else {
35       throw new IllegalArgumentException("invalid path: "     + path);
36     }
37
38
39     addAllTests();
40   }
41
42   protected void setUp() {
43
44   }
45
46   protected void tearDown() {
47
48   }
49
50   private void addAllTests() {
51     for (File file : myFiles) {
52       if (file.isFile()) {
53         addFileTest(file);
54       }
55     }
56   }
57
58   public abstract String transform(String testName, String[] data) throws Exception;
59
60   protected FileSetTestCase(File[] files) {
61     myFiles = files;
62     addAllTests();
63   }
64
65   public String getName() {
66     return getClass().getName();
67   }
68
69   private void addFileTest(File file) {
70     if (!StringUtil.startsWithChar(file.getName(), '_') && !"CVS".equals(file.getName())) {
71       final ActualTest t = new ActualTest(file);
72       addTest(t);
73     }
74   }
75
76   private class ActualTest extends LightPlatformTestCase {
77     private final File myTestFile;
78
79     public ActualTest(File testFile) {
80       myTestFile = testFile;
81     }
82
83     protected void setUp() throws Exception {
84       super.setUp();
85       FileSetTestCase.this.setUp();
86     }
87
88     protected void tearDown() throws Exception {
89       FileSetTestCase.this.tearDown();
90       super.tearDown();
91     }
92
93     public int countTestCases() {
94       return 1;
95     }
96
97     protected void runTest() throws Throwable {
98       String content = new String(FileUtil.loadFileText(myTestFile));
99       assertNotNull(content);
100
101       List<String> input = new ArrayList<String>();
102
103       int separatorIndex;
104
105       content = StringUtil.replace(content, "\r", "");
106
107       while ((separatorIndex = content.indexOf("---")) >= 0) {
108         input.add(content.substring(0, separatorIndex));
109         content = content.substring(separatorIndex);
110         while (StringUtil.startsWithChar(content, '-') || StringUtil.startsWithChar(content, '\n')) content = content.substring(1);
111       }
112
113       String result = content;
114
115       assertTrue("No data found in source file", input.size() > 0);
116
117       while (StringUtil.startsWithChar(result, '-') || StringUtil.startsWithChar(result, '\n') || StringUtil.startsWithChar(result, '\r')) {
118         result = result.substring(1);
119       }
120       final String transformed;
121       FileSetTestCase.this.myProject = getProject();
122       String testName = myTestFile.getName();
123       final int dotIdx = testName.indexOf('.');
124       if (dotIdx >= 0) {
125         testName = testName.substring(0, dotIdx);
126       }
127
128       transformed = StringUtil.replace(transform(testName, ArrayUtil.toStringArray(input)), "\r", "");
129       result = StringUtil.replace(result, "\r", "");
130
131       assertEquals(result.trim(),transformed.trim());
132     }
133
134
135     public String toString() {
136       return myTestFile.getAbsolutePath() + " ";
137     }
138
139     protected void resetAllFields() {
140       // Do nothing otherwise myTestFile will be nulled out before getName() is called.
141     }
142
143     public String getName() {
144       return myTestFile.getAbsolutePath();
145     }
146   }
147 }