cucumber-cucumber-expressions 16.1.2 → 17.0.2

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +37 -0
  3. data/.rubocop_todo.yml +443 -0
  4. data/Gemfile +2 -1
  5. data/Rakefile +4 -17
  6. data/VERSION +1 -1
  7. data/cucumber-cucumber-expressions.gemspec +22 -17
  8. data/lib/cucumber/cucumber_expressions/argument.rb +7 -3
  9. data/lib/cucumber/cucumber_expressions/ast.rb +24 -59
  10. data/lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb +6 -13
  11. data/lib/cucumber/cucumber_expressions/cucumber_expression.rb +17 -19
  12. data/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb +11 -15
  13. data/lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb +37 -53
  14. data/lib/cucumber/cucumber_expressions/cucumber_expression_tokenizer.rb +13 -18
  15. data/lib/cucumber/cucumber_expressions/errors.rb +121 -103
  16. data/lib/cucumber/cucumber_expressions/expression_factory.rb +2 -0
  17. data/lib/cucumber/cucumber_expressions/generated_expression.rb +2 -0
  18. data/lib/cucumber/cucumber_expressions/group.rb +2 -0
  19. data/lib/cucumber/cucumber_expressions/group_builder.rb +3 -1
  20. data/lib/cucumber/cucumber_expressions/parameter_type.rb +14 -26
  21. data/lib/cucumber/cucumber_expressions/parameter_type_matcher.rb +9 -7
  22. data/lib/cucumber/cucumber_expressions/parameter_type_registry.rb +27 -22
  23. data/lib/cucumber/cucumber_expressions/regular_expression.rb +3 -2
  24. data/lib/cucumber/cucumber_expressions/tree_regexp.rb +8 -7
  25. data/spec/cucumber/cucumber_expressions/argument_spec.rb +4 -2
  26. data/spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb +41 -0
  27. data/spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb +106 -103
  28. data/spec/cucumber/cucumber_expressions/cucumber_expression_parser_spec.rb +3 -1
  29. data/spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb +90 -93
  30. data/spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb +4 -2
  31. data/spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb +4 -2
  32. data/spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb +80 -61
  33. data/spec/cucumber/cucumber_expressions/expression_factory_spec.rb +3 -1
  34. data/spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb +44 -49
  35. data/spec/cucumber/cucumber_expressions/parameter_type_spec.rb +5 -2
  36. data/spec/cucumber/cucumber_expressions/regular_expression_spec.rb +39 -30
  37. data/spec/cucumber/cucumber_expressions/tree_regexp_spec.rb +49 -49
  38. metadata +80 -25
  39. data/.rspec +0 -1
  40. data/scripts/update-gemspec +0 -32
  41. data/spec/capture_warnings.rb +0 -74
  42. data/spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb +0 -43
@@ -1,15 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'cucumber/cucumber_expressions/tree_regexp'
2
4
 
3
5
  module Cucumber
4
6
  module CucumberExpressions
5
7
  describe TreeRegexp do
6
- it 'exposes group source' do
7
- tr = TreeRegexp.new(/(a(?:b)?)(c)/)
8
- expect(tr.group_builder.children.map{|gb| gb.source}).to eq(['a(?:b)?', 'c'])
8
+ it 'exposes the group source' do
9
+ tr = described_class.new(/(a(?:b)?)(c)/)
10
+ expect(tr.group_builder.children.map { |gb| gb.source }).to eq(['a(?:b)?', 'c'])
9
11
  end
10
12
 
11
- it 'builds tree' do
12
- tr = TreeRegexp.new(/(a(?:b)?)(c)/)
13
+ it 'builds a tree' do
14
+ tr = described_class.new(/(a(?:b)?)(c)/)
13
15
  group = tr.match('ac')
14
16
  expect(group.value).to eq('ac')
15
17
  expect(group.children[0].value).to eq('a')
@@ -18,7 +20,7 @@ module Cucumber
18
20
  end
19
21
 
20
22
  it 'ignores `?:` as a non-capturing group' do
21
- tr = TreeRegexp.new(/a(?:b)(c)/)
23
+ tr = described_class.new(/a(?:b)(c)/)
22
24
  group = tr.match('abc')
23
25
  expect(group.value).to eq('abc')
24
26
  expect(group.children.length).to eq 1
@@ -26,14 +28,14 @@ module Cucumber
26
28
  end
27
29
 
28
30
  it 'ignores `?!` as a non-capturing group' do
29
- tr = TreeRegexp.new(/a(?!b)(.+)/)
31
+ tr = described_class.new(/a(?!b)(.+)/)
30
32
  group = tr.match('aBc')
31
33
  expect(group.value).to eq('aBc')
32
34
  expect(group.children.length).to eq 1
33
35
  end
34
36
 
35
37
  it 'ignores `?=` as a non-capturing group' do
36
- tr = TreeRegexp.new(/a(?=b)(.+)$/)
38
+ tr = described_class.new(/a(?=b)(.+)$/)
37
39
  group = tr.match('abc')
38
40
  expect(group.value).to eq('abc')
39
41
  expect(group.children[0].value).to eq('bc')
@@ -41,7 +43,7 @@ module Cucumber
41
43
  end
42
44
 
43
45
  it 'ignores `?<=` as a non-capturing group' do
44
- tr = TreeRegexp.new(/a(.+)(?<=c)$/)
46
+ tr = described_class.new(/a(.+)(?<=c)$/)
45
47
  group = tr.match('abc')
46
48
  expect(group.value).to eq('abc')
47
49
  expect(group.children[0].value).to eq('bc')
@@ -49,7 +51,7 @@ module Cucumber
49
51
  end
50
52
 
51
53
  it 'ignores `?<!` as a non-capturing group' do
52
- tr = TreeRegexp.new(/a(.+)(?<!b)$/)
54
+ tr = described_class.new(/a(.+)(?<!b)$/)
53
55
  group = tr.match('abc')
54
56
  expect(group.value).to eq('abc')
55
57
  expect(group.children[0].value).to eq('bc')
@@ -57,7 +59,7 @@ module Cucumber
57
59
  end
58
60
 
59
61
  it 'ignores `?<!` as a non-capturing group' do
60
- tr = TreeRegexp.new(/a(.+)(?<!b)$/)
62
+ tr = described_class.new(/a(.+)(?<!b)$/)
61
63
  group = tr.match('abc')
62
64
  expect(group.value).to eq('abc')
63
65
  expect(group.children[0].value).to eq('bc')
@@ -65,7 +67,7 @@ module Cucumber
65
67
  end
66
68
 
67
69
  it 'ignores `?>` as a non-capturing group' do
68
- tr = TreeRegexp.new(/a(?>b)c/)
70
+ tr = described_class.new(/a(?>b)c/)
69
71
  group = tr.match('abc')
70
72
  expect(group.value).to eq('abc')
71
73
  expect(group.children.length).to eq 0
@@ -73,19 +75,18 @@ module Cucumber
73
75
 
74
76
  it 'throws an error when there are named capture groups because they are buggy in Ruby' do
75
77
  # https://github.com/cucumber/cucumber/issues/329
76
- expect {
77
- TreeRegexp.new(/^I am a person( named "(?<first_name>.+) (?<last_name>.+)")?$/)
78
- }.to raise_error(/Named capture groups are not supported/)
78
+ expect { described_class.new(/^I am a person( named "(?<first_name>.+) (?<last_name>.+)")?$/) }
79
+ .to raise_error(/Named capture groups are not supported/)
79
80
  end
80
81
 
81
- it 'matches optional group' do
82
- tr = TreeRegexp.new(/^Something( with an optional argument)?/)
82
+ it 'matches an optional group' do
83
+ tr = described_class.new(/^Something( with an optional argument)?/)
83
84
  group = tr.match('Something')
84
- expect(group.children[0].value).to eq(nil)
85
+ expect(group.children[0].value).to be_nil
85
86
  end
86
87
 
87
88
  it 'matches nested groups' do
88
- tr = TreeRegexp.new(/^A (\d+) thick line from ((\d+),\s*(\d+),\s*(\d+)) to ((\d+),\s*(\d+),\s*(\d+))/)
89
+ tr = described_class.new(/^A (\d+) thick line from ((\d+),\s*(\d+),\s*(\d+)) to ((\d+),\s*(\d+),\s*(\d+))/)
89
90
  group = tr.match('A 5 thick line from 10,20,30 to 40,50,60')
90
91
 
91
92
  expect(group.children[0].value).to eq('5')
@@ -99,46 +100,46 @@ module Cucumber
99
100
  expect(group.children[2].children[2].value).to eq('60')
100
101
  end
101
102
 
102
- it 'detects multiple non capturing groups' do
103
- tr = TreeRegexp.new(/(?:a)(:b)(\?c)(d)/)
104
- group = tr.match("a:b?cd")
103
+ it 'detects multiple non-capturing groups' do
104
+ tr = described_class.new(/(?:a)(:b)(\?c)(d)/)
105
+ group = tr.match('a:b?cd')
105
106
  expect(group.children.length).to eq(3)
106
107
  end
107
108
 
108
- it 'works with escaped backslash' do
109
- tr = TreeRegexp.new(/foo\\(bar|baz)/)
110
- group = tr.match("foo\\bar")
109
+ it 'works with escaped backslashes' do
110
+ tr = described_class.new(/foo\\(bar|baz)/)
111
+ group = tr.match('foo\\bar')
111
112
  expect(group.children.length).to eq(1)
112
113
  end
113
114
 
114
- it 'works with escaped slash' do
115
- tr = TreeRegexp.new(/^I go to '\/(.+)'$/)
115
+ it 'works with escaped slashes' do
116
+ tr = described_class.new(/^I go to '\/(.+)'$/)
116
117
  group = tr.match("I go to '/hello'")
117
118
  expect(group.children.length).to eq(1)
118
119
  end
119
120
 
120
- it 'works with digit and word' do
121
- tr = TreeRegexp.new(/^(\d) (\w+)$/)
122
- group = tr.match("2 you")
121
+ it 'works with digit and word regexp metacharacters' do
122
+ tr = described_class.new(/^(\d) (\w+)$/)
123
+ group = tr.match('2 you')
123
124
  expect(group.children.length).to eq(2)
124
125
  end
125
126
 
126
- it 'captures non capturing groups with capturing groups inside' do
127
- tr = TreeRegexp.new(/the stdout(?: from "(.*?)")?/)
128
- group = tr.match("the stdout")
129
- expect(group.value).to eq("the stdout")
127
+ it 'captures non-capturing groups with capturing groups inside' do
128
+ tr = described_class.new(/the stdout(?: from "(.*?)")?/)
129
+ group = tr.match('the stdout')
130
+ expect(group.value).to eq('the stdout')
130
131
  expect(group.children[0].value).to eq(nil)
131
132
  expect(group.children.length).to eq(1)
132
133
  end
133
134
 
134
135
  it 'works with flags' do
135
- tr = TreeRegexp.new(/HELLO/i)
136
- group = tr.match("hello")
137
- expect(group.value).to eq("hello")
136
+ tr = described_class.new(/HELLO/i)
137
+ group = tr.match('hello')
138
+ expect(group.value).to eq('hello')
138
139
  end
139
140
 
140
- it('does not consider parenthesis in character class as group') do
141
- tr = TreeRegexp.new(/^drawings: ([A-Z_, ()]+)$/)
141
+ it('does not consider parentheses in regexp character classes as a group') do
142
+ tr = described_class.new(/^drawings: ([A-Z_, ()]+)$/)
142
143
  group = tr.match('drawings: ONE, TWO(ABC)')
143
144
  expect(group.value).to eq('drawings: ONE, TWO(ABC)')
144
145
  expect(group.children[0].value).to eq('ONE, TWO(ABC)')
@@ -146,41 +147,40 @@ module Cucumber
146
147
  end
147
148
 
148
149
  it 'works with inline flags' do
149
- tr = TreeRegexp.new(/(?i)HELLO/)
150
+ tr = described_class.new(/(?i)HELLO/)
150
151
  group = tr.match('hello')
151
152
  expect(group.value).to eq('hello')
152
153
  expect(group.children.length).to eq 0
153
154
  end
154
155
 
155
- it 'works with non capturing inline flags' do
156
- tr = TreeRegexp.new(/(?i:HELLO)/)
156
+ it 'works with non-capturing inline flags' do
157
+ tr = described_class.new(/(?i:HELLO)/)
157
158
  group = tr.match('hello')
158
159
  expect(group.value).to eq('hello')
159
160
  expect(group.children.length).to eq 0
160
161
  end
161
162
 
162
- it 'works with empty capturing group' do
163
- tr = TreeRegexp.new(/()/)
163
+ it 'works with empty capturing groups' do
164
+ tr = described_class.new(/()/)
164
165
  group = tr.match('')
165
166
  expect(group.value).to eq('')
166
167
  expect(group.children[0].value).to eq('')
167
168
  expect(group.children.length).to eq 1
168
169
  end
169
170
 
170
- it 'works with empty non-capturing group' do
171
- tr = TreeRegexp.new(/(?:)/)
171
+ it 'works with empty non-capturing groups' do
172
+ tr = described_class.new(/(?:)/)
172
173
  group = tr.match('')
173
174
  expect(group.value).to eq('')
174
175
  expect(group.children.length).to eq 0
175
176
  end
176
177
 
177
- it 'works with empty non-look ahead' do
178
- tr = TreeRegexp.new(/(?<=)/)
178
+ it 'works with empty non-look ahead groups' do
179
+ tr = described_class.new(/(?<=)/)
179
180
  group = tr.match('')
180
181
  expect(group.value).to eq('')
181
182
  expect(group.children.length).to eq 0
182
183
  end
183
-
184
184
  end
185
185
  end
186
186
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-cucumber-expressions
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.1.2
4
+ version: 17.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-17 00:00:00.000000000 Z
11
+ date: 2024-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bigdecimal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rake
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -50,13 +64,70 @@ dependencies:
50
64
  - - ">="
51
65
  - !ruby/object:Gem::Version
52
66
  version: 3.11.0
67
+ - !ruby/object:Gem::Dependency
68
+ name: rubocop
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: 1.27.0
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: 1.27.0
81
+ - !ruby/object:Gem::Dependency
82
+ name: rubocop-performance
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: 1.7.0
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: 1.7.0
95
+ - !ruby/object:Gem::Dependency
96
+ name: rubocop-rake
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 0.5.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: 0.5.0
109
+ - !ruby/object:Gem::Dependency
110
+ name: rubocop-rspec
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: 2.0.0
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 2.0.0
53
123
  description: Cucumber Expressions - a simpler alternative to Regular Expressions
54
124
  email: cukes@googlegroups.com
55
125
  executables: []
56
126
  extensions: []
57
127
  extra_rdoc_files: []
58
128
  files:
59
- - ".rspec"
129
+ - ".rubocop.yml"
130
+ - ".rubocop_todo.yml"
60
131
  - Gemfile
61
132
  - Rakefile
62
133
  - VERSION
@@ -78,10 +149,8 @@ files:
78
149
  - lib/cucumber/cucumber_expressions/parameter_type_registry.rb
79
150
  - lib/cucumber/cucumber_expressions/regular_expression.rb
80
151
  - lib/cucumber/cucumber_expressions/tree_regexp.rb
81
- - scripts/update-gemspec
82
- - spec/capture_warnings.rb
83
152
  - spec/cucumber/cucumber_expressions/argument_spec.rb
84
- - spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb
153
+ - spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb
85
154
  - spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb
86
155
  - spec/cucumber/cucumber_expressions/cucumber_expression_parser_spec.rb
87
156
  - spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb
@@ -93,7 +162,7 @@ files:
93
162
  - spec/cucumber/cucumber_expressions/parameter_type_spec.rb
94
163
  - spec/cucumber/cucumber_expressions/regular_expression_spec.rb
95
164
  - spec/cucumber/cucumber_expressions/tree_regexp_spec.rb
96
- homepage: https://github.com/cucumber/cucumber-expressions-ruby#readme
165
+ homepage: https://github.com/cucumber/cucumber-expressions
97
166
  licenses:
98
167
  - MIT
99
168
  metadata:
@@ -111,29 +180,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
180
  requirements:
112
181
  - - ">="
113
182
  - !ruby/object:Gem::Version
114
- version: '2.3'
183
+ version: '2.5'
115
184
  required_rubygems_version: !ruby/object:Gem::Requirement
116
185
  requirements:
117
186
  - - ">="
118
187
  - !ruby/object:Gem::Version
119
188
  version: '0'
120
189
  requirements: []
121
- rubygems_version: 3.2.22
190
+ rubygems_version: 3.4.19
122
191
  signing_key:
123
192
  specification_version: 4
124
- summary: cucumber-expressions-16.1.2
125
- test_files:
126
- - spec/capture_warnings.rb
127
- - spec/cucumber/cucumber_expressions/argument_spec.rb
128
- - spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb
129
- - spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb
130
- - spec/cucumber/cucumber_expressions/cucumber_expression_parser_spec.rb
131
- - spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb
132
- - spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb
133
- - spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb
134
- - spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb
135
- - spec/cucumber/cucumber_expressions/expression_factory_spec.rb
136
- - spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb
137
- - spec/cucumber/cucumber_expressions/parameter_type_spec.rb
138
- - spec/cucumber/cucumber_expressions/regular_expression_spec.rb
139
- - spec/cucumber/cucumber_expressions/tree_regexp_spec.rb
193
+ summary: cucumber-expressions-17.0.2
194
+ test_files: []
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
@@ -1,32 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # Updates the *.gemspec in the current directory to use the latest releases of gems
4
- #
5
- set -uf -o pipefail
6
- IFS=$'\n'
7
-
8
- gemspec=$(find . -maxdepth 1 -type f -name "*.gemspec")
9
- if [ "${gemspec}" = "" ]; then
10
- exit 0
11
- fi
12
- add_dependency_lines=$(cat ${gemspec} | grep "s.add_[a-z_]*dependency '[^']*'")
13
- if [ $? -ne 0 ]; then
14
- # No add_dependency_lines found - nothing to do
15
- exit 0
16
- fi
17
-
18
- set -e
19
-
20
- gems=$(echo "${add_dependency_lines}" | tr -s ' ' | cut -d ' ' -f3 | cut -d"'" -f 2)
21
- while read -r gem; do
22
- echo "upgrading ${gem}"
23
- if [ "${gem}" = "bundler" ]; then
24
- cat "${gemspec}" | sed "s/\(s.add_[a-z_]*dependency\) '${gem}'.*/\1 '${gem}', '>= 1.16.2'/" > ${gemspec}.tmp
25
- else
26
- gem_line=$(gem list "${gem}" --remote --all --no-prerelease | grep "^${gem}\s")
27
- latest_patch_version=$(echo "${gem_line}" | cut -d'(' -f2 | cut -d')' -f1 | cut -d',' -f1 | cut -d' ' -f1)
28
- latest_minor_version=$(echo "${latest_patch_version}" | cut -d. -f1,2)
29
- cat "${gemspec}" | sed "s/\(s.add_[a-z_]*dependency\) '${gem}'.*/\1 '${gem}', '~> ${latest_minor_version}', '>= ${latest_patch_version}'/" > ${gemspec}.tmp
30
- fi
31
- mv ${gemspec}.tmp ${gemspec}
32
- done <<< "${gems}"
@@ -1,74 +0,0 @@
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
@@ -1,43 +0,0 @@
1
- require 'cucumber/cucumber_expressions/parameter_type'
2
- require 'cucumber/cucumber_expressions/combinatorial_generated_expression_factory'
3
-
4
- module Cucumber
5
- module CucumberExpressions
6
-
7
- class Color; end
8
- class CssColor; end
9
- class Date; end
10
- class DateTime; end
11
- class Timestamp; end
12
-
13
- describe CombinatorialGeneratedExpressionFactory do
14
- it 'generates multiple expressions' do
15
- parameter_type_combinations = [
16
- [
17
- ParameterType.new('color', /red|blue|yellow/, Color, lambda {|s| Color.new}, true, false),
18
- ParameterType.new('csscolor', /red|blue|yellow/, CssColor, lambda {|s| CssColor.new}, true, false)
19
- ],
20
- [
21
- ParameterType.new('date', /\d{4}-\d{2}-\d{2}/, Date, lambda {|s| Date.new}, true, false),
22
- ParameterType.new('datetime', /\d{4}-\d{2}-\d{2}/, DateTime, lambda {|s| DateTime.new}, true, false),
23
- ParameterType.new('timestamp', /\d{4}-\d{2}-\d{2}/, Timestamp, lambda {|s| Timestamp.new}, true, false)
24
- ]
25
- ]
26
-
27
- factory = CombinatorialGeneratedExpressionFactory.new(
28
- 'I bought a {%s} ball on {%s}',
29
- parameter_type_combinations
30
- )
31
- expressions = factory.generate_expressions.map {|ge| ge.source}
32
- expect(expressions).to eq([
33
- 'I bought a {color} ball on {date}',
34
- 'I bought a {color} ball on {datetime}',
35
- 'I bought a {color} ball on {timestamp}',
36
- 'I bought a {csscolor} ball on {date}',
37
- 'I bought a {csscolor} ball on {datetime}',
38
- 'I bought a {csscolor} ball on {timestamp}',
39
- ])
40
- end
41
- end
42
- end
43
- end