Created
June 30, 2016 23:34
-
-
Save robfletcher/4aebfbe034123ec4b624a04eb4fd6cca to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun <T1, T2> table(body: (T1, T2) -> Unit): TableBuilder2<T1, T2> { | |
return TableBuilder2(body) | |
} | |
fun <T1, T2, T3> table(body: (T1, T2, T3) -> Unit): TableBuilder3<T1, T2, T3> { | |
return TableBuilder3(body) | |
} | |
class TableBuilder2<T1, T2>(private val tableBody: (T1, T2) -> Unit) { | |
infix fun where(whereBody: RowBuilder.() -> Unit) { | |
RowBuilder().whereBody() | |
} | |
inner class RowBuilder { | |
fun row(col1: T1, col2: T2) = tableBody.invoke(col1, col2) | |
} | |
} | |
class TableBuilder3<T1, T2, T3>(private val tableBody: (T1, T2, T3) -> Unit) { | |
infix fun where(whereBody: RowBuilder.() -> Unit) { | |
RowBuilder().whereBody() | |
} | |
inner class RowBuilder { | |
fun row(col1: T1, col2: T2, col3: T3) { | |
tableBody.invoke(col1, col2, col3) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.jetbrains.spek.api.Spek | |
class TableSpec : Spek({ | |
describe("using a table") { | |
table { a: String, b: Int -> | |
describe("$a and $b are parameters") { | |
it("should work") { | |
assert(a is String) | |
assert(b is Int) | |
} | |
} | |
} where { | |
row("foo", 1) | |
row("bar", 2) | |
} | |
} | |
table { a: Int, b: Int, c: Int -> | |
it("adds up $a and $b to equal $c") { | |
assert(a + b == c) | |
} | |
} where { | |
row(1, 2, 3) | |
row(4, 6, 10) | |
} | |
}) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment