2004-10-29 18:45:13 -04:00
|
|
|
require 'test/unit'
|
|
|
|
|
|
|
|
class TestRegexp < Test::Unit::TestCase
|
2004-10-29 19:22:57 -04:00
|
|
|
def test_ruby_dev_24643
|
2007-12-09 16:44:19 -05:00
|
|
|
assert_nothing_raised("[ruby-dev:24643]") {
|
|
|
|
/(?:(?:[a]*[a])?b)*a*$/ =~ "aabaaca"
|
|
|
|
}
|
2004-10-29 18:45:13 -04:00
|
|
|
end
|
2004-10-29 19:22:57 -04:00
|
|
|
|
|
|
|
def test_ruby_talk_116455
|
|
|
|
assert_match(/^(\w{2,}).* ([A-Za-z\xa2\xc0-\xff]{2,}?)$/, "Hallo Welt")
|
|
|
|
end
|
2004-11-27 22:07:48 -05:00
|
|
|
|
|
|
|
def test_ruby_dev_24887
|
|
|
|
assert_equal("a".gsub(/a\Z/, ""), "")
|
|
|
|
end
|
2004-11-27 22:09:13 -05:00
|
|
|
|
|
|
|
def test_yoshidam_net_20041111_1
|
|
|
|
s = "[\xC2\xA0-\xC3\xBE]"
|
|
|
|
assert_match(Regexp.new(s, nil, "u"), "\xC3\xBE")
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_yoshidam_net_20041111_2
|
|
|
|
assert_raise(RegexpError) do
|
2007-12-07 21:50:43 -05:00
|
|
|
s = "[\xFF-\xFF]".force_encoding("utf-8")
|
2004-11-27 22:09:13 -05:00
|
|
|
Regexp.new(s, nil, "u")
|
|
|
|
end
|
|
|
|
end
|
2007-08-05 00:06:08 -04:00
|
|
|
|
|
|
|
def test_ruby_dev_31309
|
|
|
|
assert_equal('Ruby', 'Ruby'.sub(/[^a-z]/i, '-'))
|
|
|
|
end
|
2007-11-23 03:33:32 -05:00
|
|
|
|
|
|
|
def test_assert_normal_exit
|
|
|
|
# moved from knownbug. It caused core.
|
|
|
|
Regexp.union("a", "a")
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_to_s
|
2007-12-09 16:48:05 -05:00
|
|
|
assert_equal '(?-mix:\x00)', Regexp.new("\0").to_s
|
2007-11-23 03:33:32 -05:00
|
|
|
end
|
2007-11-26 20:47:34 -05:00
|
|
|
|
|
|
|
def test_union
|
|
|
|
assert_equal :ok, begin
|
|
|
|
Regexp.union(
|
|
|
|
"a",
|
2007-12-07 21:50:43 -05:00
|
|
|
Regexp.new("\xc2\xa1".force_encoding("euc-jp")),
|
|
|
|
Regexp.new("\xc2\xa1".force_encoding("utf-8")))
|
2007-11-26 20:47:34 -05:00
|
|
|
:ng
|
|
|
|
rescue ArgumentError
|
|
|
|
:ok
|
|
|
|
end
|
|
|
|
end
|
2007-12-09 02:12:44 -05:00
|
|
|
|
|
|
|
def test_named_capture
|
|
|
|
m = /&(?<foo>.*?);/.match("aaa & yyy")
|
|
|
|
assert_equal("amp", m["foo"])
|
|
|
|
assert_equal("amp", m[:foo])
|
|
|
|
assert_equal(5, m.begin(:foo))
|
|
|
|
assert_equal(8, m.end(:foo))
|
|
|
|
assert_equal([5,8], m.offset(:foo))
|
|
|
|
|
2007-12-09 16:44:19 -05:00
|
|
|
assert_equal("aaa [amp] yyy",
|
|
|
|
"aaa & yyy".sub(/&(?<foo>.*?);/, '[\k<foo>]'))
|
2007-12-09 02:12:44 -05:00
|
|
|
|
|
|
|
assert_equal('#<MatchData "& y" foo:"amp">',
|
|
|
|
/&(?<foo>.*?); (y)/.match("aaa & yyy").inspect)
|
|
|
|
assert_equal('#<MatchData "& y" 1:"amp" 2:"y">',
|
|
|
|
/&(.*?); (y)/.match("aaa & yyy").inspect)
|
|
|
|
assert_equal('#<MatchData "& y" foo:"amp" bar:"y">',
|
|
|
|
/&(?<foo>.*?); (?<bar>y)/.match("aaa & yyy").inspect)
|
|
|
|
assert_equal('#<MatchData "& y" foo:"amp" foo:"y">',
|
|
|
|
/&(?<foo>.*?); (?<foo>y)/.match("aaa & yyy").inspect)
|
|
|
|
|
2007-12-09 08:35:38 -05:00
|
|
|
/(?<id>[A-Za-z_]+)/ =~ "!abc"
|
|
|
|
assert_equal("abc", Regexp.last_match(:id))
|
|
|
|
|
2007-12-09 16:44:19 -05:00
|
|
|
/a/ =~ "b" # doesn't match.
|
2007-12-09 08:35:38 -05:00
|
|
|
assert_equal(nil, Regexp.last_match)
|
|
|
|
assert_equal(nil, Regexp.last_match(1))
|
|
|
|
assert_equal(nil, Regexp.last_match(:foo))
|
2007-12-09 16:44:19 -05:00
|
|
|
|
|
|
|
assert_equal(["foo", "bar"], /(?<foo>.)(?<bar>.)/.names)
|
|
|
|
assert_equal(["foo"], /(?<foo>.)(?<foo>.)/.names)
|
|
|
|
assert_equal([], /(.)(.)/.names)
|
|
|
|
|
|
|
|
assert_equal(["foo", "bar"], /(?<foo>.)(?<bar>.)/.match("ab").names)
|
|
|
|
assert_equal(["foo"], /(?<foo>.)(?<foo>.)/.match("ab").names)
|
|
|
|
assert_equal([], /(.)(.)/.match("ab").names)
|
|
|
|
|
|
|
|
assert_equal({"foo"=>[1], "bar"=>[2]},
|
|
|
|
/(?<foo>.)(?<bar>.)/.named_captures)
|
|
|
|
assert_equal({"foo"=>[1, 2]},
|
|
|
|
/(?<foo>.)(?<foo>.)/.named_captures)
|
|
|
|
assert_equal({}, /(.)(.)/.named_captures)
|
2007-12-21 02:08:52 -05:00
|
|
|
|
|
|
|
assert_equal("a[b]c", "abc".sub(/(?<x>[bc])/, "[\\k<x>]"))
|
2007-12-09 16:44:19 -05:00
|
|
|
end
|
|
|
|
|
2007-12-18 06:26:24 -05:00
|
|
|
def test_assign_named_capture
|
|
|
|
assert_equal("a", eval('/(?<foo>.)/ =~ "a"; foo'))
|
|
|
|
assert_equal("a", eval('foo = 1; /(?<foo>.)/ =~ "a"; foo'))
|
|
|
|
assert_equal("a", eval('1.times {|foo| /(?<foo>.)/ =~ "a"; break foo }'))
|
|
|
|
assert_raise(SyntaxError) { eval('/(?<Foo>.)/ =~ "a"') }
|
|
|
|
end
|
|
|
|
|
2007-12-09 16:44:19 -05:00
|
|
|
def test_match_regexp
|
|
|
|
r = /./
|
|
|
|
m = r.match("a")
|
|
|
|
assert_equal(r, m.regexp)
|
2007-12-09 02:12:44 -05:00
|
|
|
end
|
2004-10-29 18:45:13 -04:00
|
|
|
end
|