diff options
Diffstat (limited to 'test/prism/dispatcher_test.rb')
-rw-r--r-- | test/prism/dispatcher_test.rb | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/prism/dispatcher_test.rb b/test/prism/dispatcher_test.rb new file mode 100644 index 0000000000..0d8a6d35e9 --- /dev/null +++ b/test/prism/dispatcher_test.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require_relative "test_helper" + +module Prism + class DispatcherTest < TestCase + class TestListener + attr_reader :events_received + + def initialize + @events_received = [] + end + + def on_call_node_enter(node) + events_received << :on_call_node_enter + end + + def on_call_node_leave(node) + events_received << :on_call_node_leave + end + + def on_integer_node_enter(node) + events_received << :on_integer_node_enter + end + end + + def test_dispatching_events + listener = TestListener.new + dispatcher = Dispatcher.new + dispatcher.register(listener, :on_call_node_enter, :on_call_node_leave, :on_integer_node_enter) + + root = Prism.parse(<<~RUBY).value + def foo + something(1, 2, 3) + end + RUBY + + dispatcher.dispatch(root) + assert_equal([:on_call_node_enter, :on_integer_node_enter, :on_integer_node_enter, :on_integer_node_enter, :on_call_node_leave], listener.events_received) + + listener.events_received.clear + dispatcher.dispatch_once(root.statements.body.first.body.body.first) + assert_equal([:on_call_node_enter, :on_call_node_leave], listener.events_received) + end + end +end |