diff --git a/lib/timecop/timecop.rb b/lib/timecop/timecop.rb index 86629f70..0517f008 100644 --- a/lib/timecop/timecop.rb +++ b/lib/timecop/timecop.rb @@ -150,6 +150,7 @@ def return(&block) current_baseline = @baseline unmock! yield + ensure @_stack = current_stack @baseline = current_baseline end diff --git a/test/timecop_test.rb b/test/timecop_test.rb index 029f95b3..1e0a17e9 100644 --- a/test/timecop_test.rb +++ b/test/timecop_test.rb @@ -219,6 +219,14 @@ def test_exception_thrown_in_freeze_block_properly_resets_time end end + def test_exception_thrown_in_return_block_restores_previous_time + t = Time.local(2008, 10, 10, 10, 10, 10) + Timecop.freeze(t) do + Timecop.return { raise 'foobar' } rescue nil + assert_equal t, Time.now + end + end + def test_freeze_freezes_time t = Time.local(2008, 10, 10, 10, 10, 10) now = Time.now