提交 cce7ae54 编写于 作者: G gbuesing

Add thorough tests for Time-object #past?, #future? and #today. Fix...

Add thorough tests for Time-object #past?, #future? and #today. Fix TimeWithZone #today? to use #time instead of #utc for date comparison. Update changelog. [#720 state:resolved]
上级 bfa12d7a
*Edge*
* Added Time, Date, DateTime and TimeWithZone #past?, #future? and #today? #720 [Clemens Kofler, Geoff Buesing]
* Fixed Sri Jayawardenepura time zone to map to Asia/Colombo [Jamis Buck]
* Added Inflector#parameterize for easy slug generation ("Donald E. Knuth".parameterize => "donald-e-knuth") #713 [Matt Darby]
......
......@@ -172,7 +172,7 @@ def past?
end
def today?
utc.today?
time.today?
end
def future?
......
......@@ -211,17 +211,25 @@ def test_xmlschema
end
uses_mocha 'past?, today? and future?' do
def test_today_past_future
Date.stubs(:current).returns(Date.civil(2000, 1, 1))
t2 = Date.civil(2000, 1, 1)
t1, t3 = t2.yesterday, t2.tomorrow
t4, t5 = t2 - 1.second, t2 + 1.second
assert t1.past?
assert t2.today?
assert t3.future?
assert t4.past?
assert t5.today?
def test_today
Date.stubs(:current).returns(Date.new(2000, 1, 1))
assert_equal false, Date.new(1999, 12, 31).today?
assert_equal true, Date.new(2000,1,1).today?
assert_equal false, Date.new(2000,1,2).today?
end
def test_past
Date.stubs(:current).returns(Date.new(2000, 1, 1))
assert_equal true, Date.new(1999, 12, 31).past?
assert_equal false, Date.new(2000,1,1).past?
assert_equal false, Date.new(2000,1,2).past?
end
def test_future
Date.stubs(:current).returns(Date.new(2000, 1, 1))
assert_equal false, Date.new(1999, 12, 31).future?
assert_equal false, Date.new(2000,1,1).future?
assert_equal true, Date.new(2000,1,2).future?
end
end
......
......@@ -207,16 +207,68 @@ def test_xmlschema
assert_match(/^2080-02-28T15:15:10-06:?00$/, DateTime.civil(2080, 2, 28, 15, 15, 10, -0.25).xmlschema)
end
uses_mocha 'past?, today? and future?' do
def test_past_today_future
Date.stubs(:current).returns(Date.civil(2000, 1, 1))
DateTime.stubs(:current).returns(DateTime.civil(2000, 1, 1, 1, 0, 1))
t1, t2 = DateTime.civil(2000, 1, 1, 1, 0, 0), DateTime.civil(2000, 1, 1, 1, 0, 2)
assert t1.past?
assert t2.future?
assert t1.today?
assert t2.today?
uses_mocha 'Test DateTime past?, today? and future?' do
def test_today_with_offset
Date.stubs(:current).returns(Date.new(2000, 1, 1))
assert_equal false, DateTime.civil(1999,12,31,23,59,59, Rational(-18000, 86400)).today?
assert_equal true, DateTime.civil(2000,1,1,0,0,0, Rational(-18000, 86400)).today?
assert_equal true, DateTime.civil(2000,1,1,23,59,59, Rational(-18000, 86400)).today?
assert_equal false, DateTime.civil(2000,1,2,0,0,0, Rational(-18000, 86400)).today?
end
def test_today_without_offset
Date.stubs(:current).returns(Date.new(2000, 1, 1))
assert_equal false, DateTime.civil(1999,12,31,23,59,59).today?
assert_equal true, DateTime.civil(2000,1,1,0).today?
assert_equal true, DateTime.civil(2000,1,1,23,59,59).today?
assert_equal false, DateTime.civil(2000,1,2,0).today?
end
def test_past_with_offset
DateTime.stubs(:current).returns(DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)))
assert_equal true, DateTime.civil(2005,2,10,15,30,44, Rational(-18000, 86400)).past?
assert_equal false, DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)).past?
assert_equal false, DateTime.civil(2005,2,10,15,30,46, Rational(-18000, 86400)).past?
end
def test_past_without_offset
DateTime.stubs(:current).returns(DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)))
assert_equal true, DateTime.civil(2005,2,10,20,30,44).past?
assert_equal false, DateTime.civil(2005,2,10,20,30,45).past?
assert_equal false, DateTime.civil(2005,2,10,20,30,46).past?
end
def test_future_with_offset
DateTime.stubs(:current).returns(DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)))
assert_equal false, DateTime.civil(2005,2,10,15,30,44, Rational(-18000, 86400)).future?
assert_equal false, DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)).future?
assert_equal true, DateTime.civil(2005,2,10,15,30,46, Rational(-18000, 86400)).future?
end
def test_future_without_offset
DateTime.stubs(:current).returns(DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)))
assert_equal false, DateTime.civil(2005,2,10,20,30,44).future?
assert_equal false, DateTime.civil(2005,2,10,20,30,45).future?
assert_equal true, DateTime.civil(2005,2,10,20,30,46).future?
end
end
uses_mocha 'TestDateTimeCurrent' do
def test_current_returns_date_today_when_zone_default_not_set
with_env_tz 'US/Eastern' do
Time.stubs(:now).returns Time.local(1999, 12, 31, 23, 59, 59)
assert_equal DateTime.new(1999, 12, 31, 23, 59, 59, Rational(-18000, 86400)), DateTime.current
end
end
def test_current_returns_time_zone_today_when_zone_default_set
Time.zone_default = ActiveSupport::TimeZone['Eastern Time (US & Canada)']
with_env_tz 'US/Eastern' do
Time.stubs(:now).returns Time.local(1999, 12, 31, 23, 59, 59)
assert_equal DateTime.new(1999, 12, 31, 23, 59, 59, Rational(-18000, 86400)), DateTime.current
end
ensure
Time.zone_default = nil
end
end
......
......@@ -563,16 +563,71 @@ def test_xmlschema_is_available
assert_nothing_raised { Time.now.xmlschema }
end
uses_mocha 'past?, today? and future?' do
def test_past_today_future
Date.stubs(:current).returns(Date.civil(2000, 1, 1))
Time.stubs(:current).returns(Time.local(2000, 1, 1, 1, 0, 1))
t1, t2 = Time.local(2000, 1, 1, 1, 0, 0), Time.local(2000, 1, 1, 1, 0, 2)
assert t1.past?
assert t2.future?
assert t1.today?
assert t2.today?
uses_mocha 'Test Time past?, today? and future?' do
def test_today_with_time_local
Date.stubs(:current).returns(Date.new(2000, 1, 1))
assert_equal false, Time.local(1999,12,31,23,59,59).today?
assert_equal true, Time.local(2000,1,1,0).today?
assert_equal true, Time.local(2000,1,1,23,59,59).today?
assert_equal false, Time.local(2000,1,2,0).today?
end
def test_today_with_time_utc
Date.stubs(:current).returns(Date.new(2000, 1, 1))
assert_equal false, Time.utc(1999,12,31,23,59,59).today?
assert_equal true, Time.utc(2000,1,1,0).today?
assert_equal true, Time.utc(2000,1,1,23,59,59).today?
assert_equal false, Time.utc(2000,1,2,0).today?
end
def test_past_with_time_current_as_time_local
with_env_tz 'US/Eastern' do
Time.stubs(:current).returns(Time.local(2005,2,10,15,30,45))
assert_equal true, Time.local(2005,2,10,15,30,44).past?
assert_equal false, Time.local(2005,2,10,15,30,45).past?
assert_equal false, Time.local(2005,2,10,15,30,46).past?
assert_equal true, Time.utc(2005,2,10,20,30,44).past?
assert_equal false, Time.utc(2005,2,10,20,30,45).past?
assert_equal false, Time.utc(2005,2,10,20,30,46).past?
end
end
def test_past_with_time_current_as_time_with_zone
with_env_tz 'US/Eastern' do
twz = Time.utc(2005,2,10,15,30,45).in_time_zone('Central Time (US & Canada)')
Time.stubs(:current).returns(twz)
assert_equal true, Time.local(2005,2,10,10,30,44).past?
assert_equal false, Time.local(2005,2,10,10,30,45).past?
assert_equal false, Time.local(2005,2,10,10,30,46).past?
assert_equal true, Time.utc(2005,2,10,15,30,44).past?
assert_equal false, Time.utc(2005,2,10,15,30,45).past?
assert_equal false, Time.utc(2005,2,10,15,30,46).past?
end
end
def test_future_with_time_current_as_time_local
with_env_tz 'US/Eastern' do
Time.stubs(:current).returns(Time.local(2005,2,10,15,30,45))
assert_equal false, Time.local(2005,2,10,15,30,44).future?
assert_equal false, Time.local(2005,2,10,15,30,45).future?
assert_equal true, Time.local(2005,2,10,15,30,46).future?
assert_equal false, Time.utc(2005,2,10,20,30,44).future?
assert_equal false, Time.utc(2005,2,10,20,30,45).future?
assert_equal true, Time.utc(2005,2,10,20,30,46).future?
end
end
def test_future_with_time_current_as_time_with_zone
with_env_tz 'US/Eastern' do
twz = Time.utc(2005,2,10,15,30,45).in_time_zone('Central Time (US & Canada)')
Time.stubs(:current).returns(twz)
assert_equal false, Time.local(2005,2,10,10,30,44).future?
assert_equal false, Time.local(2005,2,10,10,30,45).future?
assert_equal true, Time.local(2005,2,10,10,30,46).future?
assert_equal false, Time.utc(2005,2,10,15,30,44).future?
assert_equal false, Time.utc(2005,2,10,15,30,45).future?
assert_equal true, Time.utc(2005,2,10,15,30,46).future?
end
end
end
......
......@@ -152,16 +152,47 @@ def test_between?
assert_equal false, @twz.between?(Time.utc(2000,1,1,0,0,1), Time.utc(2000,1,1,0,0,2))
end
uses_mocha 'past?, today? and future?' do
def test_past_today_future
Time.stubs(:current).returns(@twz.utc)
Date.stubs(:current).returns(@twz.utc.to_date)
t1, t2 = @twz - 1.second, @twz + 1.second
assert t1.past?
assert t2.future?
assert !t1.today?
assert t2.today?
uses_mocha 'TimeWithZone past?, today? and future?' do
def test_today
Date.stubs(:current).returns(Date.new(2000, 1, 1))
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.utc(1999,12,31,23,59,59) ).today?
assert_equal true, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.utc(2000,1,1,0) ).today?
assert_equal true, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.utc(2000,1,1,23,59,59) ).today?
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.utc(2000,1,2,0) ).today?
end
def test_past_with_time_current_as_time_local
with_env_tz 'US/Eastern' do
Time.stubs(:current).returns(Time.local(2005,2,10,15,30,45))
assert_equal true, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,44)).past?
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,45)).past?
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,46)).past?
end
end
def test_past_with_time_current_as_time_with_zone
twz = ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,45) )
Time.stubs(:current).returns(twz)
assert_equal true, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,44)).past?
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,45)).past?
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,46)).past?
end
def test_future_with_time_current_as_time_local
with_env_tz 'US/Eastern' do
Time.stubs(:current).returns(Time.local(2005,2,10,15,30,45))
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,44)).future?
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,45)).future?
assert_equal true, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,46)).future?
end
end
def future_with_time_current_as_time_with_zone
twz = ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,45) )
Time.stubs(:current).returns(twz)
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,44)).future?
assert_equal false, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,45)).future?
assert_equal true, ActiveSupport::TimeWithZone.new( nil, @time_zone, Time.local(2005,2,10,15,30,46)).future?
end
end
......@@ -702,6 +733,14 @@ def test_advance_1_year_during_dst
assert_equal "Sun, 15 Jul 2007 10:30:00 EDT -04:00", twz.years_ago(1).inspect
assert_equal "Sun, 15 Jul 2007 10:30:00 EDT -04:00", (twz - 1.year).inspect
end
protected
def with_env_tz(new_tz = 'US/Eastern')
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
yield
ensure
old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
end
end
class TimeWithZoneMethodsForTimeAndDateTimeTest < Test::Unit::TestCase
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册