summaryrefslogtreecommitdiff
path: root/test/ripper
diff options
context:
space:
mode:
Diffstat (limited to 'test/ripper')
-rw-r--r--test/ripper/dummyparser.rb8
-rw-r--r--test/ripper/test_parser_events.rb8
2 files changed, 14 insertions, 2 deletions
diff --git a/test/ripper/dummyparser.rb b/test/ripper/dummyparser.rb
index 1403203dae..35c08b52bb 100644
--- a/test/ripper/dummyparser.rb
+++ b/test/ripper/dummyparser.rb
@@ -26,8 +26,8 @@ class Node
end
class NodeList
- def initialize
- @list = []
+ def initialize(list = [])
+ @list = list
end
attr_reader :list
@@ -208,6 +208,10 @@ class DummyParser < Ripper
words.push word
end
+ def on_rescue(exc, *rest)
+ Node.new('rescue', (exc && NodeList.new(exc)), *rest)
+ end
+
(Ripper::PARSER_EVENTS.map(&:to_s) - instance_methods(false).map {|n|n.to_s.sub(/^on_/, '')}).each do |event|
define_method(:"on_#{event}") do |*args|
Node.new(event, *args)
diff --git a/test/ripper/test_parser_events.rb b/test/ripper/test_parser_events.rb
index cab91b9fac..883684aca1 100644
--- a/test/ripper/test_parser_events.rb
+++ b/test/ripper/test_parser_events.rb
@@ -842,6 +842,14 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
assert_match(/rescue\(,var_field\(e\),\[2\]\)/, parsed)
end
+ def test_rescue_class
+ thru_rescue = false
+ parsed = parse('begin; 1; rescue RuntimeError => e; 2; end', :on_rescue) {thru_rescue = true}
+ assert_equal true, thru_rescue
+ assert_match(/1.*rescue/, parsed)
+ assert_match(/rescue\(\[ref\(RuntimeError\)\],var_field\(e\),\[2\]\)/, parsed)
+ end
+
def test_rescue_mod
thru_rescue_mod = false
parsed = parse('1 rescue 2', :on_rescue_mod) {thru_rescue_mod = true}