From: Dmitry Jemerov Date: Fri, 12 Mar 2010 11:25:36 +0000 (+0300) Subject: move FileSetTestCase to platform testFramework X-Git-Tag: 94.548~23 X-Git-Url: https://git.jetbrains.org/?p=idea%2Fcommunity.git;a=commitdiff_plain;h=c95686bc7552bbd479c91438e21f0577cf78908e move FileSetTestCase to platform testFramework --- diff --git a/platform/testFramework/src/com/intellij/FileSetTestCase.java b/platform/testFramework/src/com/intellij/FileSetTestCase.java new file mode 100644 index 000000000000..86c846ea252e --- /dev/null +++ b/platform/testFramework/src/com/intellij/FileSetTestCase.java @@ -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 input = new ArrayList(); + + 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(); + } + } +}