timecop 0.9.6 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.markdown +18 -9
- data/lib/timecop/time_extensions.rb +80 -9
- data/lib/timecop/time_stack_item.rb +31 -0
- data/lib/timecop/timecop.rb +26 -2
- data/lib/timecop/version.rb +1 -1
- metadata +5 -15
- data/test/test_helper.rb +0 -59
- data/test/time_stack_item_test.rb +0 -299
- data/test/timecop_test.rb +0 -622
- data/test/timecop_without_date_but_with_time_test.rb +0 -8
- data/test/timecop_without_date_test.rb +0 -118
@@ -1,299 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
require_relative "test_helper"
|
3
|
-
require 'timecop'
|
4
|
-
|
5
|
-
require 'active_support/all'
|
6
|
-
|
7
|
-
class TestTimeStackItem < Minitest::Test
|
8
|
-
def teardown
|
9
|
-
Timecop.return
|
10
|
-
Time.zone = nil
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_new_with_time
|
14
|
-
t = Time.now
|
15
|
-
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
16
|
-
stack_item = Timecop::TimeStackItem.new(:freeze, t)
|
17
|
-
|
18
|
-
assert_equal y, stack_item.year
|
19
|
-
assert_equal m, stack_item.month
|
20
|
-
assert_equal d, stack_item.day
|
21
|
-
assert_equal h, stack_item.hour
|
22
|
-
assert_equal min, stack_item.min
|
23
|
-
assert_equal s, stack_item.sec
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_new_with_time_and_arguments
|
27
|
-
t = Time.new(2012, 7, 28, 20, 0)
|
28
|
-
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
29
|
-
stack_item = Timecop::TimeStackItem.new(:freeze, t)
|
30
|
-
|
31
|
-
assert_equal y, stack_item.year
|
32
|
-
assert_equal m, stack_item.month
|
33
|
-
assert_equal d, stack_item.day
|
34
|
-
assert_equal h, stack_item.hour
|
35
|
-
assert_equal min, stack_item.min
|
36
|
-
assert_equal s, stack_item.sec
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_new_with_datetime_now
|
40
|
-
t = DateTime.now
|
41
|
-
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
42
|
-
stack_item = Timecop::TimeStackItem.new(:freeze, t)
|
43
|
-
|
44
|
-
assert_equal y, stack_item.year
|
45
|
-
assert_equal m, stack_item.month
|
46
|
-
assert_equal d, stack_item.day
|
47
|
-
assert_equal h, stack_item.hour
|
48
|
-
assert_equal min, stack_item.min
|
49
|
-
assert_equal s, stack_item.sec
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_new_with_datetime_in_different_timezone
|
53
|
-
each_timezone do
|
54
|
-
t = DateTime.parse("2009-10-11 00:38:00 +0200")
|
55
|
-
stack_item = Timecop::TimeStackItem.new(:freeze, t)
|
56
|
-
|
57
|
-
assert_date_times_equal(t, stack_item.datetime)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_new_with_date
|
62
|
-
date = Date.today
|
63
|
-
y, m, d, h, min, s = date.year, date.month, date.day, 0, 0, 0
|
64
|
-
stack_item = Timecop::TimeStackItem.new(:freeze, date)
|
65
|
-
|
66
|
-
assert_equal y, stack_item.year
|
67
|
-
assert_equal m, stack_item.month
|
68
|
-
assert_equal d, stack_item.day
|
69
|
-
assert_equal h, stack_item.hour
|
70
|
-
assert_equal min, stack_item.min
|
71
|
-
assert_equal s, stack_item.sec
|
72
|
-
end
|
73
|
-
|
74
|
-
# Due to the nature of this test (calling Time.now once in this test and
|
75
|
-
# once in #new), this test may fail when two subsequent calls
|
76
|
-
# to Time.now return a different second.
|
77
|
-
def test_new_with_integer
|
78
|
-
t = Time.now
|
79
|
-
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
80
|
-
stack_item = Timecop::TimeStackItem.new(:freeze, 0)
|
81
|
-
|
82
|
-
assert_equal y, stack_item.year
|
83
|
-
assert_equal m, stack_item.month
|
84
|
-
assert_equal d, stack_item.day
|
85
|
-
assert_equal h, stack_item.hour
|
86
|
-
assert_equal min, stack_item.min
|
87
|
-
assert_equal s, stack_item.sec
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_new_with_float
|
91
|
-
t = Time.now
|
92
|
-
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
93
|
-
stack_item = Timecop::TimeStackItem.new(:freeze, 0.0)
|
94
|
-
|
95
|
-
assert_equal y, stack_item.year
|
96
|
-
assert_equal m, stack_item.month
|
97
|
-
assert_equal d, stack_item.day
|
98
|
-
assert_equal h, stack_item.hour
|
99
|
-
assert_equal min, stack_item.min
|
100
|
-
assert_equal s, stack_item.sec
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_new_with_individual_arguments
|
104
|
-
y, m, d, h, min, s = 2008, 10, 10, 10, 10, 10
|
105
|
-
stack_item = Timecop::TimeStackItem.new(:freeze, y, m, d, h, min, s)
|
106
|
-
|
107
|
-
assert_equal y, stack_item.year
|
108
|
-
assert_equal m, stack_item.month
|
109
|
-
assert_equal d, stack_item.day
|
110
|
-
assert_equal h, stack_item.hour
|
111
|
-
assert_equal min, stack_item.min
|
112
|
-
assert_equal s, stack_item.sec
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_rational_to_utc_offset
|
116
|
-
assert_equal -14400, a_time_stack_item.send(:rational_to_utc_offset, Rational(-1, 6))
|
117
|
-
assert_equal -18000, a_time_stack_item.send(:rational_to_utc_offset, Rational(-5, 24))
|
118
|
-
assert_equal 0, a_time_stack_item.send(:rational_to_utc_offset, Rational(0, 1))
|
119
|
-
assert_equal 3600, a_time_stack_item.send(:rational_to_utc_offset, Rational(1, 24))
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_utc_offset_to_rational
|
123
|
-
assert_equal Rational(-1, 6), a_time_stack_item.send(:utc_offset_to_rational, -14400)
|
124
|
-
assert_equal Rational(-5, 24), a_time_stack_item.send(:utc_offset_to_rational, -18000)
|
125
|
-
assert_equal Rational(0, 1), a_time_stack_item.send(:utc_offset_to_rational, 0)
|
126
|
-
assert_equal Rational(1, 24), a_time_stack_item.send(:utc_offset_to_rational, 3600)
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_datetime_in_presence_of_activesupport_timezone
|
130
|
-
skip('requires ActiveSupport') unless Time.respond_to? :zone
|
131
|
-
backed_up_zone, backed_up_tzvar = Time.zone, ENV['TZ']
|
132
|
-
|
133
|
-
Time.zone = ENV['TZ'] = 'America/Los_Angeles'
|
134
|
-
t = DateTime.new(2001, 2, 28, 23, 59, 59.5)
|
135
|
-
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
136
|
-
|
137
|
-
assert_date_times_equal t, tsi.datetime
|
138
|
-
ensure
|
139
|
-
Time.zone, ENV['TZ'] = backed_up_zone, backed_up_tzvar
|
140
|
-
end
|
141
|
-
|
142
|
-
# Ensure DateTimes handle changing DST properly
|
143
|
-
def test_datetime_for_dst_to_non_dst
|
144
|
-
Timecop.freeze(DateTime.parse("2009-12-1 00:38:00 -0500"))
|
145
|
-
t = DateTime.parse("2009-10-11 00:00:00 -0400")
|
146
|
-
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
147
|
-
|
148
|
-
assert_date_times_equal t, tsi.datetime
|
149
|
-
end
|
150
|
-
|
151
|
-
# Ensure DateTimes handle changing DST properly when changing from DateTime to Time
|
152
|
-
def test_datetime_for_dst_to_time_for_non_dst
|
153
|
-
Timecop.freeze(DateTime.parse("2009-12-1 00:38:00 -0500"))
|
154
|
-
t = DateTime.parse("2009-10-11 00:00:00 -0400")
|
155
|
-
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
156
|
-
|
157
|
-
assert_date_times_equal t.to_time, tsi.time
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_datetime_for_non_dst_to_dst
|
161
|
-
Timecop.freeze(DateTime.parse("2009-10-11 00:00:00 -0400"))
|
162
|
-
t = DateTime.parse("2009-11-30 23:38:00 -0500")
|
163
|
-
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
164
|
-
return if !tsi.time.dst?
|
165
|
-
|
166
|
-
assert_date_times_equal t, tsi.datetime
|
167
|
-
assert_equal Date.new(2009, 12, 1), tsi.date
|
168
|
-
end
|
169
|
-
|
170
|
-
def test_set_travel_offset_for_travel
|
171
|
-
t_now = Time.now
|
172
|
-
t = Time.local(2009, 10, 1, 0, 0, 30)
|
173
|
-
expected_offset = t - t_now
|
174
|
-
tsi = Timecop::TimeStackItem.new(:travel, t)
|
175
|
-
|
176
|
-
assert_times_effectively_equal expected_offset, tsi.send(:travel_offset), 1, "Offset not calculated correctly"
|
177
|
-
end
|
178
|
-
|
179
|
-
def test_set_travel_offset_for_freeze
|
180
|
-
Timecop.freeze(2009, 10, 1, 0, 0, 0)
|
181
|
-
t = Time.local(2009, 10, 1, 0, 0, 30)
|
182
|
-
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
183
|
-
|
184
|
-
assert_nil tsi.send(:travel_offset)
|
185
|
-
end
|
186
|
-
|
187
|
-
def test_timezones
|
188
|
-
Time.zone = "Europe/Zurich"
|
189
|
-
time = Time.zone.parse("2012-12-27T12:12:12+08:00")
|
190
|
-
Timecop.freeze(time) do |frozen_time|
|
191
|
-
assert_equal time, frozen_time
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_timezones_with_parsed_string
|
196
|
-
Time.zone = "Europe/Zurich"
|
197
|
-
time_string = "2012-12-27 12:12"
|
198
|
-
expected_time = Time.zone.parse(time_string)
|
199
|
-
Timecop.freeze(time_string) do |frozen_time|
|
200
|
-
assert_equal expected_time, frozen_time
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def test_timezones_apply_dates
|
205
|
-
Time.zone = "Central Time (US & Canada)"
|
206
|
-
time = Time.zone.local(2013,1,3)
|
207
|
-
|
208
|
-
Timecop.freeze(time) do
|
209
|
-
assert_equal time.to_date, Time.zone.now.to_date
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
def test_set_scaling_factor_for_scale
|
214
|
-
t_now = Time.now
|
215
|
-
t = Time.local(2009, 10, 1, 0, 0, 30)
|
216
|
-
expected_offset = t - t_now
|
217
|
-
tsi = Timecop::TimeStackItem.new(:scale, 4, t)
|
218
|
-
|
219
|
-
assert_times_effectively_equal expected_offset, tsi.send(:travel_offset), 1, "Offset not calculated correctly"
|
220
|
-
assert_equal tsi.send(:scaling_factor), 4, "Scaling factor not set"
|
221
|
-
end
|
222
|
-
|
223
|
-
def test_parse_only_string_with_active_support
|
224
|
-
Time.expects(:parse).never
|
225
|
-
Timecop.freeze(2011, 01, 02, hour=0, minute=0, second=0)
|
226
|
-
end
|
227
|
-
|
228
|
-
def test_parse_date
|
229
|
-
Timecop.freeze(Date.new(2012, 6, 9))
|
230
|
-
end
|
231
|
-
|
232
|
-
def test_time_zone_returns_nil
|
233
|
-
Time.zone = nil
|
234
|
-
Timecop.freeze
|
235
|
-
end
|
236
|
-
|
237
|
-
def test_nsecs_are_set
|
238
|
-
time = Time.now
|
239
|
-
Timecop.freeze time
|
240
|
-
assert_equal time, Time.now
|
241
|
-
assert_equal time.nsec, Time.now.nsec if (Time.now.respond_to?(:nsec))
|
242
|
-
end
|
243
|
-
|
244
|
-
def test_time_with_different_timezone_keeps_nsec
|
245
|
-
Time.zone = "Tokyo"
|
246
|
-
t = Time.now
|
247
|
-
Timecop.freeze(t) do
|
248
|
-
assert_equal t, Time.now
|
249
|
-
assert_equal t.nsec, Time.now.nsec if (Time.now.respond_to?(:nsec))
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_time_now_always_returns_local_time
|
254
|
-
Time.zone = "Tokyo"
|
255
|
-
t = Time.utc(2000, 1, 1)
|
256
|
-
Timecop.freeze(t) do
|
257
|
-
assert_equal t.getlocal.zone, Time.now.zone
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
def test_time_zone_now_returns_time_in_that_zone
|
262
|
-
Time.zone = "Hawaii"
|
263
|
-
t = Time.utc(2000, 1, 1)
|
264
|
-
Timecop.freeze(t) do
|
265
|
-
assert_equal t, Time.zone.now
|
266
|
-
assert_equal 'HST', Time.zone.now.zone
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
def test_freezing_a_time_leaves_timezone_intact
|
271
|
-
Time.zone = "Tokyo"
|
272
|
-
t = Time.now
|
273
|
-
t_dup = t.dup
|
274
|
-
Timecop.freeze(t) {}
|
275
|
-
assert_equal t_dup.zone, t.zone
|
276
|
-
end
|
277
|
-
|
278
|
-
def test_freezing_a_time_with_zone_returns_proper_zones
|
279
|
-
Time.zone = "Hawaii"
|
280
|
-
t = ActiveSupport::TimeWithZone.new(Time.utc(2000, 1, 1), ActiveSupport::TimeZone['Tokyo'])
|
281
|
-
Timecop.freeze(t) do
|
282
|
-
local_now = Time.now
|
283
|
-
assert_equal t, local_now
|
284
|
-
assert_equal t.getlocal.zone, local_now.zone
|
285
|
-
|
286
|
-
zoned_now = Time.zone.now
|
287
|
-
assert_equal t, zoned_now
|
288
|
-
assert_equal 'HST', zoned_now.zone
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
def test_datetime_timezones
|
293
|
-
dt = DateTime.new(2011,1,3,15,25,0,"-6")
|
294
|
-
Timecop.freeze(dt) do
|
295
|
-
now = DateTime.now
|
296
|
-
assert_equal dt, now, "#{dt.to_f}, #{now.to_f}"
|
297
|
-
end
|
298
|
-
end
|
299
|
-
end
|