1
+ package com.baeldung.extensionOfEnum
2
+
3
+ import org.junit.jupiter.api.Test
4
+ import kotlin.enums.EnumEntries
5
+ import kotlin.test.assertEquals
6
+
7
+ enum class Level {
8
+ A , B , C , D , E
9
+ }
10
+
11
+ enum class WorkingDay (val n : Int ) {
12
+ MON (1 ), TUE (2 ), WED (3 ), THU (4 ), FRI (5 );
13
+ }
14
+
15
+
16
+ class EnumExtensionFunctionsUnitTest {
17
+
18
+ @Test
19
+ fun `when extending enum Array, then get expected result` () {
20
+ fun <E : Enum <E >> Array<E>.joinTheirNames (): String {
21
+ return joinToString { it.name }
22
+ }
23
+
24
+ assertEquals(" A, B, C, D, E" , Level .values().joinTheirNames())
25
+ assertEquals(" MON, TUE, WED, THU, FRI" , WorkingDay .values().joinTheirNames())
26
+ }
27
+
28
+ @Test
29
+ fun `when extending EnumEntries, then get expected result` () {
30
+ fun EnumEntries <* >.joinTheirNames (): String {
31
+ return joinToString { it.name }
32
+ }
33
+
34
+ assertEquals(" A, B, C, D, E" , Level .entries.joinTheirNames())
35
+ assertEquals(" MON, TUE, WED, THU, FRI" , WorkingDay .entries.joinTheirNames())
36
+ }
37
+
38
+
39
+ inline fun <reified E : Enum <E >> Enum.Companion.joinTheirNames (): String {
40
+ return enumValues<E >().joinToString { it.name }
41
+ }
42
+
43
+ @Test
44
+ fun `when extending Enum's Companion object, then get expected result` () {
45
+ assertEquals(" A, B, C, D, E" , Enum .joinTheirNames<Level >())
46
+ assertEquals(" MON, TUE, WED, THU, FRI" , Enum .joinTheirNames<WorkingDay >())
47
+ }
48
+
49
+ inline fun <reified E : Enum <E >> joinEnumNames (): String {
50
+ return enumValues<E >().joinToString { it.name }
51
+ }
52
+
53
+ @Test
54
+ fun `when using a generic function, then get expected result` () {
55
+ assertEquals(" A, B, C, D, E" , joinEnumNames<Level >())
56
+ assertEquals(" MON, TUE, WED, THU, FRI" , joinEnumNames<WorkingDay >())
57
+ }
58
+
59
+ }
0 commit comments