From cf17beab8bb3efc2d4018543e949da4a92a2cae1 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Thu, 22 Dec 2011 14:58:25 +0200 Subject: [PATCH] test dsl --- testlib/src/Test.kt | 55 ++++++++++++++++++++++ testlib/test/test/collections/TestAll.java | 4 +- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/testlib/src/Test.kt b/testlib/src/Test.kt index bb15ec64d46..0e1c512d7ef 100644 --- a/testlib/src/Test.kt +++ b/testlib/src/Test.kt @@ -9,6 +9,61 @@ import org.junit.runner.* import org.junit.runner.notification.* import junit.framework.* +class BuiltTest(name: String, val builder: TestBuilder, val test: BuiltTest.() -> 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(name: String) { + val mySuite = TestSuite(name) + + var setUp : BuiltTest.() -> Unit = {} + + var tearDown : BuiltTest.() -> Unit = {} + + fun String.minus(test: BuiltTest.() -> Unit) { + mySuite.addTest(BuiltTest(this, this@TestBuilder, test)) + } +} + +private val currentTestBuilder = ThreadLocal () + +private fun testSuite(builder: TestBuilder, description: TestBuilder.() -> 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 testSuite(name: String, description: TestBuilder.() -> Unit) : TestSuite? = + testSuite(TestBuilder(name), description) + fun assert(message: String, block: ()-> Boolean) { val actual = block() Assert.assertTrue(message, actual) diff --git a/testlib/test/test/collections/TestAll.java b/testlib/test/test/collections/TestAll.java index 7b6a0e689a5..7d465c5b03e 100644 --- a/testlib/test/test/collections/TestAll.java +++ b/testlib/test/test/collections/TestAll.java @@ -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; } } \ No newline at end of file