From 640f4a23675cbf857e177aba86c7c5ff00538c93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 7 Sep 2018 11:08:22 +0200 Subject: [PATCH] Fix compatibility with Cucumber 3.1+ --- ...ve-of-Location-to-Cucumber-Core-Test.patch | 206 ++++++++++++++++++ rubygem-cucumber-wire.spec | 22 +- 2 files changed, 220 insertions(+), 8 deletions(-) create mode 100644 rubygem-cucumber-wire-0.0.1-Adapt-to-the-move-of-Location-to-Cucumber-Core-Test.patch diff --git a/rubygem-cucumber-wire-0.0.1-Adapt-to-the-move-of-Location-to-Cucumber-Core-Test.patch b/rubygem-cucumber-wire-0.0.1-Adapt-to-the-move-of-Location-to-Cucumber-Core-Test.patch new file mode 100644 index 0000000..bb8bd36 --- /dev/null +++ b/rubygem-cucumber-wire-0.0.1-Adapt-to-the-move-of-Location-to-Cucumber-Core-Test.patch @@ -0,0 +1,206 @@ +From 51ff0156094757ad21b8f380e2427d5b366924fa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B6rn=20Rasmusson?= +Date: Sun, 22 Jul 2018 21:23:34 +0200 +Subject: [PATCH] Fixes to work with modern Cucucmber-Ruby + +* Pass the registry all the way down to the step definitions. +* Move the class StepArgument from Cucumber-Ruby and update it to match + the expectations of Cucumber-Ruby when using cucumber-expressions. +--- + features/step_matches_message.feature | 2 +- + lib/cucumber/wire/connections.rb | 5 +++-- + lib/cucumber/wire/plugin.rb | 9 +++++---- + lib/cucumber/wire/protocol.rb | 4 ++-- + lib/cucumber/wire/protocol/requests.rb | 4 ++-- + lib/cucumber/wire/request_handler.rb | 3 ++- + lib/cucumber/wire/step_argument.rb | 24 ++++++++++++++++++++++++ + lib/cucumber/wire/step_definition.rb | 6 ++++-- + spec/cucumber/wire/connections_spec.rb | 4 ++-- + 9 files changed, 45 insertions(+), 16 deletions(-) + create mode 100644 lib/cucumber/wire/step_argument.rb + +diff --git a/features/step_matches_message.feature b/features/step_matches_message.feature +index b0051f8..afa70be 100644 +--- a/features/step_matches_message.feature ++++ b/features/step_matches_message.feature +@@ -70,7 +70,7 @@ Feature: Step matches message + """ + - + +- we.* # MyApp.MyClass:123 ++ "we.*" # MyApp.MyClass:123 + + 1 scenario (1 skipped) + 1 step (1 skipped) +diff --git a/lib/cucumber/wire/connections.rb b/lib/cucumber/wire/connections.rb +index 7856fea..4e57a22 100644 +--- a/lib/cucumber/wire/connections.rb ++++ b/lib/cucumber/wire/connections.rb +@@ -16,10 +16,11 @@ class Connections + attr_reader :connections + private :connections + +- def initialize(connections, configuration) ++ def initialize(connections, configuration, registry) + raise ArgumentError unless connections + @connections = connections + @configuration = configuration ++ @registry = registry + end + + def find_match(test_step) +@@ -30,7 +31,7 @@ def find_match(test_step) + end + + def step_matches(step_name) +- connections.map{ |c| c.step_matches(step_name)}.flatten ++ connections.map{ |c| c.step_matches(step_name, @registry)}.flatten + end + + def begin_scenario(test_case) +diff --git a/lib/cucumber/wire/plugin.rb b/lib/cucumber/wire/plugin.rb +index d1d6277..79843cd 100644 +--- a/lib/cucumber/wire/plugin.rb ++++ b/lib/cucumber/wire/plugin.rb +@@ -5,15 +5,16 @@ + module Cucumber + module Wire + class Plugin +- attr_reader :config +- private :config ++ attr_reader :config, :registry ++ private :config, :registry + +- def initialize(config) ++ def initialize(config, registry) + @config = config ++ @registry = registry + end + + def install +- connections = Connections.new(wire_files.map { |f| create_connection(f) }, @config) ++ connections = Connections.new(wire_files.map { |f| create_connection(f) }, config, registry) + config.filters << Filters::ActivateSteps.new(StepMatchSearch.new(connections.method(:step_matches), @config), @config) + config.filters << AddHooksFilter.new(connections) unless @config.dry_run? + config.register_snippet_generator Snippet::Generator.new(connections) +diff --git a/lib/cucumber/wire/protocol.rb b/lib/cucumber/wire/protocol.rb +index 328c728..738577e 100644 +--- a/lib/cucumber/wire/protocol.rb ++++ b/lib/cucumber/wire/protocol.rb +@@ -3,8 +3,8 @@ + module Cucumber + module Wire + module Protocol +- def step_matches(name_to_match) +- handler = Requests::StepMatches.new(self) ++ def step_matches(name_to_match, registry) ++ handler = Requests::StepMatches.new(self, registry) + handler.execute(name_to_match) + end + +diff --git a/lib/cucumber/wire/protocol/requests.rb b/lib/cucumber/wire/protocol/requests.rb +index eff80b0..5e32d11 100644 +--- a/lib/cucumber/wire/protocol/requests.rb ++++ b/lib/cucumber/wire/protocol/requests.rb +@@ -1,5 +1,5 @@ + require 'cucumber/wire/request_handler' +-require 'cucumber/step_argument' ++require 'cucumber/wire/step_argument' + + module Cucumber + module Wire +@@ -25,7 +25,7 @@ def handle_success(params) + private + + def create_step_match(raw_step_match) +- step_definition = StepDefinition.new(@connection, raw_step_match) ++ step_definition = StepDefinition.new(@connection, raw_step_match, @registry) + step_args = raw_step_match['args'].map do |raw_arg| + StepArgument.new(raw_arg['pos'], raw_arg['val']) + end +diff --git a/lib/cucumber/wire/request_handler.rb b/lib/cucumber/wire/request_handler.rb +index ee8f2f1..118f9cd 100644 +--- a/lib/cucumber/wire/request_handler.rb ++++ b/lib/cucumber/wire/request_handler.rb +@@ -1,9 +1,10 @@ + module Cucumber + module Wire + class RequestHandler +- def initialize(connection) ++ def initialize(connection, registry = nil) + @connection = connection + @message = underscore(self.class.name.split('::').last) ++ @registry = registry + end + + def execute(request_params = nil) +diff --git a/lib/cucumber/wire/step_argument.rb b/lib/cucumber/wire/step_argument.rb +new file mode 100644 +index 0000000..116ee3a +--- /dev/null ++++ b/lib/cucumber/wire/step_argument.rb +@@ -0,0 +1,24 @@ ++# frozen_string_literal: true ++require 'cucumber/cucumber_expressions/group' ++ ++module Cucumber ++ module Wire ++ # Defines the location and value of a captured argument from the step ++ # text ++ class StepArgument ++ attr_reader :offset ++ ++ def initialize(offset, val) ++ @offset, @value = offset, val ++ end ++ ++ def value(_current_world) ++ @value ++ end ++ ++ def group ++ CucumberExpressions::Group.new(@value, @offset, @offset + @value.length, []) ++ end ++ end ++ end ++end +diff --git a/lib/cucumber/wire/step_definition.rb b/lib/cucumber/wire/step_definition.rb +index 09a4f1d..b453cdc 100644 +--- a/lib/cucumber/wire/step_definition.rb ++++ b/lib/cucumber/wire/step_definition.rb +@@ -3,12 +3,14 @@ + module Cucumber + module Wire + class StepDefinition +- attr_reader :regexp_source, :location ++ attr_reader :regexp_source, :location, :registry, :expression + +- def initialize(connection, data) ++ def initialize(connection, data, registry) + @connection = connection ++ @registry = registry + @id = data['id'] + @regexp_source = data['regexp'] || "Unknown" ++ @expression = registry.create_expression(@regexp_source) + @location = Core::Ast::Location.from_file_colon_line(data['source'] || "unknown:0") + end + +diff --git a/spec/cucumber/wire/connections_spec.rb b/spec/cucumber/wire/connections_spec.rb +index 449e19f..62c9f1a 100644 +--- a/spec/cucumber/wire/connections_spec.rb ++++ b/spec/cucumber/wire/connections_spec.rb +@@ -9,12 +9,12 @@ module Wire + connection1 = double(step_matches: [:a, :b]) + connection2 = double(step_matches: [:c]) + +- connections = Connections.new([connection1, connection2], double) ++ connections = Connections.new([connection1, connection2], double, double) + expect(connections.step_matches('')).to eq [:a, :b, :c] + end + + it "copes with no connections" do +- connections = Connections.new([], double) ++ connections = Connections.new([], double, double) + expect(connections.step_matches('')).to eq [] + end + end diff --git a/rubygem-cucumber-wire.spec b/rubygem-cucumber-wire.spec index 770e023..06a66b9 100644 --- a/rubygem-cucumber-wire.spec +++ b/rubygem-cucumber-wire.spec @@ -5,12 +5,14 @@ Name: rubygem-%{gem_name} Version: 0.0.1 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Wire protocol for Cucumber -Group: Development/Languages License: MIT URL: http://cucumber.io Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem +# Fix compatibility with Cucumber 3.1+ +# https://github.com/cucumber/cucumber-ruby-wire/pull/14 +Patch0: rubygem-cucumber-wire-0.0.1-Adapt-to-the-move-of-Location-to-Cucumber-Core-Test.patch BuildRequires: ruby(release) BuildRequires: rubygems-devel BuildRequires: ruby @@ -28,7 +30,6 @@ Wire protocol for Cucumber. %package doc Summary: Documentation for %{name} -Group: Documentation Requires: %{name} = %{version}-%{release} BuildArch: noarch @@ -36,15 +37,17 @@ BuildArch: noarch Documentation for %{name}. %prep -gem unpack %{SOURCE0} +%setup -q -n %{gem_name}-%{version} -%setup -q -D -T -n %{gem_name}-%{version} - -gem spec %{SOURCE0} -l --ruby > %{gem_name}.gemspec +%patch0 -p1 +%gemspec_add_file 'lib/cucumber/wire/step_argument.rb' %build -gem build %{gem_name}.gemspec +# Create the gem as gem install only works on a gem file +gem build ../%{gem_name}-%{version}.gemspec +# %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir +# by default, so that we can move it into the buildroot in %%install %gem_install %install @@ -86,6 +89,9 @@ popd %{gem_instdir}/spec %changelog +* Thu Sep 06 2018 Vít Ondruch - 0.0.1-7 +- Fix compatibility with Cucumber 3.1+ + * Sat Jul 14 2018 Fedora Release Engineering - 0.0.1-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild