cucumber-compatibility-kit 9.1.0

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