Skip to content

Commit 4fd4d02

Browse files
committed
[iterate-enum-items] iterate enum in kotlin
1 parent 4b579be commit 4fd4d02

File tree

1 file changed

+45
-8
lines changed

1 file changed

+45
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,60 @@
11
package iterateEnumEntries
22

3-
import iterateEnumEntries.DayInWeek.*
4-
import org.junit.jupiter.api.Assertions.assertArrayEquals
3+
import iterateEnumEntries.Holiday.*
4+
import iterateEnumEntries.Weekday.*
5+
import org.junit.jupiter.api.Assertions.*
56
import org.junit.jupiter.api.Test
6-
import kotlin.test.assertEquals
77

8-
enum class DayInWeek {
9-
MON, TUE, WED, THU, FRI, SAT, SUN
8+
enum class Weekday {
9+
MON, TUE, WED, THU, FRI
10+
}
11+
12+
enum class Holiday {
13+
Eastern, Christmas, LaborDay, NewYear
1014
}
1115

1216
class IterateEnumEntriesUnitTest {
13-
val expectedArray = arrayOf(MON, TUE, WED, THU, FRI, SAT, SUN)
17+
private val expectedWeekdayArray = arrayOf(MON, TUE, WED, THU, FRI)
18+
private val expectedWeekdayList = listOf(MON, TUE, WED, THU, FRI)
19+
20+
private val expectedHolidayArray = arrayOf(Eastern, Christmas, LaborDay, NewYear)
1421

1522
@Test
1623
fun `when using values() then get correct iterable`() {
17-
val result = DayInWeek.values()
24+
val result = Weekday.values()
25+
assertArrayEquals(expectedWeekdayArray, result)
26+
}
1827

19-
assertArrayEquals(expectedArray, result)
28+
@Test
29+
fun `when using entries() then get correct iterable`() {
30+
val result = Weekday.entries
31+
assertEquals(expectedWeekdayList, result)
32+
}
33+
34+
@Test
35+
fun `when using enumValues() then get correct iterable`() {
36+
val weekdayResult = enumValues<Weekday>()
37+
assertArrayEquals(expectedWeekdayArray, weekdayResult)
2038

39+
val holidayResult = enumValues<Holiday>()
40+
assertArrayEquals(expectedHolidayArray, holidayResult)
2141
}
2242

43+
inline fun <reified E : Enum<E>> findEnumByName(name: String): E? {
44+
// E.values() or E.entries doesn't compile
45+
return enumValues<E>().firstOrNull { it.name.equals(name.replace(" ", ""), ignoreCase = true) }
46+
}
47+
48+
49+
@Test
50+
fun `when using the generic itemNames then get correct iterable`() {
51+
val tuesday = findEnumByName<Weekday>("t U e")
52+
assertEquals(TUE, tuesday)
53+
54+
val newYear = findEnumByName<Holiday>("N E W Y E A R")
55+
assertEquals(NewYear, newYear)
56+
57+
val unknown = findEnumByName<Holiday>("Thanksgiving")
58+
assertNull(unknown)
59+
}
2360
}

0 commit comments

Comments
 (0)