From ad156f7e2caa28f429a9f05f3b9b184118b85432 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Thu, 11 Jun 2020 11:40:45 -0700 Subject: [ruby/date] Fix cannot load complex into simple error when loading marshal dump (Fixes #20) This problem exists because Marshal.load calls Date.allocate, which uses a SimpleDateData. There doesn't seem to be any support for taking an existing Date instance and converting it from SimpleDateData to ComplexDateData. Work around this issue by making Date.allocate use a ComplexDateData. This causes problems in Date#initialize, so remove the Date#initialize method (keeping the date_initialize function, used internally for Date.civil). Alias Date.new to Date.civil, since they do the same thing. https://github.com/ruby/date/commit/6bb8d8fa0f --- test/date/test_date_marshal.rb | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'test') diff --git a/test/date/test_date_marshal.rb b/test/date/test_date_marshal.rb index c7ce737aac..fa8b2d91f8 100644 --- a/test/date/test_date_marshal.rb +++ b/test/date/test_date_marshal.rb @@ -39,6 +39,13 @@ class TestDateMarshal < Test::Unit::TestCase assert(d.frozen?) expected_error = defined?(FrozenError) ? FrozenError : RuntimeError assert_raise(expected_error){d.marshal_load(a)} + + d = Date.new + 1/2r + 2304/65437r/86400 + m = Marshal.dump(d) + d2 = Marshal.load(m) + assert_equal(d, d2) + assert_equal(d.start, d2.start) + assert_instance_of(String, d2.to_s) end def test_memsize -- cgit v1.2.3