1
+ package iterateEnumEntries
2
+
3
+ import iterateEnumEntries.Holiday.*
4
+ import iterateEnumEntries.Weekday.*
5
+ import org.junit.jupiter.api.Assertions.*
6
+ import org.junit.jupiter.api.Test
7
+
8
+ enum class Weekday {
9
+ MON , TUE , WED , THU , FRI
10
+ }
11
+
12
+ enum class Holiday {
13
+ Eastern , Christmas , LaborDay , NewYear
14
+ }
15
+
16
+ class IterateEnumEntriesUnitTest {
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 )
21
+
22
+ @Test
23
+ fun `when using values() then get correct iterable` () {
24
+ val result = Weekday .values()
25
+ assertArrayEquals(expectedWeekdayArray, result)
26
+ }
27
+
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)
38
+
39
+ val holidayResult = enumValues<Holiday >()
40
+ assertArrayEquals(expectedHolidayArray, holidayResult)
41
+ }
42
+
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
+ }
60
+ }
0 commit comments