cucumber-compatibility-kit 14.0.0 → 15.0.0

Sign up to get free protection for your applications and to get access to all the features.
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'