This commit is contained in:
Alex Tkachman
2011-12-22 14:58:25 +02:00
parent 3a3af75c3d
commit cf17beab8b
2 changed files with 58 additions and 1 deletions
+55
View File
@@ -9,6 +9,61 @@ import org.junit.runner.*
import org.junit.runner.notification.*
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) {
val actual = block()
Assert.assertTrue(message, actual)
+3 -1
View File
@@ -6,6 +6,8 @@ import junit.framework.TestSuite;
*/
public class TestAll {
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;
}
}