tzinfo 1.2.1 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +3 -0
  4. data/CHANGES.md +693 -315
  5. data/LICENSE +13 -13
  6. data/README.md +368 -113
  7. data/lib/tzinfo/annual_rules.rb +71 -0
  8. data/lib/tzinfo/country.rb +148 -120
  9. data/lib/tzinfo/country_timezone.rb +71 -101
  10. data/lib/tzinfo/data_source.rb +400 -144
  11. data/lib/tzinfo/data_sources/constant_offset_data_timezone_info.rb +56 -0
  12. data/lib/tzinfo/data_sources/country_info.rb +42 -0
  13. data/lib/tzinfo/data_sources/data_timezone_info.rb +91 -0
  14. data/lib/tzinfo/data_sources/linked_timezone_info.rb +33 -0
  15. data/lib/tzinfo/data_sources/posix_time_zone_parser.rb +181 -0
  16. data/lib/tzinfo/data_sources/ruby_data_source.rb +145 -0
  17. data/lib/tzinfo/data_sources/timezone_info.rb +47 -0
  18. data/lib/tzinfo/data_sources/transitions_data_timezone_info.rb +214 -0
  19. data/lib/tzinfo/data_sources/zoneinfo_data_source.rb +596 -0
  20. data/lib/tzinfo/data_sources/zoneinfo_reader.rb +486 -0
  21. data/lib/tzinfo/data_sources.rb +8 -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/country_definer.rb +17 -0
  25. data/lib/tzinfo/format1/country_index_definition.rb +64 -0
  26. data/lib/tzinfo/format1/timezone_definer.rb +64 -0
  27. data/lib/tzinfo/format1/timezone_definition.rb +39 -0
  28. data/lib/tzinfo/format1/timezone_index_definition.rb +77 -0
  29. data/lib/tzinfo/format1.rb +10 -0
  30. data/lib/tzinfo/format2/country_definer.rb +68 -0
  31. data/lib/tzinfo/format2/country_index_definer.rb +68 -0
  32. data/lib/tzinfo/format2/country_index_definition.rb +46 -0
  33. data/lib/tzinfo/format2/timezone_definer.rb +94 -0
  34. data/lib/tzinfo/format2/timezone_definition.rb +73 -0
  35. data/lib/tzinfo/format2/timezone_index_definer.rb +45 -0
  36. data/lib/tzinfo/format2/timezone_index_definition.rb +55 -0
  37. data/lib/tzinfo/format2.rb +10 -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 +154 -0
  43. data/lib/tzinfo/timestamp.rb +552 -0
  44. data/lib/tzinfo/timestamp_with_offset.rb +85 -0
  45. data/lib/tzinfo/timezone.rb +997 -473
  46. data/lib/tzinfo/timezone_offset.rb +91 -54
  47. data/lib/tzinfo/timezone_period.rb +163 -188
  48. data/lib/tzinfo/timezone_proxy.rb +75 -49
  49. data/lib/tzinfo/timezone_transition.rb +77 -99
  50. data/lib/tzinfo/transition_rule.rb +455 -0
  51. data/lib/tzinfo/transitions_timezone_period.rb +63 -0
  52. data/lib/tzinfo/untaint_ext.rb +18 -0
  53. data/lib/tzinfo/version.rb +7 -0
  54. data/lib/tzinfo/with_offset.rb +61 -0
  55. data/lib/tzinfo.rb +74 -29
  56. data.tar.gz.sig +0 -0
  57. metadata +72 -120
  58. metadata.gz.sig +0 -0
  59. data/Rakefile +0 -104
  60. data/lib/tzinfo/country_index_definition.rb +0 -31
  61. data/lib/tzinfo/country_info.rb +0 -42
  62. data/lib/tzinfo/data_timezone_info.rb +0 -55
  63. data/lib/tzinfo/linked_timezone_info.rb +0 -26
  64. data/lib/tzinfo/offset_rationals.rb +0 -77
  65. data/lib/tzinfo/ruby_core_support.rb +0 -146
  66. data/lib/tzinfo/ruby_country_info.rb +0 -70
  67. data/lib/tzinfo/ruby_data_source.rb +0 -136
  68. data/lib/tzinfo/time_or_datetime.rb +0 -333
  69. data/lib/tzinfo/timezone_definition.rb +0 -36
  70. data/lib/tzinfo/timezone_index_definition.rb +0 -54
  71. data/lib/tzinfo/timezone_info.rb +0 -30
  72. data/lib/tzinfo/timezone_transition_definition.rb +0 -101
  73. data/lib/tzinfo/transition_data_timezone_info.rb +0 -274
  74. data/lib/tzinfo/zoneinfo_country_info.rb +0 -35
  75. data/lib/tzinfo/zoneinfo_data_source.rb +0 -460
  76. data/lib/tzinfo/zoneinfo_timezone_info.rb +0 -245
  77. data/test/tc_country.rb +0 -236
  78. data/test/tc_country_index_definition.rb +0 -69
  79. data/test/tc_country_info.rb +0 -16
  80. data/test/tc_country_timezone.rb +0 -161
  81. data/test/tc_data_source.rb +0 -192
  82. data/test/tc_data_timezone.rb +0 -99
  83. data/test/tc_data_timezone_info.rb +0 -18
  84. data/test/tc_info_timezone.rb +0 -34
  85. data/test/tc_linked_timezone.rb +0 -155
  86. data/test/tc_linked_timezone_info.rb +0 -23
  87. data/test/tc_offset_rationals.rb +0 -23
  88. data/test/tc_ruby_core_support.rb +0 -168
  89. data/test/tc_ruby_country_info.rb +0 -80
  90. data/test/tc_ruby_data_source.rb +0 -143
  91. data/test/tc_time_or_datetime.rb +0 -639
  92. data/test/tc_timezone.rb +0 -1334
  93. data/test/tc_timezone_definition.rb +0 -113
  94. data/test/tc_timezone_index_definition.rb +0 -73
  95. data/test/tc_timezone_info.rb +0 -11
  96. data/test/tc_timezone_london.rb +0 -143
  97. data/test/tc_timezone_melbourne.rb +0 -142
  98. data/test/tc_timezone_new_york.rb +0 -142
  99. data/test/tc_timezone_offset.rb +0 -126
  100. data/test/tc_timezone_period.rb +0 -548
  101. data/test/tc_timezone_proxy.rb +0 -113
  102. data/test/tc_timezone_transition.rb +0 -352
  103. data/test/tc_timezone_transition_definition.rb +0 -284
  104. data/test/tc_timezone_utc.rb +0 -27
  105. data/test/tc_transition_data_timezone_info.rb +0 -423
  106. data/test/tc_zoneinfo_country_info.rb +0 -64
  107. data/test/tc_zoneinfo_data_source.rb +0 -985
  108. data/test/tc_zoneinfo_timezone_info.rb +0 -814
  109. data/test/test_utils.rb +0 -132
  110. data/test/ts_all.rb +0 -7
  111. data/test/ts_all_ruby.rb +0 -5
  112. data/test/ts_all_zoneinfo.rb +0 -7
  113. data/test/tzinfo-data/tzinfo/data/definitions/America/Argentina/Buenos_Aires.rb +0 -89
  114. data/test/tzinfo-data/tzinfo/data/definitions/America/New_York.rb +0 -315
  115. data/test/tzinfo-data/tzinfo/data/definitions/Australia/Melbourne.rb +0 -218
  116. data/test/tzinfo-data/tzinfo/data/definitions/EST.rb +0 -19
  117. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__m__1.rb +0 -21
  118. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__p__1.rb +0 -21
  119. data/test/tzinfo-data/tzinfo/data/definitions/Etc/UTC.rb +0 -21
  120. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Amsterdam.rb +0 -261
  121. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Andorra.rb +0 -186
  122. data/test/tzinfo-data/tzinfo/data/definitions/Europe/London.rb +0 -321
  123. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Paris.rb +0 -265
  124. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Prague.rb +0 -220
  125. data/test/tzinfo-data/tzinfo/data/definitions/UTC.rb +0 -16
  126. data/test/tzinfo-data/tzinfo/data/indexes/countries.rb +0 -927
  127. data/test/tzinfo-data/tzinfo/data/indexes/timezones.rb +0 -594
  128. data/test/tzinfo-data/tzinfo/data/version.rb +0 -14
  129. data/test/tzinfo-data/tzinfo/data.rb +0 -8
  130. data/test/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  131. data/test/zoneinfo/America/New_York +0 -0
  132. data/test/zoneinfo/Australia/Melbourne +0 -0
  133. data/test/zoneinfo/EST +0 -0
  134. data/test/zoneinfo/Etc/UTC +0 -0
  135. data/test/zoneinfo/Europe/Amsterdam +0 -0
  136. data/test/zoneinfo/Europe/Andorra +0 -0
  137. data/test/zoneinfo/Europe/London +0 -0
  138. data/test/zoneinfo/Europe/Paris +0 -0
  139. data/test/zoneinfo/Europe/Prague +0 -0
  140. data/test/zoneinfo/Factory +0 -0
  141. data/test/zoneinfo/iso3166.tab +0 -275
  142. data/test/zoneinfo/posix/Europe/London +0 -0
  143. data/test/zoneinfo/posixrules +0 -0
  144. data/test/zoneinfo/right/Europe/London +0 -0
  145. data/test/zoneinfo/zone.tab +0 -452
  146. data/tzinfo.gemspec +0 -21
@@ -1,113 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
2
-
3
- include TZInfo
4
-
5
- class TCTimezoneProxy < Minitest::Test
6
- def test_not_exist
7
- proxy = TimezoneProxy.new('Nothing/Special')
8
- assert_equal('Nothing/Special', proxy.identifier)
9
- assert_raises(InvalidTimezoneIdentifier) { proxy.now }
10
- assert_raises(InvalidTimezoneIdentifier) { proxy.current_period }
11
- assert_raises(InvalidTimezoneIdentifier) { proxy.current_period_and_time }
12
- assert_raises(InvalidTimezoneIdentifier) { proxy.current_time_and_period }
13
- assert_raises(InvalidTimezoneIdentifier) { proxy.utc_to_local(DateTime.new(2006,1,1,0,0,0)) }
14
- assert_raises(InvalidTimezoneIdentifier) { proxy.local_to_utc(DateTime.new(2006,1,1,0,0,0)) }
15
- assert_raises(InvalidTimezoneIdentifier) { proxy.period_for_utc(DateTime.new(2006,1,1,0,0,0)) }
16
- assert_raises(InvalidTimezoneIdentifier) { proxy.period_for_local(DateTime.new(2006,1,1,0,0,0)) }
17
- assert_raises(InvalidTimezoneIdentifier) { proxy.canonical_identifier }
18
- assert_raises(InvalidTimezoneIdentifier) { proxy.canonical_zone }
19
- end
20
-
21
- def test_valid
22
- proxy = TimezoneProxy.new('Europe/London')
23
- assert_equal('Europe/London', proxy.identifier)
24
-
25
- assert_nothing_raised { proxy.now }
26
- assert_nothing_raised { proxy.current_period }
27
- assert_nothing_raised { proxy.current_period_and_time }
28
- assert_nothing_raised { proxy.current_time_and_period }
29
-
30
- real = Timezone.get('Europe/London')
31
-
32
- assert_equal(real.utc_to_local(DateTime.new(2005,8,1,0,0,0)), proxy.utc_to_local(DateTime.new(2005,8,1,0,0,0)))
33
- assert_equal(real.local_to_utc(DateTime.new(2005,8,1,0,0,0)), proxy.local_to_utc(DateTime.new(2005,8,1,0,0,0)))
34
- assert_equal(real.period_for_utc(DateTime.new(2005,8,1,0,0,0)), proxy.period_for_utc(DateTime.new(2005,8,1,0,0,0)))
35
- assert_equal(real.period_for_local(DateTime.new(2005,8,1,0,0,0)), proxy.period_for_local(DateTime.new(2005,8,1,0,0,0)))
36
- assert_equal(real.identifier, proxy.identifier)
37
- assert_equal(real.name, proxy.name)
38
- assert_equal(real.to_s, proxy.to_s)
39
- assert_equal(real.friendly_identifier(true), proxy.friendly_identifier(true))
40
- assert_equal(real.friendly_identifier(false), proxy.friendly_identifier(false))
41
- assert_equal(real.friendly_identifier, proxy.friendly_identifier)
42
- assert_equal(real.canonical_identifier, proxy.canonical_identifier)
43
- assert_same(real.canonical_zone, proxy.canonical_zone)
44
-
45
- assert_equal('Europe/London', proxy.identifier)
46
-
47
- assert(real == proxy)
48
- assert(proxy == real)
49
- assert_equal(0, real <=> proxy)
50
- assert_equal(0, proxy <=> real)
51
- end
52
-
53
- def test_canonical_linked
54
- # Test that the implementation of canonical_zone and canonical_identifier
55
- # are actually calling the real timezone and not just returning it and
56
- # its identifier.
57
-
58
- real = Timezone.get('UTC')
59
- proxy = TimezoneProxy.new('UTC')
60
-
61
- # ZoneinfoDataSource doesn't return LinkedTimezoneInfo instances for any
62
- # timezone.
63
- if real.kind_of?(LinkedTimezone)
64
- assert_equal('Etc/UTC', proxy.canonical_identifier)
65
- assert_same(Timezone.get('Etc/UTC'), proxy.canonical_zone)
66
- else
67
- if DataSource.get.kind_of?(RubyDataSource)
68
- # Not got a LinkedTimezone despite using a DataSource that supports it.
69
- # Raise an exception as this shouldn't happen.
70
- raise 'Non-LinkedTimezone instance returned for UTC using RubyDataSource'
71
- end
72
-
73
- assert_equal('UTC', proxy.canonical_identifier)
74
- assert_same(Timezone.get('UTC'), proxy.canonical_zone)
75
- end
76
- end
77
-
78
- def test_equals
79
- assert_equal(true, TimezoneProxy.new('Europe/London') == TimezoneProxy.new('Europe/London'))
80
- assert_equal(false, TimezoneProxy.new('Europe/London') == TimezoneProxy.new('Europe/Paris'))
81
- assert(!(TimezoneProxy.new('Europe/London') == Object.new))
82
- end
83
-
84
- def test_compare
85
- assert_equal(0, TimezoneProxy.new('Europe/London') <=> TimezoneProxy.new('Europe/London'))
86
- assert_equal(0, Timezone.get('Europe/London') <=> TimezoneProxy.new('Europe/London'))
87
- assert_equal(0, TimezoneProxy.new('Europe/London') <=> Timezone.get('Europe/London'))
88
- assert_equal(-1, TimezoneProxy.new('Europe/London') <=> TimezoneProxy.new('Europe/Paris'))
89
- assert_equal(-1, Timezone.get('Europe/London') <=> TimezoneProxy.new('Europe/Paris'))
90
- assert_equal(-1, TimezoneProxy.new('Europe/London') <=> Timezone.get('Europe/Paris'))
91
- assert_equal(1, TimezoneProxy.new('Europe/Paris') <=> TimezoneProxy.new('Europe/London'))
92
- assert_equal(1, Timezone.get('Europe/Paris') <=> TimezoneProxy.new('Europe/London'))
93
- assert_equal(1, TimezoneProxy.new('Europe/Paris') <=> Timezone.get('Europe/London'))
94
- assert_equal(-1, TimezoneProxy.new('America/New_York') <=> TimezoneProxy.new('Europe/Paris'))
95
- assert_equal(-1, Timezone.get('America/New_York') <=> TimezoneProxy.new('Europe/Paris'))
96
- assert_equal(-1, TimezoneProxy.new('America/New_York') <=> Timezone.get('Europe/Paris'))
97
- assert_equal(1, TimezoneProxy.new('Europe/Paris') <=> TimezoneProxy.new('America/New_York'))
98
- assert_equal(1, Timezone.get('Europe/Paris') <=> TimezoneProxy.new('America/New_York'))
99
- assert_equal(1, TimezoneProxy.new('Europe/Paris') <=> Timezone.get('America/New_York'))
100
- end
101
-
102
- def test_kind
103
- assert_kind_of(Timezone, TimezoneProxy.new('America/New_York'))
104
- end
105
-
106
- def test_marshal
107
- tp = TimezoneProxy.new('Europe/London')
108
- tp2 = Marshal.load(Marshal.dump(tp))
109
-
110
- assert_kind_of(TimezoneProxy, tp2)
111
- assert_equal('Europe/London', tp2.identifier)
112
- end
113
- end
@@ -1,352 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
2
- require 'date'
3
-
4
- include TZInfo
5
-
6
- class TCTimezoneTransition < Minitest::Test
7
-
8
- class TestTimezoneTransition < TimezoneTransition
9
- def initialize(offset, previous_offset, at)
10
- super(offset, previous_offset)
11
- @at = TimeOrDateTime.wrap(at)
12
- end
13
-
14
- def at
15
- @at
16
- end
17
- end
18
-
19
- def test_offset
20
- t = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
21
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
22
-
23
- assert_equal(TimezoneOffset.new(3600, 3600, :TDT), t.offset)
24
- end
25
-
26
- def test_previous_offset
27
- t = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
28
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
29
-
30
- assert_equal(TimezoneOffset.new(3600, 0, :TST), t.previous_offset)
31
- end
32
-
33
- def test_datetime
34
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
35
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
36
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
37
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
38
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
39
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
40
-
41
- assert_equal(DateTime.new(2006, 5, 30, 0, 31, 20), t1.datetime)
42
- assert_equal(DateTime.new(2006, 5, 30, 0, 31, 20), t2.datetime)
43
- assert_equal(DateTime.new(2006, 5, 30, 0, 31, 20), t3.datetime)
44
- end
45
-
46
- def test_time
47
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
48
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
49
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
50
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
51
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
52
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
53
-
54
- assert_equal(Time.utc(2006, 5, 30, 0, 31, 20), t1.time)
55
- assert_equal(Time.utc(2006, 5, 30, 0, 31, 20), t2.time)
56
- assert_equal(Time.utc(2006, 5, 30, 0, 31, 20), t3.time)
57
- end
58
-
59
- def test_local_end_at
60
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
61
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
62
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
63
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
64
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
65
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
66
-
67
- assert(TimeOrDateTime.new(1148952680).eql?(t1.local_end_at))
68
- assert(TimeOrDateTime.new(DateTime.new(2006, 5, 30, 1, 31, 20)).eql?(t2.local_end_at))
69
- assert(TimeOrDateTime.new(Time.utc(2006, 5, 30, 1, 31, 20)).eql?(t3.local_end_at))
70
- end
71
-
72
- def test_local_end
73
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
74
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
75
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
76
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
77
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
78
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
79
-
80
- assert_equal(DateTime.new(2006, 5, 30, 1, 31, 20), t1.local_end)
81
- assert_equal(DateTime.new(2006, 5, 30, 1, 31, 20), t2.local_end)
82
- assert_equal(DateTime.new(2006, 5, 30, 1, 31, 20), t3.local_end)
83
- end
84
-
85
- def test_local_end_time
86
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
87
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
88
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
89
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
90
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
91
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
92
-
93
- assert_equal(Time.utc(2006, 5, 30, 1, 31, 20), t1.local_end_time)
94
- assert_equal(Time.utc(2006, 5, 30, 1, 31, 20), t2.local_end_time)
95
- assert_equal(Time.utc(2006, 5, 30, 1, 31, 20), t3.local_end_time)
96
- end
97
-
98
- def test_local_start_at
99
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
100
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
101
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
102
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
103
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
104
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
105
-
106
- assert(TimeOrDateTime.new(1148956280).eql?(t1.local_start_at))
107
- assert(TimeOrDateTime.new(DateTime.new(2006, 5, 30, 2, 31, 20)).eql?(t2.local_start_at))
108
- assert(TimeOrDateTime.new(Time.utc(2006, 5, 30, 2, 31, 20)).eql?(t3.local_start_at))
109
- end
110
-
111
- def test_local_start
112
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
113
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
114
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
115
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
116
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
117
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
118
-
119
- assert_equal(DateTime.new(2006, 5, 30, 2, 31, 20), t1.local_start)
120
- assert_equal(DateTime.new(2006, 5, 30, 2, 31, 20), t2.local_start)
121
- assert_equal(DateTime.new(2006, 5, 30, 2, 31, 20), t3.local_start)
122
- end
123
-
124
- def test_local_start_time
125
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
126
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
127
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
128
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
129
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
130
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
131
-
132
- assert_equal(Time.utc(2006, 5, 30, 2, 31, 20), t1.local_start_time)
133
- assert_equal(Time.utc(2006, 5, 30, 2, 31, 20), t2.local_start_time)
134
- assert_equal(Time.utc(2006, 5, 30, 2, 31, 20), t3.local_start_time)
135
- end
136
-
137
- if RubyCoreSupport.time_supports_negative
138
- def test_local_end_at_before_negative_32bit
139
- t = TestTimezoneTransition.new(TimezoneOffset.new(-7200, 3600, :TDT),
140
- TimezoneOffset.new(-7200, 0, :TST), -2147482800)
141
-
142
- if RubyCoreSupport.time_supports_64bit
143
- assert(TimeOrDateTime.new(-2147490000).eql?(t.local_end_at))
144
- else
145
- assert(TimeOrDateTime.new(DateTime.new(1901, 12, 13, 19, 0, 0)).eql?(t.local_end_at))
146
- end
147
- end
148
-
149
- def test_local_start_at_before_negative_32bit
150
- t = TestTimezoneTransition.new(TimezoneOffset.new(-7200, 3600, :TDT),
151
- TimezoneOffset.new(-7200, 0, :TST), -2147482800)
152
-
153
- if RubyCoreSupport.time_supports_64bit
154
- assert(TimeOrDateTime.new(-2147486400).eql?(t.local_start_at))
155
- else
156
- assert(TimeOrDateTime.new(DateTime.new(1901, 12, 13, 20, 0, 0)).eql?(t.local_start_at))
157
- end
158
- end
159
- end
160
-
161
- def test_local_end_at_before_epoch
162
- t = TestTimezoneTransition.new(TimezoneOffset.new(-7200, 3600, :TDT),
163
- TimezoneOffset.new(-7200, 0, :TST), 1800)
164
-
165
- if RubyCoreSupport.time_supports_negative
166
- assert(TimeOrDateTime.new(-5400).eql?(t.local_end_at))
167
- else
168
- assert(TimeOrDateTime.new(DateTime.new(1969, 12, 31, 22, 30, 0)).eql?(t.local_end_at))
169
- end
170
- end
171
-
172
- def test_local_start_at_before_epoch
173
- t = TestTimezoneTransition.new(TimezoneOffset.new(-7200, 3600, :TDT),
174
- TimezoneOffset.new(-7200, 0, :TST), 1800)
175
-
176
- if RubyCoreSupport.time_supports_negative
177
- assert(TimeOrDateTime.new(-1800).eql?(t.local_start_at))
178
- else
179
- assert(TimeOrDateTime.new(DateTime.new(1969, 12, 31, 23, 30, 0)).eql?(t.local_start_at))
180
- end
181
- end
182
-
183
- def test_local_end_at_after_32bit
184
- t = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
185
- TimezoneOffset.new(3600, 0, :TST), 2147482800)
186
-
187
- if RubyCoreSupport.time_supports_64bit
188
- assert(TimeOrDateTime.new(2147486400).eql?(t.local_end_at))
189
- else
190
- assert(TimeOrDateTime.new(DateTime.new(2038, 1, 19, 4, 0, 0)).eql?(t.local_end_at))
191
- end
192
- end
193
-
194
- def test_local_start_at_after_32bit
195
- t = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
196
- TimezoneOffset.new(3600, 0, :TST), 2147482800)
197
-
198
- if RubyCoreSupport.time_supports_64bit
199
- assert(TimeOrDateTime.new(2147490000).eql?(t.local_start_at))
200
- else
201
- assert(TimeOrDateTime.new(DateTime.new(2038, 1, 19, 5, 0, 0)).eql?(t.local_start_at))
202
- end
203
- end
204
-
205
- def test_equality_timestamp
206
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
207
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
208
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
209
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
210
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
211
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
212
- t4 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
213
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
214
- t5 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
215
- TimezoneOffset.new(3600, 0, :TST), 1148949081)
216
- t6 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
217
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 1, 31, 21))
218
- t7 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
219
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 1, 31, 21))
220
- t8 = TestTimezoneTransition.new(TimezoneOffset.new(3601, 3600, :TDT),
221
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
222
- t9 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
223
- TimezoneOffset.new(3601, 0, :TST), 1148949080)
224
-
225
- assert_equal(true, t1 == t1)
226
- assert_equal(true, t1 == t2)
227
- assert_equal(true, t1 == t3)
228
- assert_equal(true, t1 == t4)
229
- assert_equal(false, t1 == t5)
230
- assert_equal(false, t1 == t6)
231
- assert_equal(false, t1 == t7)
232
- assert_equal(false, t1 == t8)
233
- assert_equal(false, t1 == t9)
234
- assert_equal(false, t1 == Object.new)
235
-
236
- assert_equal(true, t1.eql?(t1))
237
- assert_equal(true, t1.eql?(t2))
238
- assert_equal(false, t1.eql?(t3))
239
- assert_equal(false, t1.eql?(t4))
240
- assert_equal(false, t1.eql?(t5))
241
- assert_equal(false, t1.eql?(t6))
242
- assert_equal(false, t1.eql?(t7))
243
- assert_equal(false, t1.eql?(t8))
244
- assert_equal(false, t1.eql?(t9))
245
- assert_equal(false, t1.eql?(Object.new))
246
- end
247
-
248
- def test_equality_datetime
249
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
250
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
251
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
252
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
253
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
254
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
255
- t4 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
256
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
257
- t5 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
258
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 1, 31, 21))
259
- t6 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
260
- TimezoneOffset.new(3600, 0, :TST), 1148949081)
261
- t7 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
262
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 1, 31, 21))
263
- t8 = TestTimezoneTransition.new(TimezoneOffset.new(3601, 3600, :TDT),
264
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
265
- t9 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
266
- TimezoneOffset.new(3601, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
267
-
268
- assert_equal(true, t1 == t1)
269
- assert_equal(true, t1 == t2)
270
- assert_equal(true, t1 == t3)
271
- assert_equal(true, t1 == t4)
272
- assert_equal(false, t1 == t5)
273
- assert_equal(false, t1 == t6)
274
- assert_equal(false, t1 == t7)
275
- assert_equal(false, t1 == t8)
276
- assert_equal(false, t1 == t9)
277
- assert_equal(false, t1 == Object.new)
278
-
279
- assert_equal(true, t1.eql?(t1))
280
- assert_equal(true, t1.eql?(t2))
281
- assert_equal(false, t1.eql?(t3))
282
- assert_equal(false, t1.eql?(t4))
283
- assert_equal(false, t1.eql?(t5))
284
- assert_equal(false, t1.eql?(t6))
285
- assert_equal(false, t1.eql?(t7))
286
- assert_equal(false, t1.eql?(t8))
287
- assert_equal(false, t1.eql?(t9))
288
- assert_equal(false, t1.eql?(Object.new))
289
- end
290
-
291
- def test_equality_time
292
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
293
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
294
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
295
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 20))
296
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
297
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 0, 31, 20))
298
- t4 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
299
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
300
- t5 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
301
- TimezoneOffset.new(3600, 0, :TST), Time.utc(2006, 5, 30, 0, 31, 21))
302
- t6 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
303
- TimezoneOffset.new(3600, 0, :TST), DateTime.new(2006, 5, 30, 1, 31, 21))
304
- t7 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
305
- TimezoneOffset.new(3600, 0, :TST), 1148949081)
306
- t8 = TestTimezoneTransition.new(TimezoneOffset.new(3601, 3600, :TDT),
307
- TimezoneOffset.new(3600, 0, :TST), 1148949080)
308
- t9 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDT),
309
- TimezoneOffset.new(3601, 0, :TST), 1148949080)
310
-
311
- assert_equal(true, t1 == t1)
312
- assert_equal(true, t1 == t2)
313
- assert_equal(true, t1 == t3)
314
- assert_equal(true, t1 == t4)
315
- assert_equal(false, t1 == t5)
316
- assert_equal(false, t1 == t6)
317
- assert_equal(false, t1 == t7)
318
- assert_equal(false, t1 == t8)
319
- assert_equal(false, t1 == t9)
320
- assert_equal(false, t1 == Object.new)
321
-
322
- assert_equal(true, t1.eql?(t1))
323
- assert_equal(true, t1.eql?(t2))
324
- assert_equal(false, t1.eql?(t3))
325
- assert_equal(false, t1.eql?(t4))
326
- assert_equal(false, t1.eql?(t5))
327
- assert_equal(false, t1.eql?(t6))
328
- assert_equal(false, t1.eql?(t7))
329
- assert_equal(false, t1.eql?(t8))
330
- assert_equal(false, t1.eql?(t9))
331
- assert_equal(false, t1.eql?(Object.new))
332
- end
333
-
334
- def test_hash
335
- t1 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDTA),
336
- TimezoneOffset.new(3600, 0, :TSTA), 1148949080)
337
- t2 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDTB),
338
- TimezoneOffset.new(3600, 0, :TSTB), DateTime.new(2006, 5, 30, 1, 31, 20))
339
- t3 = TestTimezoneTransition.new(TimezoneOffset.new(3600, 3600, :TDTC),
340
- TimezoneOffset.new(3600, 0, :TSTC), Time.utc(2006, 5, 30, 1, 31, 20))
341
-
342
- assert_equal(TimezoneOffset.new(3600, 3600, :TDTA).hash ^
343
- TimezoneOffset.new(3600, 0, :TSTA).hash ^ TimeOrDateTime.new(1148949080).hash,
344
- t1.hash)
345
- assert_equal(TimezoneOffset.new(3600, 3600, :TDTB).hash ^
346
- TimezoneOffset.new(3600, 0, :TSTB).hash ^ TimeOrDateTime.new(DateTime.new(2006, 5, 30, 1, 31, 20)).hash,
347
- t2.hash)
348
- assert_equal(TimezoneOffset.new(3600, 3600, :TDTC).hash ^
349
- TimezoneOffset.new(3600, 0, :TSTC).hash ^ TimeOrDateTime.new(Time.utc(2006, 5, 30, 1, 31, 20)).hash,
350
- t3.hash)
351
- end
352
- end