From 71a9d55d11af79d1d653a5b9a8d09b87d782c6c0 Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Wed, 15 Jan 2020 13:16:25 +0100 Subject: [PATCH 1/2] Add envelope event and emit it after parsing gherkin documents --- lib/cucumber/core/events.rb | 5 +++++ lib/cucumber/core/gherkin/parser.rb | 1 + spec/cucumber/core/gherkin/parser_spec.rb | 1 + 3 files changed, 7 insertions(+) diff --git a/lib/cucumber/core/events.rb b/lib/cucumber/core/events.rb index 900aed1e..068a0092 100644 --- a/lib/cucumber/core/events.rb +++ b/lib/cucumber/core/events.rb @@ -5,6 +5,10 @@ module Cucumber module Core module Events + class Envelope < Event.new(:envelope) + attr_reader :envelope + end + # Signals that a gherkin source has been parsed class GherkinSourceParsed < Event.new(:gherkin_document) # @return [GherkinDocument] the GherkinDocument Ast Node @@ -55,6 +59,7 @@ class TestCaseFinished < Event.new(:test_case, :result) # that will be used by the {EventBus} by default. def self.registry build_registry( + Envelope, GherkinSourceParsed, TestCaseStarted, TestStepStarted, diff --git a/lib/cucumber/core/gherkin/parser.rb b/lib/cucumber/core/gherkin/parser.rb index 1bcab80d..1fc9815e 100644 --- a/lib/cucumber/core/gherkin/parser.rb +++ b/lib/cucumber/core/gherkin/parser.rb @@ -19,6 +19,7 @@ def initialize(receiver, event_bus, gherkin_query) def document(document) messages = ::Gherkin.from_source(document.uri, document.body, gherkin_options(document)) messages.each do |message| + event_bus.envelope(message) gherkin_query.update(message) if !message.gherkin_document.nil? event_bus.gherkin_source_parsed(message.gherkin_document) diff --git a/spec/cucumber/core/gherkin/parser_spec.rb b/spec/cucumber/core/gherkin/parser_spec.rb index f441cd92..503270c0 100644 --- a/spec/cucumber/core/gherkin/parser_spec.rb +++ b/spec/cucumber/core/gherkin/parser_spec.rb @@ -15,6 +15,7 @@ module Gherkin before do allow( event_bus ).to receive(:gherkin_source_parsed) + allow( event_bus).to receive(:envelope) allow( gherkin_query ).to receive(:update) end From e5b4a215198dee03d86bec3a90e6de457208063a Mon Sep 17 00:00:00 2001 From: Vincent Pretre Date: Wed, 15 Jan 2020 14:05:29 +0100 Subject: [PATCH 2/2] Add tests to ensure messages are correctly emitted after gherkin parsing --- spec/cucumber/core/gherkin/parser_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spec/cucumber/core/gherkin/parser_spec.rb b/spec/cucumber/core/gherkin/parser_spec.rb index 503270c0..e6ec5260 100644 --- a/spec/cucumber/core/gherkin/parser_spec.rb +++ b/spec/cucumber/core/gherkin/parser_spec.rb @@ -43,6 +43,12 @@ def parse expect( event_bus ).to receive(:gherkin_source_parsed) parse end + + it "emits an 'envelope' event for every message produced by Gherkin" do + # Only one message emited, there's no pickles generated + expect( event_bus ).to receive(:envelope).once + parse + end end context "for empty files" do @@ -90,6 +96,13 @@ def self.source(&block) expect( receiver ).to receive(:pickle) parse end + + it "emits an 'envelope' event containing the pickle" do + allow( receiver ).to receive(:pickle) + # Once for the gherkin document, once with the pickle + expect( event_bus ).to receive(:envelope).twice + parse + end end context "when scenario is inside a rule" do