tzinfo 1.2.3 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.yardopts +3 -0
  5. data/CHANGES.md +501 -372
  6. data/LICENSE +13 -13
  7. data/README.md +368 -113
  8. data/lib/tzinfo.rb +64 -29
  9. data/lib/tzinfo/country.rb +141 -129
  10. data/lib/tzinfo/country_timezone.rb +71 -101
  11. data/lib/tzinfo/data_source.rb +389 -144
  12. data/lib/tzinfo/data_sources.rb +8 -0
  13. data/lib/tzinfo/data_sources/constant_offset_data_timezone_info.rb +56 -0
  14. data/lib/tzinfo/data_sources/country_info.rb +42 -0
  15. data/lib/tzinfo/data_sources/data_timezone_info.rb +91 -0
  16. data/lib/tzinfo/data_sources/linked_timezone_info.rb +33 -0
  17. data/lib/tzinfo/data_sources/ruby_data_source.rb +143 -0
  18. data/lib/tzinfo/data_sources/timezone_info.rb +47 -0
  19. data/lib/tzinfo/data_sources/transitions_data_timezone_info.rb +214 -0
  20. data/lib/tzinfo/data_sources/zoneinfo_data_source.rb +575 -0
  21. data/lib/tzinfo/data_sources/zoneinfo_reader.rb +286 -0
  22. data/lib/tzinfo/data_timezone.rb +33 -47
  23. data/lib/tzinfo/datetime_with_offset.rb +153 -0
  24. data/lib/tzinfo/format1.rb +10 -0
  25. data/lib/tzinfo/format1/country_definer.rb +17 -0
  26. data/lib/tzinfo/format1/country_index_definition.rb +64 -0
  27. data/lib/tzinfo/format1/timezone_definer.rb +64 -0
  28. data/lib/tzinfo/format1/timezone_definition.rb +39 -0
  29. data/lib/tzinfo/format1/timezone_index_definition.rb +77 -0
  30. data/lib/tzinfo/format2.rb +10 -0
  31. data/lib/tzinfo/format2/country_definer.rb +68 -0
  32. data/lib/tzinfo/format2/country_index_definer.rb +68 -0
  33. data/lib/tzinfo/format2/country_index_definition.rb +46 -0
  34. data/lib/tzinfo/format2/timezone_definer.rb +94 -0
  35. data/lib/tzinfo/format2/timezone_definition.rb +73 -0
  36. data/lib/tzinfo/format2/timezone_index_definer.rb +45 -0
  37. data/lib/tzinfo/format2/timezone_index_definition.rb +55 -0
  38. data/lib/tzinfo/info_timezone.rb +26 -21
  39. data/lib/tzinfo/linked_timezone.rb +33 -52
  40. data/lib/tzinfo/offset_timezone_period.rb +42 -0
  41. data/lib/tzinfo/string_deduper.rb +118 -0
  42. data/lib/tzinfo/time_with_offset.rb +128 -0
  43. data/lib/tzinfo/timestamp.rb +548 -0
  44. data/lib/tzinfo/timestamp_with_offset.rb +85 -0
  45. data/lib/tzinfo/timezone.rb +989 -498
  46. data/lib/tzinfo/timezone_offset.rb +90 -57
  47. data/lib/tzinfo/timezone_period.rb +155 -197
  48. data/lib/tzinfo/timezone_proxy.rb +71 -74
  49. data/lib/tzinfo/timezone_transition.rb +77 -99
  50. data/lib/tzinfo/transitions_timezone_period.rb +63 -0
  51. data/lib/tzinfo/untaint_ext.rb +18 -0
  52. data/lib/tzinfo/version.rb +7 -0
  53. data/lib/tzinfo/with_offset.rb +61 -0
  54. metadata +63 -120
  55. metadata.gz.sig +0 -0
  56. data/Rakefile +0 -107
  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/ruby_core_support.rb +0 -146
  63. data/lib/tzinfo/ruby_country_info.rb +0 -70
  64. data/lib/tzinfo/ruby_data_source.rb +0 -136
  65. data/lib/tzinfo/time_or_datetime.rb +0 -333
  66. data/lib/tzinfo/timezone_definition.rb +0 -36
  67. data/lib/tzinfo/timezone_index_definition.rb +0 -54
  68. data/lib/tzinfo/timezone_info.rb +0 -30
  69. data/lib/tzinfo/timezone_transition_definition.rb +0 -101
  70. data/lib/tzinfo/transition_data_timezone_info.rb +0 -274
  71. data/lib/tzinfo/zoneinfo_country_info.rb +0 -35
  72. data/lib/tzinfo/zoneinfo_data_source.rb +0 -487
  73. data/lib/tzinfo/zoneinfo_timezone_info.rb +0 -294
  74. data/test/tc_country.rb +0 -236
  75. data/test/tc_country_index_definition.rb +0 -69
  76. data/test/tc_country_info.rb +0 -16
  77. data/test/tc_country_timezone.rb +0 -161
  78. data/test/tc_data_source.rb +0 -218
  79. data/test/tc_data_timezone.rb +0 -99
  80. data/test/tc_data_timezone_info.rb +0 -18
  81. data/test/tc_info_timezone.rb +0 -34
  82. data/test/tc_linked_timezone.rb +0 -155
  83. data/test/tc_linked_timezone_info.rb +0 -23
  84. data/test/tc_offset_rationals.rb +0 -23
  85. data/test/tc_ruby_core_support.rb +0 -168
  86. data/test/tc_ruby_country_info.rb +0 -80
  87. data/test/tc_ruby_data_source.rb +0 -143
  88. data/test/tc_time_or_datetime.rb +0 -639
  89. data/test/tc_timezone.rb +0 -1350
  90. data/test/tc_timezone_definition.rb +0 -113
  91. data/test/tc_timezone_index_definition.rb +0 -73
  92. data/test/tc_timezone_info.rb +0 -11
  93. data/test/tc_timezone_london.rb +0 -143
  94. data/test/tc_timezone_melbourne.rb +0 -142
  95. data/test/tc_timezone_new_york.rb +0 -142
  96. data/test/tc_timezone_offset.rb +0 -126
  97. data/test/tc_timezone_period.rb +0 -548
  98. data/test/tc_timezone_proxy.rb +0 -127
  99. data/test/tc_timezone_transition.rb +0 -352
  100. data/test/tc_timezone_transition_definition.rb +0 -284
  101. data/test/tc_timezone_utc.rb +0 -27
  102. data/test/tc_transition_data_timezone_info.rb +0 -423
  103. data/test/tc_zoneinfo_country_info.rb +0 -64
  104. data/test/tc_zoneinfo_data_source.rb +0 -1193
  105. data/test/tc_zoneinfo_timezone_info.rb +0 -1128
  106. data/test/test_utils.rb +0 -134
  107. data/test/ts_all.rb +0 -7
  108. data/test/ts_all_ruby.rb +0 -5
  109. data/test/ts_all_zoneinfo.rb +0 -7
  110. data/test/tzinfo-data/tzinfo/data.rb +0 -8
  111. data/test/tzinfo-data/tzinfo/data/definitions/America/Argentina/Buenos_Aires.rb +0 -89
  112. data/test/tzinfo-data/tzinfo/data/definitions/America/New_York.rb +0 -315
  113. data/test/tzinfo-data/tzinfo/data/definitions/Australia/Melbourne.rb +0 -218
  114. data/test/tzinfo-data/tzinfo/data/definitions/EST.rb +0 -19
  115. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__m__1.rb +0 -21
  116. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__p__1.rb +0 -21
  117. data/test/tzinfo-data/tzinfo/data/definitions/Etc/UTC.rb +0 -21
  118. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Amsterdam.rb +0 -261
  119. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Andorra.rb +0 -186
  120. data/test/tzinfo-data/tzinfo/data/definitions/Europe/London.rb +0 -321
  121. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Paris.rb +0 -265
  122. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Prague.rb +0 -220
  123. data/test/tzinfo-data/tzinfo/data/definitions/UTC.rb +0 -16
  124. data/test/tzinfo-data/tzinfo/data/indexes/countries.rb +0 -927
  125. data/test/tzinfo-data/tzinfo/data/indexes/timezones.rb +0 -596
  126. data/test/tzinfo-data/tzinfo/data/version.rb +0 -14
  127. data/test/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  128. data/test/zoneinfo/America/New_York +0 -0
  129. data/test/zoneinfo/Australia/Melbourne +0 -0
  130. data/test/zoneinfo/EST +0 -0
  131. data/test/zoneinfo/Etc/UTC +0 -0
  132. data/test/zoneinfo/Europe/Amsterdam +0 -0
  133. data/test/zoneinfo/Europe/Andorra +0 -0
  134. data/test/zoneinfo/Europe/London +0 -0
  135. data/test/zoneinfo/Europe/Paris +0 -0
  136. data/test/zoneinfo/Europe/Prague +0 -0
  137. data/test/zoneinfo/Factory +0 -0
  138. data/test/zoneinfo/iso3166.tab +0 -275
  139. data/test/zoneinfo/posix/Europe/London +0 -0
  140. data/test/zoneinfo/posixrules +0 -0
  141. data/test/zoneinfo/right/Europe/London +0 -0
  142. data/test/zoneinfo/zone.tab +0 -439
  143. data/test/zoneinfo/zone1970.tab +0 -369
  144. data/tzinfo.gemspec +0 -21
@@ -1,284 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
2
- require 'date'
3
-
4
- include TZInfo
5
-
6
- class TCTimezoneTransitionDefinition < Minitest::Test
7
- def test_initialize_timestamp_only
8
- assert_nothing_raised do
9
- TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
10
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
11
- end
12
- end
13
-
14
- def test_initialize_timestamp_and_datetime
15
- assert_nothing_raised do
16
- TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
17
- TimezoneOffset.new(3600, 0, :TST), 1148949080, 5300392727, 2160)
18
- end
19
- end
20
-
21
- def test_initialize_datetime_only
22
- assert_nothing_raised do
23
- TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
24
- TimezoneOffset.new(3600, 0, :TST), 5300392727, 2160)
25
- end
26
- end
27
-
28
- def test_at
29
- t1 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
30
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
31
- t2 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
32
- TimezoneOffset.new(3600, 0, :TST), 5300392727, 2160)
33
- t3 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
34
- TimezoneOffset.new(3600, 0, :TST), 1148949080, 5300392727, 2160)
35
-
36
- assert(TimeOrDateTime.new(1148949080).eql?(t1.at))
37
- assert(TimeOrDateTime.new(DateTime.new(2006, 5, 30, 0, 31, 20)).eql?(t2.at))
38
- assert(TimeOrDateTime.new(1148949080).eql?(t3.at))
39
- end
40
-
41
- def test_at_before_negative_32_bit
42
- t = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
43
- TimezoneOffset.new(3600, 0, :TST), -2147483649, 69573092117, 28800)
44
-
45
- if RubyCoreSupport.time_supports_negative && RubyCoreSupport.time_supports_64bit
46
- assert(TimeOrDateTime.new(-2147483649).eql?(t.at))
47
- else
48
- assert(TimeOrDateTime.new(DateTime.new(1901, 12, 13, 20, 45, 51)).eql?(t.at))
49
- end
50
- end
51
-
52
- def test_at_before_epoch
53
- t = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
54
- TimezoneOffset.new(3600, 0, :TST), -1, 210866759999, 86400)
55
-
56
- if RubyCoreSupport.time_supports_negative
57
- assert(TimeOrDateTime.new(-1).eql?(t.at))
58
- else
59
- assert(TimeOrDateTime.new(DateTime.new(1969, 12, 31, 23, 59, 59)).eql?(t.at))
60
- end
61
- end
62
-
63
- def test_at_after_32bit
64
- t = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
65
- TimezoneOffset.new(3600, 0, :TST), 2147483648, 3328347557, 1350)
66
-
67
- if RubyCoreSupport.time_supports_64bit
68
- assert(TimeOrDateTime.new(2147483648).eql?(t.at))
69
- else
70
- assert(TimeOrDateTime.new(DateTime.new(2038, 1, 19, 3, 14, 8)).eql?(t.at))
71
- end
72
- end
73
-
74
- def test_eql_timestamp
75
- t1 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
76
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
77
- t2 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
78
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
79
- t3 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
80
- TimezoneOffset.new(3600, 0, :TST), 5300392727, 2160)
81
- t4 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
82
- TimezoneOffset.new(3600, 0, :TST), 1148949080, 5300392727, 2160)
83
- t5 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
84
- TimezoneOffset.new(3600, 0, :TST), 1148949081)
85
- t6 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3601, 3600, :TDT),
86
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
87
- t7 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
88
- TimezoneOffset.new(3601, 0, :TST), 1148949080)
89
-
90
- assert_equal(true, t1.eql?(t1))
91
- assert_equal(true, t1.eql?(t2))
92
- assert_equal(false, t1.eql?(t3))
93
- assert_equal(true, t1.eql?(t4))
94
- assert_equal(false, t1.eql?(t5))
95
- assert_equal(false, t1.eql?(t6))
96
- assert_equal(false, t1.eql?(t7))
97
- assert_equal(false, t1.eql?(Object.new))
98
- end
99
-
100
- def test_eql_datetime
101
- t1 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
102
- TimezoneOffset.new(3600, 0, :TST), 5300392727, 2160)
103
- t2 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
104
- TimezoneOffset.new(3600, 0, :TST), 5300392727, 2160)
105
- t3 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
106
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
107
- t4 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
108
- TimezoneOffset.new(3600, 0, :TST), 1148949080, 5300392727, 2160)
109
- t5 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
110
- TimezoneOffset.new(3600, 0, :TST), 7852433803, 3200)
111
- t6 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3601, 3600, :TDT),
112
- TimezoneOffset.new(3600, 0, :TST), 5300392727, 2160)
113
- t7 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
114
- TimezoneOffset.new(3601, 0, :TST), 5300392727, 2160)
115
-
116
- assert_equal(true, t1.eql?(t1))
117
- assert_equal(true, t1.eql?(t2))
118
- assert_equal(false, t1.eql?(t3))
119
- assert_equal(false, t1.eql?(t4))
120
- assert_equal(false, t1.eql?(t5))
121
- assert_equal(false, t1.eql?(t6))
122
- assert_equal(false, t1.eql?(t7))
123
- assert_equal(false, t1.eql?(Object.new))
124
- end
125
-
126
- def test_eql_timestamp_and_datetime
127
- t1 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
128
- TimezoneOffset.new(3600, 0, :TST), 1148949080, 5300392727, 2160)
129
- t2 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
130
- TimezoneOffset.new(3600, 0, :TST), 1148949080, 5300392727, 2160)
131
- t3 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
132
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
133
- t4 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
134
- TimezoneOffset.new(3600, 0, :TST), 5300392727, 2160)
135
- t5 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
136
- TimezoneOffset.new(3600, 0, :TST), 1148952681, 7852433803, 3200)
137
- t6 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3601, 3600, :TDT),
138
- TimezoneOffset.new(3600, 0, :TST), 1148949080, 5300392727, 2160)
139
- t7 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
140
- TimezoneOffset.new(3601, 0, :TST), 1148949080, 5300392727, 2160)
141
-
142
- assert_equal(true, t1.eql?(t1))
143
- assert_equal(true, t1.eql?(t2))
144
- assert_equal(true, t1.eql?(t3))
145
- assert_equal(false, t1.eql?(t4))
146
- assert_equal(false, t1.eql?(t5))
147
- assert_equal(false, t1.eql?(t6))
148
- assert_equal(false, t1.eql?(t7))
149
- assert_equal(false, t1.eql?(Object.new))
150
- end
151
-
152
- def test_eql_timestamp_and_datetime_before_negative_32bit
153
- t1 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
154
- TimezoneOffset.new(3600, 0, :TST), -2147483649, 69573092117, 28800)
155
- t2 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
156
- TimezoneOffset.new(3600, 0, :TST), -2147483649, 69573092117, 28800)
157
- t3 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
158
- TimezoneOffset.new(3600, 0, :TST), -2147483649)
159
- t4 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
160
- TimezoneOffset.new(3600, 0, :TST), 69573092117, 28800)
161
-
162
- assert_equal(true, t1.eql?(t1))
163
- assert_equal(true, t1.eql?(t2))
164
-
165
- if RubyCoreSupport.time_supports_negative && RubyCoreSupport.time_supports_64bit
166
- assert_equal(true, t1.eql?(t3))
167
- assert_equal(false, t1.eql?(t4))
168
- assert_equal(true, t3.eql?(t1))
169
- assert_equal(false, t4.eql?(t1))
170
- else
171
- assert_equal(false, t1.eql?(t3))
172
- assert_equal(true, t1.eql?(t4))
173
- assert_equal(false, t3.eql?(t1))
174
- assert_equal(true, t4.eql?(t1))
175
- end
176
- end
177
-
178
- def test_eql_timestamp_and_datetime_before_epoch
179
- t1 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
180
- TimezoneOffset.new(3600, 0, :TST), -1, 210866759999, 86400)
181
- t2 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
182
- TimezoneOffset.new(3600, 0, :TST), -1, 210866759999, 86400)
183
- t3 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
184
- TimezoneOffset.new(3600, 0, :TST), -1)
185
- t4 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
186
- TimezoneOffset.new(3600, 0, :TST), 210866759999, 86400)
187
-
188
- assert_equal(true, t1.eql?(t1))
189
- assert_equal(true, t1.eql?(t2))
190
-
191
- if RubyCoreSupport.time_supports_negative
192
- assert_equal(true, t1.eql?(t3))
193
- assert_equal(false, t1.eql?(t4))
194
- assert_equal(true, t3.eql?(t1))
195
- assert_equal(false, t4.eql?(t1))
196
- else
197
- assert_equal(false, t1.eql?(t3))
198
- assert_equal(true, t1.eql?(t4))
199
- assert_equal(false, t3.eql?(t1))
200
- assert_equal(true, t4.eql?(t1))
201
- end
202
- end
203
-
204
- def test_eql_timestamp_and_datetime_after_32bit
205
- t1 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
206
- TimezoneOffset.new(3600, 0, :TST), 2147483648, 3328347557, 1350)
207
- t2 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
208
- TimezoneOffset.new(3600, 0, :TST), 2147483648, 3328347557, 1350)
209
- t3 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
210
- TimezoneOffset.new(3600, 0, :TST), 2147483648)
211
- t4 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
212
- TimezoneOffset.new(3600, 0, :TST), 3328347557, 1350)
213
-
214
- assert_equal(true, t1.eql?(t1))
215
- assert_equal(true, t1.eql?(t2))
216
-
217
- if RubyCoreSupport.time_supports_64bit
218
- assert_equal(true, t1.eql?(t3))
219
- assert_equal(false, t1.eql?(t4))
220
- assert_equal(true, t3.eql?(t1))
221
- assert_equal(false, t4.eql?(t1))
222
- else
223
- assert_equal(false, t1.eql?(t3))
224
- assert_equal(true, t1.eql?(t4))
225
- assert_equal(false, t3.eql?(t1))
226
- assert_equal(true, t4.eql?(t1))
227
- end
228
- end
229
-
230
- def test_hash
231
- t1 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
232
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
233
- t2 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
234
- TimezoneOffset.new(3600, 0, :TST), 5300392727, 2160)
235
- t3 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
236
- TimezoneOffset.new(3600, 0, :TST), 1148949080, 5300392727, 2160)
237
- t4 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
238
- TimezoneOffset.new(3600, 0, :TST), -2147483649, 69573092117, 28800)
239
- t5 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
240
- TimezoneOffset.new(3600, 0, :TST), -1, 210866759999, 86400)
241
- t6 = TimezoneTransitionDefinition.new(TimezoneOffset.new(3600, 3600, :TDT),
242
- TimezoneOffset.new(3600, 0, :TST), 2147483648, 3328347557, 1350)
243
-
244
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
245
- TimezoneOffset.new(3600, 0, :TST).hash ^ 1148949080.hash ^ nil.hash,
246
- t1.hash)
247
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
248
- TimezoneOffset.new(3600, 0, :TST).hash ^ 5300392727.hash ^ 2160.hash,
249
- t2.hash)
250
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
251
- TimezoneOffset.new(3600, 0, :TST).hash ^ 1148949080.hash ^ nil.hash,
252
- t3.hash)
253
-
254
- if RubyCoreSupport.time_supports_negative && RubyCoreSupport.time_supports_64bit
255
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
256
- TimezoneOffset.new(3600, 0, :TST).hash ^ -2147483649.hash ^ nil.hash,
257
- t4.hash)
258
- else
259
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
260
- TimezoneOffset.new(3600, 0, :TST).hash ^ 69573092117.hash ^ 28800.hash,
261
- t4.hash)
262
- end
263
-
264
- if RubyCoreSupport.time_supports_negative
265
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
266
- TimezoneOffset.new(3600, 0, :TST).hash ^ -1.hash ^ nil.hash,
267
- t5.hash)
268
- else
269
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
270
- TimezoneOffset.new(3600, 0, :TST).hash ^ 210866759999.hash ^ 86400.hash,
271
- t5.hash)
272
- end
273
-
274
- if RubyCoreSupport.time_supports_64bit
275
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
276
- TimezoneOffset.new(3600, 0, :TST).hash ^ 2147483648.hash ^ nil.hash,
277
- t6.hash)
278
- else
279
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT).hash ^
280
- TimezoneOffset.new(3600, 0, :TST).hash ^ 3328347557.hash ^ 1350.hash,
281
- t6.hash)
282
- end
283
- end
284
- end
@@ -1,27 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
2
-
3
- include TZInfo
4
-
5
- class TCTimezoneUTC < Minitest::Test
6
- def test_2004
7
- tz = Timezone.get('UTC')
8
-
9
- assert_equal(DateTime.new(2004,1,1,0,0,0), tz.utc_to_local(DateTime.new(2004,1,1,0,0,0)))
10
- assert_equal(DateTime.new(2004,12,31,23,59,59), tz.utc_to_local(DateTime.new(2004,12,31,23,59,59)))
11
-
12
- assert_equal(DateTime.new(2004,1,1,0,0,0), tz.local_to_utc(DateTime.new(2004,1,1,0,0,0)))
13
- assert_equal(DateTime.new(2004,12,31,23,59,59), tz.local_to_utc(DateTime.new(2004,12,31,23,59,59)))
14
-
15
- assert_equal(:UTC, tz.period_for_utc(DateTime.new(2004,1,1,0,0,0)).zone_identifier)
16
- assert_equal(:UTC, tz.period_for_utc(DateTime.new(2004,12,31,23,59,59)).zone_identifier)
17
-
18
- assert_equal(:UTC, tz.period_for_local(DateTime.new(2004,1,1,0,0,0)).zone_identifier)
19
- assert_equal(:UTC, tz.period_for_local(DateTime.new(2004,12,31,23,59,59)).zone_identifier)
20
-
21
- assert_equal(0, tz.period_for_utc(DateTime.new(2004,1,1,0,0,0)).utc_total_offset)
22
- assert_equal(0, tz.period_for_utc(DateTime.new(2004,12,31,23,59,59)).utc_total_offset)
23
-
24
- assert_equal(0, tz.period_for_local(DateTime.new(2004,1,1,0,0,0)).utc_total_offset)
25
- assert_equal(0, tz.period_for_local(DateTime.new(2004,12,31,23,59,59)).utc_total_offset)
26
- end
27
- end
@@ -1,423 +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
- 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,Rational(DATETIME_RESOLUTION,1000000))))
363
- assert_equal([t5], dti.transitions_up_to(DateTime.new(2015,1,1,0,0,0), DateTime.new(2011,10,1,1,0,0)))
364
- assert_equal([], dti.transitions_up_to(DateTime.new(2015,1,1,0,0,0), DateTime.new(2011,10,1,1,0,1)))
365
- end
366
-
367
- def test_transitions_up_to_no_transitions
368
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
369
- dti.offset :o1, -17900, 0, :TESTLMT
370
-
371
- assert_equal([], dti.transitions_up_to(Time.utc(2015,1,1,0,0,0)))
372
- assert_equal([], dti.transitions_up_to(Time.utc(2015,1,1,0,0,0).to_i))
373
- assert_equal([], dti.transitions_up_to(DateTime.new(2015,1,1,0,0,0)))
374
- end
375
-
376
- def test_transitions_up_to_utc_to_not_greater_than_utc_from
377
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
378
- dti.offset :o1, -17900, 0, :TESTLMT
379
-
380
- assert_raises(ArgumentError) do
381
- dti.transitions_up_to(Time.utc(2012,8,1,0,0,0), Time.utc(2013,8,1,0,0,0))
382
- end
383
-
384
- assert_raises(ArgumentError) do
385
- dti.transitions_up_to(Time.utc(2012,8,1,0,0,0).to_i, Time.utc(2012,8,1,0,0,0).to_i)
386
- end
387
-
388
- assert_raises(ArgumentError) do
389
- dti.transitions_up_to(DateTime.new(2012,8,1,0,0,0), DateTime.new(2012,8,1,0,0,0))
390
- end
391
- end
392
-
393
- def test_datetime_and_timestamp_use
394
- dti = TransitionDataTimezoneInfo.new('Test/Zone')
395
- dti.offset :o1, 0, 0, :TESTS
396
- dti.offset :o2, 0, 3600, :TESTD
397
-
398
- dti.transition 1901, 12, :o2, -2147483649, 69573092117, 28800
399
- dti.transition 1969, 12, :o1, -1, 210866759999, 86400
400
- dti.transition 2001, 9, :o2, 1000000000, 529666909, 216
401
- dti.transition 2038, 1, :o1, 2147483648, 3328347557, 1350
402
-
403
- if RubyCoreSupport.time_supports_negative && RubyCoreSupport.time_supports_64bit
404
- assert(dti.period_for_utc(DateTime.new(1901,12,13,20,45,51)).start_transition.at.eql?(TimeOrDateTime.new(-2147483649)))
405
- else
406
- 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))))
407
- end
408
-
409
- if RubyCoreSupport.time_supports_negative
410
- assert(dti.period_for_utc(DateTime.new(1969,12,31,23,59,59)).start_transition.at.eql?(TimeOrDateTime.new(-1)))
411
- else
412
- 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))))
413
- end
414
-
415
- assert(dti.period_for_utc(DateTime.new(2001,9,9,2,46,40)).start_transition.at.eql?(TimeOrDateTime.new(1000000000)))
416
-
417
- if RubyCoreSupport.time_supports_64bit
418
- assert(dti.period_for_utc(DateTime.new(2038,1,19,3,14,8)).start_transition.at.eql?(TimeOrDateTime.new(2147483648)))
419
- else
420
- 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))))
421
- end
422
- end
423
- end