TestGen: JUnit 3 only + static check for the superclass

This commit is contained in:
Andrey Breslav
2012-07-10 15:34:15 +04:00
parent cb82b6e477
commit 61dcb7603d
5 changed files with 1181 additions and 1200 deletions
@@ -188,8 +188,7 @@ public abstract class AbstractJetDiagnosticsTest extends JetLiteFixture {
new SimpleTestClassModel(new File("compiler/testData/diagnostics/tests"), true, "kt", "doTest"),
new SimpleTestClassModel(new File("compiler/testData/diagnostics/tests/script"), true, "ktscript", "doTest")
),
AbstractJetDiagnosticsTest.class,
TestGenerator.TargetTestFrameworks.JUNIT_3
AbstractJetDiagnosticsTest.class
).generateAndSave();
}
@@ -120,8 +120,7 @@ public abstract class AbstractReadJavaBinaryClassTest extends TestCaseWithTmpdir
Arrays.asList(
new SimpleTestClassModel(new File("compiler/testData/readJavaBinaryClass"), true, extension, "doTest")
),
AbstractReadJavaBinaryClassTest.class,
TestGenerator.TargetTestFrameworks.JUNIT_3
AbstractReadJavaBinaryClassTest.class
).generateAndSave();
}
}
@@ -15,124 +15,83 @@
*/
package org.jetbrains.jet.lang.resolve.lazy;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestSuite;
import java.io.File;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.test.TestMetadata;
/* This class is generated by LazyResolveTestGenerator. DO NOT MODIFY MANUALLY */
@RunWith(Suite.class)
@Suite.SuiteClasses({
LazyResolveDescriptorRendererTestGenerated.Renderer.class,
LazyResolveDescriptorRendererTestGenerated.DescriptorRenderer.class
})
public class LazyResolveDescriptorRendererTestGenerated {
import org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveDescriptorRendererTest;
/** This class is generated by {@link org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestGenerator}. DO NOT MODIFY MANUALLY */
public class LazyResolveDescriptorRendererTestGenerated extends AbstractLazyResolveDescriptorRendererTest {
@TestMetadata("compiler/testData/renderer")
public static class Renderer extends AbstractLazyResolveDescriptorRendererTest {
@Test
public void testAllFilesPresentInRenderer() throws Exception {
allTestsPresent(Renderer.class, new File("compiler/testData/renderer"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestGenerator", new File("compiler/testData/renderer"), "kt", false);
}
@Test
@TestMetadata("Classes.kt")
public void testClasses() throws Exception {
doTest("compiler/testData/renderer/Classes.kt");
}
@Test
@TestMetadata("Enum.kt")
public void testEnum() throws Exception {
doTest("compiler/testData/renderer/Enum.kt");
}
@Test
@TestMetadata("ErrorType.kt")
public void testErrorType() throws Exception {
doTest("compiler/testData/renderer/ErrorType.kt");
}
@Test
@TestMetadata("FunctionTypes.kt")
public void testFunctionTypes() throws Exception {
doTest("compiler/testData/renderer/FunctionTypes.kt");
}
@Test
@TestMetadata("GlobalFunctions.kt")
public void testGlobalFunctions() throws Exception {
doTest("compiler/testData/renderer/GlobalFunctions.kt");
}
@Test
@TestMetadata("GlobalProperties.kt")
public void testGlobalProperties() throws Exception {
doTest("compiler/testData/renderer/GlobalProperties.kt");
}
@Test
@TestMetadata("InheritedMembersVisibility.kt")
public void testInheritedMembersVisibility() throws Exception {
doTest("compiler/testData/renderer/InheritedMembersVisibility.kt");
}
@Test
@TestMetadata("TupleTypes.kt")
public void testTupleTypes() throws Exception {
doTest("compiler/testData/renderer/TupleTypes.kt");
}
public static void allTestsPresent(Class<?> clazz, File testDataDir, boolean recursive) {
Set<String> methodNames = new HashSet<String>();
for (Method method : clazz.getDeclaredMethods()) {
if (method.isAnnotationPresent(Test.class)) {
methodNames.add(method.getName().toLowerCase() + ".kt");
}
}
for (File file : testDataDir.listFiles()) {
if (file.isDirectory()) {
if (recursive) {
allTestsPresent(clazz, file, recursive);
}
}
else {
String name = file.getName();
if (name.endsWith(".kt") && !methodNames.contains("test" + name.toLowerCase())) {
Assert.fail("Test data file missing from the generated test class: " + file + "\nPlease re-run the generator: LazyResolveTestGenerator");
}
}
}
}
}
@TestMetadata("compiler/testData/lazyResolve/descriptorRenderer")
public static class DescriptorRenderer extends AbstractLazyResolveDescriptorRendererTest {
@Test
public void testAllFilesPresentInDescriptorRenderer() throws Exception {
allTestsPresent(DescriptorRenderer.class, new File("compiler/testData/lazyResolve/descriptorRenderer"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestGenerator", new File("compiler/testData/lazyResolve/descriptorRenderer"), "kt", false);
}
@Test
@TestMetadata("ClassObject.kt")
public void testClassObject() throws Exception {
doTest("compiler/testData/lazyResolve/descriptorRenderer/ClassObject.kt");
}
public static void allTestsPresent(Class<?> clazz, File testDataDir, boolean recursive) {
Set<String> methodNames = new HashSet<String>();
for (Method method : clazz.getDeclaredMethods()) {
if (method.isAnnotationPresent(Test.class)) {
methodNames.add(method.getName().toLowerCase() + ".kt");
}
}
for (File file : testDataDir.listFiles()) {
if (file.isDirectory()) {
if (recursive) {
allTestsPresent(clazz, file, recursive);
}
}
else {
String name = file.getName();
if (name.endsWith(".kt") && !methodNames.contains("test" + name.toLowerCase())) {
Assert.fail("Test data file missing from the generated test class: " + file + "\nPlease re-run the generator: LazyResolveTestGenerator");
}
}
}
}
}
public static Test suite() {
TestSuite suite = new TestSuite("LazyResolveDescriptorRendererTestGenerated");
suite.addTestSuite(Renderer.class);
suite.addTestSuite(DescriptorRenderer.class);
return suite;
}
}
@@ -18,6 +18,7 @@ package org.jetbrains.jet.test.generator;
import com.google.common.collect.Lists;
import com.intellij.openapi.util.io.FileUtil;
import junit.framework.TestCase;
import org.jetbrains.annotations.NotNull;
import java.io.File;
@@ -29,100 +30,11 @@ import java.util.*;
*/
public class TestGenerator {
public interface TargetTestFramework {
List<String> getImports();
void generateSuiteClassAnnotations(@NotNull TestGenerator testGenerator, @NotNull Printer p);
void generateExtraSuiteClassMethods(@NotNull TestGenerator testGenerator, @NotNull Printer p);
void generateTestMethodAnnotations(@NotNull TestGenerator testGenerator, @NotNull Printer p);
String getIsTestMethodCondition(@NotNull String methodVariableName);
}
public enum TargetTestFrameworks implements TargetTestFramework {
JUNIT_3 {
@Override
public List<String> getImports() {
return Arrays.asList(
"junit.framework.Assert",
"junit.framework.Test",
"junit.framework.TestSuite"
);
}
@Override
public void generateSuiteClassAnnotations(@NotNull TestGenerator testGenerator, @NotNull Printer p) {
// Do nothing
}
@Override
public void generateExtraSuiteClassMethods(@NotNull TestGenerator testGenerator, @NotNull Printer p) {
p.println("public static Test suite() {");
p.pushIndent();
p.println("TestSuite suite = new TestSuite();");
for (TestClassModel testDataSource : testGenerator.testClassModels) {
p.println("suite.addTestSuite(", testDataSource.getName(), ".class);");
}
p.println("return suite;");
p.popIndent();
p.println("}");
}
@Override
public void generateTestMethodAnnotations(@NotNull TestGenerator testGenerator, @NotNull Printer p) {
// Do nothing
}
@Override
public String getIsTestMethodCondition(@NotNull String methodVariableName) {
return "method.getName().startsWith(\"test\")";
}
},
JUNIT_4 {
@Override
public List<String> getImports() {
return Arrays.asList(
"org.junit.Assert",
"org.junit.Test",
"org.junit.runner.RunWith",
"org.junit.runners.Suite"
);
}
@Override
public void generateSuiteClassAnnotations(@NotNull TestGenerator testGenerator, @NotNull Printer p) {
p.println("@RunWith(Suite.class)");
p.println("@Suite.SuiteClasses({");
p.pushIndent();
for (Iterator<? extends TestClassModel> iterator = testGenerator.testClassModels.iterator(); iterator.hasNext(); ) {
TestClassModel testClassModel = iterator.next();
p.print(testGenerator.suiteClassName, ".", testClassModel.getName(), ".class");
if (iterator.hasNext()) {
p.printWithNoIndent(",");
}
p.println();
}
p.popIndent();
p.println("})");
}
@Override
public void generateExtraSuiteClassMethods(@NotNull TestGenerator testGenerator, @NotNull Printer p) {
// Do nothing
}
@Override
public void generateTestMethodAnnotations(@NotNull TestGenerator testGenerator, @NotNull Printer p) {
p.println("@Test");
}
@Override
public String getIsTestMethodCondition(@NotNull String methodVariableName) {
return "method.isAnnotationPresent(Test.class)";
}
}
}
private static final List<String> JUNIT3_IMPORTS = Arrays.asList(
"junit.framework.Assert",
"junit.framework.Test",
"junit.framework.TestSuite"
);
private final String baseDir;
private final String suiteClassPackage;
@@ -131,28 +43,14 @@ public class TestGenerator {
private final String baseTestClassName;
private final Collection<TestClassModel> testClassModels;
private final String generatorName;
private final TargetTestFramework targetTestFramework;
public TestGenerator(
@NotNull String baseDir,
@NotNull String suiteClassPackage,
@NotNull String suiteClassName,
@NotNull Class<?> baseTestClass,
@NotNull Class<? extends TestCase> baseTestClass,
@NotNull Collection<? extends TestClassModel> testClassModels,
@NotNull Class<?> generatorClass
) {
this(baseDir, suiteClassPackage, suiteClassName, baseTestClass, testClassModels,
generatorClass, TargetTestFrameworks.JUNIT_4);
}
public TestGenerator(
@NotNull String baseDir,
@NotNull String suiteClassPackage,
@NotNull String suiteClassName,
@NotNull Class<?> baseTestClass,
@NotNull Collection<? extends TestClassModel> testClassModels,
@NotNull Class<?> generatorClass,
@NotNull TargetTestFramework targetTestFramework
) {
this.baseDir = baseDir;
this.suiteClassPackage = suiteClassPackage;
@@ -161,7 +59,6 @@ public class TestGenerator {
this.baseTestClassName = baseTestClass.getSimpleName();
this.testClassModels = Lists.newArrayList(testClassModels);
this.generatorName = generatorClass.getCanonicalName();
this.targetTestFramework = targetTestFramework;
}
public void generateAndSave() throws IOException {
@@ -171,7 +68,7 @@ public class TestGenerator {
p.print(FileUtil.loadFile(new File("injector-generator/copyright.txt")));
p.println("package ", suiteClassPackage, ";");
p.println();
for (String importedClassName : targetTestFramework.getImports()) {
for (String importedClassName : JUNIT3_IMPORTS) {
p.println("import ", importedClassName, ";");
}
p.println();
@@ -185,7 +82,6 @@ public class TestGenerator {
p.println();
p.println("/** This class is generated by {@link ", generatorName, "}. DO NOT MODIFY MANUALLY */");
targetTestFramework.generateSuiteClassAnnotations(this, p);
if (testClassModels.size() == 1) {
TestClassModel theOnlyTestClass = testClassModels.iterator().next();
generateTestClass(p, new DelegatingTestClassModel(theOnlyTestClass) {
@@ -288,7 +184,6 @@ public class TestGenerator {
}
private void generateTestMethod(Printer p, TestMethodModel testMethodModel) {
targetTestFramework.generateTestMethodAnnotations(this, p);
generateMetadata(p, testMethodModel);
p.println("public void ", testMethodModel.getName(), "() throws Exception {");
p.pushIndent();