timecop 0.0.99 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,42 +1,3 @@
1
- === 0.2.1 / 2009-03-06
2
- * API Changes
3
-
4
- * Introduced a 5th style of arguments to be passed into #travel and #freeze. Now, if you pass in a single integer value,
5
- it will be interpreted as a relative offset in seconds from the current Time.now. Previously this was interpreted as
6
- only the year, similar to calling Time.local(2008) --> Jan. 1, 2008. This is no longer the case.
7
-
8
- * Documentation
9
-
10
- * Moved to Textile for the README.
11
-
12
- * Added documentation for the new feature, and fixed a few typos.
13
-
14
- === 0.2.0 / 2008-12-23
15
-
16
- * API Changes
17
-
18
- * Timecop#travel no longer freezes time. Rather, it computes the current offset between the new "now" and the real "now", and
19
- returns times as if Time had continued to move forward
20
-
21
- * Timecop#freeze now behaves exactly as the old Timecop#travel behaved. Unless you depended on the actual freezing of time
22
- (which I think would be rare), you should be able to continue to use #travel without worry.
23
-
24
- * Timecop#return is now exposed (previously Timecop#unset_all, but not well advertised). It will completely unmock time,
25
- and will probably be rarely used outside of the actual implementation of this library.
26
-
27
- * More Test Coverage
28
-
29
- * Tests now explicitly cover the cases when the Date and DateTime objects are not loaded, and ensures proper functionality
30
- in their absence and existence.
31
-
32
- * Still haven't done regression testing against anything other than a few version of 1.8.6 (including REE). We should
33
- probably try to get this tested on both 1.8.7 and 1.9.1.
34
-
35
- * Documentation
36
-
37
- * Fixed up a lot of the poorly-formatted rdoc syntax. The public API should now be properly published in the rdoc,
38
- and the internals are omitted.
39
-
40
1
  === 0.1.0 / 2008-11-09
41
2
 
42
3
  * Initial Feature Set
@@ -3,12 +3,8 @@ Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
5
  lib/timecop.rb
6
- lib/timecop/stack_item.rb
7
6
  lib/timecop/time_extensions.rb
8
7
  lib/timecop/timecop.rb
9
8
  lib/timecop/version.rb
10
- test/run_tests.sh
11
9
  test/test_timecop.rb
12
- test/test_timecop_internals.rb
13
- test/test_timecop_without_date.rb
14
10
  timecop.gemspec
@@ -0,0 +1,75 @@
1
+ = timecop
2
+
3
+ * http://github.com/jtrupiano/timecop
4
+
5
+ == DESCRIPTION:
6
+
7
+ A gem providing simple ways to (temporarily) override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to write test time-dependent code.
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * Temporarily (or permanently if you prefer) change the concept of Time.now, DateTime.now (if defined), and Date.today (if defined)
12
+ * Timecop#travel api allows an argument to be passed in as one of: 1) Time instance, 2) DateTime instance, 3) Date instance,
13
+ 4) individual arguments (year, month, day, hour, minute, second)
14
+ * Nested calls to Timecop#travel are supported -- each block will maintain it's interpretation of now.
15
+
16
+ == SYNOPSIS:
17
+
18
+ * Run a time-sensitive test:
19
+ <code>
20
+ joe = User.find(1)
21
+ joe.purchase_home()
22
+ assert !joe.mortgage_due?
23
+ # move ahead a month and assert that the mortgage is due
24
+ Timecop.travel(Date.today + 30) do
25
+ assert joe.mortgage_due?
26
+ end
27
+ </code>
28
+
29
+ * Set the time for the test environment of a rails app -- this is particularly helpful if your whole application
30
+ is time-sensitive. It allows you to build your test data at a single point in time, and to move in/out of that
31
+ time as appropriate (within your tests)
32
+
33
+ in config/environments/test.rb
34
+
35
+ <code>
36
+ config.after_initialize do
37
+ # Set Time.now to September 1, 2008 10:05:00 AM
38
+ t = Time.local(2008, 9, 1, 10, 5, 0)
39
+ Timecop.travel(t)
40
+ end
41
+ </code>
42
+
43
+ == REQUIREMENTS:
44
+
45
+ * None
46
+
47
+ == INSTALL:
48
+
49
+ * sudo gem install timecop (latest stable version from rubyforge)
50
+ * sudo gem install jtrupiano-timecop (HEAD of the repo from github)
51
+
52
+ == LICENSE:
53
+
54
+ (The MIT License)
55
+
56
+ Copyright (c) 2008 FIX
57
+
58
+ Permission is hereby granted, free of charge, to any person obtaining
59
+ a copy of this software and associated documentation files (the
60
+ 'Software'), to deal in the Software without restriction, including
61
+ without limitation the rights to use, copy, modify, merge, publish,
62
+ distribute, sublicense, and/or sell copies of the Software, and to
63
+ permit persons to whom the Software is furnished to do so, subject to
64
+ the following conditions:
65
+
66
+ The above copyright notice and this permission notice shall be
67
+ included in all copies or substantial portions of the Software.
68
+
69
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
70
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
71
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
72
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
73
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
74
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
75
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,31 +1,33 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'rake/rdoctask'
1
+ # -*- ruby -*-
4
2
 
5
- begin
6
- require 'jeweler'
7
- Jeweler::Tasks.new do |s|
8
- s.name = "timecop"
9
- s.rubyforge_project = 'johntrupiano' # if different than lowercase project name
10
- s.description = %q(A gem providing simple ways to temporarily override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to test time-dependent code.)
11
- s.summary = s.description # More details later??
12
- s.email = "jtrupiano@gmail.com"
13
- s.homepage = "http://github.com/jtrupiano/timecop"
14
- s.authors = ["John Trupiano"]
15
- s.files = FileList["[A-Z]*", "{bin,lib,test}/**/*"]
16
- #s.add_dependency 'schacon-git'
17
- end
18
- rescue LoadError
19
- puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './lib/timecop/version.rb'
6
+
7
+ PKG_NAME = "timecop"
8
+ PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
9
+ version = Timecop::Version::STRING.dup
10
+ if ENV['SNAPSHOT'].to_i == 1
11
+ version << "." << Time.now.utc.strftime("%Y%m%d%H%M%S")
20
12
  end
13
+ PKG_VERSION = version
14
+ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
21
15
 
22
- # Override the test task and instruct them how to actually run the tests.
23
- Rake.application.send(:eval, "@tasks.delete('test')")
24
- desc "Does not execute tests. Manually run shell script ./run_tests.sh to execute tests."
25
- task :test do
26
- puts <<-MSG
27
- In order to run the test suite, run: cd test && ./run_tests.sh
28
- The tests need to be run with different libraries loaded, which rules out using Rake
29
- to automate them.
30
- MSG
16
+ Hoe.new(PKG_NAME, PKG_VERSION) do |p|
17
+ p.rubyforge_name = 'johntrupiano' # if different than lowercase project name
18
+ p.developer('John Trupiano', 'jtrupiano@gmail.com')
19
+ p.name = PKG_NAME
20
+ p.version = PKG_VERSION
21
+ #p.platform = Gem::Platform::RUBY
22
+ p.author = "John Trupiano"
23
+ p.email = "jtrupiano@gmail.com"
24
+ p.description = %q(A gem providing simple ways to temporarily override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to write test time-dependent code.)
25
+ p.summary = p.description # More details later??
26
+ p.remote_rdoc_dir = PKG_NAME # Release to /PKG_NAME
27
+ # p.changes = p.paragraphs_of('CHANGELOG', 0..1).join("\n\n")
28
+ p.need_zip = true
29
+ p.need_tar = false
31
30
  end
31
+
32
+ # vim: syntax=Ruby
33
+
@@ -7,33 +7,11 @@
7
7
  class Time
8
8
  class << self
9
9
  # Time we might be behaving as
10
- #attr_reader :mock_time
11
-
12
- @@mock_offset = nil
13
- @@mock_time = nil
14
-
15
- def mock_time
16
- if !@@mock_offset.nil?
17
- now_without_mock_time - @@mock_offset
18
- else
19
- @@mock_time
20
- end
21
- end
10
+ attr_reader :mock_time
22
11
 
23
12
  # Set new time to pretend we are.
24
- def freeze_time(new_now)
25
- @@mock_time = new_now
26
- @@mock_offset = nil
27
- end
28
-
29
- def move_time(new_now)
30
- @@mock_offset = new_now.nil? ? nil : (now_without_mock_time - new_now)
31
- @@mock_time = nil
32
- end
33
-
34
- # Restores Time to system clock
35
- def unmock!
36
- move_time(nil)
13
+ def mock_time=(new_now)
14
+ @mock_time = new_now
37
15
  end
38
16
 
39
17
  # Alias the original now
@@ -52,12 +30,14 @@ end
52
30
  if Object.const_defined?(:Date)
53
31
  class Date
54
32
  class << self
55
- def mock_date
56
- now = Time.mock_time
57
- return nil if now.nil?
58
- Date.new(now.year, now.month, now.day)
33
+ # Date we might be behaving as
34
+ attr_reader :mock_date
35
+
36
+ # Set new date to pretend we are.
37
+ def mock_date=(new_date)
38
+ @mock_date = new_date
59
39
  end
60
-
40
+
61
41
  # Alias the original today
62
42
  alias_method :today_without_mock_date, :today
63
43
 
@@ -75,20 +55,22 @@ end
75
55
  if Object.const_defined?(:DateTime)
76
56
  class DateTime
77
57
  class << self
78
- def mock_time
79
- t_now = Time.mock_time
80
- return nil if t_now.nil?
81
- DateTime.new(t_now.year, t_now.month, t_now.day, t_now.hour, t_now.min, t_now.sec)
58
+ # Time we might be behaving as
59
+ attr_reader :mock_time
60
+
61
+ # Set new time to pretend we are.
62
+ def mock_time=(new_now)
63
+ @mock_time = new_now
82
64
  end
83
-
65
+
84
66
  # Alias the original now
85
67
  alias_method :now_without_mock_time, :now
86
-
68
+
87
69
  # Define now_with_mock_time
88
70
  def now_with_mock_time
89
71
  mock_time || now_without_mock_time
90
72
  end
91
-
73
+
92
74
  # Alias now to now_with_mock_time
93
75
  alias_method :now, :now_with_mock_time
94
76
  end
@@ -1,17 +1,39 @@
1
- require 'singleton'
2
1
  require File.join(File.dirname(__FILE__), 'time_extensions')
3
- require File.join(File.dirname(__FILE__), 'stack_item')
4
2
 
5
- # Timecop
6
- # * Wrapper class for manipulating the extensions to the Time, Date, and DateTime objects
7
- # * Allows us to "freeze" time in our Ruby applications.
8
- # * Optionally allows time travel to simulate a running clock, such time is not technically frozen.
9
- #
10
- # This is very useful when your app's functionality is dependent on time (e.g.
3
+ # 1. Wrapper class for manipulating the extensions to the Time, Date, and DateTime objects
4
+ # 2. Allows us to "freeze" time in our Ruby applications.
5
+ # 3. This is very useful when your app's functionality is dependent on time (e.g.
11
6
  # anything that might expire). This will allow us to alter the return value of
12
7
  # Date.today, Time.now, and DateTime.now, such that our application code _never_ has to change.
13
8
  class Timecop
14
- include Singleton
9
+
10
+ # Re-bases Time.now, Date.today and DateTime.now (if it exists) to use the time passed in.
11
+ # When using this method directly, it is up to the developer to call unset_all to return us
12
+ # to sanity.
13
+ #
14
+ # * If being consumed in a rails app, Time.zone.local will be used to instantiate the time.
15
+ # Otherwise, Time.local will be used.
16
+ def self.set_all(year, month, day, hour=0, minute=0, second=0)
17
+ if Time.respond_to?(:zone) && !Time.zone.nil?
18
+ # ActiveSupport loaded
19
+ time = Time.zone.local(year, month, day, hour, minute, second)
20
+ else
21
+ # ActiveSupport not loaded
22
+ time = Time.local(year, month, day, hour, minute, second)
23
+ end
24
+
25
+ Time.mock_time = time
26
+ Date.mock_date = Date.new(time.year, time.month, time.day) if Object.const_defined?(:Date)
27
+ DateTime.mock_time = DateTime.new(time.year, time.month, time.day, time.hour, time.min, time.sec) if Object.const_defined?(:DateTime)
28
+ end
29
+
30
+ # Reverts back to system's Time.now, Date.today and DateTime.now (if it exists). If set_all
31
+ # was never called in the first place, this method will have no effect.
32
+ def self.unset_all
33
+ Date.mock_date = nil
34
+ DateTime.mock_time = nil if Object.const_defined?(:Date)
35
+ Time.mock_time = nil if Object.const_defined?(:DateTime)
36
+ end
15
37
 
16
38
  # Allows you to run a block of code and "fake" a time throughout the execution of that block.
17
39
  # This is particularly useful for writing test methods where the passage of time is critical to the business
@@ -21,148 +43,49 @@ class Timecop
21
43
  # joe = User.find(1)
22
44
  # joe.purchase_home()
23
45
  # assert !joe.mortgage_due?
24
- # Timecop.freeze(2008, 10, 5) do
46
+ # Timecop.travel(2008, 10, 5) do
25
47
  # assert joe.mortgage_due?
26
48
  # end
27
49
  # </code>
28
50
  #
29
- # freeze and travel will respond to several different arguments:
30
- # 1. Timecop.freeze(time_inst)
31
- # 2. Timecop.freeze(datetime_inst)
32
- # 3. Timecop.freeze(date_inst)
33
- # 4. Timecop.freeze(year, month, day, hour=0, minute=0, second=0)
51
+ # travel will respond to several different arguments:
52
+ # 1. Timecop.travel(time_inst)
53
+ # 2. Timecop.travel(datetime_inst)
54
+ # 3. Timecop.travel(date_inst)
55
+ # 4. Timecop.travel(year, month, day, hour=0, minute=0, second=0)
34
56
  #
35
- # When a block is also passed, Time.now, DateTime.now and Date.today are all reset to their
57
+ # When a block is also passed, the Time.now, DateTime.now and Date.today are all reset to their
36
58
  # previous values. This allows us to nest multiple calls to Timecop.travel and have each block
37
59
  # maintain it's concept of "now."
38
- #
39
- # * Note: Timecop.freeze will actually freeze time. This can cause unanticipated problems if
40
- # benchmark or other timing calls are executed, which implicitly expect Time to actually move
41
- # forward.
42
- #
43
- # * Rails Users: Be especially careful when setting this in your development environment in a
44
- # rails project. Generators will load your environment, including the migration generator,
45
- # which will lead to files being generated with the timestamp set by the Timecop.freeze call
46
- # in your dev environment
47
- def self.freeze(*args, &block)
48
- instance().send(:travel, :freeze, *args, &block)
49
- end
50
-
51
- # Allows you to run a block of code and "fake" a time throughout the execution of that block.
52
- # See Timecop#freeze for a sample of how to use (same exact usage syntax)
53
- #
54
- # * Note: Timecop.travel will not freeze time (as opposed to Timecop.freeze). This is a particularly
55
- # good candidate for use in environment files in rails projects.
60
+ #def self.travel(year, month, day, hour=0, minute=0, second=0, &block)
56
61
  def self.travel(*args, &block)
57
- instance().send(:travel, :move, *args, &block)
58
- end
59
-
60
- # Reverts back to system's Time.now, Date.today and DateTime.now (if it exists). If freeze_all or rebase_all
61
- # was never called in the first place, this method will have no effect.
62
- def self.return
63
- instance().send(:unmock!)
64
- end
62
+ year, month, day, hour, minute, second = parse_travel_args(*args)
65
63
 
66
- # [Deprecated]: See Timecop#return instead.
67
- def self.unset_all
68
- $stderr.puts "Timecop#unset_all is deprecated. Please use Timecop#return instead."
69
- $stderr.flush
70
- self.return
71
- end
72
-
73
- protected
74
-
75
- def initialize
76
- @_stack = []
77
- end
78
-
79
- def travel(mock_type, *args, &block)
80
- # parse the arguments, build our base time units
81
- year, month, day, hour, minute, second = parse_travel_args(*args)
64
+ old_time = Time.mock_time
65
+ old_date = Date.mock_date if Object.const_defined?(:Date)
66
+ old_datetime = DateTime.mock_time if Object.const_defined?(:DateTime)
82
67
 
83
- # perform our action
84
- if mock_type == :freeze
85
- freeze_all(year, month, day, hour, minute, second)
86
- else
87
- move_all(year, month, day, hour, minute, second)
88
- end
89
- # store this time traveling on our stack...
90
- @_stack << StackItem.new(mock_type, year, month, day, hour, minute, second)
68
+ set_all(year, month, day, hour, minute, second)
91
69
 
92
- if block_given?
93
- begin
94
- yield
95
- ensure
96
- # pull it off the stack...
97
- stack_item = @_stack.pop
98
- if @_stack.size == 0
99
- # completely unmock if there's nothing to revert back to
100
- unmock!
101
- else
102
- # or reinstantiate the new the top of the stack (could be a :freeze or a :move)
103
- new_top = @_stack.last
104
- if new_top.mock_type == :freeze
105
- freeze_all(new_top.year, new_top.month, new_top.day, new_top.hour, new_top.minute, new_top.second)
106
- else
107
- move_all(new_top.year, new_top.month, new_top.day, new_top.hour, new_top.minute, new_top.second)
108
- end
109
- end
110
- end
70
+ if block_given?
71
+ begin
72
+ yield
73
+ ensure
74
+ Time.mock_time = old_time
75
+ Date.mock_date = old_date if Object.const_defined?(:Date)
76
+ DateTime.mock_time = old_datetime if Object.const_defined?(:DateTime)
111
77
  end
112
78
  end
113
-
114
- def unmock!
115
- Time.unmock!
116
- end
79
+ end
117
80
 
118
81
  private
119
-
120
- # Re-bases Time.now, Date.today and DateTime.now (if it exists) to use the time passed in.
121
- # When using this method directly, it is up to the developer to call unset_all to return us
122
- # to sanity.
123
- #
124
- # * If being consumed in a rails app, Time.zone.local will be used to instantiate the time.
125
- # Otherwise, Time.local will be used.
126
- def freeze_all(year, month, day, hour=0, minute=0, second=0)
127
- if Time.respond_to?(:zone) && !Time.zone.nil?
128
- # ActiveSupport loaded
129
- time = Time.zone.local(year, month, day, hour, minute, second)
130
- else
131
- # ActiveSupport not loaded
132
- time = Time.local(year, month, day, hour, minute, second)
133
- end
134
-
135
- Time.freeze_time(time)
136
- end
137
-
138
- # Re-bases Time.now, Date.today and DateTime.now to use the time passed in and to continue moving time
139
- # forward. When using this method directly, it is up to the developer to call return to return us to
140
- # sanity.
141
- #
142
- # * If being consumed in a rails app, Time.zone.local will be used to instantiate the time.
143
- # Otherwise, Time.local will be used.
144
- def move_all(year, month, day, hour=0, minute=0, second=0)
145
- if Time.respond_to?(:zone) && !Time.zone.nil?
146
- # ActiveSupport loaded
147
- time = Time.zone.local(year, month, day, hour, minute, second)
148
- else
149
- # ActiveSupport not loaded
150
- time = Time.local(year, month, day, hour, minute, second)
151
- end
152
-
153
- Time.move_time(time)
154
- end
155
-
156
- def parse_travel_args(*args)
82
+ def self.parse_travel_args(*args)
157
83
  arg = args.shift
158
84
  if arg.is_a?(Time) || (Object.const_defined?(:DateTime) && arg.is_a?(DateTime))
159
85
  year, month, day, hour, minute, second = arg.year, arg.month, arg.day, arg.hour, arg.min, arg.sec
160
86
  elsif Object.const_defined?(:Date) && arg.is_a?(Date)
161
87
  year, month, day, hour, minute, second = arg.year, arg.month, arg.day, 0, 0, 0
162
- #puts "#{year}-#{month}-#{day} #{hour}:#{minute}:#{second}"
163
- elsif args.empty? && arg.kind_of?(Integer)
164
- t = Time.now + arg
165
- year, month, day, hour, minute, second = t.year, t.month, t.day, t.hour, t.min, t.sec
88
+ puts "#{year}-#{month}-#{day} #{hour}:#{minute}:#{second}"
166
89
  else # we'll just assume it's a list of y/m/h/d/m/s
167
90
  year = arg || 0
168
91
  month = args.shift || 1
@@ -11,7 +11,7 @@ module Timecop
11
11
  end
12
12
 
13
13
  MAJOR = 0
14
- MINOR = 2
14
+ MINOR = 1
15
15
  TINY = 0
16
16
 
17
17
  STRING = [MAJOR, MINOR, TINY].join(".")
@@ -11,37 +11,37 @@ class TestTimecop < Test::Unit::TestCase
11
11
 
12
12
  # just in case...let's really make sure that Timecop is disabled between tests...
13
13
  def teardown
14
- Timecop.return
14
+ Timecop.unset_all
15
15
  end
16
16
 
17
- def test_freeze_changes_and_resets_time
17
+ def test_travel_changes_and_resets_time
18
18
  # depending on how we're invoked (individually or via the rake test suite)
19
19
  assert !Time.respond_to?(:zone) || Time.zone.nil?
20
20
 
21
21
  t = Time.local(2008, 10, 10, 10, 10, 10)
22
22
  assert_not_equal t, Time.now
23
- Timecop.freeze(2008, 10, 10, 10, 10, 10) do
23
+ Timecop.travel(2008, 10, 10, 10, 10, 10) do
24
24
  assert_equal t, Time.now
25
25
  end
26
26
  assert_not_equal t, Time.now
27
27
  end
28
28
 
29
- def test_recursive_freeze
29
+ def test_recursive_travel
30
30
  t = Time.local(2008, 10, 10, 10, 10, 10)
31
- Timecop.freeze(2008, 10, 10, 10, 10, 10) do
31
+ Timecop.travel(2008, 10, 10, 10, 10, 10) do
32
32
  assert_equal t, Time.now
33
33
  t2 = Time.local(2008, 9, 9, 9, 9, 9)
34
- Timecop.freeze(2008, 9, 9, 9, 9, 9) do
34
+ Timecop.travel(2008, 9, 9, 9, 9, 9) do
35
35
  assert_equal t2, Time.now
36
36
  end
37
37
  assert_equal t, Time.now
38
38
  end
39
- assert_not_equal t, Time.now
39
+ assert_nil Time.send(:mock_time)
40
40
  end
41
41
 
42
- def test_freeze_with_time_instance_works_as_expected
42
+ def test_travel_with_time_instance_works_as_expected
43
43
  t = Time.local(2008, 10, 10, 10, 10, 10)
44
- Timecop.freeze(t) do
44
+ Timecop.travel(t) do
45
45
  assert_equal t, Time.now
46
46
  assert_equal DateTime.new(2008, 10, 10, 10, 10, 10), DateTime.now
47
47
  assert_equal Date.new(2008, 10, 10), Date.today
@@ -51,9 +51,9 @@ class TestTimecop < Test::Unit::TestCase
51
51
  assert_not_equal Date.new(2008, 10, 10), Date.today
52
52
  end
53
53
 
54
- def test_freeze_with_datetime_instance_works_as_expected
54
+ def test_travel_with_datetime_instance_works_as_expected
55
55
  t = DateTime.new(2008, 10, 10, 10, 10, 10)
56
- Timecop.freeze(t) do
56
+ Timecop.travel(t) do
57
57
  assert_equal t, DateTime.now
58
58
  assert_equal Time.local(2008, 10, 10, 10, 10, 10), Time.now
59
59
  assert_equal Date.new(2008, 10, 10), Date.today
@@ -63,9 +63,9 @@ class TestTimecop < Test::Unit::TestCase
63
63
  assert_not_equal Date.new(2008, 10, 10), Date.today
64
64
  end
65
65
 
66
- def test_freeze_with_date_instance_works_as_expected
66
+ def test_travel_with_date_instance_works_as_expected
67
67
  d = Date.new(2008, 10, 10)
68
- Timecop.freeze(d) do
68
+ Timecop.travel(d) do
69
69
  assert_equal d, Date.today
70
70
  assert_equal Time.local(2008, 10, 10, 0, 0, 0), Time.now
71
71
  assert_equal DateTime.new(2008, 10, 10, 0, 0, 0), DateTime.now
@@ -75,27 +75,10 @@ class TestTimecop < Test::Unit::TestCase
75
75
  assert_not_equal DateTime.new(2008, 10, 10, 0, 0, 0), DateTime.now
76
76
  end
77
77
 
78
- def test_freeze_with_integer_instance_works_as_expected
79
- t = Time.local(2008, 10, 10, 10, 10, 10)
80
- Timecop.freeze(t) do
81
- assert_equal t, Time.now
82
- assert_equal DateTime.new(2008, 10, 10, 10, 10, 10), DateTime.now
83
- assert_equal Date.new(2008, 10, 10), Date.today
84
- Timecop.freeze(10) do
85
- assert_equal t + 10, Time.now
86
- assert_equal Time.local(2008, 10, 10, 10, 10, 20), Time.now
87
- assert_equal Date.new(2008, 10, 10), Date.today
88
- end
89
- end
90
- assert_not_equal t, Time.now
91
- assert_not_equal DateTime.new(2008, 10, 10, 10, 10, 10), DateTime.now
92
- assert_not_equal Date.new(2008, 10, 10), Date.today
93
- end
94
-
95
- def test_exception_thrown_in_freeze_block_properly_resets_time
78
+ def test_exception_thrown_in_travel_block_properly_resets_time
96
79
  t = Time.local(2008, 10, 10, 10, 10, 10)
97
80
  begin
98
- Timecop.freeze(t) do
81
+ Timecop.travel(t) do
99
82
  assert_equal t, Time.now
100
83
  raise "blah exception"
101
84
  end
@@ -105,71 +88,51 @@ class TestTimecop < Test::Unit::TestCase
105
88
  end
106
89
  end
107
90
 
108
- def test_freeze_freezes_time
109
- t = Time.local(2008, 10, 10, 10, 10, 10)
110
- now = Time.now
111
- Timecop.freeze(t) do
112
- #assert Time.now < now, "If we had failed to freeze, time would have proceeded, which is what appears to have happened."
113
- new_t, new_d, new_dt = Time.now, Date.today, DateTime.now
114
- assert_equal t, new_t, "Failed to freeze time." # 2 seconds
115
- #sleep(10)
116
- assert_equal new_t, Time.now
117
- assert_equal new_d, Date.today
118
- assert_equal new_dt, DateTime.now
119
- end
120
- end
121
91
 
122
- def test_travel_keeps_time_moving
123
- t = Time.local(2008, 10, 10, 10, 10, 10)
124
- now = Time.now
125
- Timecop.travel(t) do
126
- #assert Time.now < now, "If we had failed to freeze, time would have proceeded, which is what appears to have happened."
127
- assert Time.now - t < 2000, "Looks like we failed to actually travel time" # 2 seconds
128
- new_t = Time.now
129
- #sleep(10)
130
- assert_not_equal new_t, Time.now
131
- end
92
+ def test_parse_travel_args_with_time
93
+ t = Time.now
94
+ y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
95
+ ty, tm, td, th, tmin, ts = Timecop.send(:parse_travel_args, t)
96
+ assert_equal y, ty
97
+ assert_equal m, tm
98
+ assert_equal d, td
99
+ assert_equal h, th
100
+ assert_equal min, tmin
101
+ assert_equal s, ts
132
102
  end
133
103
 
134
- def test_recursive_rebasing_maintains_each_context
135
- t = Time.local(2008, 10, 10, 10, 10, 10)
136
- Timecop.travel(2008, 10, 10, 10, 10, 10) do
137
- assert((t - Time.now).abs < 50, "Failed to travel time.")
138
- t2 = Time.local(2008, 9, 9, 9, 9, 9)
139
- Timecop.travel(2008, 9, 9, 9, 9, 9) do
140
- assert((t2 - Time.now) < 50, "Failed to travel time.")
141
- assert((t - Time.now) > 1000, "Failed to travel time.")
142
- end
143
- assert((t - Time.now).abs < 2000, "Failed to restore previously-traveled time.")
144
- end
145
- assert_nil Time.send(:mock_time)
104
+ def test_parse_travel_args_with_datetime
105
+ t = DateTime.now
106
+ y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
107
+ ty, tm, td, th, tmin, ts = Timecop.send(:parse_travel_args, t)
108
+ assert_equal y, ty
109
+ assert_equal m, tm
110
+ assert_equal d, td
111
+ assert_equal h, th
112
+ assert_equal min, tmin
113
+ assert_equal s, ts
146
114
  end
147
115
 
148
- def test_recursive_travel_then_freeze
149
- t = Time.local(2008, 10, 10, 10, 10, 10)
150
- Timecop.travel(2008, 10, 10, 10, 10, 10) do
151
- assert((t - Time.now).abs < 50, "Failed to travel time.")
152
- t2 = Time.local(2008, 9, 9, 9, 9, 9)
153
- Timecop.freeze(2008, 9, 9, 9, 9, 9) do
154
- assert_equal t2, Time.now
155
- end
156
- assert((t - Time.now).abs < 2000, "Failed to restore previously-traveled time.")
157
- end
158
- assert_nil Time.send(:mock_time)
116
+ def test_parse_travel_args_with_date
117
+ date = Date.today
118
+ y, m, d, h, min, s = date.year, date.month, date.day, 0, 0, 0
119
+ ty, tm, td, th, tmin, ts = Timecop.send(:parse_travel_args, date)
120
+ assert_equal y, ty
121
+ assert_equal m, tm
122
+ assert_equal d, td
123
+ assert_equal h, th
124
+ assert_equal min, tmin
125
+ assert_equal s, ts
159
126
  end
160
127
 
161
- def test_recursive_freeze_then_travel
162
- t = Time.local(2008, 10, 10, 10, 10, 10)
163
- Timecop.freeze(t) do
164
- assert_equal t, Time.now
165
- t2 = Time.local(2008, 9, 9, 9, 9, 9)
166
- Timecop.travel(t2) do
167
- assert((t2 - Time.now) < 50, "Failed to travel time.")
168
- assert((t - Time.now) > 1000, "Failed to travel time.")
169
- end
170
- assert_equal t, Time.now
171
- end
172
- assert_nil Time.send(:mock_time)
128
+ def test_parse_travel_args_with_individual_arguments
129
+ y, m, d, h, min, s = 2008, 10, 10, 10, 10, 10
130
+ ty, tm, td, th, tmin, ts = Timecop.send(:parse_travel_args, y, m, d, h, min, s)
131
+ assert_equal y, ty
132
+ assert_equal m, tm
133
+ assert_equal d, td
134
+ assert_equal h, th
135
+ assert_equal min, tmin
136
+ assert_equal s, ts
173
137
  end
174
-
175
138
  end
@@ -0,0 +1,22 @@
1
+
2
+ require 'test/unit'
3
+
4
+ require 'rubygems'
5
+ gem "activesupport", ">= 2.1.0"
6
+ require 'activesupport'
7
+
8
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'timecop')
9
+
10
+ class TestTimecopWithRails < Test::Unit::TestCase
11
+
12
+ def test_travel_changes_and_resets_time
13
+ Time.zone = 'Eastern Time (US & Canada)'
14
+ t = Time.zone.local(2008, 10, 10, 10, 10, 10)
15
+ assert_not_equal t, Time.now
16
+ Timecop.travel(2008, 10, 10, 10, 10, 10) do
17
+ assert_equal t, Time.now
18
+ end
19
+ assert_not_equal t, Time.now
20
+ end
21
+
22
+ end
@@ -2,119 +2,20 @@
2
2
  require 'test/unit'
3
3
  require File.join(File.dirname(__FILE__), '..', 'lib', 'timecop')
4
4
 
5
- class TestTimecopWithouDate < Test::Unit::TestCase
5
+ class TestTimecopWithoutDate < Test::Unit::TestCase
6
6
 
7
- def setup
8
- assert !Object.const_defined?(:Date)
9
- assert !Object.const_defined?(:DateTime)
10
- end
11
-
12
- # just in case...let's really make sure that Timecop is disabled between tests...
13
- def teardown
14
- Timecop.return
15
- end
16
-
17
- def test_freeze_changes_and_resets_time
7
+ def test_travel_changes_and_resets_time
18
8
  # depending on how we're invoked (individually or via the rake test suite)
19
- assert !Time.respond_to?(:zone) || Time.zone.nil?
9
+ assert Object.const_defined?(:Time)
10
+ #assert !Object.const_defined?(:Date)
11
+ assert !Object.const_defined?(:DateTime)
20
12
 
21
13
  t = Time.local(2008, 10, 10, 10, 10, 10)
22
14
  assert_not_equal t, Time.now
23
- Timecop.freeze(2008, 10, 10, 10, 10, 10) do
15
+ Timecop.travel(2008, 10, 10, 10, 10, 10) do
24
16
  assert_equal t, Time.now
25
17
  end
26
18
  assert_not_equal t, Time.now
27
19
  end
28
20
 
29
- def test_recursive_freeze
30
- t = Time.local(2008, 10, 10, 10, 10, 10)
31
- Timecop.freeze(2008, 10, 10, 10, 10, 10) do
32
- assert_equal t, Time.now
33
- t2 = Time.local(2008, 9, 9, 9, 9, 9)
34
- Timecop.freeze(2008, 9, 9, 9, 9, 9) do
35
- assert_equal t2, Time.now
36
- end
37
- assert_equal t, Time.now
38
- end
39
- assert_nil Time.send(:mock_time)
40
- end
41
-
42
- def test_exception_thrown_in_freeze_block_properly_resets_time
43
- t = Time.local(2008, 10, 10, 10, 10, 10)
44
- begin
45
- Timecop.freeze(t) do
46
- assert_equal t, Time.now
47
- raise "blah exception"
48
- end
49
- rescue
50
- assert_not_equal t, Time.now
51
- assert_nil Time.send(:mock_time)
52
- end
53
- end
54
-
55
- def test_freeze_freezes_time
56
- t = Time.local(2008, 10, 10, 10, 10, 10)
57
- now = Time.now
58
- Timecop.freeze(t) do
59
- #assert Time.now < now, "If we had failed to freeze, time would have proceeded, which is what appears to have happened."
60
- new_t = Time.now
61
- assert_equal t, new_t, "Failed to change move time." # 2 seconds
62
- #sleep(10)
63
- assert_equal new_t, Time.now
64
- end
65
- end
66
-
67
- def test_travel_keeps_time_moving
68
- t = Time.local(2008, 10, 10, 10, 10, 10)
69
- now = Time.now
70
- Timecop.travel(t) do
71
- #assert Time.now < now, "If we had failed to freeze, time would have proceeded, which is what appears to have happened."
72
- assert Time.now - t < 2000, "Looks like we failed to actually travel time" # 2 seconds
73
- new_t = Time.now
74
- #sleep(10)
75
- assert_not_equal new_t, Time.now
76
- end
77
- end
78
-
79
- def test_recursive_rebasing_maintains_each_context
80
- t = Time.local(2008, 10, 10, 10, 10, 10)
81
- Timecop.travel(2008, 10, 10, 10, 10, 10) do
82
- assert((t - Time.now).abs < 50, "Failed to travel time.")
83
- t2 = Time.local(2008, 9, 9, 9, 9, 9)
84
- Timecop.travel(2008, 9, 9, 9, 9, 9) do
85
- assert((t2 - Time.now) < 50, "Failed to travel time.")
86
- assert((t - Time.now) > 1000, "Failed to travel time.")
87
- end
88
- assert((t - Time.now).abs < 2000, "Failed to restore previously-traveled time.")
89
- end
90
- assert_nil Time.send(:mock_time)
91
- end
92
-
93
- def test_recursive_travel_then_freeze
94
- t = Time.local(2008, 10, 10, 10, 10, 10)
95
- Timecop.travel(2008, 10, 10, 10, 10, 10) do
96
- assert((t - Time.now).abs < 50, "Failed to travel time.")
97
- t2 = Time.local(2008, 9, 9, 9, 9, 9)
98
- Timecop.freeze(2008, 9, 9, 9, 9, 9) do
99
- assert_equal t2, Time.now
100
- end
101
- assert((t - Time.now).abs < 2000, "Failed to restore previously-traveled time.")
102
- end
103
- assert_nil Time.send(:mock_time)
104
- end
105
-
106
- def test_recursive_freeze_then_travel
107
- t = Time.local(2008, 10, 10, 10, 10, 10)
108
- Timecop.freeze(t) do
109
- assert_equal t, Time.now
110
- t2 = Time.local(2008, 9, 9, 9, 9, 9)
111
- Timecop.travel(t2) do
112
- assert((t2 - Time.now) < 50, "Failed to travel time.")
113
- assert((t - Time.now) > 1000, "Failed to travel time.")
114
- end
115
- assert_equal t, Time.now
116
- end
117
- assert_nil Time.send(:mock_time)
118
- end
119
-
120
21
  end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{timecop}
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["John Trupiano"]
9
+ s.date = %q{2008-11-09}
10
+ s.description = %q{A gem providing simple ways to temporarily override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to write test time-dependent code.}
11
+ s.email = %q{jtrupiano@gmail.com}
12
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
13
+ s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "lib/timecop.rb", "lib/timecop/time_extensions.rb", "lib/timecop/timecop.rb", "lib/timecop/version.rb", "test/test_timecop.rb", "timecop.gemspec", "test/test_timecop_with_rails.rb", "test/test_timecop_without_date.rb"]
14
+ s.has_rdoc = true
15
+ s.homepage = %q{http://github.com/jtrupiano/timecop}
16
+ s.rdoc_options = ["--main", "README.txt"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{johntrupiano}
19
+ s.rubygems_version = %q{1.3.1}
20
+ s.summary = %q{A gem providing simple ways to temporarily override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to write test time-dependent code.}
21
+ s.test_files = ["test/test_timecop.rb", "test/test_timecop_with_rails.rb", "test/test_timecop_without_date.rb"]
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 2
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ s.add_development_dependency(%q<hoe>, [">= 1.8.2"])
29
+ else
30
+ s.add_dependency(%q<hoe>, [">= 1.8.2"])
31
+ end
32
+ else
33
+ s.add_dependency(%q<hoe>, [">= 1.8.2"])
34
+ end
35
+ end
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.0.99
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Trupiano
@@ -9,42 +9,46 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-07 00:00:00 -05:00
12
+ date: 2008-11-09 00:00:00 -05:00
13
13
  default_executable:
14
- dependencies: []
15
-
16
- description: A gem providing simple ways to temporarily override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to test time-dependent code.
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.8.2
24
+ version:
25
+ description: A gem providing simple ways to temporarily override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to write test time-dependent code.
17
26
  email: jtrupiano@gmail.com
18
27
  executables: []
19
28
 
20
29
  extensions: []
21
30
 
22
31
  extra_rdoc_files:
23
- - README.textile
24
- - LICENSE
32
+ - History.txt
33
+ - Manifest.txt
34
+ - README.txt
25
35
  files:
26
36
  - History.txt
27
- - LICENSE
28
37
  - Manifest.txt
38
+ - README.txt
29
39
  - Rakefile
30
- - README.textile
31
- - VERSION.yml
32
- - lib/timecop
33
- - lib/timecop/stack_item.rb
40
+ - lib/timecop.rb
34
41
  - lib/timecop/time_extensions.rb
35
42
  - lib/timecop/timecop.rb
36
43
  - lib/timecop/version.rb
37
- - lib/timecop.rb
38
- - test/run_tests.sh
39
44
  - test/test_timecop.rb
40
- - test/test_timecop_internals.rb
41
- - test/test_timecop_without_date.rb
45
+ - timecop.gemspec
42
46
  has_rdoc: true
43
47
  homepage: http://github.com/jtrupiano/timecop
44
48
  post_install_message:
45
49
  rdoc_options:
46
- - --inline-source
47
- - --charset=UTF-8
50
+ - --main
51
+ - README.txt
48
52
  require_paths:
49
53
  - lib
50
54
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -65,6 +69,8 @@ rubyforge_project: johntrupiano
65
69
  rubygems_version: 1.3.1
66
70
  signing_key:
67
71
  specification_version: 2
68
- summary: A gem providing simple ways to temporarily override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to test time-dependent code.
69
- test_files: []
70
-
72
+ summary: A gem providing simple ways to temporarily override Time.now, Date.today, and DateTime.now. It provides "time travel" capabilities, making it dead simple to write test time-dependent code.
73
+ test_files:
74
+ - test/test_timecop.rb
75
+ - test/test_timecop_with_rails.rb
76
+ - test/test_timecop_without_date.rb
data/LICENSE DELETED
@@ -1,22 +0,0 @@
1
- (The MIT License)
2
-
3
- Copyright (c) 2008
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- 'Software'), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,68 +0,0 @@
1
- h1. timecop
2
-
3
- * http://github.com/jtrupiano/timecop
4
-
5
- h2. DESCRIPTION
6
-
7
- A gem providing simple ways to mock Time.now, Date.today, and DateTime.now. It provides "time travel" and "time freezing" capabilities, making it dead simple to test time-dependent code.
8
-
9
- h2. FEATURES
10
-
11
- * Temporarily (or permanently if you prefer) change the concept of Time.now, DateTime.now, and Date.today
12
- * Timecop api allows arguments to be passed into #freeze and #travel as one of the following:
13
- # Time instance
14
- # DateTime instance
15
- # Date instance
16
- # individual arguments (year, month, day, hour, minute, second)
17
- # a single integer argument that is interpreted as an offset in seconds from Time.now
18
-
19
- * Nested calls to Timecop#travel and Timecop#freeze are supported -- each block will maintain it's interpretation of now.
20
-
21
- h2. SHORTCOMINGS
22
-
23
- * Only fully tested on the 1.8.6 Ruby implementations. 1.8.7 and 1.9.1 should be tested, as well as other flavors (jruby, etc.)
24
-
25
- h2. SYNOPSIS
26
-
27
- Run a time-sensitive test
28
-
29
- <pre>
30
- <code>
31
- joe = User.find(1)
32
- joe.purchase_home()
33
- assert !joe.mortgage_due?
34
- # move ahead a month and assert that the mortgage is due
35
- Timecop.freeze(Date.today + 30) do
36
- assert joe.mortgage_due?
37
- end
38
- </code>
39
- </pre>
40
-
41
- Set the time for the test environment of a rails app -- this is particularly helpful if your whole application is time-sensitive. It allows you to build your test data at a single point in time, and to move in/out of that time as appropriate (within your tests)
42
-
43
- in config/environments/test.rb
44
-
45
- <pre>
46
- <code>
47
- config.after_initialize do
48
- # Set Time.now to September 1, 2008 10:05:00 AM
49
- t = Time.local(2008, 9, 1, 10, 5, 0)
50
- Timecop.travel(t)
51
- end
52
- </code>
53
- </pre>
54
-
55
- h2. REQUIREMENTS
56
-
57
- * None
58
-
59
- h2. INSTALL
60
-
61
- * sudo gem install timecop (latest stable version from rubyforge)
62
- * sudo gem install jtrupiano-timecop (HEAD of the repo from github)
63
-
64
- h2. REFERENCES
65
-
66
- * "0.1.0 release":http://blog.smartlogicsolutions.com/2008/11/19/timecop-freeze-time-in-ruby-for-better-testing/
67
- * "0.2.0 release":http://blog.smartlogicsolutions.com/2008/12/24/timecop-2-released-freeze-and-rebase-time-ruby/
68
-
@@ -1,4 +0,0 @@
1
- ---
2
- :major: 0
3
- :minor: 0
4
- :patch: 99
@@ -1,11 +0,0 @@
1
-
2
- # Simply a data class for carrying around "time movement" objects. Makes it easy to keep track of the time
3
- # movements on a simple stack.
4
- class StackItem
5
-
6
- attr_reader :mock_type, :year, :month, :day, :hour, :minute, :second
7
- def initialize(mock_type, year, month, day, hour, minute, second)
8
- @mock_type, @year, @month, @day, @hour, @minute, @second = mock_type, year, month, day, hour, minute, second
9
- end
10
- end
11
-
@@ -1,10 +0,0 @@
1
- #!/bin/sh
2
-
3
- echo "\033[1;81m Running test_timecop_internals...\033[0m"
4
- ruby test_timecop_internals.rb || (echo "FAILED!!!!!!!!!!!!")
5
-
6
- echo "\033[1;81m Running test_timecop_without_date...\033[0m"
7
- ruby test_timecop_without_date.rb || (echo "FAILED!!!!!!!!!!!!")
8
-
9
- echo "\033[1;81m Running test_timecop...\033[0m"
10
- ruby test_timecop.rb || (echo "FAILED!!!!!!!!!!!!")
@@ -1,69 +0,0 @@
1
-
2
- require 'date'
3
- require 'test/unit'
4
- require File.join(File.dirname(__FILE__), '..', 'lib', 'timecop')
5
-
6
- class TestTimecopInternals < Test::Unit::TestCase
7
-
8
- def test_parse_travel_args_with_time
9
- t = Time.now
10
- y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
11
- ty, tm, td, th, tmin, ts = Timecop.instance().send(:parse_travel_args, t)
12
- assert_equal y, ty
13
- assert_equal m, tm
14
- assert_equal d, td
15
- assert_equal h, th
16
- assert_equal min, tmin
17
- assert_equal s, ts
18
- end
19
-
20
- def test_parse_travel_args_with_datetime
21
- t = DateTime.now
22
- y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
23
- ty, tm, td, th, tmin, ts = Timecop.instance().send(:parse_travel_args, t)
24
- assert_equal y, ty
25
- assert_equal m, tm
26
- assert_equal d, td
27
- assert_equal h, th
28
- assert_equal min, tmin
29
- assert_equal s, ts
30
- end
31
-
32
- def test_parse_travel_args_with_date
33
- date = Date.today
34
- y, m, d, h, min, s = date.year, date.month, date.day, 0, 0, 0
35
- ty, tm, td, th, tmin, ts = Timecop.instance().send(:parse_travel_args, date)
36
- assert_equal y, ty
37
- assert_equal m, tm
38
- assert_equal d, td
39
- assert_equal h, th
40
- assert_equal min, tmin
41
- assert_equal s, ts
42
- end
43
-
44
- # Due to the nature of this test (calling Time.now once in this test and
45
- # once in #parse_travel_args), this test may fail when two subsequent calls
46
- # to Time.now return a different second.
47
- def test_parse_travel_args_with_integer
48
- t = Time.now
49
- y, m, d, h, min, s = t.year, t.month, t.day, t.hour, t.min, t.sec
50
- ty, tm, td, th, tmin, ts = Timecop.instance().send(:parse_travel_args, 0)
51
- assert_equal y, ty
52
- assert_equal m, tm
53
- assert_equal d, td
54
- assert_equal h, th
55
- assert_equal min, tmin
56
- assert_equal s, ts
57
- end
58
-
59
- def test_parse_travel_args_with_individual_arguments
60
- y, m, d, h, min, s = 2008, 10, 10, 10, 10, 10
61
- ty, tm, td, th, tmin, ts = Timecop.instance().send(:parse_travel_args, y, m, d, h, min, s)
62
- assert_equal y, ty
63
- assert_equal m, tm
64
- assert_equal d, td
65
- assert_equal h, th
66
- assert_equal min, tmin
67
- assert_equal s, ts
68
- end
69
- end