timecop 0.9.6 → 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|