timecop 0.5.2 → 0.5.3
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.
- data/README.markdown +7 -3
- data/lib/timecop/time_extensions.rb +3 -18
- data/lib/timecop/time_stack_item.rb +9 -11
- data/lib/timecop/timecop.rb +59 -46
- data/lib/timecop/version.rb +2 -2
- data/test/time_stack_item_test.rb +18 -6
- data/test/timecop_test.rb +28 -12
- metadata +2 -5
data/README.markdown
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# timecop
|
2
2
|
|
3
|
-
-
|
3
|
+
[](http://travis-ci.org/travisjeffery/timecop)
|
4
|
+
|
5
|
+
- Source[http://github.com/travisjeffery/timecop]
|
4
6
|
- Documentation[http://johntrupiano.rubyforge.org/timecop]
|
5
7
|
|
6
8
|
## DESCRIPTION
|
@@ -93,6 +95,8 @@ Time.now
|
|
93
95
|
# => 2012-09-21 06:22:59 -0500
|
94
96
|
```
|
95
97
|
|
98
|
+
See #42 for more information, thanks to Ken Mayer, David Holcomb, and Pivotal Labs.
|
99
|
+
|
96
100
|
## REFERENCES
|
97
101
|
|
98
102
|
* {0.3.4 release}[http://blog.smartlogicsolutions.com/2009/12/07/timecop-0-3-4-released/]
|
@@ -102,8 +106,8 @@ Time.now
|
|
102
106
|
|
103
107
|
## Contribute
|
104
108
|
|
105
|
-
timecop is maintained by [travisjeffery](http://github.com/travisjeffery),
|
106
|
-
|
109
|
+
timecop is maintained by [travisjeffery](http://github.com/travisjeffery), and
|
110
|
+
was created by [jtrupiano](https://github.com/jtrupiano).
|
107
111
|
|
108
112
|
Here's the most direct way to get your work merged into the project.
|
109
113
|
|
@@ -1,29 +1,25 @@
|
|
1
1
|
|
2
2
|
class Time #:nodoc:
|
3
3
|
class << self
|
4
|
-
# Time we are behaving as
|
5
4
|
def mock_time
|
6
5
|
mocked_time_stack_item = Timecop.top_stack_item
|
7
6
|
mocked_time_stack_item.nil? ? nil : mocked_time_stack_item.time(self)
|
8
7
|
end
|
9
8
|
|
10
|
-
# Alias the original now
|
11
9
|
alias_method :now_without_mock_time, :now
|
12
10
|
|
13
|
-
# Define now_with_mock_time
|
14
11
|
def now_with_mock_time
|
15
12
|
mock_time || now_without_mock_time
|
16
13
|
end
|
17
14
|
|
18
|
-
# Alias now to now_with_mock_time
|
19
15
|
alias_method :now, :now_with_mock_time
|
20
16
|
|
21
17
|
alias_method :new_without_mock_time, :new
|
22
18
|
|
23
|
-
def new_with_mock_time
|
19
|
+
def new_with_mock_time(*args)
|
24
20
|
begin
|
25
21
|
raise ArgumentError.new if args.size <= 0
|
26
|
-
new_without_mock_time
|
22
|
+
new_without_mock_time(*args)
|
27
23
|
rescue ArgumentError
|
28
24
|
now
|
29
25
|
end
|
@@ -36,21 +32,17 @@ end
|
|
36
32
|
if Object.const_defined?(:Date) && Date.respond_to?(:today)
|
37
33
|
class Date #:nodoc:
|
38
34
|
class << self
|
39
|
-
# Date we are behaving as
|
40
35
|
def mock_date
|
41
36
|
mocked_time_stack_item = Timecop.top_stack_item
|
42
37
|
mocked_time_stack_item.nil? ? nil : mocked_time_stack_item.date(self)
|
43
38
|
end
|
44
39
|
|
45
|
-
# Alias the original today
|
46
40
|
alias_method :today_without_mock_date, :today
|
47
41
|
|
48
|
-
# Define today_with_mock_date
|
49
42
|
def today_with_mock_date
|
50
43
|
mock_date || today_without_mock_date
|
51
44
|
end
|
52
45
|
|
53
|
-
# Alias today to today_with_mock_date
|
54
46
|
alias_method :today, :today_with_mock_date
|
55
47
|
end
|
56
48
|
end
|
@@ -59,26 +51,19 @@ end
|
|
59
51
|
if Object.const_defined?(:DateTime) && DateTime.respond_to?(:now)
|
60
52
|
class DateTime #:nodoc:
|
61
53
|
class << self
|
62
|
-
# Time we are behaving as
|
63
54
|
def mock_time
|
64
55
|
mocked_time_stack_item = Timecop.top_stack_item
|
65
56
|
mocked_time_stack_item.nil? ? nil : mocked_time_stack_item.datetime(self)
|
66
57
|
end
|
67
58
|
|
68
|
-
# Fake alias :now_without_mock_time :now
|
69
|
-
# It appears that the DateTime library itself references Time.now
|
70
|
-
# for it's interpretation of now which caused
|
71
|
-
# DateTime.now_without_mock_time to incorrectly return the frozen time.
|
72
59
|
def now_without_mock_time
|
73
|
-
Time.now_without_mock_time.
|
60
|
+
Time.now_without_mock_time.to_datetime
|
74
61
|
end
|
75
62
|
|
76
|
-
# Define now_with_mock_time
|
77
63
|
def now_with_mock_time
|
78
64
|
mock_time || now_without_mock_time
|
79
65
|
end
|
80
66
|
|
81
|
-
# Alias now to now_with_mock_time
|
82
67
|
alias_method :now, :now_with_mock_time
|
83
68
|
end
|
84
69
|
end
|
@@ -3,8 +3,8 @@ class Timecop
|
|
3
3
|
# A data class for carrying around "time movement" objects. Makes it easy to keep track of the time
|
4
4
|
# movements on a simple stack.
|
5
5
|
class TimeStackItem #:nodoc:
|
6
|
-
|
7
6
|
attr_reader :mock_type
|
7
|
+
|
8
8
|
def initialize(mock_type, *args)
|
9
9
|
raise "Unknown mock_type #{mock_type}" unless [:freeze, :travel, :scale].include?(mock_type)
|
10
10
|
@scaling_factor = args.shift if mock_type == :scale
|
@@ -51,13 +51,13 @@ class Timecop
|
|
51
51
|
@scaling_factor
|
52
52
|
end
|
53
53
|
|
54
|
-
def time(time_klass=Time) #:nodoc:
|
54
|
+
def time(time_klass = Time) #:nodoc:
|
55
55
|
if travel_offset.nil?
|
56
|
-
time_klass.at(
|
56
|
+
time_klass.at(@time.to_f)
|
57
57
|
elsif scaling_factor.nil?
|
58
|
-
time_klass.at(
|
58
|
+
time_klass.at((Time.now_without_mock_time + travel_offset).to_f)
|
59
59
|
else
|
60
|
-
time_klass.at(
|
60
|
+
time_klass.at(scaled_time)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -65,17 +65,16 @@ class Timecop
|
|
65
65
|
(@time + (Time.now_without_mock_time - @time_was) * scaling_factor).to_f
|
66
66
|
end
|
67
67
|
|
68
|
-
def date(date_klass=Date)
|
68
|
+
def date(date_klass = Date)
|
69
69
|
date_klass.jd(time.__send__(:to_date).jd)
|
70
70
|
end
|
71
71
|
|
72
|
-
def datetime(datetime_klass=DateTime)
|
73
|
-
# DateTime doesn't know about DST, so let's remove its presence
|
72
|
+
def datetime(datetime_klass = DateTime)
|
74
73
|
our_offset = utc_offset + dst_adjustment
|
74
|
+
|
75
75
|
if Float.method_defined?(:to_r)
|
76
76
|
fractions_of_a_second = time.to_f % 1
|
77
|
-
datetime_klass.new(year, month, day, hour, min, sec + fractions_of_a_second,
|
78
|
-
utc_offset_to_rational(our_offset))
|
77
|
+
datetime_klass.new(year, month, day, hour, min, sec + fractions_of_a_second, utc_offset_to_rational(our_offset))
|
79
78
|
else
|
80
79
|
our_offset = utc_offset + dst_adjustment
|
81
80
|
datetime_klass.new(year, month, day, hour, min, sec, utc_offset_to_rational(our_offset))
|
@@ -140,6 +139,5 @@ class Timecop
|
|
140
139
|
return nil if mock_type == :freeze
|
141
140
|
time - Time.now_without_mock_time
|
142
141
|
end
|
143
|
-
|
144
142
|
end
|
145
143
|
end
|
data/lib/timecop/timecop.rb
CHANGED
@@ -47,11 +47,11 @@ class Timecop
|
|
47
47
|
# which will lead to files being generated with the timestamp set by the Timecop.freeze call
|
48
48
|
# in your dev environment
|
49
49
|
#
|
50
|
-
# Returns the value of the block or
|
50
|
+
# Returns the value of the block if one is given, or the mocked time.
|
51
51
|
def freeze(*args, &block)
|
52
|
-
val = instance
|
52
|
+
val = instance.send(:travel, :freeze, *args, &block)
|
53
53
|
|
54
|
-
block_given? ? val :
|
54
|
+
block_given? ? val : Time.now
|
55
55
|
end
|
56
56
|
|
57
57
|
# Allows you to run a block of code and "fake" a time throughout the execution of that block.
|
@@ -60,11 +60,11 @@ class Timecop
|
|
60
60
|
# * Note: Timecop.travel will not freeze time (as opposed to Timecop.freeze). This is a particularly
|
61
61
|
# good candidate for use in environment files in rails projects.
|
62
62
|
#
|
63
|
-
# Returns the value of the block or
|
63
|
+
# Returns the value of the block if one is given, or the mocked time.
|
64
64
|
def travel(*args, &block)
|
65
|
-
val = instance
|
65
|
+
val = instance.send(:travel, :travel, *args, &block)
|
66
66
|
|
67
|
-
block_given? ? val :
|
67
|
+
block_given? ? val : Time.now
|
68
68
|
end
|
69
69
|
|
70
70
|
# Allows you to run a block of code and "scale" a time throughout the execution of that block.
|
@@ -74,74 +74,87 @@ class Timecop
|
|
74
74
|
# end
|
75
75
|
# See Timecop#freeze for exact usage of the other arguments
|
76
76
|
#
|
77
|
-
# Returns the value of the block or
|
77
|
+
# Returns the value of the block if one is given, or the mocked time.
|
78
78
|
def scale(*args, &block)
|
79
|
-
val = instance
|
79
|
+
val = instance.send(:travel, :scale, *args, &block)
|
80
80
|
|
81
|
-
block_given? ? val :
|
81
|
+
block_given? ? val : Time.now
|
82
82
|
end
|
83
83
|
|
84
84
|
def baseline
|
85
|
-
instance
|
85
|
+
instance.send(:baseline)
|
86
86
|
end
|
87
87
|
|
88
88
|
def baseline=(baseline)
|
89
|
-
instance
|
89
|
+
instance.send(:baseline=, baseline)
|
90
90
|
end
|
91
91
|
|
92
|
-
# Reverts back to system's Time.now, Date.today and DateTime.now (if it exists)
|
93
|
-
|
94
|
-
|
95
|
-
|
92
|
+
# Reverts back to system's Time.now, Date.today and DateTime.now (if it exists) permamently when
|
93
|
+
# no block argument is given, or temporarily reverts back to the system's time temporarily for
|
94
|
+
# the given block.
|
95
|
+
def return(&block)
|
96
|
+
if block_given?
|
97
|
+
instance.send(:return, &block)
|
98
|
+
else
|
99
|
+
instance.send(:unmock!)
|
100
|
+
nil
|
101
|
+
end
|
96
102
|
end
|
97
103
|
|
98
104
|
def return_to_baseline
|
99
|
-
instance
|
105
|
+
instance.send(:return_to_baseline)
|
100
106
|
Time.now
|
101
107
|
end
|
102
108
|
|
103
109
|
def top_stack_item #:nodoc:
|
104
|
-
instance
|
110
|
+
instance.instance_variable_get(:@_stack).last
|
105
111
|
end
|
106
112
|
end
|
107
113
|
|
108
|
-
|
114
|
+
private
|
109
115
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
116
|
+
def baseline=(baseline)
|
117
|
+
@baseline = baseline
|
118
|
+
@_stack << TimeStackItem.new(:travel, baseline)
|
119
|
+
end
|
114
120
|
|
115
|
-
|
116
|
-
|
117
|
-
|
121
|
+
def initialize #:nodoc:
|
122
|
+
@_stack = []
|
123
|
+
end
|
118
124
|
|
119
|
-
|
120
|
-
|
125
|
+
def travel(mock_type, *args, &block) #:nodoc:
|
126
|
+
stack_item = TimeStackItem.new(mock_type, *args)
|
121
127
|
|
122
|
-
|
123
|
-
@_stack << stack_item
|
128
|
+
@_stack << stack_item
|
124
129
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
@_stack.pop
|
131
|
-
end
|
130
|
+
if block_given?
|
131
|
+
begin
|
132
|
+
yield stack_item.time
|
133
|
+
ensure
|
134
|
+
@_stack.pop
|
132
135
|
end
|
133
136
|
end
|
137
|
+
end
|
134
138
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
+
def return(&block)
|
140
|
+
current_stack = @_stack
|
141
|
+
current_baseline = @baseline
|
142
|
+
unmock!
|
143
|
+
yield
|
144
|
+
@_stack = current_stack
|
145
|
+
@baseline = current_baseline
|
146
|
+
end
|
139
147
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
148
|
+
def unmock! #:nodoc:
|
149
|
+
@baseline = nil
|
150
|
+
@_stack = []
|
151
|
+
end
|
152
|
+
|
153
|
+
def return_to_baseline
|
154
|
+
if @baseline
|
155
|
+
@_stack = [@_stack.shift]
|
156
|
+
else
|
157
|
+
unmock!
|
146
158
|
end
|
159
|
+
end
|
147
160
|
end
|
data/lib/timecop/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
class Timecop
|
2
|
-
VERSION = "0.5.
|
3
|
-
end
|
2
|
+
VERSION = "0.5.3"
|
3
|
+
end
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'timecop')
|
4
4
|
|
5
5
|
class TestTimeStackItem < Test::Unit::TestCase
|
6
|
-
|
7
6
|
def teardown
|
8
7
|
Timecop.active_support = nil
|
9
8
|
Timecop.return
|
@@ -13,6 +12,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
13
12
|
t = Time.now
|
14
13
|
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
15
14
|
stack_item = Timecop::TimeStackItem.new(:freeze, t)
|
15
|
+
|
16
16
|
assert_equal y, stack_item.year
|
17
17
|
assert_equal m, stack_item.month
|
18
18
|
assert_equal d, stack_item.day
|
@@ -25,6 +25,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
25
25
|
t = Time.new(2012, 7, 28, 20, 0)
|
26
26
|
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
27
27
|
stack_item = Timecop::TimeStackItem.new(:freeze, t)
|
28
|
+
|
28
29
|
assert_equal y, stack_item.year
|
29
30
|
assert_equal m, stack_item.month
|
30
31
|
assert_equal d, stack_item.day
|
@@ -37,6 +38,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
37
38
|
t = DateTime.now
|
38
39
|
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
39
40
|
stack_item = Timecop::TimeStackItem.new(:freeze, t)
|
41
|
+
|
40
42
|
assert_equal y, stack_item.year
|
41
43
|
assert_equal m, stack_item.month
|
42
44
|
assert_equal d, stack_item.day
|
@@ -49,6 +51,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
49
51
|
each_timezone do
|
50
52
|
t = DateTime.parse("2009-10-11 00:38:00 +0200")
|
51
53
|
stack_item = Timecop::TimeStackItem.new(:freeze, t)
|
54
|
+
|
52
55
|
assert_date_times_equal(t, stack_item.datetime)
|
53
56
|
end
|
54
57
|
end
|
@@ -57,6 +60,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
57
60
|
date = Date.today
|
58
61
|
y, m, d, h, min, s = date.year, date.month, date.day, 0, 0, 0
|
59
62
|
stack_item = Timecop::TimeStackItem.new(:freeze, date)
|
63
|
+
|
60
64
|
assert_equal y, stack_item.year
|
61
65
|
assert_equal m, stack_item.month
|
62
66
|
assert_equal d, stack_item.day
|
@@ -72,6 +76,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
72
76
|
t = Time.now
|
73
77
|
y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
|
74
78
|
stack_item = Timecop::TimeStackItem.new(:freeze, 0)
|
79
|
+
|
75
80
|
assert_equal y, stack_item.year
|
76
81
|
assert_equal m, stack_item.month
|
77
82
|
assert_equal d, stack_item.day
|
@@ -83,6 +88,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
83
88
|
def test_new_with_individual_arguments
|
84
89
|
y, m, d, h, min, s = 2008, 10, 10, 10, 10, 10
|
85
90
|
stack_item = Timecop::TimeStackItem.new(:freeze, y, m, d, h, min, s)
|
91
|
+
|
86
92
|
assert_equal y, stack_item.year
|
87
93
|
assert_equal m, stack_item.month
|
88
94
|
assert_equal d, stack_item.day
|
@@ -104,13 +110,13 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
104
110
|
assert_equal Rational(0, 1), a_time_stack_item.send(:utc_offset_to_rational, 0)
|
105
111
|
assert_equal Rational(1, 24), a_time_stack_item.send(:utc_offset_to_rational, 3600)
|
106
112
|
end
|
107
|
-
|
108
|
-
# Ensure DST adjustment is calculated properly for DateTime's
|
113
|
+
|
109
114
|
def test_compute_dst_adjustment_for_dst_to_dst
|
110
115
|
Timecop.freeze(DateTime.parse("2009-10-1 00:38:00 -0400"))
|
111
116
|
t = DateTime.parse("2009-10-11 00:00:00 -0400")
|
112
117
|
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
113
118
|
return if !(Time.now.dst? && tsi.time.dst?)
|
119
|
+
|
114
120
|
assert_equal 0, tsi.send(:dst_adjustment)
|
115
121
|
end
|
116
122
|
|
@@ -119,6 +125,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
119
125
|
t = DateTime.parse("2009-12-11 00:00:00 -0400")
|
120
126
|
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
121
127
|
return if Time.now.dst? || tsi.time.dst?
|
128
|
+
|
122
129
|
assert_equal 0, tsi.send(:dst_adjustment)
|
123
130
|
end
|
124
131
|
|
@@ -127,6 +134,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
127
134
|
t = DateTime.parse("2009-12-11 00:00:00 -0400")
|
128
135
|
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
129
136
|
return if !Time.now.dst? || tsi.time.dst?
|
137
|
+
|
130
138
|
assert_equal 60 * 60, tsi.send(:dst_adjustment)
|
131
139
|
end
|
132
140
|
|
@@ -135,6 +143,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
135
143
|
t = DateTime.parse("2009-10-11 00:00:00 -0400")
|
136
144
|
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
137
145
|
return if Time.now.dst? || !tsi.time.dst?
|
146
|
+
|
138
147
|
assert_equal -1 * 60 * 60, tsi.send(:dst_adjustment)
|
139
148
|
end
|
140
149
|
|
@@ -143,6 +152,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
143
152
|
Timecop.freeze(DateTime.parse("2009-12-1 00:38:00 -0500"))
|
144
153
|
t = DateTime.parse("2009-10-11 00:00:00 -0400")
|
145
154
|
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
155
|
+
|
146
156
|
assert_date_times_equal t, tsi.datetime
|
147
157
|
end
|
148
158
|
|
@@ -151,17 +161,17 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
151
161
|
t = DateTime.parse("2009-11-30 23:38:00 -0500")
|
152
162
|
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
153
163
|
return if !tsi.time.dst?
|
164
|
+
|
154
165
|
assert_date_times_equal t, tsi.datetime
|
155
166
|
assert_equal Date.new(2009, 12, 1), tsi.date
|
156
167
|
end
|
157
|
-
|
158
|
-
# Ensure @travel_offset is set properly
|
168
|
+
|
159
169
|
def test_set_travel_offset_for_travel
|
160
|
-
# Timecop.freeze(2009, 10, 1, 0, 0, 0)
|
161
170
|
t_now = Time.now
|
162
171
|
t = Time.local(2009, 10, 1, 0, 0, 30)
|
163
172
|
expected_offset = t - t_now
|
164
173
|
tsi = Timecop::TimeStackItem.new(:travel, t)
|
174
|
+
|
165
175
|
assert_times_effectively_equal expected_offset, tsi.send(:travel_offset), 1, "Offset not calculated correctly"
|
166
176
|
end
|
167
177
|
|
@@ -169,6 +179,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
169
179
|
Timecop.freeze(2009, 10, 1, 0, 0, 0)
|
170
180
|
t = Time.local(2009, 10, 1, 0, 0, 30)
|
171
181
|
tsi = Timecop::TimeStackItem.new(:freeze, t)
|
182
|
+
|
172
183
|
assert_equal nil, tsi.send(:travel_offset)
|
173
184
|
end
|
174
185
|
|
@@ -177,6 +188,7 @@ class TestTimeStackItem < Test::Unit::TestCase
|
|
177
188
|
t = Time.local(2009, 10, 1, 0, 0, 30)
|
178
189
|
expected_offset = t - t_now
|
179
190
|
tsi = Timecop::TimeStackItem.new(:scale, 4, t)
|
191
|
+
|
180
192
|
assert_times_effectively_equal expected_offset, tsi.send(:travel_offset), 1, "Offset not calculated correctly"
|
181
193
|
assert_equal tsi.send(:scaling_factor), 4, "Scaling factor not set"
|
182
194
|
end
|
data/test/timecop_test.rb
CHANGED
@@ -3,25 +3,20 @@ require 'test_helper'
|
|
3
3
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'timecop')
|
4
4
|
|
5
5
|
class TestTimecop < Test::Unit::TestCase
|
6
|
-
|
7
|
-
def setup
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
# just in case...let's really make sure that Timecop is disabled between tests...
|
12
6
|
def teardown
|
13
7
|
Timecop.return
|
14
8
|
end
|
15
9
|
|
16
10
|
def test_freeze_changes_and_resets_time
|
17
|
-
# depending on how we're invoked (individually or via the rake test suite)
|
18
11
|
assert !Time.respond_to?(:zone) || Time.zone.nil?
|
19
12
|
|
20
13
|
t = Time.local(2008, 10, 10, 10, 10, 10)
|
21
14
|
assert_not_equal t, Time.now
|
15
|
+
|
22
16
|
Timecop.freeze(2008, 10, 10, 10, 10, 10) do
|
23
17
|
assert_equal t, Time.now
|
24
18
|
end
|
19
|
+
|
25
20
|
assert_not_equal t, Time.now
|
26
21
|
end
|
27
22
|
|
@@ -68,6 +63,7 @@ class TestTimecop < Test::Unit::TestCase
|
|
68
63
|
custom_timeklass = Class.new(Time) do
|
69
64
|
def custom_format_method() strftime('%F') end
|
70
65
|
end
|
66
|
+
|
71
67
|
Timecop.freeze(2008, 10, 10, 10, 10, 10) do
|
72
68
|
assert custom_timeklass.now.is_a? custom_timeklass
|
73
69
|
assert Time.now.eql? custom_timeklass.now
|
@@ -80,6 +76,7 @@ class TestTimecop < Test::Unit::TestCase
|
|
80
76
|
custom_dateklass = Class.new(Date) do
|
81
77
|
def custom_format_method() strftime('%F') end
|
82
78
|
end
|
79
|
+
|
83
80
|
Timecop.freeze(2008, 10, 10, 10, 10, 10) do
|
84
81
|
assert custom_dateklass.today.is_a? custom_dateklass
|
85
82
|
assert Date.today.eql? custom_dateklass.today
|
@@ -92,6 +89,7 @@ class TestTimecop < Test::Unit::TestCase
|
|
92
89
|
custom_datetimeklass = Class.new(DateTime) do
|
93
90
|
def custom_format_method() strftime('%F') end
|
94
91
|
end
|
92
|
+
|
95
93
|
Timecop.freeze(2008, 10, 10, 10, 10, 10) do
|
96
94
|
assert custom_datetimeklass.now.is_a? custom_datetimeklass
|
97
95
|
assert DateTime.now.eql? custom_datetimeklass.now
|
@@ -119,6 +117,7 @@ class TestTimecop < Test::Unit::TestCase
|
|
119
117
|
assert_date_times_equal DateTime.new(2008, 10, 10, 10, 10, 10, local_offset), DateTime.now
|
120
118
|
assert_equal Date.new(2008, 10, 10), Date.today
|
121
119
|
end
|
120
|
+
|
122
121
|
assert_not_equal t, Time.now
|
123
122
|
assert_not_equal DateTime.new(2008, 10, 10, 10, 10, 10, local_offset), DateTime.now
|
124
123
|
assert_not_equal Date.new(2008, 10, 10), Date.today
|
@@ -133,7 +132,6 @@ class TestTimecop < Test::Unit::TestCase
|
|
133
132
|
Timecop.freeze(t) do
|
134
133
|
assert_date_times_equal t, DateTime.now
|
135
134
|
end
|
136
|
-
# Undo the original freeze
|
137
135
|
Timecop.return
|
138
136
|
end
|
139
137
|
end
|
@@ -260,6 +258,11 @@ class TestTimecop < Test::Unit::TestCase
|
|
260
258
|
end
|
261
259
|
end
|
262
260
|
|
261
|
+
def test_scaling_returns_now_if_no_block_given
|
262
|
+
t = Time.local(2008, 10, 10, 10, 10, 10)
|
263
|
+
assert_times_effectively_equal t, Timecop.scale(4, t)
|
264
|
+
end
|
265
|
+
|
263
266
|
def test_freeze_with_utc_time
|
264
267
|
each_timezone do
|
265
268
|
t = Time.utc(2008, 10, 10, 10, 10, 10)
|
@@ -334,9 +337,22 @@ class TestTimecop < Test::Unit::TestCase
|
|
334
337
|
assert_nil Time.send(:mock_time)
|
335
338
|
end
|
336
339
|
|
337
|
-
def
|
340
|
+
def test_travel_time_returns_now_if_no_block_given
|
338
341
|
t_future = Time.local(2030, 10, 10, 10, 10, 10)
|
339
|
-
|
342
|
+
assert_times_effectively_equal t_future, Timecop.travel(t_future)
|
343
|
+
end
|
344
|
+
|
345
|
+
def test_return_temporarily_returns_to_current_time_in_given_block
|
346
|
+
time_after_travel = Time.local(1990, 7, 16)
|
347
|
+
now = Time.now
|
348
|
+
|
349
|
+
Timecop.travel(time_after_travel)
|
350
|
+
|
351
|
+
assert_times_effectively_equal(time_after_travel, Time.now)
|
352
|
+
Timecop.return do
|
353
|
+
assert_times_effectively_equal(now, Time.now)
|
354
|
+
end
|
355
|
+
assert_times_effectively_equal(time_after_travel, Time.now)
|
340
356
|
end
|
341
357
|
|
342
358
|
def test_travel_time_with_block_returns_the_value_of_the_block
|
@@ -347,9 +363,9 @@ class TestTimecop < Test::Unit::TestCase
|
|
347
363
|
assert_equal expected, actual
|
348
364
|
end
|
349
365
|
|
350
|
-
def
|
366
|
+
def test_freeze_time_returns_now_if_no_block_given
|
351
367
|
t_future = Time.local(2030, 10, 10, 10, 10, 10)
|
352
|
-
|
368
|
+
assert_times_effectively_equal t_future, Timecop.freeze(t_future)
|
353
369
|
end
|
354
370
|
|
355
371
|
def test_freeze_time_with_block_returns_the_value_of_the_block
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timecop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -50,9 +50,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
50
50
|
- - ! '>='
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '0'
|
53
|
-
segments:
|
54
|
-
- 0
|
55
|
-
hash: -1525074573276164628
|
56
53
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
54
|
none: false
|
58
55
|
requirements:
|
@@ -61,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
58
|
version: '0'
|
62
59
|
requirements: []
|
63
60
|
rubyforge_project: johntrupiano
|
64
|
-
rubygems_version: 1.8.
|
61
|
+
rubygems_version: 1.8.23
|
65
62
|
signing_key:
|
66
63
|
specification_version: 3
|
67
64
|
summary: A gem providing "time travel" and "time freezing" capabilities, making it
|