Prevent calling AssertContentEquals with two Set arguments

It's unclear whether these sets are intended to be compared with
the unordered Set equality, or with the ordered Iterable equality.

KT-32996
This commit is contained in:
Ilya Gorbunov
2021-04-19 18:27:47 +03:00
parent 21e9bd7ea2
commit 4ae5efd6da
2 changed files with 11 additions and 0 deletions
@@ -361,6 +361,14 @@ fun <@OnlyInputTypes T> assertContentEquals(expected: Iterable<T>?, actual: Iter
assertIterableContentEquals("Iterable", message, expected, actual, Iterable<*>::iterator)
}
@SinceKotlin("1.5")
@Deprecated("'assertContentEquals' for Set arguments is ambiguous. Use 'assertEquals' to compare content with the unordered set equality, or cast one of arguments to Iterable to compare the set elements in order of iteration.",
level = DeprecationLevel.ERROR,
replaceWith = ReplaceWith("assertContentEquals(expected, actual?.asIterable(), message)"))
fun <@OnlyInputTypes T> assertContentEquals(expected: Set<T>?, actual: Set<T>?, message: String? = null): Unit =
assertContentEquals(expected, actual?.asIterable(), message)
/**
* Asserts that the [expected] sequence is *structurally* equal to the [actual] sequence,
* i.e. contains the same number of the same elements in the same order, with an optional [message].
@@ -34,6 +34,9 @@ class AssertContentEqualsTest {
testFailureMessage("Iterable lengths differ. Expected length is 3, actual length is bigger than 3.") {
assertContentEquals(list, 1..4)
}
testFailureMessage("Iterable elements differ at index 0. Expected element <1>, actual element <3>.") {
assertContentEquals(setOf(1, 2, 3).asIterable(), setOf(3, 2, 1))
}
}
@Test