test dsl
This commit is contained in:
@@ -9,6 +9,61 @@ import org.junit.runner.*
|
|||||||
import org.junit.runner.notification.*
|
import org.junit.runner.notification.*
|
||||||
import junit.framework.*
|
import junit.framework.*
|
||||||
|
|
||||||
|
class BuiltTest<T>(name: String, val builder: TestBuilder<T>, val test: BuiltTest<T>.() -> Unit) : TestCase(name) {
|
||||||
|
private var myState: T? = null
|
||||||
|
|
||||||
|
var state : T
|
||||||
|
get() = myState.sure()
|
||||||
|
set(newState: T) { myState = newState }
|
||||||
|
|
||||||
|
override fun countTestCases(): Int = 1
|
||||||
|
|
||||||
|
var name : String
|
||||||
|
get() = super.getName().sure()
|
||||||
|
set(newName: String) = super.setName(newName)
|
||||||
|
|
||||||
|
override fun setUp() = this.(builder.setUp)()
|
||||||
|
|
||||||
|
override fun tearDown() = this.(builder.tearDown)()
|
||||||
|
|
||||||
|
override fun runTest() = this.(test)()
|
||||||
|
}
|
||||||
|
|
||||||
|
open class TestBuilder<T>(name: String) {
|
||||||
|
val mySuite = TestSuite(name)
|
||||||
|
|
||||||
|
var setUp : BuiltTest<T>.() -> Unit = {}
|
||||||
|
|
||||||
|
var tearDown : BuiltTest<T>.() -> Unit = {}
|
||||||
|
|
||||||
|
fun String.minus(test: BuiltTest<T>.() -> Unit) {
|
||||||
|
mySuite.addTest(BuiltTest<T>(this, this@TestBuilder, test))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val currentTestBuilder = ThreadLocal<TestSuite> ()
|
||||||
|
|
||||||
|
private fun <T> testSuite(builder: TestBuilder<T>, description: TestBuilder<T>.() -> Unit) : TestSuite? {
|
||||||
|
val currentTestSuite = currentTestBuilder.get()
|
||||||
|
currentTestBuilder.set(builder.mySuite)
|
||||||
|
try {
|
||||||
|
builder.(description)()
|
||||||
|
return if(currentTestSuite != null) {
|
||||||
|
currentTestSuite.addTest(builder.mySuite)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
builder.mySuite
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
currentTestBuilder.set(currentTestSuite)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> testSuite(name: String, description: TestBuilder<T>.() -> Unit) : TestSuite? =
|
||||||
|
testSuite(TestBuilder<T>(name), description)
|
||||||
|
|
||||||
fun assert(message: String, block: ()-> Boolean) {
|
fun assert(message: String, block: ()-> Boolean) {
|
||||||
val actual = block()
|
val actual = block()
|
||||||
Assert.assertTrue(message, actual)
|
Assert.assertTrue(message, actual)
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import junit.framework.TestSuite;
|
|||||||
*/
|
*/
|
||||||
public class TestAll {
|
public class TestAll {
|
||||||
public static TestSuite suite() {
|
public static TestSuite suite() {
|
||||||
return new TestSuite(CollectionTest.class, IoTest.class, ListTest.class, MapTest.class, SetTest.class);
|
TestSuite suite = new TestSuite(CollectionTest.class, IoTest.class, ListTest.class, MapTest.class, SetTest.class);
|
||||||
|
suite.addTest(testDslExample.namespace.getSuite());
|
||||||
|
return suite;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user