Alex Kuznetsov
01/19/2024, 7:37 PMI feel confused about containExactlyInAnyOrder
. I'd expect the following to pass, but it fails:
val caseInsensitiveStringEquality: Equality<String> = object : Equality<String> {
override fun name() = "Case Insensitive String Matcher"
override fun verify(actual: String, expected: String): EqualityResult {
return if(actual.uppercase() == expected.uppercase())
EqualityResult.equal(actual, expected, this)
else
EqualityResult.notEqual(actual, expected, this)
}
}
listOf("apple, Apple") should containExactlyInAnyOrder(listOf("APPLE", "APPLE"), caseInsensitiveStringEquality)
what am I missing?LeoColman
01/19/2024, 7:39 PMLeoColman
01/19/2024, 7:40 PMLeoColman
01/19/2024, 7:40 PMAlex Kuznetsov
01/19/2024, 7:42 PMAlex Kuznetsov
01/19/2024, 7:42 PMval caseInsensitiveStringEquality: Equality<String> = object : Equality<String> {
override fun name() = "Case Insensitive String Matcher"
override fun verify(actual: String, expected: String): EqualityResult {
return if(actual.uppercase() == expected.uppercase())
EqualityResult.equal(actual.uppercase(), expected.uppercase(), this)
else
EqualityResult.notEqual(actual.uppercase(), expected.uppercase(), this)
}
}
Alex Kuznetsov
01/19/2024, 7:42 PMCollection should contain ["APPLE", "APPLE"] in any order, but was ["apple, Apple"]
Alex Kuznetsov
01/19/2024, 7:42 PMAlex Kuznetsov
01/19/2024, 7:44 PMfun <T, C : Collection<T>> containExactlyInAnyOrder(
expected: C,
verifier: Equality<T>?,
): Matcher<C?> = neverNullMatcher { actual ->
val valueGroupedCounts: Map<T, Int> = actual.groupBy { it }.mapValues { it.value.size }
val expectedGroupedCounts: Map<T, Int> = expected.groupBy { it }.mapValues { it.value.size }
val passed = expectedGroupedCounts.size == valueGroupedCounts.size && // this line is wrong
here we are matching 1 with 2Alex Kuznetsov
01/19/2024, 7:44 PM["APPLE", "APPLE"]
has size of 1 after grouping