| 65 | | TZInfo::DataTimezone.any_instance.stubs(:now).returns(Time.utc(2000)) |
|---|
| 66 | | zone = TimeZone['Eastern Time (US & Canada)'] |
|---|
| 67 | | assert_instance_of ActiveSupport::TimeWithZone, zone.now |
|---|
| 68 | | assert_equal Time.utc(2000), zone.now.time |
|---|
| 69 | | assert_equal zone, zone.now.time_zone |
|---|
| | 65 | with_env_tz 'US/Eastern' do |
|---|
| | 66 | Time.stubs(:now).returns(Time.local(2000)) |
|---|
| | 67 | zone = TimeZone['Eastern Time (US & Canada)'] |
|---|
| | 68 | assert_instance_of ActiveSupport::TimeWithZone, zone.now |
|---|
| | 69 | assert_equal Time.utc(2000,1,1,5), zone.now.utc |
|---|
| | 70 | assert_equal Time.utc(2000), zone.now.time |
|---|
| | 71 | assert_equal zone, zone.now.time_zone |
|---|
| | 72 | end |
|---|
| | 73 | end |
|---|
| | 74 | |
|---|
| | 75 | def test_now_enforces_spring_dst_rules |
|---|
| | 76 | with_env_tz 'US/Eastern' do |
|---|
| | 77 | Time.stubs(:now).returns(Time.local(2006,4,2,2)) # 2AM springs forward to 3AM |
|---|
| | 78 | zone = TimeZone['Eastern Time (US & Canada)'] |
|---|
| | 79 | assert_equal Time.utc(2006,4,2,3), zone.now.time |
|---|
| | 80 | assert_equal true, zone.now.dst? |
|---|
| | 81 | end |
|---|
| | 82 | end |
|---|
| | 83 | |
|---|
| | 84 | def test_now_enforces_fall_dst_rules |
|---|
| | 85 | with_env_tz 'US/Eastern' do |
|---|
| | 86 | Time.stubs(:now).returns(Time.local(2006,10,29,1)) # 1AM is ambiguous; could be DST or non-DST 1AM |
|---|
| | 87 | zone = TimeZone['Eastern Time (US & Canada)'] |
|---|
| | 88 | assert_equal Time.utc(2006,10,29,1), zone.now.time # selects DST 1AM |
|---|
| | 89 | assert_equal true, zone.now.dst? |
|---|
| | 90 | end |
|---|
| | 158 | |
|---|
| | 159 | def test_local_enforces_spring_dst_rules |
|---|
| | 160 | zone = TimeZone['Eastern Time (US & Canada)'] |
|---|
| | 161 | twz = zone.local(2006,4,2,1,59,59) # 1 second before DST start |
|---|
| | 162 | assert_equal Time.utc(2006,4,2,1,59,59), twz.time |
|---|
| | 163 | assert_equal Time.utc(2006,4,2,6,59,59), twz.utc |
|---|
| | 164 | assert_equal false, twz.dst? |
|---|
| | 165 | assert_equal 'EST', twz.zone |
|---|
| | 166 | twz2 = zone.local(2006,4,2,2) # 2AM does not exist because at 2AM, time springs forward to 3AM |
|---|
| | 167 | assert_equal Time.utc(2006,4,2,3), twz2.time # twz is created for 3AM |
|---|
| | 168 | assert_equal Time.utc(2006,4,2,7), twz2.utc |
|---|
| | 169 | assert_equal true, twz2.dst? |
|---|
| | 170 | assert_equal 'EDT', twz2.zone |
|---|
| | 171 | twz3 = zone.local(2006,4,2,2,30) # 2:30AM does not exist because at 2AM, time springs forward to 3AM |
|---|
| | 172 | assert_equal Time.utc(2006,4,2,3,30), twz3.time # twz is created for 3:30AM |
|---|
| | 173 | assert_equal Time.utc(2006,4,2,7,30), twz3.utc |
|---|
| | 174 | assert_equal true, twz3.dst? |
|---|
| | 175 | assert_equal 'EDT', twz3.zone |
|---|
| | 176 | end |
|---|
| | 177 | |
|---|
| | 178 | def test_local_enforces_fall_dst_rules |
|---|
| | 179 | # 1AM during fall DST transition is ambiguous, it could be either DST or non-DST 1AM |
|---|
| | 180 | # Mirroring Time.local behavior, this method selects the DST time |
|---|
| | 181 | zone = TimeZone['Eastern Time (US & Canada)'] |
|---|
| | 182 | twz = zone.local(2006,10,29,1) |
|---|
| | 183 | assert_equal Time.utc(2006,10,29,1), twz.time |
|---|
| | 184 | assert_equal Time.utc(2006,10,29,5), twz.utc |
|---|
| | 185 | assert_equal true, twz.dst? |
|---|
| | 186 | assert_equal 'EDT', twz.zone |
|---|
| | 187 | end |
|---|
| | 188 | |
|---|
| | 189 | protected |
|---|
| | 190 | def with_env_tz(new_tz = 'US/Eastern') |
|---|
| | 191 | old_tz, ENV['TZ'] = ENV['TZ'], new_tz |
|---|
| | 192 | yield |
|---|
| | 193 | ensure |
|---|
| | 194 | old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ') |
|---|
| | 195 | end |
|---|