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.
- checksums.yaml +4 -4
- data/.rubocop.yml +37 -0
- data/.rubocop_todo.yml +443 -0
- data/Gemfile +2 -1
- data/Rakefile +4 -17
- data/VERSION +1 -1
- data/cucumber-cucumber-expressions.gemspec +22 -17
- data/lib/cucumber/cucumber_expressions/argument.rb +7 -3
- data/lib/cucumber/cucumber_expressions/ast.rb +24 -59
- data/lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb +6 -13
- data/lib/cucumber/cucumber_expressions/cucumber_expression.rb +17 -19
- data/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb +11 -15
- data/lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb +37 -53
- data/lib/cucumber/cucumber_expressions/cucumber_expression_tokenizer.rb +13 -18
- data/lib/cucumber/cucumber_expressions/errors.rb +121 -103
- data/lib/cucumber/cucumber_expressions/expression_factory.rb +2 -0
- data/lib/cucumber/cucumber_expressions/generated_expression.rb +2 -0
- data/lib/cucumber/cucumber_expressions/group.rb +2 -0
- data/lib/cucumber/cucumber_expressions/group_builder.rb +3 -1
- data/lib/cucumber/cucumber_expressions/parameter_type.rb +14 -26
- data/lib/cucumber/cucumber_expressions/parameter_type_matcher.rb +9 -7
- data/lib/cucumber/cucumber_expressions/parameter_type_registry.rb +27 -22
- data/lib/cucumber/cucumber_expressions/regular_expression.rb +3 -2
- data/lib/cucumber/cucumber_expressions/tree_regexp.rb +8 -7
- data/spec/cucumber/cucumber_expressions/argument_spec.rb +4 -2
- data/spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb +41 -0
- data/spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb +106 -103
- data/spec/cucumber/cucumber_expressions/cucumber_expression_parser_spec.rb +3 -1
- data/spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb +90 -93
- data/spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb +4 -2
- data/spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb +4 -2
- data/spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb +80 -61
- data/spec/cucumber/cucumber_expressions/expression_factory_spec.rb +3 -1
- data/spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb +44 -49
- data/spec/cucumber/cucumber_expressions/parameter_type_spec.rb +5 -2
- data/spec/cucumber/cucumber_expressions/regular_expression_spec.rb +39 -30
- data/spec/cucumber/cucumber_expressions/tree_regexp_spec.rb +49 -49
- metadata +80 -25
- data/.rspec +0 -1
- data/scripts/update-gemspec +0 -32
- data/spec/capture_warnings.rb +0 -74
- 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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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
|
-
|
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 =
|
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
|
85
|
+
expect(group.children[0].value).to be_nil
|
85
86
|
end
|
86
87
|
|
87
88
|
it 'matches nested groups' do
|
88
|
-
tr =
|
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
|
103
|
-
tr =
|
104
|
-
group = tr.match(
|
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
|
109
|
-
tr =
|
110
|
-
group = tr.match(
|
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
|
115
|
-
tr =
|
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 =
|
122
|
-
group = tr.match(
|
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
|
127
|
-
tr =
|
128
|
-
group = tr.match(
|
129
|
-
expect(group.value).to eq(
|
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 =
|
136
|
-
group = tr.match(
|
137
|
-
expect(group.value).to eq(
|
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
|
141
|
-
tr =
|
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 =
|
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
|
156
|
-
tr =
|
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
|
163
|
-
tr =
|
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
|
171
|
-
tr =
|
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 =
|
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:
|
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:
|
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
|
-
- ".
|
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/
|
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
|
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.
|
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.
|
190
|
+
rubygems_version: 3.4.19
|
122
191
|
signing_key:
|
123
192
|
specification_version: 4
|
124
|
-
summary: cucumber-expressions-
|
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
|
data/scripts/update-gemspec
DELETED
@@ -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}"
|
data/spec/capture_warnings.rb
DELETED
@@ -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
|