tzinfo 1.2.11 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +3 -0
  4. data/CHANGES.md +469 -431
  5. data/LICENSE +13 -13
  6. data/README.md +368 -114
  7. data/lib/tzinfo/country.rb +131 -129
  8. data/lib/tzinfo/country_timezone.rb +70 -112
  9. data/lib/tzinfo/data_source.rb +389 -144
  10. data/lib/tzinfo/data_sources/constant_offset_data_timezone_info.rb +56 -0
  11. data/lib/tzinfo/data_sources/country_info.rb +42 -0
  12. data/lib/tzinfo/data_sources/data_timezone_info.rb +91 -0
  13. data/lib/tzinfo/data_sources/linked_timezone_info.rb +33 -0
  14. data/lib/tzinfo/data_sources/ruby_data_source.rb +141 -0
  15. data/lib/tzinfo/data_sources/timezone_info.rb +47 -0
  16. data/lib/tzinfo/data_sources/transitions_data_timezone_info.rb +214 -0
  17. data/lib/tzinfo/data_sources/zoneinfo_data_source.rb +573 -0
  18. data/lib/tzinfo/data_sources/zoneinfo_reader.rb +284 -0
  19. data/lib/tzinfo/data_sources.rb +8 -0
  20. data/lib/tzinfo/data_timezone.rb +33 -47
  21. data/lib/tzinfo/datetime_with_offset.rb +153 -0
  22. data/lib/tzinfo/format1/country_definer.rb +17 -0
  23. data/lib/tzinfo/format1/country_index_definition.rb +64 -0
  24. data/lib/tzinfo/format1/timezone_definer.rb +64 -0
  25. data/lib/tzinfo/format1/timezone_definition.rb +39 -0
  26. data/lib/tzinfo/format1/timezone_index_definition.rb +77 -0
  27. data/lib/tzinfo/format1.rb +10 -0
  28. data/lib/tzinfo/format2/country_definer.rb +68 -0
  29. data/lib/tzinfo/format2/country_index_definer.rb +68 -0
  30. data/lib/tzinfo/format2/country_index_definition.rb +46 -0
  31. data/lib/tzinfo/format2/timezone_definer.rb +94 -0
  32. data/lib/tzinfo/format2/timezone_definition.rb +73 -0
  33. data/lib/tzinfo/format2/timezone_index_definer.rb +45 -0
  34. data/lib/tzinfo/format2/timezone_index_definition.rb +55 -0
  35. data/lib/tzinfo/format2.rb +10 -0
  36. data/lib/tzinfo/info_timezone.rb +26 -21
  37. data/lib/tzinfo/linked_timezone.rb +33 -52
  38. data/lib/tzinfo/offset_timezone_period.rb +42 -0
  39. data/lib/tzinfo/string_deduper.rb +118 -0
  40. data/lib/tzinfo/time_with_offset.rb +128 -0
  41. data/lib/tzinfo/timestamp.rb +548 -0
  42. data/lib/tzinfo/timestamp_with_offset.rb +85 -0
  43. data/lib/tzinfo/timezone.rb +979 -502
  44. data/lib/tzinfo/timezone_offset.rb +84 -74
  45. data/lib/tzinfo/timezone_period.rb +151 -217
  46. data/lib/tzinfo/timezone_proxy.rb +70 -79
  47. data/lib/tzinfo/timezone_transition.rb +77 -109
  48. data/lib/tzinfo/transitions_timezone_period.rb +63 -0
  49. data/lib/tzinfo/version.rb +7 -0
  50. data/lib/tzinfo/with_offset.rb +61 -0
  51. data/lib/tzinfo.rb +60 -40
  52. data.tar.gz.sig +0 -0
  53. metadata +51 -115
  54. metadata.gz.sig +2 -3
  55. data/Rakefile +0 -107
  56. data/lib/tzinfo/annual_rules.rb +0 -51
  57. data/lib/tzinfo/country_index_definition.rb +0 -31
  58. data/lib/tzinfo/country_info.rb +0 -42
  59. data/lib/tzinfo/data_timezone_info.rb +0 -55
  60. data/lib/tzinfo/linked_timezone_info.rb +0 -26
  61. data/lib/tzinfo/offset_rationals.rb +0 -77
  62. data/lib/tzinfo/posix_time_zone_parser.rb +0 -136
  63. data/lib/tzinfo/ruby_core_support.rb +0 -176
  64. data/lib/tzinfo/ruby_country_info.rb +0 -74
  65. data/lib/tzinfo/ruby_data_source.rb +0 -136
  66. data/lib/tzinfo/time_or_datetime.rb +0 -351
  67. data/lib/tzinfo/timezone_definition.rb +0 -36
  68. data/lib/tzinfo/timezone_index_definition.rb +0 -54
  69. data/lib/tzinfo/timezone_info.rb +0 -30
  70. data/lib/tzinfo/timezone_transition_definition.rb +0 -104
  71. data/lib/tzinfo/transition_data_timezone_info.rb +0 -274
  72. data/lib/tzinfo/transition_rule.rb +0 -325
  73. data/lib/tzinfo/zoneinfo_country_info.rb +0 -37
  74. data/lib/tzinfo/zoneinfo_data_source.rb +0 -504
  75. data/lib/tzinfo/zoneinfo_timezone_info.rb +0 -516
  76. data/test/assets/payload.rb +0 -1
  77. data/test/tc_annual_rules.rb +0 -95
  78. data/test/tc_country.rb +0 -240
  79. data/test/tc_country_index_definition.rb +0 -69
  80. data/test/tc_country_info.rb +0 -16
  81. data/test/tc_country_timezone.rb +0 -173
  82. data/test/tc_data_source.rb +0 -218
  83. data/test/tc_data_timezone.rb +0 -99
  84. data/test/tc_data_timezone_info.rb +0 -18
  85. data/test/tc_info_timezone.rb +0 -34
  86. data/test/tc_linked_timezone.rb +0 -155
  87. data/test/tc_linked_timezone_info.rb +0 -23
  88. data/test/tc_offset_rationals.rb +0 -23
  89. data/test/tc_posix_time_zone_parser.rb +0 -261
  90. data/test/tc_ruby_core_support.rb +0 -168
  91. data/test/tc_ruby_country_info.rb +0 -110
  92. data/test/tc_ruby_data_source.rb +0 -175
  93. data/test/tc_time_or_datetime.rb +0 -674
  94. data/test/tc_timezone.rb +0 -1361
  95. data/test/tc_timezone_definition.rb +0 -113
  96. data/test/tc_timezone_index_definition.rb +0 -73
  97. data/test/tc_timezone_info.rb +0 -11
  98. data/test/tc_timezone_london.rb +0 -143
  99. data/test/tc_timezone_melbourne.rb +0 -142
  100. data/test/tc_timezone_new_york.rb +0 -142
  101. data/test/tc_timezone_offset.rb +0 -126
  102. data/test/tc_timezone_period.rb +0 -555
  103. data/test/tc_timezone_proxy.rb +0 -136
  104. data/test/tc_timezone_transition.rb +0 -366
  105. data/test/tc_timezone_transition_definition.rb +0 -295
  106. data/test/tc_timezone_utc.rb +0 -27
  107. data/test/tc_transition_data_timezone_info.rb +0 -433
  108. data/test/tc_transition_rule.rb +0 -663
  109. data/test/tc_zoneinfo_country_info.rb +0 -78
  110. data/test/tc_zoneinfo_data_source.rb +0 -1226
  111. data/test/tc_zoneinfo_timezone_info.rb +0 -2149
  112. data/test/test_utils.rb +0 -214
  113. data/test/ts_all.rb +0 -7
  114. data/test/ts_all_ruby.rb +0 -5
  115. data/test/ts_all_zoneinfo.rb +0 -9
  116. data/test/tzinfo-data/tzinfo/data/definitions/America/Argentina/Buenos_Aires.rb +0 -89
  117. data/test/tzinfo-data/tzinfo/data/definitions/America/New_York.rb +0 -327
  118. data/test/tzinfo-data/tzinfo/data/definitions/Australia/Melbourne.rb +0 -230
  119. data/test/tzinfo-data/tzinfo/data/definitions/EST.rb +0 -19
  120. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__m__1.rb +0 -21
  121. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__p__1.rb +0 -21
  122. data/test/tzinfo-data/tzinfo/data/definitions/Etc/UTC.rb +0 -21
  123. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Amsterdam.rb +0 -273
  124. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Andorra.rb +0 -198
  125. data/test/tzinfo-data/tzinfo/data/definitions/Europe/London.rb +0 -333
  126. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Paris.rb +0 -277
  127. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Prague.rb +0 -235
  128. data/test/tzinfo-data/tzinfo/data/definitions/UTC.rb +0 -16
  129. data/test/tzinfo-data/tzinfo/data/indexes/countries.rb +0 -940
  130. data/test/tzinfo-data/tzinfo/data/indexes/timezones.rb +0 -609
  131. data/test/tzinfo-data/tzinfo/data/version.rb +0 -20
  132. data/test/tzinfo-data/tzinfo/data.rb +0 -8
  133. data/test/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  134. data/test/zoneinfo/America/New_York +0 -0
  135. data/test/zoneinfo/Australia/Melbourne +0 -0
  136. data/test/zoneinfo/EST +0 -0
  137. data/test/zoneinfo/Etc/UTC +0 -0
  138. data/test/zoneinfo/Europe/Amsterdam +0 -0
  139. data/test/zoneinfo/Europe/Andorra +0 -0
  140. data/test/zoneinfo/Europe/London +0 -0
  141. data/test/zoneinfo/Europe/Paris +0 -0
  142. data/test/zoneinfo/Europe/Prague +0 -0
  143. data/test/zoneinfo/Factory +0 -0
  144. data/test/zoneinfo/iso3166.tab +0 -274
  145. data/test/zoneinfo/leapseconds +0 -78
  146. data/test/zoneinfo/posix/Europe/London +0 -0
  147. data/test/zoneinfo/posixrules +0 -0
  148. data/test/zoneinfo/right/Europe/London +0 -0
  149. data/test/zoneinfo/zone.tab +0 -452
  150. data/test/zoneinfo/zone1970.tab +0 -384
  151. data/tzinfo.gemspec +0 -21
@@ -1,433 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
2
-
3
- include TZInfo
4
-
5
- class TCTransitionDataTimezoneInfo < Minitest::Test
6
-
7
- def test_identifier
8
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
9
- assert_equal('Test/Zone', dti.identifier)
10
- end
11
-
12
- def test_offset
13
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
14
-
15
- assert_nothing_raised do
16
- dti.offset :o1, -18000, 3600, :TEST
17
- end
18
- end
19
-
20
- def test_offset_already_defined
21
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
22
- dti.offset :o1, 3600, 0, :TEST
23
- dti.offset :o2, 1800, 0, :TEST2
24
-
25
- assert_raises(ArgumentError) { dti.offset :o1, 3600, 3600, :TESTD }
26
- end
27
-
28
- def test_transition_timestamp
29
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
30
- dti.offset :o1, -18000, 3600, :TEST
31
-
32
- assert_nothing_raised do
33
- dti.transition 2006, 6, :o1, 1149368400
34
- end
35
- end
36
-
37
- def test_transition_datetime
38
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
39
- dti.offset :o1, -18000, 3600, :TEST
40
-
41
- assert_nothing_raised do
42
- dti.transition 2006, 6, :o1, 19631123, 8
43
- end
44
- end
45
-
46
- def test_transition_timestamp_and_datetime
47
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
48
- dti.offset :o1, -18000, 3600, :TEST
49
-
50
- assert_nothing_raised do
51
- dti.transition 2006, 6, :o1, 1149368400, 19631123, 8
52
- end
53
- end
54
-
55
- def test_transition_invalid_offset
56
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
57
- dti.offset :o1, -18000, 3600, :TEST
58
-
59
- dti.transition 2006, 6, :o1, 1149368400
60
-
61
- assert_raises(ArgumentError) { dti.transition 2006, 6, :o2, 1149454800 }
62
- end
63
-
64
- def test_transition_no_offsets
65
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
66
-
67
- assert_raises(ArgumentError) { dti.transition 2006, 6, :o1, 1149368400 }
68
- end
69
-
70
- def test_transition_invalid_order_month
71
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
72
- dti.offset :o1, -18000, 3600, :TEST
73
-
74
- dti.transition 2006, 6, :o1, 1149368400
75
-
76
- assert_raises(ArgumentError) { dti.transition 2006, 5, :o2, 1146690000 }
77
- end
78
-
79
- def test_transition_invalid_order_year
80
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
81
- dti.offset :o1, -18000, 3600, :TEST
82
-
83
- dti.transition 2006, 6, :o1, 1149368400
84
-
85
- assert_raises(ArgumentError) { dti.transition 2005, 7, :o2, 1120424400 }
86
- end
87
-
88
- def test_period_for_utc
89
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
90
- dti.offset :o1, -17900, 0, :TESTLMT
91
- dti.offset :o2, -18000, 3600, :TESTD
92
- dti.offset :o3, -18000, 0, :TESTS
93
- dti.offset :o4, -21600, 3600, :TESTD
94
-
95
- dti.transition 2000, 4, :o2, Time.utc(2000, 4,1,1,0,0).to_i
96
- dti.transition 2000, 10, :o3, Time.utc(2000,10,1,1,0,0).to_i
97
- dti.transition 2001, 3, :o2, 58847269, 24 # (2001, 3,1,1,0,0)
98
- dti.transition 2001, 4, :o4, Time.utc(2001, 4,1,1,0,0).to_i, 58848013, 24
99
- dti.transition 2001, 10, :o3, Time.utc(2001,10,1,1,0,0).to_i
100
- dti.transition 2002, 10, :o3, Time.utc(2002,10,1,1,0,0).to_i
101
- dti.transition 2003, 2, :o2, Time.utc(2003, 2,1,1,0,0).to_i
102
- dti.transition 2003, 3, :o3, Time.utc(2003, 3,1,1,0,0).to_i
103
-
104
- o1 = TimezoneOffset.new(-17900, 0, :TESTLMT)
105
- o2 = TimezoneOffset.new(-18000, 3600, :TESTD)
106
- o3 = TimezoneOffset.new(-18000, 0, :TESTS)
107
- o4 = TimezoneOffset.new(-21600, 3600, :TESTD)
108
-
109
- t1 = TimezoneTransitionDefinition.new(o2, o1, Time.utc(2000, 4,1,1,0,0).to_i)
110
- t2 = TimezoneTransitionDefinition.new(o3, o2, Time.utc(2000,10,1,1,0,0).to_i)
111
- t3 = TimezoneTransitionDefinition.new(o2, o3, Time.utc(2001, 3,1,1,0,0).to_i)
112
- t4 = TimezoneTransitionDefinition.new(o4, o2, Time.utc(2001, 4,1,1,0,0).to_i)
113
- t5 = TimezoneTransitionDefinition.new(o3, o4, Time.utc(2001,10,1,1,0,0).to_i)
114
- t6 = TimezoneTransitionDefinition.new(o3, o3, Time.utc(2002,10,1,1,0,0).to_i)
115
- t7 = TimezoneTransitionDefinition.new(o2, o3, Time.utc(2003, 2,1,1,0,0).to_i)
116
- t8 = TimezoneTransitionDefinition.new(o3, o2, Time.utc(2003, 3,1,1,0,0).to_i)
117
-
118
- assert_equal(TimezonePeriod.new(nil, t1), dti.period_for_utc(DateTime.new(1960, 1,1,1, 0, 0)))
119
- assert_equal(TimezonePeriod.new(nil, t1), dti.period_for_utc(DateTime.new(1999,12,1,0, 0, 0)))
120
- assert_equal(TimezonePeriod.new(nil, t1), dti.period_for_utc(Time.utc( 2000, 4,1,0,59,59)))
121
- assert_equal(TimezonePeriod.new(t1, t2), dti.period_for_utc(DateTime.new(2000, 4,1,1, 0, 0)))
122
- assert_equal(TimezonePeriod.new(t1, t2), dti.period_for_utc(Time.utc( 2000,10,1,0,59,59).to_i))
123
- assert_equal(TimezonePeriod.new(t2, t3), dti.period_for_utc(Time.utc( 2000,10,1,1, 0, 0)))
124
- assert_equal(TimezonePeriod.new(t2, t3), dti.period_for_utc(Time.utc( 2001, 3,1,0,59,59)))
125
- assert_equal(TimezonePeriod.new(t3, t4), dti.period_for_utc(Time.utc( 2001, 3,1,1, 0, 0)))
126
- assert_equal(TimezonePeriod.new(t3, t4), dti.period_for_utc(Time.utc( 2001, 4,1,0,59,59)))
127
- assert_equal(TimezonePeriod.new(t4, t5), dti.period_for_utc(Time.utc( 2001, 4,1,1, 0, 0)))
128
- assert_equal(TimezonePeriod.new(t4, t5), dti.period_for_utc(Time.utc( 2001,10,1,0,59,59)))
129
- assert_equal(TimezonePeriod.new(t5, t6), dti.period_for_utc(Time.utc( 2001,10,1,1, 0, 0)))
130
- assert_equal(TimezonePeriod.new(t5, t6), dti.period_for_utc(Time.utc( 2002, 2,1,1, 0, 0)))
131
- assert_equal(TimezonePeriod.new(t5, t6), dti.period_for_utc(Time.utc( 2002,10,1,0,59,59)))
132
- assert_equal(TimezonePeriod.new(t6, t7), dti.period_for_utc(Time.utc( 2002,10,1,1, 0, 0)))
133
- assert_equal(TimezonePeriod.new(t6, t7), dti.period_for_utc(Time.utc( 2003, 2,1,0,59,59)))
134
- assert_equal(TimezonePeriod.new(t7, t8), dti.period_for_utc(Time.utc( 2003, 2,1,1, 0, 0)))
135
- assert_equal(TimezonePeriod.new(t7, t8), dti.period_for_utc(Time.utc( 2003, 3,1,0,59,59)))
136
- assert_equal(TimezonePeriod.new(t8, nil), dti.period_for_utc(Time.utc( 2003, 3,1,1, 0, 0)))
137
- assert_equal(TimezonePeriod.new(t8, nil), dti.period_for_utc(Time.utc( 2004, 1,1,1, 0, 0)))
138
- assert_equal(TimezonePeriod.new(t8, nil), dti.period_for_utc(DateTime.new(2050, 1,1,1, 0, 0)))
139
- end
140
-
141
- def test_period_for_utc_no_transitions
142
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
143
- dti.offset :o1, -17900, 0, :TESTLMT
144
- dti.offset :o2, -18000, 0, :TEST
145
-
146
- o1 = TimezoneOffset.new(-17900, 0, :TESTLMT)
147
-
148
- assert_equal(TimezonePeriod.new(nil, nil, o1), dti.period_for_utc(DateTime.new(2005,1,1,0,0,0)))
149
- assert_equal(TimezonePeriod.new(nil, nil, o1), dti.period_for_utc(Time.utc(2005,1,1,0,0,0)))
150
- assert_equal(TimezonePeriod.new(nil, nil, o1), dti.period_for_utc(Time.utc(2005,1,1,0,0,0).to_i))
151
- end
152
-
153
- def test_period_for_utc_no_offsets
154
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
155
-
156
- assert_raises(NoOffsetsDefined) { dti.period_for_utc(DateTime.new(2005,1,1,0,0,0)) }
157
- assert_raises(NoOffsetsDefined) { dti.period_for_utc(Time.utc(2005,1,1,0,0,0)) }
158
- assert_raises(NoOffsetsDefined) { dti.period_for_utc(Time.utc(2005,1,1,0,0,0).to_i) }
159
- end
160
-
161
- def test_periods_for_local
162
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
163
- dti.offset :o1, -17900, 0, :TESTLMT
164
- dti.offset :o2, -18000, 3600, :TESTD
165
- dti.offset :o3, -18000, 0, :TESTS
166
- dti.offset :o4, -21600, 3600, :TESTD
167
-
168
- dti.transition 2000, 4, :o2, 58839277, 24 # 2000,4,2,1,0,0
169
- dti.transition 2000, 10, :o3, Time.utc(2000,10,2,1,0,0).to_i, 58843669, 24
170
- dti.transition 2001, 3, :o2, Time.utc(2001, 3,2,1,0,0).to_i
171
- dti.transition 2001, 4, :o4, Time.utc(2001, 4,2,1,0,0).to_i
172
- dti.transition 2001, 10, :o3, Time.utc(2001,10,2,1,0,0).to_i
173
- dti.transition 2002, 10, :o3, 58861189, 24 # 2002,10,2,1,0,0
174
- dti.transition 2003, 2, :o2, Time.utc(2003, 2,2,1,0,0).to_i
175
-
176
- o1 = TimezoneOffset.new(-17900, 0, :TESTLMT)
177
- o2 = TimezoneOffset.new(-18000, 3600, :TESTD)
178
- o3 = TimezoneOffset.new(-18000, 0, :TESTS)
179
- o4 = TimezoneOffset.new(-21600, 3600, :TESTD)
180
-
181
- t1 = TimezoneTransitionDefinition.new(o2, o1, Time.utc(2000, 4,2,1,0,0).to_i)
182
- t2 = TimezoneTransitionDefinition.new(o3, o2, Time.utc(2000,10,2,1,0,0).to_i)
183
- t3 = TimezoneTransitionDefinition.new(o2, o3, Time.utc(2001, 3,2,1,0,0).to_i)
184
- t4 = TimezoneTransitionDefinition.new(o4, o2, Time.utc(2001, 4,2,1,0,0).to_i)
185
- t5 = TimezoneTransitionDefinition.new(o3, o4, Time.utc(2001,10,2,1,0,0).to_i)
186
- t6 = TimezoneTransitionDefinition.new(o3, o3, Time.utc(2002,10,2,1,0,0).to_i)
187
- t7 = TimezoneTransitionDefinition.new(o2, o3, Time.utc(2003, 2,2,1,0,0).to_i)
188
-
189
-
190
- assert_equal([TimezonePeriod.new(nil, t1)], dti.periods_for_local(DateTime.new(1960, 1, 1, 1, 0, 0)))
191
- assert_equal([TimezonePeriod.new(nil, t1)], dti.periods_for_local(DateTime.new(1999,12, 1, 0, 0, 0)))
192
- assert_equal([TimezonePeriod.new(nil, t1)], dti.periods_for_local(Time.utc( 2000, 1, 1,10, 0, 0)))
193
- assert_equal([TimezonePeriod.new(nil, t1)], dti.periods_for_local(Time.utc( 2000, 4, 1,20, 1,39)))
194
- assert_equal([], dti.periods_for_local(Time.utc( 2000, 4, 1,20, 1,40)))
195
- assert_equal([], dti.periods_for_local(Time.utc( 2000, 4, 1,20,59,59)))
196
- assert_equal([TimezonePeriod.new(t1, t2)], dti.periods_for_local(Time.utc( 2000, 4, 1,21, 0, 0)))
197
- assert_equal([TimezonePeriod.new(t1, t2)], dti.periods_for_local(DateTime.new(2000,10, 1,19,59,59)))
198
- assert_equal([TimezonePeriod.new(t1, t2),
199
- TimezonePeriod.new(t2, t3)], dti.periods_for_local(Time.utc( 2000,10, 1,20, 0, 0).to_i))
200
- assert_equal([TimezonePeriod.new(t1, t2),
201
- TimezonePeriod.new(t2, t3)], dti.periods_for_local(DateTime.new(2000,10, 1,20,59,59)))
202
- assert_equal([TimezonePeriod.new(t2, t3)], dti.periods_for_local(Time.utc( 2000,10, 1,21, 0, 0)))
203
- assert_equal([TimezonePeriod.new(t2, t3)], dti.periods_for_local(Time.utc( 2001, 3, 1,19,59,59)))
204
- assert_equal([], dti.periods_for_local(Time.utc( 2001, 3, 1,20, 0, 0)))
205
- assert_equal([], dti.periods_for_local(DateTime.new(2001, 3, 1,20, 30, 0)))
206
- assert_equal([], dti.periods_for_local(Time.utc( 2001, 3, 1,20,59,59).to_i))
207
- assert_equal([TimezonePeriod.new(t3, t4)], dti.periods_for_local(Time.utc( 2001, 3, 1,21, 0, 0)))
208
- assert_equal([TimezonePeriod.new(t3, t4)], dti.periods_for_local(Time.utc( 2001, 4, 1,19,59,59)))
209
- assert_equal([TimezonePeriod.new(t3, t4),
210
- TimezonePeriod.new(t4, t5)], dti.periods_for_local(DateTime.new(2001, 4, 1,20, 0, 0)))
211
- assert_equal([TimezonePeriod.new(t3, t4),
212
- TimezonePeriod.new(t4, t5)], dti.periods_for_local(Time.utc( 2001, 4, 1,20,59,59)))
213
- assert_equal([TimezonePeriod.new(t4, t5)], dti.periods_for_local(Time.utc( 2001, 4, 1,21, 0, 0)))
214
- assert_equal([TimezonePeriod.new(t4, t5)], dti.periods_for_local(Time.utc( 2001,10, 1,19,59,59)))
215
- assert_equal([TimezonePeriod.new(t5, t6)], dti.periods_for_local(Time.utc( 2001,10, 1,20, 0, 0)))
216
- assert_equal([TimezonePeriod.new(t5, t6)], dti.periods_for_local(Time.utc( 2002, 2, 1,20, 0, 0)))
217
- assert_equal([TimezonePeriod.new(t5, t6)], dti.periods_for_local(Time.utc( 2002,10, 1,19,59,59)))
218
- assert_equal([TimezonePeriod.new(t6, t7)], dti.periods_for_local(Time.utc( 2002,10, 1,20, 0, 0)))
219
- assert_equal([TimezonePeriod.new(t6, t7)], dti.periods_for_local(Time.utc( 2003, 2, 1,19,59,59)))
220
- assert_equal([], dti.periods_for_local(Time.utc( 2003, 2, 1,20, 0, 0)))
221
- assert_equal([], dti.periods_for_local(Time.utc( 2003, 2, 1,20,59,59)))
222
- assert_equal([TimezonePeriod.new(t7, nil)], dti.periods_for_local(Time.utc( 2003, 2, 1,21, 0, 0)))
223
- assert_equal([TimezonePeriod.new(t7, nil)], dti.periods_for_local(Time.utc( 2004, 2, 1,20, 0, 0)))
224
- assert_equal([TimezonePeriod.new(t7, nil)], dti.periods_for_local(DateTime.new(2040, 2, 1,20, 0, 0)))
225
- end
226
-
227
- def test_periods_for_local_warsaw
228
- dti = TransitionDataTimezoneInfo.new('Test/Europe/Warsaw')
229
- dti.offset :o1, 5040, 0, :LMT
230
- dti.offset :o2, 5040, 0, :WMT
231
- dti.offset :o3, 3600, 0, :CET
232
- dti.offset :o4, 3600, 3600, :CEST
233
-
234
- dti.transition 1879, 12, :o2, 288925853, 120 # 1879,12,31,22,36,0
235
- dti.transition 1915, 8, :o3, 290485733, 120 # 1915, 8, 4,22,36,0
236
- dti.transition 1916, 4, :o4, 29051813, 12 # 1916, 4,30,22, 0,0
237
-
238
- o1 = TimezoneOffset.new(5040, 0, :LMT)
239
- o2 = TimezoneOffset.new(5040, 0, :WMT)
240
- o3 = TimezoneOffset.new(3600, 0, :CET)
241
- o4 = TimezoneOffset.new(3600, 3600, :CEST)
242
-
243
- t1 = TimezoneTransitionDefinition.new(o2, o1, 288925853, 120)
244
- t2 = TimezoneTransitionDefinition.new(o3, o2, 290485733, 120)
245
- t3 = TimezoneTransitionDefinition.new(o4, o3, 29051813, 12)
246
-
247
- assert_equal([TimezonePeriod.new(t1, t2),
248
- TimezonePeriod.new(t2, t3)], dti.periods_for_local(DateTime.new(1915,8,4,23,40,0)))
249
- end
250
-
251
- def test_periods_for_local_boundary
252
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
253
- dti.offset :o1, -3600, 0, :TESTD
254
- dti.offset :o2, -3600, 0, :TESTS
255
-
256
- dti.transition 2000, 7, :o2, Time.utc(2000,7,1,0,0,0).to_i
257
-
258
- o1 = TimezoneOffset.new(-3600, 0, :TESTD)
259
- o2 = TimezoneOffset.new(-3600, 0, :TESTS)
260
-
261
- t1 = TimezoneTransitionDefinition.new(o2, o1, Time.utc(2000,7,1,0,0,0).to_i)
262
-
263
- # 2000-07-01 00:00:00 UTC is 2000-06-30 23:00:00 UTC-1
264
- # hence to find periods for local times between 2000-06-30 23:00:00
265
- # and 2000-07-01 00:00:00 a search has to be carried out in the next half
266
- # year to the one containing the date we are looking for
267
-
268
- assert_equal([TimezonePeriod.new(nil, t1)], dti.periods_for_local(Time.utc(2000,6,30,22,59,59)))
269
- assert_equal([TimezonePeriod.new(t1, nil)], dti.periods_for_local(Time.utc(2000,6,30,23, 0, 0)))
270
- assert_equal([TimezonePeriod.new(t1, nil)], dti.periods_for_local(Time.utc(2000,7, 1, 0, 0, 0)))
271
- end
272
-
273
- def test_periods_for_local_no_transitions
274
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
275
- dti.offset :o1, -17900, 0, :TESTLMT
276
- dti.offset :o2, -18000, 0, :TEST
277
-
278
- o1 = TimezoneOffset.new(-17900, 0, :TESTLMT)
279
-
280
- assert_equal([TimezonePeriod.new(nil, nil, o1)], dti.periods_for_local(DateTime.new(2005,1,1,0,0,0)))
281
- assert_equal([TimezonePeriod.new(nil, nil, o1)], dti.periods_for_local(Time.utc(2005,1,1,0,0,0)))
282
- assert_equal([TimezonePeriod.new(nil, nil, o1)], dti.periods_for_local(Time.utc(2005,1,1,0,0,0).to_i))
283
- end
284
-
285
- def test_periods_for_local_no_offsets
286
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
287
-
288
- assert_raises(NoOffsetsDefined) { dti.periods_for_local(DateTime.new(2005,1,1,0,0,0)) }
289
- assert_raises(NoOffsetsDefined) { dti.periods_for_local(Time.utc(2005,1,1,0,0,0)) }
290
- assert_raises(NoOffsetsDefined) { dti.periods_for_local(Time.utc(2005,1,1,0,0,0).to_i) }
291
- end
292
-
293
- def test_transitions_up_to
294
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
295
- dti.offset :o1, -17900, 0, :TESTLMT
296
- dti.offset :o2, -18000, 3600, :TESTD
297
- dti.offset :o3, -18000, 0, :TESTS
298
- dti.offset :o4, -21600, 3600, :TESTD
299
-
300
- dti.transition 2010, 4, :o2, Time.utc(2010, 4,1,1,0,0).to_i
301
- dti.transition 2010, 10, :o3, Time.utc(2010,10,1,1,0,0).to_i
302
- dti.transition 2011, 3, :o2, 58934917, 24 # (2011, 3,1,1,0,0)
303
- dti.transition 2011, 4, :o4, Time.utc(2011, 4,1,1,0,0).to_i, 58935661, 24
304
- dti.transition 2011, 10, :o3, Time.utc(2011,10,1,1,0,0).to_i
305
-
306
- o1 = TimezoneOffset.new(-17900, 0, :TESTLMT)
307
- o2 = TimezoneOffset.new(-18000, 3600, :TESTD)
308
- o3 = TimezoneOffset.new(-18000, 0, :TESTS)
309
- o4 = TimezoneOffset.new(-21600, 3600, :TESTD)
310
-
311
- t1 = TimezoneTransitionDefinition.new(o2, o1, Time.utc(2010, 4,1,1,0,0).to_i)
312
- t2 = TimezoneTransitionDefinition.new(o3, o2, Time.utc(2010,10,1,1,0,0).to_i)
313
- t3 = TimezoneTransitionDefinition.new(o2, o3, Time.utc(2011, 3,1,1,0,0).to_i)
314
- t4 = TimezoneTransitionDefinition.new(o4, o2, Time.utc(2011, 4,1,1,0,0).to_i)
315
- t5 = TimezoneTransitionDefinition.new(o3, o4, Time.utc(2011,10,1,1,0,0).to_i)
316
-
317
- assert_equal([], dti.transitions_up_to(Time.utc(2010,4,1,1,0,0)))
318
- assert_equal([], dti.transitions_up_to(Time.utc(2010,4,1,1,0,0), Time.utc(2000,1,1,0,0,0)))
319
- assert_equal([t1], dti.transitions_up_to(Time.utc(2010,4,1,1,0,1)))
320
- assert_equal([t1], dti.transitions_up_to(Time.utc(2010,4,1,1,0,1), Time.utc(2000,1,1,0,0,0)))
321
- assert_equal([t2,t3,t4], dti.transitions_up_to(Time.utc(2011,4,1,1,0,1), Time.utc(2010,10,1,1,0,0)))
322
- assert_equal([t2,t3,t4], dti.transitions_up_to(Time.utc(2011,10,1,1,0,0), Time.utc(2010,4,1,1,0,1)))
323
- assert_equal([t3], dti.transitions_up_to(Time.utc(2011,4,1,1,0,0), Time.utc(2010,10,1,1,0,1)))
324
- assert_equal([], dti.transitions_up_to(Time.utc(2011,3,1,1,0,0), Time.utc(2010,10,1,1,0,1)))
325
- assert_equal([t1,t2,t3,t4], dti.transitions_up_to(Time.utc(2011,10,1,1,0,0)))
326
- assert_equal([t1,t2,t3,t4,t5], dti.transitions_up_to(Time.utc(2011,10,1,1,0,1)))
327
- assert_equal([t1,t2,t3,t4,t5], dti.transitions_up_to(Time.utc(2011,10,1,1,0,0,1)))
328
- assert_equal([t1,t2,t3,t4,t5], dti.transitions_up_to(Time.utc(2011,10,1,1,0,1), Time.utc(2010,4,1,1,0,0)))
329
- assert_equal([t2,t3,t4,t5], dti.transitions_up_to(Time.utc(2011,10,1,1,0,1), Time.utc(2010,4,1,1,0,1)))
330
- assert_equal([t2,t3,t4,t5], dti.transitions_up_to(Time.utc(2011,10,1,1,0,1), Time.utc(2010,4,1,1,0,0,1)))
331
- assert_equal([t5], dti.transitions_up_to(Time.utc(2015,1,1,0,0,0), Time.utc(2011,10,1,1,0,0)))
332
- assert_equal([], dti.transitions_up_to(Time.utc(2015,1,1,0,0,0), Time.utc(2011,10,1,1,0,1)))
333
-
334
- assert_equal([], dti.transitions_up_to(Time.utc(2010,4,1,1,0,0).to_i))
335
- assert_equal([], dti.transitions_up_to(Time.utc(2010,4,1,1,0,0).to_i, Time.utc(2000,1,1,0,0,0).to_i))
336
- assert_equal([t1], dti.transitions_up_to(Time.utc(2010,4,1,1,0,1).to_i))
337
- assert_equal([t1], dti.transitions_up_to(Time.utc(2010,4,1,1,0,1).to_i, Time.utc(2000,1,1,0,0,0).to_i))
338
- assert_equal([t2,t3,t4], dti.transitions_up_to(Time.utc(2011,4,1,1,0,1).to_i, Time.utc(2010,10,1,1,0,0).to_i))
339
- assert_equal([t2,t3,t4], dti.transitions_up_to(Time.utc(2011,10,1,1,0,0).to_i, Time.utc(2010,4,1,1,0,1).to_i))
340
- assert_equal([t3], dti.transitions_up_to(Time.utc(2011,4,1,1,0,0).to_i, Time.utc(2010,10,1,1,0,1).to_i))
341
- assert_equal([], dti.transitions_up_to(Time.utc(2011,3,1,1,0,0).to_i, Time.utc(2010,10,1,1,0,1).to_i))
342
- assert_equal([t1,t2,t3,t4], dti.transitions_up_to(Time.utc(2011,10,1,1,0,0).to_i))
343
- assert_equal([t1,t2,t3,t4,t5], dti.transitions_up_to(Time.utc(2011,10,1,1,0,1).to_i))
344
- assert_equal([t1,t2,t3,t4,t5], dti.transitions_up_to(Time.utc(2011,10,1,1,0,1).to_i, Time.utc(2010,4,1,1,0,0).to_i))
345
- assert_equal([t2,t3,t4,t5], dti.transitions_up_to(Time.utc(2011,10,1,1,0,1).to_i, Time.utc(2010,4,1,1,0,1).to_i))
346
- assert_equal([t5], dti.transitions_up_to(Time.utc(2015,1,1,0,0,0).to_i, Time.utc(2011,10,1,1,0,0).to_i))
347
- assert_equal([], dti.transitions_up_to(Time.utc(2015,1,1,0,0,0).to_i, Time.utc(2011,10,1,1,0,1).to_i))
348
-
349
- assert_equal([], dti.transitions_up_to(DateTime.new(2010,4,1,1,0,0)))
350
- assert_equal([], dti.transitions_up_to(DateTime.new(2010,4,1,1,0,0), DateTime.new(2000,1,1,0,0,0)))
351
- assert_equal([t1], dti.transitions_up_to(DateTime.new(2010,4,1,1,0,1)))
352
- assert_equal([t1], dti.transitions_up_to(DateTime.new(2010,4,1,1,0,1), DateTime.new(2000,1,1,0,0,0)))
353
- assert_equal([t2,t3,t4], dti.transitions_up_to(DateTime.new(2011,4,1,1,0,1), DateTime.new(2010,10,1,1,0,0)))
354
- assert_equal([t2,t3,t4], dti.transitions_up_to(DateTime.new(2011,10,1,1,0,0), DateTime.new(2010,4,1,1,0,1)))
355
- assert_equal([t3], dti.transitions_up_to(DateTime.new(2011,4,1,1,0,0), DateTime.new(2010,10,1,1,0,1)))
356
- assert_equal([], dti.transitions_up_to(DateTime.new(2011,3,1,1,0,0), DateTime.new(2010,10,1,1,0,1)))
357
- assert_equal([t1,t2,t3,t4], dti.transitions_up_to(DateTime.new(2011,10,1,1,0,0)))
358
- assert_equal([t1,t2,t3,t4,t5], dti.transitions_up_to(DateTime.new(2011,10,1,1,0,1)))
359
- assert_equal([t1,t2,t3,t4,t5], dti.transitions_up_to(DateTime.new(2011,10,1,1,0,Rational(DATETIME_RESOLUTION,1000000))))
360
- assert_equal([t1,t2,t3,t4,t5], dti.transitions_up_to(DateTime.new(2011,10,1,1,0,1), DateTime.new(2010,4,1,1,0,0)))
361
- assert_equal([t2,t3,t4,t5], dti.transitions_up_to(DateTime.new(2011,10,1,1,0,1), DateTime.new(2010,4,1,1,0,1)))
362
-
363
- # Ruby 1.8.7 (built with GCC 8.3.0 on Ubuntu 19.04) fails to perform
364
- # DateTime comparisons correctly when sub-seconds are used.
365
- to = DateTime.new(2011,10,1,1,0,1)
366
- from = DateTime.new(2010,4,1,1,0,Rational(DATETIME_RESOLUTION,1000000))
367
- if to > from
368
- assert_equal([t2,t3,t4,t5], dti.transitions_up_to(to, from))
369
- else
370
- puts "This platform does not consider the DateTime #{to.strftime('%Y-%m-%d %H:%m:%S.%N')} to be later than the DateTime #{from.strftime('%Y-%m-%d %H:%m:%S.%N')}"
371
- end
372
-
373
- assert_equal([t5], dti.transitions_up_to(DateTime.new(2015,1,1,0,0,0), DateTime.new(2011,10,1,1,0,0)))
374
- assert_equal([], dti.transitions_up_to(DateTime.new(2015,1,1,0,0,0), DateTime.new(2011,10,1,1,0,1)))
375
- end
376
-
377
- def test_transitions_up_to_no_transitions
378
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
379
- dti.offset :o1, -17900, 0, :TESTLMT
380
-
381
- assert_equal([], dti.transitions_up_to(Time.utc(2015,1,1,0,0,0)))
382
- assert_equal([], dti.transitions_up_to(Time.utc(2015,1,1,0,0,0).to_i))
383
- assert_equal([], dti.transitions_up_to(DateTime.new(2015,1,1,0,0,0)))
384
- end
385
-
386
- def test_transitions_up_to_utc_to_not_greater_than_utc_from
387
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
388
- dti.offset :o1, -17900, 0, :TESTLMT
389
-
390
- assert_raises(ArgumentError) do
391
- dti.transitions_up_to(Time.utc(2012,8,1,0,0,0), Time.utc(2013,8,1,0,0,0))
392
- end
393
-
394
- assert_raises(ArgumentError) do
395
- dti.transitions_up_to(Time.utc(2012,8,1,0,0,0).to_i, Time.utc(2012,8,1,0,0,0).to_i)
396
- end
397
-
398
- assert_raises(ArgumentError) do
399
- dti.transitions_up_to(DateTime.new(2012,8,1,0,0,0), DateTime.new(2012,8,1,0,0,0))
400
- end
401
- end
402
-
403
- def test_datetime_and_timestamp_use
404
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
405
- dti.offset :o1, 0, 0, :TESTS
406
- dti.offset :o2, 0, 3600, :TESTD
407
-
408
- dti.transition 1901, 12, :o2, -2147483649, 69573092117, 28800
409
- dti.transition 1969, 12, :o1, -1, 210866759999, 86400
410
- dti.transition 2001, 9, :o2, 1000000000, 529666909, 216
411
- dti.transition 2038, 1, :o1, 2147483648, 3328347557, 1350
412
-
413
- if RubyCoreSupport.time_supports_negative && RubyCoreSupport.time_supports_64bit
414
- assert(dti.period_for_utc(DateTime.new(1901,12,13,20,45,51)).start_transition.at.eql?(TimeOrDateTime.new(-2147483649)))
415
- else
416
- assert(dti.period_for_utc(DateTime.new(1901,12,13,20,45,51)).start_transition.at.eql?(TimeOrDateTime.new(DateTime.new(1901,12,13,20,45,51))))
417
- end
418
-
419
- if RubyCoreSupport.time_supports_negative
420
- assert(dti.period_for_utc(DateTime.new(1969,12,31,23,59,59)).start_transition.at.eql?(TimeOrDateTime.new(-1)))
421
- else
422
- assert(dti.period_for_utc(DateTime.new(1969,12,31,23,59,59)).start_transition.at.eql?(TimeOrDateTime.new(DateTime.new(1969,12,31,23,59,59))))
423
- end
424
-
425
- assert(dti.period_for_utc(DateTime.new(2001,9,9,2,46,40)).start_transition.at.eql?(TimeOrDateTime.new(1000000000)))
426
-
427
- if RubyCoreSupport.time_supports_64bit
428
- assert(dti.period_for_utc(DateTime.new(2038,1,19,3,14,8)).start_transition.at.eql?(TimeOrDateTime.new(2147483648)))
429
- else
430
- assert(dti.period_for_utc(DateTime.new(2038,1,19,3,14,8)).start_transition.at.eql?(TimeOrDateTime.new(DateTime.new(2038,1,19,3,14,8))))
431
- end
432
- end
433
- end