Skip to content

Commit

Permalink
ext/date/date_parse.c: [ruby-core:42173].
Browse files Browse the repository at this point in the history
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34335 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
tadf committed Jan 18, 2012
1 parent 0a99ea8 commit 49d65bc
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 14 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
Thu Jan 19 07:10:47 2012 Tadayoshi Funaba <[email protected]>

* ext/date/date_parse.c: [ruby-core:42173].

Wed Jan 18 18:11:02 2012 Akinori MUSHA <[email protected]>

* misc/rdoc-mode.el (rdoc-mode): Add provide so that requiring
Expand Down
48 changes: 34 additions & 14 deletions ext/date/date_parse.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
date_parse.c: Coded by Tadayoshi Funaba 2011
date_parse.c: Coded by Tadayoshi Funaba 2011,2012
*/

#include "ruby.h"
Expand Down Expand Up @@ -236,6 +236,26 @@ regcomp(const char *source, long len, int opt)
#define REGCOMP_0(pat) REGCOMP(pat, 0)
#define REGCOMP_I(pat) REGCOMP(pat, ONIG_OPTION_IGNORECASE)

#define MATCH(s,p,c) \
{ \
return match(s, p, hash, c); \
}

static int
match(VALUE str, VALUE pat, VALUE hash, int (*cb)(VALUE, VALUE))
{
VALUE m;

m = f_match(pat, str);

if (NIL_P(m))
return 0;

(*cb)(m, hash);

return 1;
}

#define SUBS(s,p,c) \
{ \
return subs(s, p, hash, c); \
Expand Down Expand Up @@ -1726,7 +1746,7 @@ iso8601_ext_datetime(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, iso8601_ext_datetime_cb);
MATCH(str, pat, iso8601_ext_datetime_cb);
}

#undef SNUM
Expand Down Expand Up @@ -1817,7 +1837,7 @@ iso8601_bas_datetime(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, iso8601_bas_datetime_cb);
MATCH(str, pat, iso8601_bas_datetime_cb);
}

#undef SNUM
Expand Down Expand Up @@ -1860,7 +1880,7 @@ iso8601_ext_time(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, iso8601_ext_time_cb);
MATCH(str, pat, iso8601_ext_time_cb);
}

static int
Expand All @@ -1872,7 +1892,7 @@ iso8601_bas_time(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, iso8601_bas_time_cb);
MATCH(str, pat, iso8601_bas_time_cb);
}

VALUE
Expand Down Expand Up @@ -1940,7 +1960,7 @@ rfc3339(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, rfc3339_cb);
MATCH(str, pat, rfc3339_cb);
}

VALUE
Expand Down Expand Up @@ -2004,7 +2024,7 @@ xmlschema_datetime(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, xmlschema_datetime_cb);
MATCH(str, pat, xmlschema_datetime_cb);
}

#undef SNUM
Expand Down Expand Up @@ -2045,7 +2065,7 @@ xmlschema_time(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, xmlschema_time_cb);
MATCH(str, pat, xmlschema_time_cb);
}

#undef SNUM
Expand Down Expand Up @@ -2086,7 +2106,7 @@ xmlschema_trunc(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, xmlschema_trunc_cb);
MATCH(str, pat, xmlschema_trunc_cb);
}

VALUE
Expand Down Expand Up @@ -2157,7 +2177,7 @@ rfc2822(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, rfc2822_cb);
MATCH(str, pat, rfc2822_cb);
}

VALUE
Expand Down Expand Up @@ -2215,7 +2235,7 @@ httpdate_type1(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, httpdate_type1_cb);
MATCH(str, pat, httpdate_type1_cb);
}

#undef SNUM
Expand Down Expand Up @@ -2262,7 +2282,7 @@ httpdate_type2(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, httpdate_type2_cb);
MATCH(str, pat, httpdate_type2_cb);
}

#undef SNUM
Expand Down Expand Up @@ -2303,7 +2323,7 @@ httpdate_type3(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, httpdate_type3_cb);
MATCH(str, pat, httpdate_type3_cb);
}

VALUE
Expand Down Expand Up @@ -2377,7 +2397,7 @@ jisx0301(VALUE str, VALUE hash)
static VALUE pat = Qnil;

REGCOMP_I(pat);
SUBS(str, pat, jisx0301_cb);
MATCH(str, pat, jisx0301_cb);
}

VALUE
Expand Down
34 changes: 34 additions & 0 deletions test/date/test_date_parse.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1060,4 +1060,38 @@ def test_jisx0301
assert_equal(Date::ITALY + 10, d.start)
end

def test_given_string
s = '2001-02-03T04:05:06Z'
s0 = s.dup

assert_not_equal({}, Date._parse(s))
assert_equal(s0, s)

assert_not_equal({}, Date._iso8601(s))
assert_equal(s0, s)

assert_not_equal({}, Date._rfc3339(s))
assert_equal(s0, s)

assert_not_equal({}, Date._xmlschema(s))
assert_equal(s0, s)

s = 'Sat, 3 Feb 2001 04:05:06 UT'
s0 = s.dup
assert_not_equal({}, Date._rfc2822(s))
assert_equal(s0, s)
assert_not_equal({}, Date._rfc822(s))
assert_equal(s0, s)

s = 'Sat, 03 Feb 2001 04:05:06 GMT'
s0 = s.dup
assert_not_equal({}, Date._httpdate(s))
assert_equal(s0, s)

s = 'H13.02.03T04:05:06,07Z'
s0 = s.dup
assert_not_equal({}, Date._jisx0301(s))
assert_equal(s0, s)
end

end
8 changes: 8 additions & 0 deletions test/date/test_date_strptime.rb
Original file line number Diff line number Diff line change
Expand Up @@ -475,4 +475,12 @@ def test_strptime__ex
end
end

def test_given_string
s = '2001-02-03T04:05:06Z'
s0 = s.dup

assert_not_equal({}, Date._strptime(s, '%FT%T%Z'))
assert_equal(s0, s)
end

end

0 comments on commit 49d65bc

Please sign in to comment.