diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-03-06 07:24:07 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-03-06 07:24:07 +0000 |
commit | bc6dde94202d8c75ac2efae6a7667202c6cb3bb6 (patch) | |
tree | dc1962ba4783410c1d707f3bd64c6bd63601ddf5 /test | |
parent | 8a4de7abf8850f330f9201fb07aba16a622d1fd2 (diff) | |
download | ruby-bc6dde94202d8c75ac2efae6a7667202c6cb3bb6.tar.gz |
* parse.y (parser_tokadd_string): escape simple regexp meta
character termninators.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_regexp.rb | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb index 95dbb2b9d3..7e31e99aa7 100644 --- a/test/ruby/test_regexp.rb +++ b/test/ruby/test_regexp.rb @@ -1,5 +1,5 @@ require 'test/unit' -require_relative 'envutil' +require 'envutil' class TestRegexp < Test::Unit::TestCase def setup @@ -161,6 +161,40 @@ class TestRegexp < Test::Unit::TestCase assert_equal(':', %r:\::.source, bug5484) end + def test_source_escaped + expected, result = "$*+.?^|".each_char.map {|c| + [ + ["\\#{c}", "\\#{c}", 1], + begin + re = eval("%r#{c}\\#{c}#{c}", nil, __FILE__, __LINE__) + t = eval("/\\#{c}/", nil, __FILE__, __LINE__).source + rescue SyntaxError => e + [e, t, nil] + else + [re.source, t, re =~ "a#{c}a"] + end + ] + }.transpose + assert_equal(expected, result) + end + + def test_source_unescaped + expected, result = "!\"#%&',-/:;=@_`~".each_char.map {|c| + [ + ["#{c}", "\\#{c}", 1], + begin + re = eval("%r#{c}\\#{c}#{c}", nil, __FILE__, __LINE__) + t = eval("%r{\\#{c}}", nil, __FILE__, __LINE__).source + rescue SyntaxError => e + [e, t, nil] + else + [re.source, t, re =~ "a#{c}a"] + end + ] + }.transpose + assert_equal(expected, result) + end + def test_inspect assert_equal('//', //.inspect) assert_equal('//i', //i.inspect) |