cucumber-cucumber-expressions 17.0.1 → 17.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +13 -3
- data/.rubocop_todo.yml +60 -141
- data/VERSION +1 -1
- data/cucumber-cucumber-expressions.gemspec +9 -4
- data/lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb +1 -1
- data/lib/cucumber/cucumber_expressions/cucumber_expression.rb +8 -8
- data/lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb +1 -1
- data/lib/cucumber/cucumber_expressions/errors.rb +11 -11
- data/lib/cucumber/cucumber_expressions/parameter_type.rb +1 -3
- data/lib/cucumber/cucumber_expressions/parameter_type_matcher.rb +2 -2
- data/spec/cucumber/cucumber_expressions/argument_spec.rb +1 -1
- data/spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb +41 -0
- data/spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb +10 -10
- data/spec/cucumber/cucumber_expressions/cucumber_expression_parser_spec.rb +1 -1
- data/spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb +8 -8
- data/spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb +2 -2
- data/spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb +2 -2
- data/spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb +7 -7
- data/spec/cucumber/cucumber_expressions/expression_factory_spec.rb +1 -1
- data/spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb +11 -11
- data/spec/cucumber/cucumber_expressions/parameter_type_spec.rb +1 -1
- data/spec/cucumber/cucumber_expressions/regular_expression_spec.rb +2 -2
- data/spec/cucumber/cucumber_expressions/tree_regexp_spec.rb +26 -27
- metadata +62 -6
- data/spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b49e9f64d889645dcee283e717f9b6c268293166219700c1e95435ce318e6f6
|
4
|
+
data.tar.gz: eda9b64c55c72304d1fa7d8509f16a9f5eb9c347cbf38125c41a3bbbf8d61f1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38a2e12bed97250bb03688aef8fcb596d78be09229ba5c33c7aee2957596b35f92abecd8a2fa6cc7b946ea7f05b9a9cd585dd4168898a38d3bc4aeb500ae8df1
|
7
|
+
data.tar.gz: a75778aa75c97f1e110e5d03725ae0a447429f2b1aac28bb5c7d947803ef95b4a38e23730f6d98459050bcd7c4cbae80e08a8c10b1a215d77ef537ca2319ff90
|
data/.rubocop.yml
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-performance
|
3
|
+
- rubocop-rake
|
4
|
+
- rubocop-rspec
|
5
|
+
|
1
6
|
inherit_from: .rubocop_todo.yml
|
2
7
|
|
3
8
|
inherit_mode:
|
@@ -15,6 +20,12 @@ Gemspec/RequireMFA:
|
|
15
20
|
Layout/LineLength:
|
16
21
|
Max: 200
|
17
22
|
|
23
|
+
# This is documented in this spec to showcase why it's not working and people shouldn't use it
|
24
|
+
# cf:
|
25
|
+
Lint/MixedRegexpCaptureTypes:
|
26
|
+
Exclude:
|
27
|
+
- 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb'
|
28
|
+
|
18
29
|
Style/Documentation:
|
19
30
|
Enabled: false
|
20
31
|
|
@@ -22,6 +33,5 @@ Style/RegexpLiteral:
|
|
22
33
|
EnforcedStyle: slashes
|
23
34
|
AllowInnerSlashes: true
|
24
35
|
|
25
|
-
|
26
|
-
|
27
|
-
# EnforcedStyle: receive
|
36
|
+
RSpec/MessageSpies:
|
37
|
+
EnforcedStyle: receive
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2023-
|
3
|
+
# on 2023-11-27 17:52:56 UTC using RuboCop version 1.27.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -8,90 +8,14 @@
|
|
8
8
|
|
9
9
|
# TODO: Oct '23 -> 33 files inspected, 1004 offenses detected, 859 offenses auto-correctable
|
10
10
|
# TODO: Oct '23 (later) -> 33 files inspected, 344 offenses detected, 205 offenses auto-correctable
|
11
|
-
|
12
|
-
# Offense count: 1
|
13
|
-
# This cop supports safe auto-correction (--auto-correct).
|
14
|
-
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
15
|
-
# SupportedStyles: outdent, indent
|
16
|
-
Layout/AccessModifierIndentation:
|
17
|
-
Exclude:
|
18
|
-
- 'lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb'
|
11
|
+
# TODO: Nov '23 -> 33 files inspected, 399 offenses detected, 192 offenses auto-correctable
|
19
12
|
|
20
13
|
# Offense count: 2
|
21
14
|
# This cop supports safe auto-correction (--auto-correct).
|
22
|
-
# Configuration parameters:
|
15
|
+
# Configuration parameters: IndentationWidth.
|
23
16
|
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
|
24
17
|
Layout/FirstArrayElementIndentation:
|
25
|
-
|
26
|
-
- 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb'
|
27
|
-
|
28
|
-
# Offense count: 2
|
29
|
-
# This cop supports safe auto-correction (--auto-correct).
|
30
|
-
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
31
|
-
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
32
|
-
Layout/FirstHashElementIndentation:
|
33
|
-
Exclude:
|
34
|
-
- 'cucumber-cucumber-expressions.gemspec'
|
35
|
-
|
36
|
-
# Offense count: 4
|
37
|
-
# This cop supports safe auto-correction (--auto-correct).
|
38
|
-
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
|
39
|
-
# SupportedHashRocketStyles: key, separator, table
|
40
|
-
# SupportedColonStyles: key, separator, table
|
41
|
-
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
|
42
|
-
Layout/HashAlignment:
|
43
|
-
Exclude:
|
44
|
-
- 'cucumber-cucumber-expressions.gemspec'
|
45
|
-
|
46
|
-
# Offense count: 2
|
47
|
-
# This cop supports safe auto-correction (--auto-correct).
|
48
|
-
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
49
|
-
# URISchemes: http, https
|
50
|
-
Layout/LineLength:
|
51
|
-
Max: 252
|
52
|
-
|
53
|
-
# Offense count: 1
|
54
|
-
# This cop supports safe auto-correction (--auto-correct).
|
55
|
-
# Configuration parameters: EnforcedStyle.
|
56
|
-
# SupportedStyles: symmetrical, new_line, same_line
|
57
|
-
Layout/MultilineMethodCallBraceLayout:
|
58
|
-
Exclude:
|
59
|
-
- 'spec/cucumber/cucumber_expressions/parameter_type_spec.rb'
|
60
|
-
|
61
|
-
# Offense count: 3
|
62
|
-
# This cop supports safe auto-correction (--auto-correct).
|
63
|
-
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
64
|
-
# SupportedStyles: aligned, indented, indented_relative_to_receiver
|
65
|
-
Layout/MultilineMethodCallIndentation:
|
66
|
-
Exclude:
|
67
|
-
- 'lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb'
|
68
|
-
|
69
|
-
# Offense count: 4
|
70
|
-
# This cop supports safe auto-correction (--auto-correct).
|
71
|
-
# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator.
|
72
|
-
# SupportedStylesForExponentOperator: space, no_space
|
73
|
-
Layout/SpaceAroundOperators:
|
74
|
-
Exclude:
|
75
|
-
- 'lib/cucumber/cucumber_expressions/tree_regexp.rb'
|
76
|
-
|
77
|
-
# Offense count: 57
|
78
|
-
# This cop supports safe auto-correction (--auto-correct).
|
79
|
-
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
|
80
|
-
# SupportedStyles: space, no_space
|
81
|
-
# SupportedStylesForEmptyBraces: space, no_space
|
82
|
-
Layout/SpaceInsideBlockBraces:
|
83
|
-
Exclude:
|
84
|
-
- 'cucumber-cucumber-expressions.gemspec'
|
85
|
-
- 'lib/cucumber/cucumber_expressions/group_builder.rb'
|
86
|
-
- 'lib/cucumber/cucumber_expressions/parameter_type_registry.rb'
|
87
|
-
- 'lib/cucumber/cucumber_expressions/regular_expression.rb'
|
88
|
-
- 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb'
|
89
|
-
- 'spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb'
|
90
|
-
- 'spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb'
|
91
|
-
- 'spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb'
|
92
|
-
- 'spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb'
|
93
|
-
- 'spec/cucumber/cucumber_expressions/parameter_type_spec.rb'
|
94
|
-
- 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb'
|
18
|
+
EnforcedStyle: consistent
|
95
19
|
|
96
20
|
# Offense count: 1
|
97
21
|
# This cop supports safe auto-correction (--auto-correct).
|
@@ -114,47 +38,27 @@ Lint/DuplicateBranch:
|
|
114
38
|
- 'lib/cucumber/cucumber_expressions/ast.rb'
|
115
39
|
- 'lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb'
|
116
40
|
|
117
|
-
# Offense count:
|
41
|
+
# Offense count: 5
|
118
42
|
# Configuration parameters: AllowComments.
|
119
43
|
Lint/EmptyClass:
|
120
44
|
Exclude:
|
121
|
-
- 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb'
|
122
45
|
- 'spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb'
|
123
46
|
- 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb'
|
124
47
|
- 'spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb'
|
125
48
|
|
126
|
-
# Offense count: 1
|
127
|
-
Lint/MixedRegexpCaptureTypes:
|
128
|
-
Exclude:
|
129
|
-
- 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb'
|
130
|
-
|
131
49
|
# Offense count: 1
|
132
50
|
# This cop supports unsafe auto-correction (--auto-correct-all).
|
133
51
|
Lint/NonDeterministicRequireOrder:
|
134
52
|
Exclude:
|
135
53
|
- 'Rakefile'
|
136
54
|
|
137
|
-
# Offense count:
|
138
|
-
Lint/NonLocalExitFromIterator:
|
139
|
-
Exclude:
|
140
|
-
- 'lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb'
|
141
|
-
|
142
|
-
# Offense count: 7
|
55
|
+
# Offense count: 5
|
143
56
|
# Configuration parameters: AllowKeywordBlockArguments.
|
144
57
|
Lint/UnderscorePrefixedVariableName:
|
145
58
|
Exclude:
|
146
|
-
- 'lib/cucumber/cucumber_expressions/ast.rb'
|
147
59
|
- 'lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb'
|
148
60
|
- 'lib/cucumber/cucumber_expressions/group.rb'
|
149
61
|
|
150
|
-
# Offense count: 14
|
151
|
-
# This cop supports safe auto-correction (--auto-correct).
|
152
|
-
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
|
153
|
-
Lint/UnusedBlockArgument:
|
154
|
-
Exclude:
|
155
|
-
- 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb'
|
156
|
-
- 'spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb'
|
157
|
-
|
158
62
|
# Offense count: 10
|
159
63
|
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
|
160
64
|
Metrics/AbcSize:
|
@@ -201,21 +105,6 @@ Metrics/ParameterLists:
|
|
201
105
|
Metrics/PerceivedComplexity:
|
202
106
|
Max: 17
|
203
107
|
|
204
|
-
# Offense count: 10
|
205
|
-
# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
|
206
|
-
Naming/BlockParameterName:
|
207
|
-
Exclude:
|
208
|
-
- 'lib/cucumber/cucumber_expressions/cucumber_expression.rb'
|
209
|
-
- 'lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb'
|
210
|
-
- 'lib/cucumber/cucumber_expressions/parameter_type_matcher.rb'
|
211
|
-
|
212
|
-
# Offense count: 2
|
213
|
-
# Configuration parameters: ForbiddenDelimiters.
|
214
|
-
# ForbiddenDelimiters: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
|
215
|
-
Naming/HeredocDelimiterNaming:
|
216
|
-
Exclude:
|
217
|
-
- 'lib/cucumber/cucumber_expressions/errors.rb'
|
218
|
-
|
219
108
|
# Offense count: 7
|
220
109
|
# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
|
221
110
|
# AllowedNames: at, by, db, id, in, io, ip, of, on, os, pp, to
|
@@ -238,14 +127,59 @@ Naming/PredicateName:
|
|
238
127
|
- 'lib/cucumber/cucumber_expressions/parameter_type.rb'
|
239
128
|
- 'lib/cucumber/cucumber_expressions/tree_regexp.rb'
|
240
129
|
|
241
|
-
# Offense count:
|
242
|
-
#
|
243
|
-
|
244
|
-
Naming/VariableName:
|
130
|
+
# Offense count: 3
|
131
|
+
# This cop supports safe auto-correction (--auto-correct).
|
132
|
+
Performance/RedundantBlockCall:
|
245
133
|
Exclude:
|
246
134
|
- 'lib/cucumber/cucumber_expressions/cucumber_expression.rb'
|
247
|
-
|
248
|
-
|
135
|
+
|
136
|
+
# Offense count: 2
|
137
|
+
# Configuration parameters: Prefixes.
|
138
|
+
# Prefixes: when, with, without
|
139
|
+
RSpec/ContextWording:
|
140
|
+
Exclude:
|
141
|
+
- 'spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb'
|
142
|
+
|
143
|
+
# Offense count: 29
|
144
|
+
# Configuration parameters: Max.
|
145
|
+
RSpec/ExampleLength:
|
146
|
+
Exclude:
|
147
|
+
- 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb'
|
148
|
+
- 'spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb'
|
149
|
+
- 'spec/cucumber/cucumber_expressions/cucumber_expression_parser_spec.rb'
|
150
|
+
- 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb'
|
151
|
+
- 'spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb'
|
152
|
+
- 'spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb'
|
153
|
+
- 'spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb'
|
154
|
+
- 'spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb'
|
155
|
+
- 'spec/cucumber/cucumber_expressions/parameter_type_spec.rb'
|
156
|
+
- 'spec/cucumber/cucumber_expressions/regular_expression_spec.rb'
|
157
|
+
- 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb'
|
158
|
+
|
159
|
+
# Offense count: 3
|
160
|
+
RSpec/LeakyConstantDeclaration:
|
161
|
+
Exclude:
|
162
|
+
- 'spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb'
|
163
|
+
- 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb'
|
164
|
+
|
165
|
+
# Offense count: 34
|
166
|
+
RSpec/MultipleExpectations:
|
167
|
+
Max: 30
|
168
|
+
|
169
|
+
# Offense count: 1
|
170
|
+
# Configuration parameters: AllowSubject.
|
171
|
+
RSpec/MultipleMemoizedHelpers:
|
172
|
+
Max: 6
|
173
|
+
|
174
|
+
# Offense count: 2
|
175
|
+
RSpec/RepeatedDescription:
|
176
|
+
Exclude:
|
177
|
+
- 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb'
|
178
|
+
|
179
|
+
# Offense count: 2
|
180
|
+
RSpec/RepeatedExample:
|
181
|
+
Exclude:
|
182
|
+
- 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb'
|
249
183
|
|
250
184
|
# Offense count: 2
|
251
185
|
# Configuration parameters: EnforcedStyle, AllowModifiersOnSymbols.
|
@@ -254,7 +188,7 @@ Style/AccessModifierDeclarations:
|
|
254
188
|
Exclude:
|
255
189
|
- 'lib/cucumber/cucumber_expressions/tree_regexp.rb'
|
256
190
|
|
257
|
-
# Offense count:
|
191
|
+
# Offense count: 4
|
258
192
|
# This cop supports safe auto-correction (--auto-correct).
|
259
193
|
# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods, AllowBracesOnProceduralOneLiners, BracesRequiredMethods.
|
260
194
|
# SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces
|
@@ -267,7 +201,6 @@ Style/BlockDelimiters:
|
|
267
201
|
- 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb'
|
268
202
|
- 'spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb'
|
269
203
|
- 'spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb'
|
270
|
-
- 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb'
|
271
204
|
|
272
205
|
# Offense count: 1
|
273
206
|
# This cop supports unsafe auto-correction (--auto-correct-all).
|
@@ -378,12 +311,6 @@ Style/ParallelAssignment:
|
|
378
311
|
- 'lib/cucumber/cucumber_expressions/parameter_type_matcher.rb'
|
379
312
|
- 'spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb'
|
380
313
|
|
381
|
-
# Offense count: 1
|
382
|
-
# This cop supports safe auto-correction (--auto-correct).
|
383
|
-
Style/PerlBackrefs:
|
384
|
-
Exclude:
|
385
|
-
- 'lib/cucumber/cucumber_expressions/parameter_type.rb'
|
386
|
-
|
387
314
|
# Offense count: 1
|
388
315
|
# This cop supports unsafe auto-correction (--auto-correct-all).
|
389
316
|
# Configuration parameters: EnforcedStyle.
|
@@ -473,7 +400,7 @@ Style/SymbolProc:
|
|
473
400
|
- 'lib/cucumber/cucumber_expressions/ast.rb'
|
474
401
|
- 'lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb'
|
475
402
|
- 'lib/cucumber/cucumber_expressions/errors.rb'
|
476
|
-
- 'spec/cucumber/cucumber_expressions/
|
403
|
+
- 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb'
|
477
404
|
- 'spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb'
|
478
405
|
- 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb'
|
479
406
|
|
@@ -484,7 +411,7 @@ Style/SymbolProc:
|
|
484
411
|
Style/TrailingCommaInArrayLiteral:
|
485
412
|
Exclude:
|
486
413
|
- 'lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb'
|
487
|
-
- 'spec/cucumber/cucumber_expressions/
|
414
|
+
- 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb'
|
488
415
|
|
489
416
|
# Offense count: 1
|
490
417
|
# This cop supports safe auto-correction (--auto-correct).
|
@@ -494,14 +421,6 @@ Style/TrailingCommaInHashLiteral:
|
|
494
421
|
Exclude:
|
495
422
|
- 'cucumber-cucumber-expressions.gemspec'
|
496
423
|
|
497
|
-
# Offense count: 9
|
498
|
-
# This cop supports safe auto-correction (--auto-correct).
|
499
|
-
# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, AllowedMethods.
|
500
|
-
# AllowedMethods: to_ary, to_a, to_c, to_enum, to_h, to_hash, to_i, to_int, to_io, to_open, to_path, to_proc, to_r, to_regexp, to_str, to_s, to_sym
|
501
|
-
Style/TrivialAccessors:
|
502
|
-
Exclude:
|
503
|
-
- 'lib/cucumber/cucumber_expressions/ast.rb'
|
504
|
-
|
505
424
|
# Offense count: 1
|
506
425
|
# This cop supports safe auto-correction (--auto-correct).
|
507
426
|
Style/WhileUntilDo:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
17.0.
|
1
|
+
17.0.2
|
@@ -10,22 +10,27 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.description = 'Cucumber Expressions - a simpler alternative to Regular Expressions'
|
11
11
|
s.summary = "cucumber-expressions-#{s.version}"
|
12
12
|
s.email = 'cukes@googlegroups.com'
|
13
|
-
s.homepage = 'https://github.com/cucumber/cucumber-expressions
|
13
|
+
s.homepage = 'https://github.com/cucumber/cucumber-expressions'
|
14
14
|
s.platform = Gem::Platform::RUBY
|
15
15
|
s.license = 'MIT'
|
16
16
|
s.required_ruby_version = '>= 2.5'
|
17
17
|
|
18
18
|
s.metadata = {
|
19
19
|
'bug_tracker_uri' => 'https://github.com/cucumber/cucumber/issues',
|
20
|
-
'changelog_uri'
|
20
|
+
'changelog_uri' => 'https://github.com/cucumber/common/blob/main/cucumber-expressions/CHANGELOG.md',
|
21
21
|
'documentation_uri' => 'https://cucumber.io/docs/cucumber/cucumber-expressions/',
|
22
|
-
'mailing_list_uri'
|
23
|
-
'source_code_uri'
|
22
|
+
'mailing_list_uri' => 'https://groups.google.com/forum/#!forum/cukes',
|
23
|
+
'source_code_uri' => 'https://github.com/cucumber/common/blob/main/cucumber-expressions/ruby',
|
24
24
|
}
|
25
25
|
|
26
|
+
s.add_runtime_dependency 'bigdecimal'
|
27
|
+
|
26
28
|
s.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
|
27
29
|
s.add_development_dependency 'rspec', '~> 3.11', '>= 3.11.0'
|
28
30
|
s.add_development_dependency 'rubocop', '~> 1.27.0'
|
31
|
+
s.add_development_dependency 'rubocop-performance', '~> 1.7.0'
|
32
|
+
s.add_development_dependency 'rubocop-rake', '~> 0.5.0'
|
33
|
+
s.add_development_dependency 'rubocop-rspec', '~> 2.0.0'
|
29
34
|
|
30
35
|
s.files = `git ls-files`.split("\n").reject { |path| path =~ /\.gitignore$/ }
|
31
36
|
s.rdoc_options = ['--charset=UTF-8']
|
@@ -30,7 +30,7 @@ module Cucumber
|
|
30
30
|
|
31
31
|
(0...@parameter_type_combinations[depth].length).each do |i|
|
32
32
|
# Avoid recursion if no elements can be added.
|
33
|
-
|
33
|
+
break if generated_expressions.length >= MAX_EXPRESSIONS
|
34
34
|
|
35
35
|
new_current_parameter_types = current_parameter_types.dup # clone
|
36
36
|
new_current_parameter_types.push(@parameter_type_combinations[depth][i])
|
@@ -63,9 +63,9 @@ module Cucumber
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def rewrite_optional(node)
|
66
|
-
assert_no_parameters(node) { |
|
67
|
-
assert_no_optionals(node) { |
|
68
|
-
assert_not_empty(node) { |
|
66
|
+
assert_no_parameters(node) { |ast_node| raise ParameterIsNotAllowedInOptional.new(ast_node, @expression) }
|
67
|
+
assert_no_optionals(node) { |ast_node| raise OptionalIsNotAllowedInOptional.new(ast_node, @expression) }
|
68
|
+
assert_not_empty(node) { |ast_node| raise OptionalMayNotBeEmpty.new(ast_node, @expression) }
|
69
69
|
regex = node.nodes.map { |n| rewrite_to_regex(n) }.join('')
|
70
70
|
"(?:#{regex})?"
|
71
71
|
end
|
@@ -75,14 +75,14 @@ module Cucumber
|
|
75
75
|
node.nodes.each { |alternative|
|
76
76
|
raise AlternativeMayNotBeEmpty.new(alternative, @expression) if alternative.nodes.length == 0
|
77
77
|
|
78
|
-
assert_not_empty(alternative) { |
|
78
|
+
assert_not_empty(alternative) { |ast_node| raise AlternativeMayNotExclusivelyContainOptionals.new(ast_node, @expression) }
|
79
79
|
}
|
80
80
|
regex = node.nodes.map { |n| rewrite_to_regex(n) }.join('|')
|
81
81
|
"(?:#{regex})"
|
82
82
|
end
|
83
83
|
|
84
84
|
def rewrite_alternative(node)
|
85
|
-
node.nodes.map { |
|
85
|
+
node.nodes.map { |last_node| rewrite_to_regex(last_node) }.join('')
|
86
86
|
end
|
87
87
|
|
88
88
|
def rewrite_parameter(node)
|
@@ -103,17 +103,17 @@ module Cucumber
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def assert_not_empty(node, &raise_error)
|
106
|
-
text_nodes = node.nodes.select { |
|
106
|
+
text_nodes = node.nodes.select { |ast_node| NodeType::TEXT == ast_node.type }
|
107
107
|
raise_error.call(node) if text_nodes.length == 0
|
108
108
|
end
|
109
109
|
|
110
110
|
def assert_no_parameters(node, &raise_error)
|
111
|
-
nodes = node.nodes.select { |
|
111
|
+
nodes = node.nodes.select { |ast_node| NodeType::PARAMETER == ast_node.type }
|
112
112
|
raise_error.call(nodes[0]) if nodes.length > 0
|
113
113
|
end
|
114
114
|
|
115
115
|
def assert_no_optionals(node, &raise_error)
|
116
|
-
nodes = node.nodes.select { |
|
116
|
+
nodes = node.nodes.select { |ast_node| NodeType::OPTIONAL == ast_node.type }
|
117
117
|
raise_error.call(nodes[0]) if nodes.length > 0
|
118
118
|
end
|
119
119
|
end
|
@@ -76,7 +76,7 @@ module Cucumber
|
|
76
76
|
|
77
77
|
consumed, ast = parse_tokens_until(expr, alternative_parsers, tokens, current, [TokenType::WHITE_SPACE, TokenType::END_OF_LINE, TokenType::BEGIN_PARAMETER])
|
78
78
|
sub_current = current + consumed
|
79
|
-
return [0, nil] unless ast.map { |
|
79
|
+
return [0, nil] unless ast.map { |ast_node| ast_node.type }.include? NodeType::ALTERNATIVE
|
80
80
|
|
81
81
|
start = tokens[current].start
|
82
82
|
_end = tokens[sub_current].start
|
@@ -6,14 +6,14 @@ module Cucumber
|
|
6
6
|
module CucumberExpressions
|
7
7
|
class CucumberExpressionError < StandardError
|
8
8
|
def build_message(index, expression, pointer, problem, solution)
|
9
|
-
m = <<~
|
9
|
+
m = <<~ERROR
|
10
10
|
This Cucumber Expression has a problem at column #{index + 1}:
|
11
11
|
|
12
12
|
#{expression}
|
13
13
|
#{pointer}
|
14
14
|
#{problem}.
|
15
15
|
#{solution}
|
16
|
-
|
16
|
+
ERROR
|
17
17
|
m.strip
|
18
18
|
end
|
19
19
|
|
@@ -41,7 +41,7 @@ module Cucumber
|
|
41
41
|
expression,
|
42
42
|
point_at_located(node),
|
43
43
|
'An alternative may not exclusively contain optionals',
|
44
|
-
"If you did not mean to use an optional you can use '\\(' to escape the
|
44
|
+
"If you did not mean to use an optional you can use '\\(' to escape the '('"
|
45
45
|
)
|
46
46
|
)
|
47
47
|
end
|
@@ -55,7 +55,7 @@ module Cucumber
|
|
55
55
|
expression,
|
56
56
|
point_at_located(node),
|
57
57
|
'Alternative may not be empty',
|
58
|
-
"If you did not mean to use an alternative you can use '\\/' to escape the
|
58
|
+
"If you did not mean to use an alternative you can use '\\/' to escape the '/'"
|
59
59
|
)
|
60
60
|
)
|
61
61
|
end
|
@@ -83,7 +83,7 @@ module Cucumber
|
|
83
83
|
expression,
|
84
84
|
point_at_located(node),
|
85
85
|
'An optional must contain some text',
|
86
|
-
"If you did not mean to use an optional you can use '\\(' to escape the
|
86
|
+
"If you did not mean to use an optional you can use '\\(' to escape the '('"
|
87
87
|
)
|
88
88
|
)
|
89
89
|
end
|
@@ -97,7 +97,7 @@ module Cucumber
|
|
97
97
|
expression,
|
98
98
|
point_at_located(node),
|
99
99
|
'An optional may not contain a parameter type',
|
100
|
-
"If you did not mean to use an parameter type you can use '\\{' to escape the
|
100
|
+
"If you did not mean to use an parameter type you can use '\\{' to escape the '{'"
|
101
101
|
)
|
102
102
|
)
|
103
103
|
end
|
@@ -111,7 +111,7 @@ module Cucumber
|
|
111
111
|
expression,
|
112
112
|
point_at_located(node),
|
113
113
|
'An optional may not contain an other optional',
|
114
|
-
"If you did not mean to use an optional type you can use '\\(' to escape the
|
114
|
+
"If you did not mean to use an optional type you can use '\\(' to escape the '('. For more complicated expressions consider using a regular expression instead."
|
115
115
|
)
|
116
116
|
)
|
117
117
|
end
|
@@ -126,7 +126,7 @@ module Cucumber
|
|
126
126
|
expression,
|
127
127
|
point_at(index),
|
128
128
|
'The end of line can not be escaped',
|
129
|
-
"You can use '\\\\' to escape the
|
129
|
+
"You can use '\\\\' to escape the '\\'"
|
130
130
|
)
|
131
131
|
)
|
132
132
|
end
|
@@ -158,7 +158,7 @@ module Cucumber
|
|
158
158
|
expression,
|
159
159
|
point_at_located(current),
|
160
160
|
'An alternation can not be used inside an optional',
|
161
|
-
"
|
161
|
+
"If you did not mean to use an alternation you can use '\\/' to escape the '/'. Otherwise rephrase your expression or consider using a regular expression instead."
|
162
162
|
)
|
163
163
|
)
|
164
164
|
end
|
@@ -203,7 +203,7 @@ module Cucumber
|
|
203
203
|
|
204
204
|
class AmbiguousParameterTypeError < CucumberExpressionError
|
205
205
|
def initialize(parameter_type_regexp, expression_regexp, parameter_types, generated_expressions)
|
206
|
-
super(<<~
|
206
|
+
super(<<~ERROR)
|
207
207
|
Your Regular Expression /#{expression_regexp.source}/
|
208
208
|
matches multiple parameter types with regexp /#{parameter_type_regexp}/:
|
209
209
|
#{parameter_type_names(parameter_types)}
|
@@ -215,7 +215,7 @@ module Cucumber
|
|
215
215
|
|
216
216
|
2) Make one of the parameter types preferential and continue to use a Regular Expression.
|
217
217
|
|
218
|
-
|
218
|
+
ERROR
|
219
219
|
end
|
220
220
|
|
221
221
|
private
|
@@ -15,9 +15,7 @@ module Cucumber
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.is_valid_parameter_type_name(type_name)
|
18
|
-
unescaped_type_name = type_name.gsub(UNESCAPE_PATTERN)
|
19
|
-
$2
|
20
|
-
end
|
18
|
+
unescaped_type_name = type_name.gsub(UNESCAPE_PATTERN) { Regexp.last_match(2) }
|
21
19
|
!(ILLEGAL_PARAMETER_NAME_PATTERN =~ unescaped_type_name)
|
22
20
|
end
|
23
21
|
|
@@ -11,8 +11,8 @@ module Cucumber
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def advance_to(new_match_position)
|
14
|
-
(new_match_position...@text.length).each do |
|
15
|
-
matcher = self.class.new(parameter_type, @regexp, @text,
|
14
|
+
(new_match_position...@text.length).each do |advanced_position|
|
15
|
+
matcher = self.class.new(parameter_type, @regexp, @text, advanced_position)
|
16
16
|
return matcher if matcher.find && matcher.full_word?
|
17
17
|
end
|
18
18
|
|
@@ -10,7 +10,7 @@ module Cucumber
|
|
10
10
|
it 'exposes parameter_type' do
|
11
11
|
tree_regexp = TreeRegexp.new(/three (.*) mice/)
|
12
12
|
parameter_type_registry = ParameterTypeRegistry.new
|
13
|
-
arguments =
|
13
|
+
arguments = described_class.build(tree_regexp, 'three blind mice', [parameter_type_registry.lookup_by_type_name('string')])
|
14
14
|
argument = arguments[0]
|
15
15
|
expect(argument.parameter_type.name).to eq('string')
|
16
16
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cucumber/cucumber_expressions/parameter_type'
|
4
|
+
require 'cucumber/cucumber_expressions/combinatorial_generated_expression_factory'
|
5
|
+
|
6
|
+
describe Cucumber::CucumberExpressions::CombinatorialGeneratedExpressionFactory do
|
7
|
+
let(:klazz) { Class.new }
|
8
|
+
let(:color_parameter_type) do
|
9
|
+
Cucumber::CucumberExpressions::ParameterType.new('color', /red|blue|yellow/, klazz, ->(_) { klazz.new }, true, false)
|
10
|
+
end
|
11
|
+
let(:css_color_parameter_type) do
|
12
|
+
Cucumber::CucumberExpressions::ParameterType.new('csscolor', /red|blue|yellow/, klazz, ->(_) { klazz.new }, true, false)
|
13
|
+
end
|
14
|
+
let(:date_parameter_type) do
|
15
|
+
Cucumber::CucumberExpressions::ParameterType.new('date', /\d{4}-\d{2}-\d{2}/, klazz, ->(_) { klazz.new }, true, false)
|
16
|
+
end
|
17
|
+
let(:date_time_parameter_type) do
|
18
|
+
Cucumber::CucumberExpressions::ParameterType.new('datetime', /\d{4}-\d{2}-\d{2}/, klazz, ->(_) { klazz.new }, true, false)
|
19
|
+
end
|
20
|
+
let(:timestamp_parameter_type) do
|
21
|
+
Cucumber::CucumberExpressions::ParameterType.new('timestamp', /\d{4}-\d{2}-\d{2}/, klazz, ->(_) { klazz.new }, true, false)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'generates multiple expressions' do
|
25
|
+
parameter_type_combinations = [
|
26
|
+
[color_parameter_type, css_color_parameter_type],
|
27
|
+
[date_parameter_type, date_time_parameter_type, timestamp_parameter_type]
|
28
|
+
]
|
29
|
+
|
30
|
+
factory = described_class.new('I bought a {%s} ball on {%s}', parameter_type_combinations)
|
31
|
+
expressions = factory.generate_expressions.map { |generated_expression| generated_expression.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
|