From b530fd1083c0dc71606e13c30bf0b713ad416213 Mon Sep 17 00:00:00 2001 From: Pan Thomakos Date: Tue, 10 Jul 2012 17:10:23 -0700 Subject: Refactored common date and time calculations. * Added the `DateAndTime::Calculations` module that is included in Time and Date. It houses common calculations to reduce duplicated code. * Simplified and cleaned-up the calculation code. * Removed duplication in tests by adding a behavior module for shared tests. I also added some missing tests. --- activesupport/test/core_ext/date_ext_test.rb | 173 +++------------------------ 1 file changed, 15 insertions(+), 158 deletions(-) (limited to 'activesupport/test/core_ext/date_ext_test.rb') diff --git a/activesupport/test/core_ext/date_ext_test.rb b/activesupport/test/core_ext/date_ext_test.rb index 088b74a29a..7ae1f67785 100644 --- a/activesupport/test/core_ext/date_ext_test.rb +++ b/activesupport/test/core_ext/date_ext_test.rb @@ -1,7 +1,22 @@ require 'abstract_unit' require 'active_support/time' +require 'core_ext/date_and_time_behavior' class DateExtCalculationsTest < ActiveSupport::TestCase + def date_time_init(year,month,day,*args) + Date.new(year,month,day) + end + + include DateAndTimeBehavior + + def test_yesterday_in_calendar_reform + assert_equal Date.new(1582,10,4), Date.new(1582,10,15).yesterday + end + + def test_tomorrow_in_calendar_reform + assert_equal Date.new(1582,10,15), Date.new(1582,10,4).tomorrow + end + def test_to_s date = Date.new(2005, 2, 21) assert_equal "2005-02-21", date.to_s @@ -46,22 +61,6 @@ class DateExtCalculationsTest < ActiveSupport::TestCase assert_equal Date.new(2005,6,22), Date.new(2005,2,22).change(:month => 6) end - def test_beginning_of_week - assert_equal Date.new(2005,1,31), Date.new(2005,2,4).beginning_of_week - assert_equal Date.new(2005,11,28), Date.new(2005,11,28).beginning_of_week #monday - assert_equal Date.new(2005,11,28), Date.new(2005,11,29).beginning_of_week #tuesday - assert_equal Date.new(2005,11,28), Date.new(2005,11,30).beginning_of_week #wednesday - assert_equal Date.new(2005,11,28), Date.new(2005,12,01).beginning_of_week #thursday - assert_equal Date.new(2005,11,28), Date.new(2005,12,02).beginning_of_week #friday - assert_equal Date.new(2005,11,28), Date.new(2005,12,03).beginning_of_week #saturday - assert_equal Date.new(2005,11,28), Date.new(2005,12,04).beginning_of_week #sunday - end - - def test_monday - assert_equal Date.new(2005,11,28), Date.new(2005,11,28).monday - assert_equal Date.new(2005,11,28), Date.new(2005,12,01).monday - end - def test_sunday assert_equal Date.new(2008,3,2), Date.new(2008,3,02).sunday assert_equal Date.new(2008,3,2), Date.new(2008,2,29).sunday @@ -71,41 +70,10 @@ class DateExtCalculationsTest < ActiveSupport::TestCase assert_equal Date.new(1582,10,1), Date.new(1582,10,15).beginning_of_week #friday end - def test_beginning_of_month - assert_equal Date.new(2005,2,1), Date.new(2005,2,22).beginning_of_month - end - - def test_beginning_of_quarter - assert_equal Date.new(2005,1,1), Date.new(2005,2,15).beginning_of_quarter - assert_equal Date.new(2005,1,1), Date.new(2005,1,1).beginning_of_quarter - assert_equal Date.new(2005,10,1), Date.new(2005,12,31).beginning_of_quarter - assert_equal Date.new(2005,4,1), Date.new(2005,6,30).beginning_of_quarter - end - - def test_end_of_week - assert_equal Date.new(2008,2,24), Date.new(2008,2,22).end_of_week - assert_equal Date.new(2008,3,2), Date.new(2008,2,25).end_of_week #monday - assert_equal Date.new(2008,3,2), Date.new(2008,2,26).end_of_week #tuesday - assert_equal Date.new(2008,3,2), Date.new(2008,2,27).end_of_week #wednesday - assert_equal Date.new(2008,3,2), Date.new(2008,2,28).end_of_week #thursday - assert_equal Date.new(2008,3,2), Date.new(2008,2,29).end_of_week #friday - assert_equal Date.new(2008,3,2), Date.new(2008,3,01).end_of_week #saturday - assert_equal Date.new(2008,3,2), Date.new(2008,3,02).end_of_week #sunday - end - def test_end_of_week_in_calendar_reform assert_equal Date.new(1582,10,17), Date.new(1582,10,4).end_of_week #thursday end - def test_end_of_quarter - assert_equal Date.new(2008,3,31), Date.new(2008,2,15).end_of_quarter - assert_equal Date.new(2008,3,31), Date.new(2008,3,31).end_of_quarter - assert_equal Date.new(2008,12,31), Date.new(2008,10,8).end_of_quarter - assert_equal Date.new(2008,6,30), Date.new(2008,4,14).end_of_quarter - assert_equal Date.new(2008,6,30), Date.new(2008,5,31).end_of_quarter - assert_equal Date.new(2008,9,30), Date.new(2008,8,21).end_of_quarter - end - def test_end_of_year assert_equal Date.new(2008,12,31).to_s, Date.new(2008,2,22).end_of_year.to_s end @@ -116,57 +84,6 @@ class DateExtCalculationsTest < ActiveSupport::TestCase assert_equal Date.new(2005,4,30), Date.new(2005,4,20).end_of_month end - def test_beginning_of_year - assert_equal Date.new(2005,1,1).to_s, Date.new(2005,2,22).beginning_of_year.to_s - end - - def test_weeks_ago - assert_equal Date.new(2005,5,10), Date.new(2005,5,17).weeks_ago(1) - assert_equal Date.new(2005,5,10), Date.new(2005,5,24).weeks_ago(2) - assert_equal Date.new(2005,5,10), Date.new(2005,5,31).weeks_ago(3) - assert_equal Date.new(2005,5,10), Date.new(2005,6,7).weeks_ago(4) - assert_equal Date.new(2006,12,31), Date.new(2007,2,4).weeks_ago(5) - end - - def test_months_ago - assert_equal Date.new(2005,5,5), Date.new(2005,6,5).months_ago(1) - assert_equal Date.new(2004,11,5), Date.new(2005,6,5).months_ago(7) - assert_equal Date.new(2004,12,5), Date.new(2005,6,5).months_ago(6) - assert_equal Date.new(2004,6,5), Date.new(2005,6,5).months_ago(12) - assert_equal Date.new(2003,6,5), Date.new(2005,6,5).months_ago(24) - end - - def test_months_since - assert_equal Date.new(2005,7,5), Date.new(2005,6,5).months_since(1) - assert_equal Date.new(2006,1,5), Date.new(2005,12,5).months_since(1) - assert_equal Date.new(2005,12,5), Date.new(2005,6,5).months_since(6) - assert_equal Date.new(2006,6,5), Date.new(2005,12,5).months_since(6) - assert_equal Date.new(2006,1,5), Date.new(2005,6,5).months_since(7) - assert_equal Date.new(2006,6,5), Date.new(2005,6,5).months_since(12) - assert_equal Date.new(2007,6,5), Date.new(2005,6,5).months_since(24) - assert_equal Date.new(2005,4,30), Date.new(2005,3,31).months_since(1) - assert_equal Date.new(2005,2,28), Date.new(2005,1,29).months_since(1) - assert_equal Date.new(2005,2,28), Date.new(2005,1,30).months_since(1) - assert_equal Date.new(2005,2,28), Date.new(2005,1,31).months_since(1) - end - - def test_years_ago - assert_equal Date.new(2004,6,5), Date.new(2005,6,5).years_ago(1) - assert_equal Date.new(1998,6,5), Date.new(2005,6,5).years_ago(7) - assert_equal Date.new(2003,2,28), Date.new(2004,2,29).years_ago(1) # 1 year ago from leap day - end - - def test_years_since - assert_equal Date.new(2006,6,5), Date.new(2005,6,5).years_since(1) - assert_equal Date.new(2012,6,5), Date.new(2005,6,5).years_since(7) - assert_equal Date.new(2182,6,5), Date.new(2005,6,5).years_since(177) - assert_equal Date.new(2005,2,28), Date.new(2004,2,29).years_since(1) # 1 year since leap day - end - - def test_prev_year - assert_equal Date.new(2004,6,5), Date.new(2005,6,5).prev_year - end - def test_prev_year_in_leap_years assert_equal Date.new(1999,2,28), Date.new(2000,2,29).prev_year end @@ -187,10 +104,6 @@ class DateExtCalculationsTest < ActiveSupport::TestCase assert_equal Date.new(1582,10,4), Date.new(1583,10,14).last_year end - def test_next_year - assert_equal Date.new(2006,6,5), Date.new(2005,6,5).next_year - end - def test_next_year_in_leap_years assert_equal Date.new(2001,2,28), Date.new(2000,2,29).next_year end @@ -199,24 +112,6 @@ class DateExtCalculationsTest < ActiveSupport::TestCase assert_equal Date.new(1582,10,4), Date.new(1581,10,10).next_year end - def test_yesterday - assert_equal Date.new(2005,2,21), Date.new(2005,2,22).yesterday - assert_equal Date.new(2005,2,28), Date.new(2005,3,2).yesterday.yesterday - end - - def test_yesterday_in_calendar_reform - assert_equal Date.new(1582,10,4), Date.new(1582,10,15).yesterday - end - - def test_tomorrow - assert_equal Date.new(2005,2,23), Date.new(2005,2,22).tomorrow - assert_equal Date.new(2005,3,2), Date.new(2005,2,28).tomorrow.tomorrow - end - - def test_tomorrow_in_calendar_reform - assert_equal Date.new(1582,10,15), Date.new(1582,10,4).tomorrow - end - def test_advance assert_equal Date.new(2006,2,28), Date.new(2005,2,28).advance(:years => 1) assert_equal Date.new(2005,6,28), Date.new(2005,2,28).advance(:months => 4) @@ -249,14 +144,6 @@ class DateExtCalculationsTest < ActiveSupport::TestCase end end - def test_prev_week - assert_equal Date.new(2005,5,9), Date.new(2005,5,17).prev_week - assert_equal Date.new(2006,12,25), Date.new(2007,1,7).prev_week - assert_equal Date.new(2010,2,12), Date.new(2010,2,19).prev_week(:friday) - assert_equal Date.new(2010,2,13), Date.new(2010,2,19).prev_week(:saturday) - assert_equal Date.new(2010,2,27), Date.new(2010,3,4).prev_week(:saturday) - end - def test_last_week assert_equal Date.new(2005,5,9), Date.new(2005,5,17).last_week assert_equal Date.new(2006,12,25), Date.new(2007,1,7).last_week @@ -265,38 +152,15 @@ class DateExtCalculationsTest < ActiveSupport::TestCase assert_equal Date.new(2010,2,27), Date.new(2010,3,4).last_week(:saturday) end - def test_next_week - assert_equal Date.new(2005,2,28), Date.new(2005,2,22).next_week - assert_equal Date.new(2005,3,4), Date.new(2005,2,22).next_week(:friday) - assert_equal Date.new(2006,10,30), Date.new(2006,10,23).next_week - assert_equal Date.new(2006,11,1), Date.new(2006,10,23).next_week(:wednesday) - end - def test_next_week_in_calendar_reform assert_equal Date.new(1582,10,15), Date.new(1582,9,30).next_week(:friday) assert_equal Date.new(1582,10,18), Date.new(1582,10,4).next_week end - def test_next_month_on_31st - assert_equal Date.new(2005, 9, 30), Date.new(2005, 8, 31).next_month - end - - def test_prev_month_on_31st - assert_equal Date.new(2004, 2, 29), Date.new(2004, 3, 31).prev_month - end - def test_last_month_on_31st assert_equal Date.new(2004, 2, 29), Date.new(2004, 3, 31).last_month end - def test_next_quarter_on_31st - assert_equal Date.new(2005, 11, 30), Date.new(2005, 8, 31).next_quarter - end - - def test_prev_quarter_on_31st - assert_equal Date.new(2004, 2, 29), Date.new(2004, 5, 31).prev_quarter - end - def test_last_quarter_on_31st assert_equal Date.new(2004, 2, 29), Date.new(2004, 5, 31).last_quarter end @@ -420,13 +284,6 @@ class DateExtCalculationsTest < ActiveSupport::TestCase end end - 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? -- cgit v1.2.3