tzinfo 1.2.11 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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