diff --git a/CHANGELOG.md b/CHANGELOG.md index c659f8df0..5432bcd49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo ## [Unreleased] ### Added +- Add timestamp to `Attachment` message - A first initial iteration of the new `cucumber-query` structure ([#1801](https://github.com/cucumber/cucumber-ruby/pull/1801) [luke-hill](https://github.com/luke-hill)) > This is currently not consumed anywhere, but will become the building blocks for the future of cucumber formatters diff --git a/compatibility/cck_spec.rb b/compatibility/cck_spec.rb index d904dbf3f..566ab17a9 100644 --- a/compatibility/cck_spec.rb +++ b/compatibility/cck_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true require_relative 'support/shared_examples' -require_relative 'support/cck/examples' +require_relative 'support/compatibility_kit' -require 'cck/examples' +require 'cucumber/compatibility_kit' # This is the implementation of the CCK testing for cucumber-ruby # It will run each example from the CCK that is of type "gherkin" (As "markdown" examples aren't implemented in ruby) @@ -13,13 +13,36 @@ describe CCK, :cck do let(:cucumber_command) { 'bundle exec cucumber --publish-quiet --profile none --format message' } - CCK::Examples.gherkin.each do |example_name| + # CCK v22 conformance status update - Jan 2026 + # OVERALL: 93 examples, 15 failures, 78 passed + # SANITIZED: 69 examples, 0 failures, 69 passed + + items_to_fix = + %w[ + ambiguous + backgrounds + global-hooks + global-hooks-afterall-error + global-hooks-attachments + global-hooks-beforeall-error + multiple-features-reversed + retry + ] + _failing, passing = CompatibilityKit.gherkin.partition { |name| items_to_fix.include?(name) } + + passing.each do |example_name| describe "'#{example_name}' example" do include_examples 'cucumber compatibility kit' do let(:example) { example_name } - let(:extra_args) { example == 'retry' ? '--retry 2' : '' } - let(:support_code_path) { CCK::Examples.supporting_code_for(example) } - let(:messages) { `#{cucumber_command} #{extra_args} --require #{support_code_path} #{cck_path}` } + let(:extra_args) do + if File.exist?("#{cck_path}/#{example}.arguments.txt") + File.read("#{cck_path}/#{example}.arguments.txt").to_s + else + '' + end + end + let(:support_code_path) { CompatibilityKit.supporting_code_for(example) } + let(:messages) { `#{cucumber_command} --require #{support_code_path} #{cck_path} #{extra_args}` } end end end diff --git a/compatibility/features/ambiguous/ambiguous_steps.rb b/compatibility/features/ambiguous/ambiguous_steps.rb new file mode 100644 index 000000000..21161e30d --- /dev/null +++ b/compatibility/features/ambiguous/ambiguous_steps.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +Given(/^a (.*?) with (.*?)$/) do |_arg1, _arg2| + # no-op +end + +Given(/^a step with (.*)$/) do |_arg1| + # no-op +end diff --git a/compatibility/features/doc-strings/doc-strings_steps.rb b/compatibility/features/doc-strings/doc-strings_steps.rb new file mode 100644 index 000000000..a374b1c40 --- /dev/null +++ b/compatibility/features/doc-strings/doc-strings_steps.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Given('a doc string:') do |doc_string| + # no-op +end diff --git a/compatibility/features/global-hooks-afterall-error/global-hooks-afterall-error_steps.rb b/compatibility/features/global-hooks-afterall-error/global-hooks-afterall-error_steps.rb new file mode 100644 index 000000000..d72047878 --- /dev/null +++ b/compatibility/features/global-hooks-afterall-error/global-hooks-afterall-error_steps.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +BeforeAll do + # no-op +end + +BeforeAll do + raise 'BeforeAll hook went wrong' +end + +BeforeAll do + # no-op +end + +When('a step passes') do + # no-op +end + +AfterAll do + # no-op +end + +AfterAll do + # no-op +end diff --git a/compatibility/features/global-hooks-attachments/global-hooks-attachments_steps.rb b/compatibility/features/global-hooks-attachments/global-hooks-attachments_steps.rb new file mode 100644 index 000000000..b2c272529 --- /dev/null +++ b/compatibility/features/global-hooks-attachments/global-hooks-attachments_steps.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +BeforeAll do + attach('Attachment from BeforeAll hook', 'text/plain') +end + +When('a step passes') do + # no-op +end + +AfterAll do + attach('Attachment from AfterAll hook', 'text/plain') +end diff --git a/compatibility/features/global-hooks-beforeall-error/global-hooks-beforeall-error_steps.rb b/compatibility/features/global-hooks-beforeall-error/global-hooks-beforeall-error_steps.rb new file mode 100644 index 000000000..bca4571e4 --- /dev/null +++ b/compatibility/features/global-hooks-beforeall-error/global-hooks-beforeall-error_steps.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +BeforeAll do + # no-op +end + +BeforeAll do + # no-op +end + +When('a step passes') do + # no-op +end + +AfterAll do + # no-op +end + +AfterAll do + raise 'AfterAll hook went wrong' +end + +AfterAll do + # no-op +end diff --git a/compatibility/features/global-hooks/global-hooks_steps.rb b/compatibility/features/global-hooks/global-hooks_steps.rb new file mode 100644 index 000000000..993bc62c5 --- /dev/null +++ b/compatibility/features/global-hooks/global-hooks_steps.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +BeforeAll do + # no-op +end + +BeforeAll do + # no-op +end + +When('a step passes') do + # no-op +end + +When('a step fails') do + raise 'Exception in step' +end + +AfterAll do + # no-op +end + +AfterAll do + # no-op +end diff --git a/compatibility/features/multiple-features-reversed/multiple-features-reversed_steps.rb b/compatibility/features/multiple-features-reversed/multiple-features-reversed_steps.rb new file mode 100644 index 000000000..cd8682ffe --- /dev/null +++ b/compatibility/features/multiple-features-reversed/multiple-features-reversed_steps.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Given('an order for {string}') do |_item| + # no-op +end diff --git a/compatibility/features/multiple-features/multiple-features_steps.rb b/compatibility/features/multiple-features/multiple-features_steps.rb new file mode 100644 index 000000000..cd8682ffe --- /dev/null +++ b/compatibility/features/multiple-features/multiple-features_steps.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Given('an order for {string}') do |_item| + # no-op +end diff --git a/compatibility/features/regular-expression/regular-expression_steps.rb b/compatibility/features/regular-expression/regular-expression_steps.rb new file mode 100644 index 000000000..246e6e3e0 --- /dev/null +++ b/compatibility/features/regular-expression/regular-expression_steps.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Given(/^a (.*?)(?: and a (.*?))?(?: and a (.*?))?$/) do |_vegetable1, _vegetable2, _vegetable3| + # no-op +end diff --git a/compatibility/features/retry/retry_steps.rb b/compatibility/features/retry/retry_steps.rb index c31a0aa63..d042e9304 100644 --- a/compatibility/features/retry/retry_steps.rb +++ b/compatibility/features/retry/retry_steps.rb @@ -19,3 +19,15 @@ Given('a step that always fails') do raise 'Exception in step' end + +Given('an ambiguous step') do + # first one +end + +Given('an ambiguous step') do + # second one +end + +Given('a pending step') do + pending('') +end diff --git a/compatibility/features/rules-backgrounds/rules-backgrounds_steps.rb b/compatibility/features/rules-backgrounds/rules-backgrounds_steps.rb new file mode 100644 index 000000000..3b5187169 --- /dev/null +++ b/compatibility/features/rules-backgrounds/rules-backgrounds_steps.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +Given('an order for {string}') do |_item| + # no-op +end + +When('an action') do + # no-op +end + +Then('an outcome') do + # no-op +end diff --git a/compatibility/features/unused-steps/unused-steps_steps.rb b/compatibility/features/unused-steps/unused-steps_steps.rb new file mode 100644 index 000000000..f06fdfa5f --- /dev/null +++ b/compatibility/features/unused-steps/unused-steps_steps.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +Given('a step that is used') do + # no-op +end + +Given('a step that is not used') do + # no-op +end diff --git a/compatibility/spec/cck/examples_spec.rb b/compatibility/spec/compatibility_kit_spec.rb similarity index 80% rename from compatibility/spec/cck/examples_spec.rb rename to compatibility/spec/compatibility_kit_spec.rb index 97cb995da..10aab51c4 100644 --- a/compatibility/spec/cck/examples_spec.rb +++ b/compatibility/spec/compatibility_kit_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require_relative '../../support/cck/examples' +require_relative '../support/compatibility_kit' -describe CCK::Examples do - let(:features_path) { File.expand_path("#{File.dirname(__FILE__)}/../../features") } +describe CompatibilityKit do + let(:features_path) { File.expand_path("#{File.dirname(__FILE__)}/../features") } - describe '#supporting_code_for' do + describe '.supporting_code_for' do context 'with an example that exists' do it 'returns the path of the folder containing the supporting code for the example' do expect(described_class.supporting_code_for('hooks')).to eq("#{features_path}/hooks") diff --git a/compatibility/support/cck/examples.rb b/compatibility/support/cck/examples.rb deleted file mode 100644 index 27923826c..000000000 --- a/compatibility/support/cck/examples.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module CCK - module Examples - class << self - def supporting_code_for(example_name) - path = File.join(local_features_folder_location, example_name) - - return path if File.directory?(path) - - raise ArgumentError, "No supporting code directory found locally for CCK example: #{example_name}" - end - - private - - def local_features_folder_location - File.expand_path("#{File.dirname(__FILE__)}/../../features/") - end - end - end -end diff --git a/compatibility/support/compatibility_kit.rb b/compatibility/support/compatibility_kit.rb new file mode 100644 index 000000000..70b0b8c63 --- /dev/null +++ b/compatibility/support/compatibility_kit.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class CompatibilityKit + class << self + def supporting_code_for(example_name) + path = File.join(local_features_folder_location, example_name) + + return path if File.directory?(path) + + raise ArgumentError, "No supporting code directory found locally for CCK example: #{example_name}" + end + + private + + def local_features_folder_location + File.expand_path("#{File.dirname(__FILE__)}/../features/") + end + end +end diff --git a/compatibility/support/shared_examples.rb b/compatibility/support/shared_examples.rb index a9ebf8a99..6f2674dbe 100644 --- a/compatibility/support/shared_examples.rb +++ b/compatibility/support/shared_examples.rb @@ -10,7 +10,7 @@ RSpec.shared_examples 'cucumber compatibility kit' do include CCK::Helpers - let(:cck_path) { CCK::Examples.feature_code_for(example) } + let(:cck_path) { CompatibilityKit.feature_code_for(example) } let(:parsed_original) { parse_ndjson_file("#{cck_path}/#{example}.ndjson") } let(:parsed_generated) { parse_ndjson(messages) } diff --git a/cucumber.gemspec b/cucumber.gemspec index 8162a1dfb..bbf926516 100644 --- a/cucumber.gemspec +++ b/cucumber.gemspec @@ -35,7 +35,7 @@ Gem::Specification.new do |s| s.add_dependency 'multi_test', '~> 1.1' s.add_dependency 'sys-uname', '~> 1.3' - s.add_development_dependency 'cucumber-compatibility-kit', '~> 20.0' + s.add_development_dependency 'cucumber-compatibility-kit', '~> 22.0' # Only needed whilst we are testing the formatters. Can be removed once we remove tests for those s.add_development_dependency 'nokogiri', '~> 1.15' s.add_development_dependency 'rake', '~> 13.2'