cucumber-compatibility-kit 14.0.0 → 15.0.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -35
  3. data/features/attachments/attachments.feature.ndjson +1 -1
  4. data/features/cdata/cdata.feature.ndjson +1 -1
  5. data/features/data-tables/data-tables.feature.ndjson +1 -1
  6. data/features/examples-tables/examples-tables.feature.ndjson +1 -1
  7. data/features/hooks/hooks.feature.ndjson +1 -1
  8. data/features/markdown/markdown.feature.md.ndjson +1 -1
  9. data/features/minimal/minimal.feature.ndjson +1 -1
  10. data/features/parameter-types/parameter-types.feature.ndjson +1 -1
  11. data/features/pending/pending.feature.ndjson +4 -4
  12. data/features/retry/retry.feature.ndjson +1 -1
  13. data/features/rules/rules.feature.ndjson +1 -1
  14. data/features/skipped/skipped.feature.ndjson +1 -1
  15. data/features/stack-traces/stack-traces.feature.ndjson +1 -1
  16. data/features/undefined/undefined.feature.ndjson +1 -1
  17. data/features/unknown-parameter-type/unknown-parameter-type.feature.ndjson +1 -1
  18. data/lib/{cucumber/cucumber-compatibility-kit.rb → cck/examples.rb} +15 -21
  19. data/lib/cucumber-compatibility-kit.rb +1 -1
  20. metadata +21 -80
  21. data/features/attachments/attachments.feature.rb +0 -38
  22. data/features/cdata/cdata.feature.rb +0 -5
  23. data/features/data-tables/data-tables.feature.rb +0 -9
  24. data/features/examples-tables/examples-tables.feature.rb +0 -13
  25. data/features/hooks/hooks.feature.rb +0 -29
  26. data/features/minimal/minimal.feature.rb +0 -5
  27. data/features/parameter-types/parameter-types.feature.rb +0 -21
  28. data/features/pending/pending.feature.rb +0 -13
  29. data/features/retry/retry.feature.rb +0 -21
  30. data/features/rules/rules.feature.rb +0 -25
  31. data/features/skipped/skipped.feature.rb +0 -17
  32. data/features/stack-traces/stack-traces.feature.rb +0 -5
  33. data/features/undefined/undefined.feature.rb +0 -9
  34. data/features/unknown-parameter-type/unknown-parameter-type.feature.rb +0 -5
  35. data/lib/cck/helpers.rb +0 -11
  36. data/lib/cck/keys_checker.rb +0 -64
  37. data/lib/cck/messages_comparator.rb +0 -97
  38. data/lib/keys_checker.rb +0 -3
  39. data/lib/messages_comparator.rb +0 -3
  40. data/lib/shared_examples.rb +0 -45
  41. data/spec/cck/keys_checker_spec.rb +0 -67
  42. data/spec/cck/messages_comparator_spec.rb +0 -29
  43. data/spec/cucumber/cucumber-compatibility-kit_spec.rb +0 -65
metadata CHANGED
@@ -1,58 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-compatibility-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 14.0.0
4
+ version: 15.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aurélien Reeves
8
8
  - Aslak Hellesøy
9
9
  - Vincent Prêtre
10
+ - Luke Hill
10
11
  - Cucumber Ltd
11
12
  autorequire:
12
13
  bindir: bin
13
14
  cert_chain: []
14
- date: 2023-11-01 00:00:00.000000000 Z
15
+ date: 2024-01-08 00:00:00.000000000 Z
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
17
18
  name: cucumber-messages
18
19
  requirement: !ruby/object:Gem::Requirement
19
20
  requirements:
20
- - - ">="
21
+ - - ">"
21
22
  - !ruby/object:Gem::Version
22
- version: 19.1.2
23
+ version: '20'
23
24
  - - "<"
24
25
  - !ruby/object:Gem::Version
25
- version: '22.1'
26
+ version: '25'
26
27
  type: :runtime
27
28
  prerelease: false
28
29
  version_requirements: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ">="
31
+ - - ">"
31
32
  - !ruby/object:Gem::Version
32
- version: 19.1.2
33
+ version: '20'
33
34
  - - "<"
34
35
  - !ruby/object:Gem::Version
35
- version: '22.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
36
+ version: '25'
56
37
  - !ruby/object:Gem::Dependency
57
38
  name: rspec
58
39
  requirement: !ruby/object:Gem::Requirement
@@ -60,7 +41,7 @@ dependencies:
60
41
  - - "~>"
61
42
  - !ruby/object:Gem::Version
62
43
  version: '3.12'
63
- type: :runtime
44
+ type: :development
64
45
  prerelease: false
65
46
  version_requirements: !ruby/object:Gem::Requirement
66
47
  requirements:
@@ -73,56 +54,42 @@ dependencies:
73
54
  requirements:
74
55
  - - "~>"
75
56
  - !ruby/object:Gem::Version
76
- version: 1.17.0
57
+ version: 1.50.2
77
58
  type: :development
78
59
  prerelease: false
79
60
  version_requirements: !ruby/object:Gem::Requirement
80
61
  requirements:
81
62
  - - "~>"
82
63
  - !ruby/object:Gem::Version
83
- version: 1.17.0
64
+ version: 1.50.2
84
65
  - !ruby/object:Gem::Dependency
85
66
  name: rubocop-performance
86
67
  requirement: !ruby/object:Gem::Requirement
87
68
  requirements:
88
69
  - - "~>"
89
70
  - !ruby/object:Gem::Version
90
- version: 1.7.0
91
- type: :development
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - "~>"
96
- - !ruby/object:Gem::Version
97
- version: 1.7.0
98
- - !ruby/object:Gem::Dependency
99
- name: rubocop-rake
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - "~>"
103
- - !ruby/object:Gem::Version
104
- version: 0.5.0
71
+ version: 1.17.1
105
72
  type: :development
106
73
  prerelease: false
107
74
  version_requirements: !ruby/object:Gem::Requirement
108
75
  requirements:
109
76
  - - "~>"
110
77
  - !ruby/object:Gem::Version
111
- version: 0.5.0
78
+ version: 1.17.1
112
79
  - !ruby/object:Gem::Dependency
113
80
  name: rubocop-rspec
114
81
  requirement: !ruby/object:Gem::Requirement
115
82
  requirements:
116
83
  - - "~>"
117
84
  - !ruby/object:Gem::Version
118
- version: 2.0.0
85
+ version: 2.20.0
119
86
  type: :development
120
87
  prerelease: false
121
88
  version_requirements: !ruby/object:Gem::Requirement
122
89
  requirements:
123
90
  - - "~>"
124
91
  - !ruby/object:Gem::Version
125
- version: 2.0.0
92
+ version: 2.20.0
126
93
  description: Kit to check compatibility with official cucumber implementation
127
94
  email: cukebot@cucumber.io
128
95
  executables: []
@@ -132,64 +99,41 @@ files:
132
99
  - README.md
133
100
  - features/attachments/attachments.feature
134
101
  - features/attachments/attachments.feature.ndjson
135
- - features/attachments/attachments.feature.rb
136
102
  - features/attachments/cucumber.jpeg
137
103
  - features/attachments/cucumber.png
138
104
  - features/attachments/document.pdf
139
105
  - features/cdata/cdata.feature
140
106
  - features/cdata/cdata.feature.ndjson
141
- - features/cdata/cdata.feature.rb
142
107
  - features/data-tables/data-tables.feature
143
108
  - features/data-tables/data-tables.feature.ndjson
144
- - features/data-tables/data-tables.feature.rb
145
109
  - features/examples-tables/examples-tables.feature
146
110
  - features/examples-tables/examples-tables.feature.ndjson
147
- - features/examples-tables/examples-tables.feature.rb
148
111
  - features/hooks/cucumber.svg
149
112
  - features/hooks/hooks.feature
150
113
  - features/hooks/hooks.feature.ndjson
151
- - features/hooks/hooks.feature.rb
152
114
  - features/markdown/markdown.feature.md
153
115
  - features/markdown/markdown.feature.md.ndjson
154
116
  - features/minimal/minimal.feature
155
117
  - features/minimal/minimal.feature.ndjson
156
- - features/minimal/minimal.feature.rb
157
118
  - features/parameter-types/parameter-types.feature
158
119
  - features/parameter-types/parameter-types.feature.ndjson
159
- - features/parameter-types/parameter-types.feature.rb
160
120
  - features/pending/pending.feature
161
121
  - features/pending/pending.feature.ndjson
162
- - features/pending/pending.feature.rb
163
122
  - features/retry/retry.arguments.txt
164
123
  - features/retry/retry.feature
165
124
  - features/retry/retry.feature.ndjson
166
- - features/retry/retry.feature.rb
167
125
  - features/rules/rules.feature
168
126
  - features/rules/rules.feature.ndjson
169
- - features/rules/rules.feature.rb
170
127
  - features/skipped/skipped.feature
171
128
  - features/skipped/skipped.feature.ndjson
172
- - features/skipped/skipped.feature.rb
173
129
  - features/stack-traces/stack-traces.feature
174
130
  - features/stack-traces/stack-traces.feature.ndjson
175
- - features/stack-traces/stack-traces.feature.rb
176
131
  - features/undefined/undefined.feature
177
132
  - features/undefined/undefined.feature.ndjson
178
- - features/undefined/undefined.feature.rb
179
133
  - features/unknown-parameter-type/unknown-parameter-type.feature
180
134
  - features/unknown-parameter-type/unknown-parameter-type.feature.ndjson
181
- - features/unknown-parameter-type/unknown-parameter-type.feature.rb
182
- - lib/cck/helpers.rb
183
- - lib/cck/keys_checker.rb
184
- - lib/cck/messages_comparator.rb
135
+ - lib/cck/examples.rb
185
136
  - lib/cucumber-compatibility-kit.rb
186
- - lib/cucumber/cucumber-compatibility-kit.rb
187
- - lib/keys_checker.rb
188
- - lib/messages_comparator.rb
189
- - lib/shared_examples.rb
190
- - spec/cck/keys_checker_spec.rb
191
- - spec/cck/messages_comparator_spec.rb
192
- - spec/cucumber/cucumber-compatibility-kit_spec.rb
193
137
  homepage: https://github.com/cucumber/compatibility-kit
194
138
  licenses:
195
139
  - MIT
@@ -208,18 +152,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
208
152
  requirements:
209
153
  - - ">="
210
154
  - !ruby/object:Gem::Version
211
- version: '2.5'
155
+ version: '2.6'
212
156
  required_rubygems_version: !ruby/object:Gem::Requirement
213
157
  requirements:
214
158
  - - ">="
215
159
  - !ruby/object:Gem::Version
216
- version: '0'
160
+ version: 3.0.9
217
161
  requirements: []
218
162
  rubygems_version: 3.4.10
219
163
  signing_key:
220
164
  specification_version: 4
221
- summary: cucumber-compatibility-kit-14.0.0
222
- test_files:
223
- - spec/cck/keys_checker_spec.rb
224
- - spec/cck/messages_comparator_spec.rb
225
- - spec/cucumber/cucumber-compatibility-kit_spec.rb
165
+ summary: cucumber-compatibility-kit-15.0.0
166
+ test_files: []
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Cucumber-JVM needs to use a Before hook in order to create attachments
4
- # NB: We should probably try to remove this
5
- Before { nil }
6
-
7
- When('the string {string} is attached as {string}') do |text, media_type|
8
- attach(text, media_type)
9
- end
10
-
11
- When('the string {string} is logged') do |text|
12
- log(text)
13
- end
14
-
15
- When('text with ANSI escapes is logged') do
16
- log("This displays a \x1b[31mr\x1b[0m\x1b[91ma\x1b[0m\x1b[33mi\x1b[0m\x1b[32mn\x1b[0m\x1b[34mb\x1b[0m\x1b[95mo\x1b[0m\x1b[35mw\x1b[0m")
17
- end
18
-
19
- When('the following string is attached as {string}:') do |media_type, doc_string|
20
- attach(doc_string, media_type)
21
- end
22
-
23
- When('an array with {int} bytes is attached as {string}') do |size, media_type|
24
- data = (0..size - 1).map { |i| [i].pack('C') }.join
25
- attach(data, media_type)
26
- end
27
-
28
- When('a JPEG image is attached') do
29
- attach(File.open("#{__dir__}/cucumber.jpeg"), 'image/jpeg')
30
- end
31
-
32
- When('a PNG image is attached') do
33
- attach(File.open("#{__dir__}/cucumber.png"), 'image/png')
34
- end
35
-
36
- When('a PDF document is attached and renamed') do
37
- attach(File.open("#{__dir__}/document.pdf"), 'document/pdf', 'renamed.pdf')
38
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Given('I have {int} <![CDATA[cukes]]> in my belly') do |_cuke_count|
4
- # no-op
5
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- When('the following table is transposed:') do |table|
4
- @transposed = table.transpose
5
- end
6
-
7
- Then('it should be:') do |expected|
8
- @transposed.diff!(expected)
9
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Given('there are {int} cucumbers') do |initial_count|
4
- @count = initial_count
5
- end
6
-
7
- When('I eat {int} cucumbers') do |eat_count|
8
- @count -= eat_count
9
- end
10
-
11
- Then('I should have {int} cucumbers') do |expected_count|
12
- expect(@count).to eq(expected_count)
13
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Before do
4
- # no-op
5
- end
6
-
7
- Before(name: 'A named hook') do
8
- # no-op
9
- end
10
-
11
- When('a step passes') do
12
- # no-op
13
- end
14
-
15
- When('a step fails') do
16
- raise 'Exception in step'
17
- end
18
-
19
- After do
20
- # no-op
21
- end
22
-
23
- After('@some-tag or @some-other-tag') do
24
- raise 'Exception in conditional hook'
25
- end
26
-
27
- After('@with-attachment') do
28
- attach(File.open("#{__dir__}/cucumber.svg"), 'image/svg+xml')
29
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Given('I have {int} cukes in my belly') do |_cuke_count|
4
- # no-op
5
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Flight
4
- attr_reader :from, :to
5
-
6
- def initialize(from, to)
7
- @from = from
8
- @to = to
9
- end
10
- end
11
-
12
- ParameterType(
13
- name: 'flight',
14
- regexp: /([A-Z]{3})-([A-Z]{3})/,
15
- transformer: ->(from, to) { Flight.new(from, to) }
16
- )
17
-
18
- Given('{flight} has been delayed') do |flight|
19
- expect(flight.from).to eq('LHR')
20
- expect(flight.to).to eq('CDG')
21
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Given('an implemented non-pending step') do
4
- # no-op
5
- end
6
-
7
- Given('an implemented step that is skipped') do
8
- # no-op
9
- end
10
-
11
- Given('an unimplemented pending step') do
12
- pending('')
13
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Given('a step that always passes') do
4
- # no-op
5
- end
6
-
7
- second_time_pass = 0
8
- Given('a step that passes the second time') do
9
- second_time_pass += 1
10
- raise 'Exception in step' if second_time_pass < 2
11
- end
12
-
13
- third_time_pass = 0
14
- Given('a step that passes the third time') do
15
- third_time_pass += 1
16
- raise 'Exception in step' if third_time_pass < 3
17
- end
18
-
19
- Given('a step that always fails') do
20
- raise 'Exception in step'
21
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Given('the customer has {int} cents') do |money|
4
- @money = money
5
- end
6
-
7
- Given('there are chocolate bars in stock') do
8
- @stock = ['Mars']
9
- end
10
-
11
- Given('there are no chocolate bars in stock') do
12
- @stock = []
13
- end
14
-
15
- When('the customer tries to buy a {int} cent chocolate bar') do |price|
16
- @chocolate << @stock.pop if @money >= price
17
- end
18
-
19
- Then('the sale should not happen') do
20
- expect(@chocolate).to be_nil
21
- end
22
-
23
- Then('the sale should happen') do
24
- expect(@chocolate).not_to be_nil
25
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Before('@skip') do
4
- skip_this_scenario('')
5
- end
6
-
7
- Given('a step that does not skip') do
8
- # no-op
9
- end
10
-
11
- Given('a step that is skipped') do
12
- # no-op
13
- end
14
-
15
- Given('I skip a step') do
16
- skip_this_scenario('')
17
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- When('a step throws an exception') do
4
- raise 'BOOM'
5
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Given('an implemented step') do
4
- # no-op
5
- end
6
-
7
- Given('a step that will be skipped') do
8
- # no-op
9
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Given('{airport} is closed because of a strike') do |_airport|
4
- raise 'Should not be called because airport parameter type has not been defined'
5
- end
data/lib/cck/helpers.rb DELETED
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CCK
4
- module Helpers
5
- def message_type(message)
6
- message.to_h.each do |key, value|
7
- return key unless value.nil?
8
- end
9
- end
10
- end
11
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CCK
4
- class KeysChecker
5
- def self.compare(detected, expected)
6
- new(detected, expected).compare
7
- end
8
-
9
- attr_reader :detected, :expected
10
-
11
- def initialize(detected, expected)
12
- @detected = detected
13
- @expected = expected
14
- end
15
-
16
- def compare
17
- return [] if identical_keys?
18
-
19
- errors << "Detected extra keys in message #{message_name}: #{extra_keys}" if extra_keys.any?
20
- errors << "Missing keys in message #{message_name}: #{missing_keys}" if missing_keys.any?
21
- errors
22
- rescue StandardError => e
23
- ["Unexpected error: #{e.message}"]
24
- end
25
-
26
- private
27
-
28
- def detected_keys
29
- @detected_keys ||= ordered_uniq_hash_keys(detected)
30
- end
31
-
32
- def expected_keys
33
- @expected_keys ||= ordered_uniq_hash_keys(expected)
34
- end
35
-
36
- def identical_keys?
37
- detected_keys == expected_keys
38
- end
39
-
40
- def missing_keys
41
- (expected_keys - detected_keys).reject { |key| meta_message? && key == :ci }
42
- end
43
-
44
- def extra_keys
45
- (detected_keys - expected_keys).reject { |key| meta_message? && key == :ci }
46
- end
47
-
48
- def meta_message?
49
- detected.instance_of?(Cucumber::Messages::Meta)
50
- end
51
-
52
- def message_name
53
- detected.class.name
54
- end
55
-
56
- def ordered_uniq_hash_keys(object)
57
- object.to_h(reject_nil_values: true).keys.sort
58
- end
59
-
60
- def errors
61
- @errors ||= []
62
- end
63
- end
64
- end
@@ -1,97 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'keys_checker'
4
- require_relative 'helpers'
5
-
6
- module CCK
7
- class MessagesComparator
8
- include Helpers
9
-
10
- def initialize(detected, expected)
11
- compare(detected, expected)
12
- end
13
-
14
- def errors
15
- all_errors.flatten
16
- end
17
-
18
- private
19
-
20
- def compare(detected, expected)
21
- detected_by_type = messages_by_type(detected)
22
- expected_by_type = messages_by_type(expected)
23
-
24
- detected_by_type.each_key do |type|
25
- compare_list(detected_by_type[type], expected_by_type[type])
26
- rescue StandardError => e
27
- all_errors << "Error while comparing #{type}: #{e.message}"
28
- end
29
- end
30
-
31
- def messages_by_type(messages)
32
- by_type = Hash.new { |h, k| h[k] = [] }
33
- messages.each do |msg|
34
- by_type[message_type(msg)] << remove_envelope(msg)
35
- end
36
- by_type
37
- end
38
-
39
- def remove_envelope(message)
40
- message.send(message_type(message))
41
- end
42
-
43
- def compare_list(detected, expected)
44
- detected.each_with_index do |message, index|
45
- compare_message(message, expected[index])
46
- end
47
- end
48
-
49
- def compare_message(detected, expected)
50
- return if not_message?(detected)
51
- return if ignorable?(detected)
52
- return if incomparable?(detected)
53
-
54
- all_errors << CCK::KeysChecker.compare(detected, expected)
55
- compare_sub_messages(detected, expected)
56
- end
57
-
58
- def not_message?(detected)
59
- !detected.is_a?(Cucumber::Messages::Message)
60
- end
61
-
62
- # These messages we need to ignore because they are too large or they feature timestamps which always vary
63
- def ignorable?(detected)
64
- too_large_message?(detected) || time_message?(detected)
65
- end
66
-
67
- def too_large_message?(detected)
68
- detected.is_a?(Cucumber::Messages::GherkinDocument) || detected.is_a?(Cucumber::Messages::Pickle)
69
- end
70
-
71
- def time_message?(detected)
72
- detected.is_a?(Cucumber::Messages::Timestamp) || detected.is_a?(Cucumber::Messages::Duration)
73
- end
74
-
75
- # These messages we need to ignore because they are often not of identical shape/value
76
- def incomparable?(detected)
77
- detected.is_a?(Cucumber::Messages::Ci) || detected.is_a?(Cucumber::Messages::Git)
78
- end
79
-
80
- def compare_sub_messages(detected, expected)
81
- return unless expected.respond_to? :to_h
82
-
83
- expected.to_h.each_key do |key|
84
- value = expected.send(key)
85
- if value.is_a?(Array)
86
- compare_list(detected.send(key), value)
87
- else
88
- compare_message(detected.send(key), value)
89
- end
90
- end
91
- end
92
-
93
- def all_errors
94
- @all_errors ||= []
95
- end
96
- end
97
- end
data/lib/keys_checker.rb DELETED
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'cck/keys_checker'
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'cck/messages_comparator'