1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/date] introduce Date::Error, raise Date::Error for every

"invalid <anything>" type of exception

3e55c09ba4
This commit is contained in:
glaszig 2019-08-09 02:41:47 +02:00 committed by Hiroshi SHIBATA
parent e4cd0d7287
commit fce940aac7
4 changed files with 71 additions and 57 deletions

View file

@ -22,6 +22,7 @@
static ID id_cmp, id_le_p, id_ge_p, id_eqeq_p; static ID id_cmp, id_le_p, id_ge_p, id_eqeq_p;
static VALUE cDate, cDateTime; static VALUE cDate, cDateTime;
static VALUE eDateError;
static VALUE half_days_in_day, day_in_nanoseconds; static VALUE half_days_in_day, day_in_nanoseconds;
static double positive_inf, negative_inf; static double positive_inf, negative_inf;
@ -3069,7 +3070,7 @@ old_to_new(VALUE ajd, VALUE of, VALUE sg,
*rsg = NUM2DBL(sg); *rsg = NUM2DBL(sg);
if (*rdf < 0 || *rdf >= DAY_IN_SECONDS) if (*rdf < 0 || *rdf >= DAY_IN_SECONDS)
rb_raise(rb_eArgError, "invalid day fraction"); rb_raise(eDateError, "invalid day fraction");
if (f_lt_p(*rsf, INT2FIX(0)) || if (f_lt_p(*rsf, INT2FIX(0)) ||
f_ge_p(*rsf, INT2FIX(SECOND_IN_NANOSECONDS))) f_ge_p(*rsf, INT2FIX(SECOND_IN_NANOSECONDS)))
@ -3231,7 +3232,7 @@ do {\
s = s##_trunc(v##s, &fr);\ s = s##_trunc(v##s, &fr);\
if (f_nonzero_p(fr)) {\ if (f_nonzero_p(fr)) {\
if (argc > n)\ if (argc > n)\
rb_raise(rb_eArgError, "invalid fraction");\ rb_raise(eDateError, "invalid fraction");\
fr2 = fr;\ fr2 = fr;\
}\ }\
} while (0) } while (0)
@ -3241,7 +3242,7 @@ do {\
s = NUM2INT(s##_trunc(v##s, &fr));\ s = NUM2INT(s##_trunc(v##s, &fr));\
if (f_nonzero_p(fr)) {\ if (f_nonzero_p(fr)) {\
if (argc > n)\ if (argc > n)\
rb_raise(rb_eArgError, "invalid fraction");\ rb_raise(eDateError, "invalid fraction");\
fr2 = fr;\ fr2 = fr;\
}\ }\
} while (0) } while (0)
@ -3368,7 +3369,7 @@ date_s_ordinal(int argc, VALUE *argv, VALUE klass)
&nth, &ry, &nth, &ry,
&rd, &rjd, &rd, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
ret = d_simple_new_internal(klass, ret = d_simple_new_internal(klass,
nth, rjd, nth, rjd,
@ -3452,7 +3453,7 @@ date_initialize(int argc, VALUE *argv, VALUE self)
if (!valid_gregorian_p(y, m, d, if (!valid_gregorian_p(y, m, d,
&nth, &ry, &nth, &ry,
&rm, &rd)) &rm, &rd))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
set_to_simple(self, dat, nth, 0, sg, ry, rm, rd, HAVE_CIVIL); set_to_simple(self, dat, nth, 0, sg, ry, rm, rd, HAVE_CIVIL);
} }
@ -3464,7 +3465,7 @@ date_initialize(int argc, VALUE *argv, VALUE self)
&nth, &ry, &nth, &ry,
&rm, &rd, &rjd, &rm, &rd, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
set_to_simple(self, dat, nth, rjd, sg, ry, rm, rd, HAVE_JD | HAVE_CIVIL); set_to_simple(self, dat, nth, rjd, sg, ry, rm, rd, HAVE_JD | HAVE_CIVIL);
} }
@ -3526,7 +3527,7 @@ date_s_commercial(int argc, VALUE *argv, VALUE klass)
&nth, &ry, &nth, &ry,
&rw, &rd, &rjd, &rw, &rd, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
ret = d_simple_new_internal(klass, ret = d_simple_new_internal(klass,
nth, rjd, nth, rjd,
@ -3576,7 +3577,7 @@ date_s_weeknum(int argc, VALUE *argv, VALUE klass)
&nth, &ry, &nth, &ry,
&rw, &rd, &rjd, &rw, &rd, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
ret = d_simple_new_internal(klass, ret = d_simple_new_internal(klass,
nth, rjd, nth, rjd,
@ -3625,7 +3626,7 @@ date_s_nth_kday(int argc, VALUE *argv, VALUE klass)
&nth, &ry, &nth, &ry,
&rm, &rn, &rk, &rjd, &rm, &rn, &rk, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
ret = d_simple_new_internal(klass, ret = d_simple_new_internal(klass,
nth, rjd, nth, rjd,
@ -4172,7 +4173,7 @@ d_new_by_frags(VALUE klass, VALUE hash, VALUE sg)
} }
if (NIL_P(hash)) if (NIL_P(hash))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
if (NIL_P(ref_hash("jd")) && if (NIL_P(ref_hash("jd")) &&
NIL_P(ref_hash("yday")) && NIL_P(ref_hash("yday")) &&
@ -4189,7 +4190,7 @@ d_new_by_frags(VALUE klass, VALUE hash, VALUE sg)
} }
if (NIL_P(jd)) if (NIL_P(jd))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
{ {
VALUE nth; VALUE nth;
int rjd; int rjd;
@ -4749,11 +4750,11 @@ d_lite_initialize(int argc, VALUE *argv, VALUE self)
sf = vsf; sf = vsf;
if (f_lt_p(sf, INT2FIX(0)) || if (f_lt_p(sf, INT2FIX(0)) ||
f_ge_p(sf, INT2FIX(SECOND_IN_NANOSECONDS))) f_ge_p(sf, INT2FIX(SECOND_IN_NANOSECONDS)))
rb_raise(rb_eArgError, "invalid second fraction"); rb_raise(eDateError, "invalid second fraction");
case 2: case 2:
df = NUM2INT(vdf); df = NUM2INT(vdf);
if (df < 0 || df >= DAY_IN_SECONDS) if (df < 0 || df >= DAY_IN_SECONDS)
rb_raise(rb_eArgError, "invalid day fraction"); rb_raise(eDateError, "invalid day fraction");
case 1: case 1:
jd = vjd; jd = vjd;
} }
@ -6063,7 +6064,7 @@ d_lite_rshift(VALUE self, VALUE other)
&rm, &rd, &rjd, &ns)) &rm, &rd, &rjd, &ns))
break; break;
if (--d < 1) if (--d < 1)
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
} }
encode_jd(nth, rjd, &rjd2); encode_jd(nth, rjd, &rjd2);
return d_lite_plus(self, f_sub(rjd2, m_real_local_jd(dat))); return d_lite_plus(self, f_sub(rjd2, m_real_local_jd(dat)));
@ -7280,7 +7281,7 @@ datetime_s_jd(int argc, VALUE *argv, VALUE klass)
int rh, rmin, rs, rjd, rjd2; int rh, rmin, rs, rjd, rjd2;
if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs)) if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
canon24oc(); canon24oc();
decode_jd(jd, &nth, &rjd); decode_jd(jd, &nth, &rjd);
@ -7359,9 +7360,9 @@ datetime_s_ordinal(int argc, VALUE *argv, VALUE klass)
&nth, &ry, &nth, &ry,
&rd, &rjd, &rd, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs)) if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
canon24oc(); canon24oc();
rjd2 = jd_local_to_utc(rjd, rjd2 = jd_local_to_utc(rjd,
@ -7454,9 +7455,9 @@ datetime_initialize(int argc, VALUE *argv, VALUE self)
if (!valid_gregorian_p(y, m, d, if (!valid_gregorian_p(y, m, d,
&nth, &ry, &nth, &ry,
&rm, &rd)) &rm, &rd))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs)) if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
canon24oc(); canon24oc();
set_to_complex(self, dat, set_to_complex(self, dat,
@ -7475,9 +7476,9 @@ datetime_initialize(int argc, VALUE *argv, VALUE self)
&nth, &ry, &nth, &ry,
&rm, &rd, &rjd, &rm, &rd, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs)) if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
canon24oc(); canon24oc();
rjd2 = jd_local_to_utc(rjd, rjd2 = jd_local_to_utc(rjd,
@ -7559,9 +7560,9 @@ datetime_s_commercial(int argc, VALUE *argv, VALUE klass)
&nth, &ry, &nth, &ry,
&rw, &rd, &rjd, &rw, &rd, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs)) if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
canon24oc(); canon24oc();
rjd2 = jd_local_to_utc(rjd, rjd2 = jd_local_to_utc(rjd,
@ -7630,9 +7631,9 @@ datetime_s_weeknum(int argc, VALUE *argv, VALUE klass)
&nth, &ry, &nth, &ry,
&rw, &rd, &rjd, &rw, &rd, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs)) if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
canon24oc(); canon24oc();
rjd2 = jd_local_to_utc(rjd, rjd2 = jd_local_to_utc(rjd,
@ -7699,9 +7700,9 @@ datetime_s_nth_kday(int argc, VALUE *argv, VALUE klass)
&nth, &ry, &nth, &ry,
&rm, &rn, &rk, &rjd, &rm, &rn, &rk, &rjd,
&ns)) &ns))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs)) if (!c_valid_time_p(h, min, s, &rh, &rmin, &rs))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
canon24oc(); canon24oc();
rjd2 = jd_local_to_utc(rjd, rjd2 = jd_local_to_utc(rjd,
@ -7844,7 +7845,7 @@ dt_new_by_frags(VALUE klass, VALUE hash, VALUE sg)
} }
if (NIL_P(hash)) if (NIL_P(hash))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
if (NIL_P(ref_hash("jd")) && if (NIL_P(ref_hash("jd")) &&
NIL_P(ref_hash("yday")) && NIL_P(ref_hash("yday")) &&
@ -7871,7 +7872,7 @@ dt_new_by_frags(VALUE klass, VALUE hash, VALUE sg)
} }
if (NIL_P(jd)) if (NIL_P(jd))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
{ {
int rh, rmin, rs; int rh, rmin, rs;
@ -7880,7 +7881,7 @@ dt_new_by_frags(VALUE klass, VALUE hash, VALUE sg)
NUM2INT(ref_hash("min")), NUM2INT(ref_hash("min")),
NUM2INT(ref_hash("sec")), NUM2INT(ref_hash("sec")),
&rh, &rmin, &rs)) &rh, &rmin, &rs))
rb_raise(rb_eArgError, "invalid date"); rb_raise(eDateError, "invalid date");
df = time_to_df(rh, rmin, rs); df = time_to_df(rh, rmin, rs);
} }
@ -9268,6 +9269,7 @@ Init_date_core(void)
* *
*/ */
cDate = rb_define_class("Date", rb_cObject); cDate = rb_define_class("Date", rb_cObject);
eDateError = rb_define_class_under(cDate, "Error", rb_eArgError);
rb_include_module(cDate, rb_mComparable); rb_include_module(cDate, rb_mComparable);

View file

@ -27,7 +27,7 @@ class TestDateNew < Test::Unit::TestCase
end end
def test_jd__ex def test_jd__ex
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.jd(0, 23,59,60,0) DateTime.jd(0, 23,59,60,0)
end end
end end
@ -118,10 +118,10 @@ class TestDateNew < Test::Unit::TestCase
end end
def test_ordinal__ex def test_ordinal__ex
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.ordinal(2001,366) Date.ordinal(2001,366)
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.ordinal(2001,365, 23,59,60, 0) DateTime.ordinal(2001,365, 23,59,60, 0)
end end
end end
@ -181,13 +181,13 @@ class TestDateNew < Test::Unit::TestCase
end end
def test_civil__ex def test_civil__ex
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.civil(2001,2,29) Date.civil(2001,2,29)
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.civil(2001,2,28, 23,59,60, 0) DateTime.civil(2001,2,28, 23,59,60, 0)
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.civil(2001,2,28, 24,59,59, 0) DateTime.civil(2001,2,28, 24,59,59, 0)
end end
end end
@ -248,10 +248,10 @@ class TestDateNew < Test::Unit::TestCase
end end
def test_commercial__ex def test_commercial__ex
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.commercial(1997,53,1) Date.commercial(1997,53,1)
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.commercial(1997,52,1, 23,59,60, 0) DateTime.commercial(1997,52,1, 23,59,60, 0)
end end
end end
@ -270,10 +270,10 @@ class TestDateNew < Test::Unit::TestCase
assert_equal(2452355, d.jd) assert_equal(2452355, d.jd)
assert_equal([11,22,33], [d.hour, d.min, d.sec]) assert_equal([11,22,33], [d.hour, d.min, d.sec])
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.weeknum(1999,53,0, 0) Date.weeknum(1999,53,0, 0)
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.weeknum(1999,-53,-1, 0) Date.weeknum(1999,-53,-1, 0)
end end
end if Date.respond_to?(:weeknum, true) end if Date.respond_to?(:weeknum, true)
@ -292,10 +292,10 @@ class TestDateNew < Test::Unit::TestCase
assert_equal(2448682, d.jd) assert_equal(2448682, d.jd)
assert_equal([11,22,33], [d.hour, d.min, d.sec]) assert_equal([11,22,33], [d.hour, d.min, d.sec])
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.nth_kday(2006,5, 5,0) Date.nth_kday(2006,5, 5,0)
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.nth_kday(2006,5, -5,0) Date.nth_kday(2006,5, -5,0)
end end
end if Date.respond_to?(:nth_kday, true) end if Date.respond_to?(:nth_kday, true)

View file

@ -659,27 +659,39 @@ class TestDateParse < Test::Unit::TestCase
end end
def test_parse__ex def test_parse__ex
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.parse('') Date.parse('')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.parse('') DateTime.parse('')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.parse('2001-02-29') Date.parse('2001-02-29')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.parse('2001-02-29T23:59:60') DateTime.parse('2001-02-29T23:59:60')
end end
assert_nothing_raised(ArgumentError) do assert_nothing_raised(Date::Error) do
DateTime.parse('2001-03-01T23:59:60') DateTime.parse('2001-03-01T23:59:60')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.parse('2001-03-01T23:59:61') DateTime.parse('2001-03-01T23:59:61')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.parse('23:55') Date.parse('23:55')
end end
begin
Date.parse('')
rescue ArgumentError => e
assert e.is_a? Date::Error
end
begin
DateTime.parse('')
rescue ArgumentError => e
assert e.is_a? Date::Error
end
end end
def test__iso8601 def test__iso8601

View file

@ -460,28 +460,28 @@ class TestDateStrptime < Test::Unit::TestCase
end end
def test_strptime__ex def test_strptime__ex
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.strptime('') Date.strptime('')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.strptime('') DateTime.strptime('')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.strptime('2001-02-29', '%F') Date.strptime('2001-02-29', '%F')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.strptime('2001-02-29T23:59:60', '%FT%T') DateTime.strptime('2001-02-29T23:59:60', '%FT%T')
end end
assert_nothing_raised(ArgumentError) do assert_nothing_raised(Date::Error) do
DateTime.strptime('2001-03-01T23:59:60', '%FT%T') DateTime.strptime('2001-03-01T23:59:60', '%FT%T')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
DateTime.strptime('2001-03-01T23:59:61', '%FT%T') DateTime.strptime('2001-03-01T23:59:61', '%FT%T')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.strptime('23:55', '%H:%M') Date.strptime('23:55', '%H:%M')
end end
assert_raise(ArgumentError) do assert_raise(Date::Error) do
Date.strptime('01-31-2011', '%m/%d/%Y') Date.strptime('01-31-2011', '%m/%d/%Y')
end end
end end