summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-07-24 08:03:27 -0700
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2019-10-24 18:39:04 +0900
commit4e40ca301cca692361627ac6db06c0f0074636f0 (patch)
treea2a588348cc52eba07e5f19a4b23f61bf7b80540 /test
parent9eb798a3f1de6a9e08e510904d376952d5e94d50 (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')
-rw-r--r--test/date/test_date_new.rb50
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