@@ -33,6 +33,56 @@ class UtcOffsetTest {
3333 val offsetSecondsRange = - 18 * 60 * 60 .. + 18 * 60 * 60
3434 }
3535
36+
37+ @Test
38+ fun construction () {
39+ for (totalSeconds in offsetSecondsRange) {
40+ val hours = totalSeconds / (60 * 60 )
41+ val totalMinutes = totalSeconds / 60
42+ val minutes = totalMinutes % 60
43+ val seconds = totalSeconds % 60
44+ val offset = UtcOffset (hours, minutes, seconds)
45+ val offsetSeconds = UtcOffset (seconds = totalSeconds)
46+ val offsetMinutes = UtcOffset (minutes = totalMinutes, seconds = seconds)
47+ assertEquals(totalSeconds, offset.totalSeconds)
48+ assertEquals(offset, offsetMinutes)
49+ assertEquals(offset, offsetSeconds)
50+ }
51+ }
52+
53+ @Test
54+ fun constructionErrors () {
55+ // total range
56+ assertIllegalArgument { UtcOffset (hours = - 19 ) }
57+ assertIllegalArgument { UtcOffset (hours = + 19 ) }
58+ assertIllegalArgument { UtcOffset (hours = - 18 , minutes = - 1 ) }
59+ assertIllegalArgument { UtcOffset (hours = - 18 , seconds = - 1 ) }
60+ assertIllegalArgument { UtcOffset (hours = + 18 , seconds = + 1 ) }
61+ assertIllegalArgument { UtcOffset (hours = + 18 , seconds = + 1 ) }
62+ assertIllegalArgument { UtcOffset (seconds = offsetSecondsRange.first - 1 ) }
63+ assertIllegalArgument { UtcOffset (seconds = offsetSecondsRange.last + 1 ) }
64+ // component ranges
65+ assertIllegalArgument { UtcOffset (hours = 0 , minutes = 60 ) }
66+ assertIllegalArgument { UtcOffset (hours = 0 , seconds = - 60 ) }
67+ assertIllegalArgument { UtcOffset (minutes = 90 , seconds = 90 ) }
68+ assertIllegalArgument { UtcOffset (minutes = 0 , seconds = 90 ) }
69+ // component signs
70+ assertIllegalArgument { UtcOffset (hours = + 1 , minutes = - 1 ) }
71+ assertIllegalArgument { UtcOffset (hours = + 1 , seconds = - 1 ) }
72+ assertIllegalArgument { UtcOffset (hours = - 1 , minutes = + 1 ) }
73+ assertIllegalArgument { UtcOffset (hours = - 1 , seconds = + 1 ) }
74+ assertIllegalArgument { UtcOffset (minutes = + 1 , seconds = - 1 ) }
75+ assertIllegalArgument { UtcOffset (minutes = - 1 , seconds = + 1 ) }
76+ }
77+
78+ @Test
79+ fun utcOffsetToString () {
80+ assertEquals(" +01:00" , UtcOffset (hours = 1 , minutes = 0 , seconds = 0 ).toString())
81+ assertEquals(" +01:02:03" , UtcOffset (hours = 1 , minutes = 2 , seconds = 3 ).toString())
82+ assertEquals(" -01:00:30" , UtcOffset (hours = - 1 , minutes = 0 , seconds = - 30 ).toString())
83+ assertEquals(" Z" , UtcOffset .ZERO .toString())
84+ }
85+
3686 @Test
3787 fun invalidUtcOffsetStrings () {
3888 for (v in invalidUtcOffsetStrings) {
@@ -112,7 +162,7 @@ class UtcOffsetTest {
112162
113163 @Test
114164 fun asTimeZone () {
115- val offset = UtcOffset .parse( " +01:20:30 " )
165+ val offset = UtcOffset (hours = 1 , minutes = 20 , seconds = 30 )
116166 val timeZone = offset.asTimeZone()
117167 assertIs<FixedOffsetTimeZone >(timeZone)
118168 assertEquals(offset, timeZone.offset)
0 commit comments