[stdlib] Improve EnumEntries
* Provide short-circuit methods for contract "EnumEntries contains all enum entries" * Make EnumEntries serializable * Introduce more convenient overload for other backends #KT-53152 Merge-request: KT-MR-6867 Merged-by: Vsevolod Tolstopyatov <qwwdfsad@gmail.com>
This commit is contained in:
committed by
Space
parent
cc00dcc038
commit
5054e301be
@@ -24,6 +24,18 @@ public fun <T> CompareContext<List<T>>.listBehavior() {
|
||||
propertyEquals { indexOf(elementAtOrNull(0)) }
|
||||
propertyEquals { lastIndexOf(elementAtOrNull(0)) }
|
||||
|
||||
for (element in expected) {
|
||||
propertyEquals { this.indexOf(element) }
|
||||
propertyEquals { this.lastIndexOf(element) }
|
||||
}
|
||||
|
||||
val nonExisting = object {}
|
||||
propertyEquals { this.indexOf(nonExisting as Any?) }
|
||||
propertyEquals { this.lastIndexOf(nonExisting as Any?) }
|
||||
|
||||
propertyEquals { this.indexOf(null as Any?) }
|
||||
propertyEquals { this.lastIndexOf(null as Any?) }
|
||||
|
||||
propertyFails { subList(0, size + 1) }
|
||||
propertyFails { subList(-1, 0) }
|
||||
propertyEquals { subList(0, size) }
|
||||
|
||||
@@ -18,6 +18,12 @@ class EnumEntriesListTest {
|
||||
A, B, C
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCannotBeCasted() {
|
||||
val list = enumEntries(EmptyEnum::values)
|
||||
assertTrue { list !is MutableList<*> }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testForEmptyEnum() {
|
||||
val list = enumEntries(EmptyEnum::values)
|
||||
@@ -54,4 +60,33 @@ class EnumEntriesListTest {
|
||||
val list = enumEntries(NonEmptyEnum::values)
|
||||
compare(NonEmptyEnum.values().toList(), list) { listBehavior() }
|
||||
}
|
||||
|
||||
enum class E1 {
|
||||
A
|
||||
}
|
||||
|
||||
enum class E2 {
|
||||
A, B
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testVariantEnumBehaviour() {
|
||||
val list = enumEntries(E1::values)
|
||||
|
||||
// Index of
|
||||
val enumList: List<Enum<*>> = list
|
||||
assertEquals(0, enumList.indexOf(E1.A))
|
||||
assertEquals(-1, enumList.indexOf(E2.A))
|
||||
assertEquals(-1, enumList.indexOf(E2.B))
|
||||
|
||||
// Last index of
|
||||
assertEquals(0, enumList.lastIndexOf(E1.A))
|
||||
assertEquals(-1, enumList.lastIndexOf(E2.A))
|
||||
assertEquals(-1, enumList.lastIndexOf(E2.B))
|
||||
|
||||
// Contains
|
||||
assertTrue(enumList.contains(E1.A))
|
||||
assertFalse(enumList.contains(E2.A))
|
||||
assertFalse(enumList.contains(E2.B))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user