| /* | |
| * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. | |
| * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. | |
| */ | |
| 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.() -> Any?) { | |
| assertFailEquals({ expected.getter() }, { actual.getter() }) | |
| } | |
| public inline fun <reified E : Throwable> propertyFailsWith(crossinline getter: T.() -> Any?) { | |
| assertFailsWith<E> { expected.getter() } | |
| assertFailsWith<E> { actual.getter() } | |
| } | |
| public fun <P> compareProperty(getter: T.() -> P, block: CompareContext<P>.() -> Unit) { | |
| compare(expected.getter(), actual.getter(), block) | |
| } | |
| private fun assertFailEquals(expected: () -> Any?, actual: () -> Any?) { | |
| val expectedFail = assertFails(expected) | |
| val actualFail = assertFails(actual) | |
| //assertEquals(expectedFail != null, actualFail != null) | |
| assertTypeEquals(expectedFail, actualFail) | |
| } | |
| } |