enable test generator to generate tests using JUnit 4 infrastructure
This commit is contained in:
committed by
max-kammerer
parent
2c78f1fe85
commit
74e4e8b18e
+5
-2
@@ -19,21 +19,24 @@ class TestGroup(
|
||||
) {
|
||||
inline fun <reified T : TestCase> testClass(
|
||||
suiteTestClassName: String = getDefaultSuiteTestClassName(T::class.java.simpleName),
|
||||
useJunit4: Boolean = false,
|
||||
noinline init: TestClass.() -> Unit
|
||||
) {
|
||||
testClass(T::class.java.name, suiteTestClassName, init)
|
||||
testClass(T::class.java.name, suiteTestClassName, useJunit4, init)
|
||||
}
|
||||
|
||||
fun testClass(
|
||||
baseTestClassName: String,
|
||||
suiteTestClassName: String = getDefaultSuiteTestClassName(baseTestClassName.substringAfterLast('.')),
|
||||
useJunit4: Boolean,
|
||||
init: TestClass.() -> Unit
|
||||
) {
|
||||
TestGenerator(
|
||||
testsRoot,
|
||||
suiteTestClassName,
|
||||
baseTestClassName,
|
||||
TestClass().apply(init).testModels
|
||||
TestClass().apply(init).testModels,
|
||||
useJunit4
|
||||
).generateAndSave()
|
||||
}
|
||||
|
||||
|
||||
+20
-5
@@ -11,7 +11,9 @@ import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.TestMetadata
|
||||
import org.jetbrains.kotlin.utils.Printer
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.BlockJUnit4ClassRunner
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.util.*
|
||||
@@ -20,7 +22,8 @@ class TestGenerator(
|
||||
baseDir: String,
|
||||
suiteTestClassFqName: String,
|
||||
baseTestClassFqName: String,
|
||||
testClassModels: Collection<TestClassModel>
|
||||
testClassModels: Collection<TestClassModel>,
|
||||
useJunit4: Boolean
|
||||
) {
|
||||
|
||||
private val baseTestClassPackage: String
|
||||
@@ -28,6 +31,7 @@ class TestGenerator(
|
||||
private val suiteClassName: String
|
||||
private val baseTestClassName: String
|
||||
private val testClassModels: Collection<TestClassModel>
|
||||
private val useJunit4: Boolean
|
||||
private val testSourceFilePath: String
|
||||
|
||||
init {
|
||||
@@ -36,6 +40,7 @@ class TestGenerator(
|
||||
this.suiteClassPackage = suiteTestClassFqName.substringBeforeLast('.', baseTestClassPackage)
|
||||
this.suiteClassName = suiteTestClassFqName.substringAfterLast('.', suiteTestClassFqName)
|
||||
this.testClassModels = ArrayList(testClassModels)
|
||||
this.useJunit4 = useJunit4
|
||||
|
||||
this.testSourceFilePath = baseDir + "/" + this.suiteClassPackage.replace(".", "/") + "/" + this.suiteClassName + ".java"
|
||||
|
||||
@@ -60,7 +65,9 @@ class TestGenerator(
|
||||
p.println("package ", suiteClassPackage, ";")
|
||||
p.println()
|
||||
p.println("import com.intellij.testFramework.TestDataPath;")
|
||||
p.println("import ", RUNNER.canonicalName, ";")
|
||||
if (!useJunit4) {
|
||||
p.println("import ", RUNNER.canonicalName, ";")
|
||||
}
|
||||
p.println("import " + KotlinTestUtils::class.java.canonicalName + ";")
|
||||
p.println("import " + TargetBackend::class.java.canonicalName + ";")
|
||||
if (suiteClassPackage != baseTestClassPackage) {
|
||||
@@ -68,6 +75,10 @@ class TestGenerator(
|
||||
}
|
||||
p.println("import " + TestMetadata::class.java.canonicalName + ";")
|
||||
p.println("import " + RunWith::class.java.canonicalName + ";")
|
||||
if (useJunit4) {
|
||||
p.println("import " + BlockJUnit4ClassRunner::class.java.canonicalName + ";")
|
||||
p.println("import " + Test::class.java.canonicalName + ";")
|
||||
}
|
||||
p.println()
|
||||
p.println("import java.io.File;")
|
||||
p.println("import java.util.regex.Pattern;")
|
||||
@@ -115,7 +126,7 @@ class TestGenerator(
|
||||
|
||||
generateMetadata(p, testClassModel)
|
||||
generateTestDataPath(p, testClassModel)
|
||||
p.println("@RunWith(", RUNNER.simpleName, ".class)")
|
||||
p.println("@RunWith(", if (useJunit4) JUNIT4_RUNNER.simpleName else RUNNER.simpleName, ".class)")
|
||||
|
||||
p.println("public " + staticModifier + "class ", testClassModel.name, " extends ", baseTestClassName, " {")
|
||||
p.pushIndent()
|
||||
@@ -134,7 +145,7 @@ class TestGenerator(
|
||||
p.println()
|
||||
}
|
||||
|
||||
generateTestMethod(p, methodModel)
|
||||
generateTestMethod(p, methodModel, useJunit4)
|
||||
}
|
||||
|
||||
for (innerTestClass in innerTestClasses) {
|
||||
@@ -156,8 +167,12 @@ class TestGenerator(
|
||||
companion object {
|
||||
private val GENERATED_FILES = HashSet<String>()
|
||||
private val RUNNER = JUnit3RunnerWithInners::class.java
|
||||
private val JUNIT4_RUNNER = BlockJUnit4ClassRunner::class.java
|
||||
|
||||
private fun generateTestMethod(p: Printer, methodModel: MethodModel) {
|
||||
private fun generateTestMethod(p: Printer, methodModel: MethodModel, useJunit4: Boolean) {
|
||||
if (useJunit4 && (methodModel !is RunTestMethodModel)) {
|
||||
p.println("@Test")
|
||||
}
|
||||
generateMetadata(p, methodModel)
|
||||
|
||||
methodModel.generateSignature(p)
|
||||
|
||||
Reference in New Issue
Block a user