move FileSetTestCase to platform testFramework
authorDmitry Jemerov <yole@jetbrains.com>
Fri, 12 Mar 2010 11:25:36 +0000 (14:25 +0300)
committerDmitry Jemerov <yole@jetbrains.com>
Fri, 12 Mar 2010 13:00:26 +0000 (16:00 +0300)
platform/testFramework/src/com/intellij/FileSetTestCase.java [new file with mode: 0644]

diff --git a/platform/testFramework/src/com/intellij/FileSetTestCase.java b/platform/testFramework/src/com/intellij/FileSetTestCase.java
new file mode 100644 (file)
index 0000000..86c846e
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Created by IntelliJ IDEA.
+ * User: user
+ * Date: Sep 22, 2002
+ * Time: 2:45:20 PM
+ * To change template for new class use
+ * Code Style | Class Templates options (Tools | IDE Options).
+ */
+package com.intellij;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.testFramework.LightPlatformTestCase;
+import com.intellij.util.ArrayUtil;
+import junit.framework.TestSuite;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class FileSetTestCase extends TestSuite {
+  private final File[] myFiles;
+  protected Project myProject;
+
+  public FileSetTestCase(String path) {
+    File f = new File(path);
+    if (f.isDirectory()) {
+      myFiles = f.listFiles();
+    }
+    else if (f.exists()) {
+      myFiles = new File[] {f};
+    }
+    else {
+      throw new IllegalArgumentException("invalid path: "     + path);
+    }
+
+
+    addAllTests();
+  }
+
+  protected void setUp() {
+
+  }
+
+  protected void tearDown() {
+
+  }
+
+  private void addAllTests() {
+    for (File file : myFiles) {
+      if (file.isFile()) {
+        addFileTest(file);
+      }
+    }
+  }
+
+  public abstract String transform(String testName, String[] data) throws Exception;
+
+  protected FileSetTestCase(File[] files) {
+    myFiles = files;
+    addAllTests();
+  }
+
+  public String getName() {
+    return getClass().getName();
+  }
+
+  private void addFileTest(File file) {
+    if (!StringUtil.startsWithChar(file.getName(), '_') && !"CVS".equals(file.getName())) {
+      final ActualTest t = new ActualTest(file);
+      addTest(t);
+    }
+  }
+
+  private class ActualTest extends LightPlatformTestCase {
+    private final File myTestFile;
+
+    public ActualTest(File testFile) {
+      myTestFile = testFile;
+    }
+
+    protected void setUp() throws Exception {
+      super.setUp();
+      FileSetTestCase.this.setUp();
+    }
+
+    protected void tearDown() throws Exception {
+      FileSetTestCase.this.tearDown();
+      super.tearDown();
+    }
+
+    public int countTestCases() {
+      return 1;
+    }
+
+    protected void runTest() throws Throwable {
+      String content = new String(FileUtil.loadFileText(myTestFile));
+      assertNotNull(content);
+
+      List<String> input = new ArrayList<String>();
+
+      int separatorIndex;
+
+      content = StringUtil.replace(content, "\r", "");
+
+      while ((separatorIndex = content.indexOf("---")) >= 0) {
+        input.add(content.substring(0, separatorIndex));
+        content = content.substring(separatorIndex);
+        while (StringUtil.startsWithChar(content, '-') || StringUtil.startsWithChar(content, '\n')) content = content.substring(1);
+      }
+
+      String result = content;
+
+      assertTrue("No data found in source file", input.size() > 0);
+
+      while (StringUtil.startsWithChar(result, '-') || StringUtil.startsWithChar(result, '\n') || StringUtil.startsWithChar(result, '\r')) {
+        result = result.substring(1);
+      }
+      final String transformed;
+      FileSetTestCase.this.myProject = getProject();
+      String testName = myTestFile.getName();
+      final int dotIdx = testName.indexOf('.');
+      if (dotIdx >= 0) {
+        testName = testName.substring(0, dotIdx);
+      }
+
+      transformed = StringUtil.replace(transform(testName, ArrayUtil.toStringArray(input)), "\r", "");
+      result = StringUtil.replace(result, "\r", "");
+
+      assertEquals(result.trim(),transformed.trim());
+    }
+
+
+    public String toString() {
+      return myTestFile.getAbsolutePath() + " ";
+    }
+
+    protected void resetAllFields() {
+      // Do nothing otherwise myTestFile will be nulled out before getName() is called.
+    }
+
+    public String getName() {
+      return myTestFile.getAbsolutePath();
+    }
+  }
+}