| package test.collections |
| |
| import test.* |
| import kotlin.reflect.KProperty1 |
| import kotlin.test.* |
| |
| public fun <T> compare(expected: T, actual: T, block:CompareContext<T>.() -> Unit) { |
| CompareContext(expected, actual).block() |
| } |
| |
| public class CompareContext<out T>(public val expected: T, public val actual: T) { |
| |
| public fun equals(message: String = "") { |
| assertEquals(expected, actual, message) |
| } |
| |
| public fun <P> propertyEquals(property: KProperty1<in T, P>) { |
| propertyEquals(property.name, property) |
| } |
| |
| public fun <P> propertyEquals(message: String = "", getter: T.() -> P) { |
| assertEquals(expected.getter(), actual.getter(), message) |
| } |
| public fun propertyFails(getter: T.() -> Unit) { assertFailEquals({expected.getter()}, {actual.getter()}) } |
| public fun <P> compareProperty(getter: T.() -> P, block: CompareContext<P>.() -> Unit) { |
| compare(expected.getter(), actual.getter(), block) |
| } |
| |
| private fun assertFailEquals(expected: () -> Unit, actual: () -> Unit) { |
| val expectedFail = assertFails(expected) |
| val actualFail = assertFails(actual) |
| //assertEquals(expectedFail != null, actualFail != null) |
| assertTypeEquals(expectedFail, actualFail) |
| } |
| } |