diff options
author | Jeremy Evans <code@jeremyevans.net> | 2019-07-24 08:03:27 -0700 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2019-10-24 18:39:04 +0900 |
commit | 4e40ca301cca692361627ac6db06c0f0074636f0 (patch) | |
tree | a2a588348cc52eba07e5f19a4b23f61bf7b80540 /test/date | |
parent | 9eb798a3f1de6a9e08e510904d376952d5e94d50 (diff) |
[ruby/date] Check for numeric arguments in constructors
Previously, the type of these arguments were not checked, leading to
NoMethodErrors in some cases, and TypeErrors in other cases, but not
showing what field was having the problems. This change makes it so
the field with the problem is included in the error message.
For the valid_*? methods, this changes them to return false if one
of the arguments that should be numeric is not.
Fixes Ruby Bug 11935
Fixes Ruby Misc 15298
https://github.com/ruby/date/commit/a2f4b665f8
Diffstat (limited to 'test/date')
-rw-r--r-- | test/date/test_date_new.rb | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/test/date/test_date_new.rb b/test/date/test_date_new.rb index d27116b198..2fb9846c9d 100644 --- a/test/date/test_date_new.rb +++ b/test/date/test_date_new.rb @@ -32,6 +32,56 @@ class TestDateNew < Test::Unit::TestCase end end + def test_valid_with_invalid_types + o = Object.new + assert_equal(false, Date.valid_jd?(o)) + assert_equal(false, Date.valid_civil?(o, 1, 1)) + assert_equal(false, Date.valid_civil?(1, o, 1)) + assert_equal(false, Date.valid_civil?(1, 1, o)) + assert_equal(false, Date.valid_ordinal?(o, 1)) + assert_equal(false, Date.valid_ordinal?(1, o)) + assert_equal(false, Date.valid_commercial?(o, 1, 1)) + assert_equal(false, Date.valid_commercial?(1, o, 1)) + assert_equal(false, Date.valid_commercial?(1, 1, o)) + end + + def test_invalid_types + o = Object.new + assert_raise(TypeError) { Date.julian_leap?(o) } + assert_raise(TypeError) { Date.gregorian_leap?(o) } + assert_raise(TypeError) { Date.jd(o) } + assert_raise(TypeError) { Date.new(o) } + assert_raise(TypeError) { Date.new(1, o) } + assert_raise(TypeError) { Date.new(1, 1, o) } + assert_raise(TypeError) { Date.ordinal(o) } + assert_raise(TypeError) { Date.ordinal(1, o) } + assert_raise(TypeError) { Date.commercial(o) } + assert_raise(TypeError) { Date.commercial(1, o) } + assert_raise(TypeError) { Date.commercial(1, 1, o) } + + assert_raise(TypeError) { DateTime.jd(o) } + assert_raise(TypeError) { DateTime.jd(1, o) } + assert_raise(TypeError) { DateTime.jd(1, 1, o) } + assert_raise(TypeError) { DateTime.jd(1, 1, 1, o) } + assert_raise(TypeError) { DateTime.new(o) } + assert_raise(TypeError) { DateTime.new(1, o) } + assert_raise(TypeError) { DateTime.new(1, 1, o) } + assert_raise(TypeError) { DateTime.new(1, 1, 1, o) } + assert_raise(TypeError) { DateTime.new(1, 1, 1, 1, o) } + assert_raise(TypeError) { DateTime.new(1, 1, 1, 1, 1, o) } + assert_raise(TypeError) { DateTime.ordinal(o) } + assert_raise(TypeError) { DateTime.ordinal(1, o) } + assert_raise(TypeError) { DateTime.ordinal(1, 1, o) } + assert_raise(TypeError) { DateTime.ordinal(1, 1, 1, o) } + assert_raise(TypeError) { DateTime.ordinal(1, 1, 1, 1, o) } + assert_raise(TypeError) { DateTime.commercial(o) } + assert_raise(TypeError) { DateTime.commercial(1, o) } + assert_raise(TypeError) { DateTime.commercial(1, 1, o) } + assert_raise(TypeError) { DateTime.commercial(1, 1, 1, o) } + assert_raise(TypeError) { DateTime.commercial(1, 1, 1, 1, o) } + assert_raise(TypeError) { DateTime.commercial(1, 1, 1, 1, 1, o) } + end + def test_ordinal d = Date.ordinal dt = DateTime.ordinal |