1
+ package com.baeldung.duration
2
+
3
+ import org.junit.jupiter.api.Test
4
+ import kotlin.test.assertEquals
5
+ import kotlin.test.assertFalse
6
+ import kotlin.test.assertTrue
7
+ import kotlin.time.Duration
8
+ import kotlin.time.Duration.Companion.days
9
+ import kotlin.time.Duration.Companion.hours
10
+ import kotlin.time.Duration.Companion.microseconds
11
+ import kotlin.time.Duration.Companion.milliseconds
12
+ import kotlin.time.Duration.Companion.minutes
13
+ import kotlin.time.Duration.Companion.nanoseconds
14
+ import kotlin.time.Duration.Companion.seconds
15
+ import kotlin.time.DurationUnit
16
+ import kotlin.time.toDuration
17
+ import kotlin.time.toJavaDuration
18
+ import java.time.Duration as JavaDuration
19
+
20
+ class DurationUnitTest {
21
+ @Test
22
+ fun `given numeric values, create duration instance using companion` () {
23
+ val tenMinutes = 10 .minutes
24
+ assertEquals(10L , tenMinutes.inWholeMinutes)
25
+ assertEquals(600L , tenMinutes.inWholeSeconds)
26
+ val tenSeconds = 10 .seconds
27
+ assertEquals(10L , tenSeconds.inWholeSeconds)
28
+ val zero = Duration .ZERO
29
+ assertEquals(0L , zero.inWholeMicroseconds)
30
+ }
31
+
32
+ @Test
33
+ fun `given numeric values, create duration instance using toDuration and unit` () {
34
+ val tenMinutes = 10 .toDuration(DurationUnit .MINUTES )
35
+ assertEquals(10L , tenMinutes.inWholeMinutes)
36
+ assertEquals(600L , tenMinutes.inWholeSeconds)
37
+ val tenSeconds = 10 .toDuration(DurationUnit .SECONDS )
38
+ assertEquals(10L , tenSeconds.inWholeSeconds)
39
+ val zero = Duration .ZERO
40
+ assertEquals(0L , zero.inWholeMicroseconds)
41
+ val infinite = Duration .INFINITE
42
+ assertEquals(true , infinite.isInfinite())
43
+ }
44
+
45
+ @Test
46
+ fun `given ISO8601 string values, create duration instance` () {
47
+ val tenMinDuration = Duration .parseIsoString(" PT10M" )
48
+ assertEquals(600L , tenMinDuration.inWholeSeconds)
49
+ assertEquals(" PT10M" , tenMinDuration.toIsoString())
50
+ val tenDays = Duration .parseIsoString(" P10D" )
51
+ assertEquals(10L , tenDays.inWholeDays)
52
+ val tenDaysAndOneHour = Duration .parseIsoString(" P10DT1H" )
53
+ assertEquals(241L , tenDaysAndOneHour.inWholeHours)
54
+ assertEquals(" PT241H" , tenDaysAndOneHour.toIsoString())
55
+ val tenDaysWithAllUnits = Duration .parseIsoString(" P10DT1H5M7S" )
56
+ assertEquals(867907L , tenDaysWithAllUnits.inWholeSeconds)
57
+ }
58
+
59
+ @Test
60
+ fun `given a duration, convert into java duration` () {
61
+ val sixHundredSeconds = 600 .seconds
62
+ val javaDuration: java.time.Duration = sixHundredSeconds.toJavaDuration()
63
+ val javaDurationInst = JavaDuration .ofSeconds(600 )
64
+ assertEquals(javaDuration, javaDurationInst)
65
+ }
66
+
67
+ @Test
68
+ fun `given two different durations, combine them into single duration` () {
69
+ val tenMinutes = 10 .minutes
70
+ val fiveHours = 5 .hours
71
+ val fiveHoursPlusTenMin = tenMinutes + fiveHours
72
+ assertEquals(310L , fiveHoursPlusTenMin.inWholeMinutes)
73
+ val fiveHoursMinusTenMin = fiveHours - tenMinutes
74
+ assertEquals(290L , fiveHoursMinusTenMin.inWholeMinutes)
75
+ val timesMinutes = tenMinutes.times(3 )
76
+ assertEquals(30L , timesMinutes.inWholeMinutes)
77
+ val sixSecs = tenMinutes.div(100 )
78
+ assertEquals(6 , sixSecs.inWholeSeconds)
79
+ }
80
+
81
+ @Test
82
+ fun `given two different durations, check if they are equal` () {
83
+ val tenMinutes = 10 .minutes
84
+ val sixHundredSeconds = 600 .seconds
85
+ assert (tenMinutes == sixHundredSeconds)
86
+ }
87
+
88
+ @Test
89
+ fun `given two different durations, compare them` () {
90
+ val tenMinutes = 10 .minutes
91
+ val fiveHours = 5 .hours
92
+ assertTrue { fiveHours > tenMinutes }
93
+ assertFalse { fiveHours < tenMinutes }
94
+ assertTrue { fiveHours == 300 .minutes }
95
+ assertTrue { fiveHours.isPositive() }
96
+ }
97
+
98
+ @Test
99
+ fun `given a duration, break down into smaller parts` () {
100
+ val seventyMinutes = 70 .minutes
101
+ val asStr = seventyMinutes.toComponents { hrs, min, sec, nanos -> " ${hrs} :${min} " }
102
+ assertEquals(" 1:10" , asStr)
103
+ }
104
+
105
+ }
0 commit comments