cucumber-compatibility-kit 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +56 -0
  3. data/features/attachments/attachments.feature +41 -0
  4. data/features/attachments/attachments.feature.ndjson +77 -0
  5. data/features/attachments/attachments.feature.rb +51 -0
  6. data/features/attachments/cucumber.png +0 -0
  7. data/features/data-tables/data-tables.feature +12 -0
  8. data/features/data-tables/data-tables.feature.ndjson +15 -0
  9. data/features/data-tables/data-tables.feature.rb +7 -0
  10. data/features/examples-tables/examples-tables.feature +28 -0
  11. data/features/examples-tables/examples-tables.feature.ndjson +68 -0
  12. data/features/examples-tables/examples-tables.feature.rb +11 -0
  13. data/features/hooks/cucumber.svg +7 -0
  14. data/features/hooks/hooks.feature +20 -0
  15. data/features/hooks/hooks.feature.ndjson +66 -0
  16. data/features/hooks/hooks.feature.rb +28 -0
  17. data/features/markdown/markdown.feature.md +46 -0
  18. data/features/markdown/markdown.feature.md.ndjson +35 -0
  19. data/features/minimal/minimal.feature +10 -0
  20. data/features/minimal/minimal.feature.ndjson +12 -0
  21. data/features/minimal/minimal.feature.rb +2 -0
  22. data/features/parameter-types/parameter-types.feature +9 -0
  23. data/features/parameter-types/parameter-types.feature.ndjson +13 -0
  24. data/features/parameter-types/parameter-types.feature.rb +21 -0
  25. data/features/pending/pending.feature +19 -0
  26. data/features/pending/pending.feature.ndjson +30 -0
  27. data/features/pending/pending.feature.rb +11 -0
  28. data/features/retry/retry.feature +22 -0
  29. data/features/retry/retry.feature.ndjson +59 -0
  30. data/features/retry/retry.feature.rb +23 -0
  31. data/features/rules/rules.feature +27 -0
  32. data/features/rules/rules.feature.ndjson +45 -0
  33. data/features/rules/rules.feature.rb +26 -0
  34. data/features/skipped/skipped.feature +19 -0
  35. data/features/skipped/skipped.feature.ndjson +33 -0
  36. data/features/skipped/skipped.feature.rb +15 -0
  37. data/features/stack-traces/stack-traces.feature +11 -0
  38. data/features/stack-traces/stack-traces.feature.ndjson +12 -0
  39. data/features/stack-traces/stack-traces.feature.rb +3 -0
  40. data/features/undefined/undefined.feature +17 -0
  41. data/features/undefined/undefined.feature.ndjson +29 -0
  42. data/features/undefined/undefined.feature.rb +7 -0
  43. data/features/unknown-parameter-type/unknown-parameter-type.feature +6 -0
  44. data/features/unknown-parameter-type/unknown-parameter-type.feature.ndjson +12 -0
  45. data/features/unknown-parameter-type/unknown-parameter-type.feature.rb +3 -0
  46. data/lib/cucumber-compatibility-kit.rb +55 -0
  47. data/lib/keys_checker.rb +24 -0
  48. data/lib/messages_comparator.rb +83 -0
  49. data/lib/shared_examples.rb +63 -0
  50. data/spec/capture_warnings.rb +74 -0
  51. data/spec/cucumber-compatibility-kit_spec.rb +71 -0
  52. data/spec/keys_checker_spec.rb +77 -0
  53. metadata +165 -0
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+ # With thanks to @myronmarston
3
+ # https://github.com/vcr/vcr/blob/master/spec/capture_warnings.rb
4
+
5
+ module CaptureWarnings
6
+ def report_warnings(&block)
7
+ current_dir = Dir.pwd
8
+ warnings, errors = capture_error(&block).partition { |line| line.include?('warning') }
9
+ project_warnings, other_warnings = warnings.uniq.partition { |line| line.include?(current_dir) }
10
+
11
+ if errors.any?
12
+ puts errors.join("\n")
13
+ end
14
+
15
+ if other_warnings.any?
16
+ puts "#{ other_warnings.count } warnings detected, set VIEW_OTHER_WARNINGS=true to see them."
17
+ print_warnings('other', other_warnings) if ENV['VIEW_OTHER_WARNINGS']
18
+ end
19
+
20
+ # Until they fix https://bugs.ruby-lang.org/issues/10661
21
+ if RUBY_VERSION == "2.2.0"
22
+ project_warnings = project_warnings.reject { |w| w =~ /warning: possible reference to past scope/ }
23
+ end
24
+
25
+ if project_warnings.any?
26
+ puts "#{ project_warnings.count } warnings detected"
27
+ print_warnings('cucumber-expressions', project_warnings)
28
+ fail "Please remove all cucumber-expressions warnings."
29
+ end
30
+
31
+ ensure_system_exit_if_required
32
+ end
33
+
34
+ def capture_error(&block)
35
+ old_stderr = STDERR.clone
36
+ pipe_r, pipe_w = IO.pipe
37
+ pipe_r.sync = true
38
+ error = String.new
39
+ reader = Thread.new do
40
+ begin
41
+ loop do
42
+ error << pipe_r.readpartial(1024)
43
+ end
44
+ rescue EOFError
45
+ end
46
+ end
47
+ STDERR.reopen(pipe_w)
48
+ block.call
49
+ ensure
50
+ capture_system_exit
51
+ STDERR.reopen(old_stderr)
52
+ pipe_w.close
53
+ reader.join
54
+ return error.split("\n")
55
+ end
56
+
57
+ def print_warnings(type, warnings)
58
+ puts
59
+ puts "-" * 30 + " #{type} warnings: " + "-" * 30
60
+ puts
61
+ puts warnings.join("\n")
62
+ puts
63
+ puts "-" * 75
64
+ puts
65
+ end
66
+
67
+ def ensure_system_exit_if_required
68
+ raise @system_exit if @system_exit
69
+ end
70
+
71
+ def capture_system_exit
72
+ @system_exit = $!
73
+ end
74
+ end
@@ -0,0 +1,71 @@
1
+ require 'cucumber-compatibility-kit'
2
+
3
+ describe Cucumber::CompatibilityKit do
4
+ let(:features_path) { File.expand_path("#{File.dirname(__FILE__)}/../features") }
5
+ let(:gherkin_examples) {
6
+ [
7
+ 'attachments',
8
+ 'data-tables',
9
+ 'examples-tables',
10
+ 'hooks',
11
+ 'minimal',
12
+ 'parameter-types',
13
+ 'pending',
14
+ 'retry',
15
+ 'rules',
16
+ 'skipped',
17
+ 'stack-traces',
18
+ 'undefined',
19
+ 'unknown-parameter-type'
20
+ ]
21
+ }
22
+ let(:markdown_examples) {
23
+ [
24
+ 'markdown'
25
+ ]
26
+ }
27
+
28
+ describe '#examples_path' do
29
+ it 'returns the path of the features folder' do
30
+ expect(Cucumber::CompatibilityKit.examples_path)
31
+ .to eq(features_path)
32
+ end
33
+ end
34
+
35
+ describe '#example_path' do
36
+ context 'with an existing example' do
37
+ it 'returns the path of the folder of the example' do
38
+ expect(Cucumber::CompatibilityKit.example_path('hooks'))
39
+ .to eq("#{features_path}/hooks")
40
+ end
41
+ end
42
+
43
+ context 'with an unexisting example' do
44
+ it 'raises ArgumentError' do
45
+ expect { Cucumber::CompatibilityKit.example_path('should-not-exists') }
46
+ .to raise_error(ArgumentError)
47
+ end
48
+ end
49
+ end
50
+
51
+ describe '#gherkin_examples' do
52
+ it 'returns the list of gherkin examples' do
53
+ expect(Cucumber::CompatibilityKit.gherkin_examples)
54
+ .to match_array(gherkin_examples)
55
+ end
56
+ end
57
+
58
+ describe '#markdown_examples' do
59
+ it 'returns the list of markdown examples' do
60
+ expect(Cucumber::CompatibilityKit.markdown_examples)
61
+ .to match_array(markdown_examples)
62
+ end
63
+ end
64
+
65
+ describe '#all_examples' do
66
+ it 'returns the list of all available examples' do
67
+ expect(Cucumber::CompatibilityKit.all_examples)
68
+ .to match_array(gherkin_examples + markdown_examples)
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,77 @@
1
+ require 'rspec'
2
+ require 'cucumber/messages'
3
+ require_relative '../lib/keys_checker'
4
+
5
+ describe CCK::KeysChecker do
6
+ let(:subject) { CCK::KeysChecker }
7
+
8
+ describe '#compare' do
9
+ let(:complete) do
10
+ Cucumber::Messages::PickleStepArgument.new(
11
+ doc_string: '1',
12
+ data_table: '12'
13
+ )
14
+ end
15
+
16
+ let(:missing_data_table) do
17
+ Cucumber::Messages::PickleStepArgument.new(
18
+ doc_string: '1'
19
+ )
20
+ end
21
+
22
+ let(:missing_doc_string) do
23
+ Cucumber::Messages::PickleStepArgument.new(
24
+ data_table: '12'
25
+ )
26
+ end
27
+
28
+ let(:wrong_values) do
29
+ Cucumber::Messages::PickleStepArgument.new(
30
+ doc_string: '123',
31
+ data_table: '456'
32
+ )
33
+ end
34
+
35
+ it 'finds missing key' do
36
+ expect(subject.compare(missing_data_table, complete)).to eq(
37
+ ['Missing keys in message Cucumber::Messages::PickleStepArgument: [:data_table]']
38
+ )
39
+ end
40
+
41
+ it 'finds extra keys' do
42
+ expect(subject.compare(complete, missing_doc_string)).to eq(
43
+ ['Found extra keys in message Cucumber::Messages::PickleStepArgument: [:doc_string]']
44
+ )
45
+ end
46
+
47
+ it 'finds extra and missing' do
48
+ expect(subject.compare(missing_doc_string, missing_data_table)).to contain_exactly(
49
+ 'Missing keys in message Cucumber::Messages::PickleStepArgument: [:doc_string]',
50
+ 'Found extra keys in message Cucumber::Messages::PickleStepArgument: [:data_table]'
51
+ )
52
+ end
53
+
54
+ it 'does not care about the values' do
55
+ expect(subject.compare(complete, wrong_values)).to be_empty
56
+ end
57
+
58
+ context 'when default values are omitted' do
59
+ let(:default_set) do
60
+ Cucumber::Messages::Duration.new(
61
+ seconds: 0,
62
+ nanos: 12
63
+ )
64
+ end
65
+
66
+ let(:default_not_set) do
67
+ Cucumber::Messages::Duration.new(
68
+ nanos: 12
69
+ )
70
+ end
71
+
72
+ it 'does not raise an exception' do
73
+ expect(subject.compare(default_set, default_not_set)).to be_empty
74
+ end
75
+ end
76
+ end
77
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cucumber-compatibility-kit
3
+ version: !ruby/object:Gem::Version
4
+ version: 9.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Aurélien Reeves
8
+ - Aslak Hellesøy
9
+ - Vincent Prêtre
10
+ - Cucumber Ltd
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2021-10-19 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: cucumber-messages
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '17.1'
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 17.1.1
26
+ type: :runtime
27
+ prerelease: false
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '17.1'
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 17.1.1
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '13.0'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 13.0.6
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '13.0'
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 13.0.6
56
+ - !ruby/object:Gem::Dependency
57
+ name: rspec
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.10'
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 3.10.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '3.10'
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.10.0
76
+ description: Kit to check compatibility with official cucumber implementation
77
+ email: cukebot@cucumber.io
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - README.md
83
+ - features/attachments/attachments.feature
84
+ - features/attachments/attachments.feature.ndjson
85
+ - features/attachments/attachments.feature.rb
86
+ - features/attachments/cucumber.png
87
+ - features/data-tables/data-tables.feature
88
+ - features/data-tables/data-tables.feature.ndjson
89
+ - features/data-tables/data-tables.feature.rb
90
+ - features/examples-tables/examples-tables.feature
91
+ - features/examples-tables/examples-tables.feature.ndjson
92
+ - features/examples-tables/examples-tables.feature.rb
93
+ - features/hooks/cucumber.svg
94
+ - features/hooks/hooks.feature
95
+ - features/hooks/hooks.feature.ndjson
96
+ - features/hooks/hooks.feature.rb
97
+ - features/markdown/markdown.feature.md
98
+ - features/markdown/markdown.feature.md.ndjson
99
+ - features/minimal/minimal.feature
100
+ - features/minimal/minimal.feature.ndjson
101
+ - features/minimal/minimal.feature.rb
102
+ - features/parameter-types/parameter-types.feature
103
+ - features/parameter-types/parameter-types.feature.ndjson
104
+ - features/parameter-types/parameter-types.feature.rb
105
+ - features/pending/pending.feature
106
+ - features/pending/pending.feature.ndjson
107
+ - features/pending/pending.feature.rb
108
+ - features/retry/retry.feature
109
+ - features/retry/retry.feature.ndjson
110
+ - features/retry/retry.feature.rb
111
+ - features/rules/rules.feature
112
+ - features/rules/rules.feature.ndjson
113
+ - features/rules/rules.feature.rb
114
+ - features/skipped/skipped.feature
115
+ - features/skipped/skipped.feature.ndjson
116
+ - features/skipped/skipped.feature.rb
117
+ - features/stack-traces/stack-traces.feature
118
+ - features/stack-traces/stack-traces.feature.ndjson
119
+ - features/stack-traces/stack-traces.feature.rb
120
+ - features/undefined/undefined.feature
121
+ - features/undefined/undefined.feature.ndjson
122
+ - features/undefined/undefined.feature.rb
123
+ - features/unknown-parameter-type/unknown-parameter-type.feature
124
+ - features/unknown-parameter-type/unknown-parameter-type.feature.ndjson
125
+ - features/unknown-parameter-type/unknown-parameter-type.feature.rb
126
+ - lib/cucumber-compatibility-kit.rb
127
+ - lib/keys_checker.rb
128
+ - lib/messages_comparator.rb
129
+ - lib/shared_examples.rb
130
+ - spec/capture_warnings.rb
131
+ - spec/cucumber-compatibility-kit_spec.rb
132
+ - spec/keys_checker_spec.rb
133
+ homepage: https://github.com/cucumber/common
134
+ licenses:
135
+ - MIT
136
+ metadata:
137
+ bug_tracker_uri: https://github.com/cucumber/common/issues
138
+ changelog_uri: https://github.com/cucumber/common/blob/main/compatibility-kit/CHANGELOG.md
139
+ documentation_uri: https://cucumber.io/docs/gherkin/
140
+ mailing_list_uri: https://groups.google.com/forum/#!forum/cukes
141
+ source_code_uri: https://github.com/cucumber/common/blob/main/compatibility-kit/ruby
142
+ post_install_message:
143
+ rdoc_options:
144
+ - "--charset=UTF-8"
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '2.3'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubygems_version: 3.1.2
159
+ signing_key:
160
+ specification_version: 4
161
+ summary: cucumber-compatibility-kit-9.1.0
162
+ test_files:
163
+ - spec/capture_warnings.rb
164
+ - spec/cucumber-compatibility-kit_spec.rb
165
+ - spec/keys_checker_spec.rb