cucumber-core 13.0.2 → 14.0.0
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/CHANGELOG.md +19 -3
- data/LICENSE +1 -1
- data/lib/cucumber/core/event.rb +5 -5
- data/lib/cucumber/core/event_bus.rb +1 -0
- data/lib/cucumber/core/events.rb +2 -3
- data/lib/cucumber/core/gherkin/document.rb +1 -1
- data/lib/cucumber/core/gherkin/parser.rb +1 -1
- data/lib/cucumber/core/gherkin/writer/helpers.rb +1 -1
- data/lib/cucumber/core/gherkin/writer.rb +4 -4
- data/lib/cucumber/core/test/action/defined.rb +57 -0
- data/lib/cucumber/core/test/action/undefined.rb +33 -0
- data/lib/cucumber/core/test/action/unskippable.rb +18 -0
- data/lib/cucumber/core/test/action.rb +3 -78
- data/lib/cucumber/core/test/around_hook.rb +4 -4
- data/lib/cucumber/core/test/case.rb +2 -1
- data/lib/cucumber/core/test/data_table.rb +1 -1
- data/lib/cucumber/core/test/doc_string.rb +3 -3
- data/lib/cucumber/core/test/filters/locations_filter.rb +4 -4
- data/lib/cucumber/core/test/filters/name_filter.rb +1 -3
- data/lib/cucumber/core/test/filters/tag_filter.rb +1 -3
- data/lib/cucumber/core/test/location.rb +8 -8
- data/lib/cucumber/core/test/result.rb +9 -4
- data/lib/cucumber/core/test/step.rb +3 -2
- metadata +31 -29
- data/lib/cucumber/core/test/filters/activate_steps_for_self_test.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 570471feb1c7ceb0d00c12ffda878f8520993ec3a8cf31059f38f4eb4e045923
|
4
|
+
data.tar.gz: 5e303f42a9aecf8290351f657f9aa763d0a046623e6479083c466cd040cfa8c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: def6d99174f68b29d3daa43256175014306168b77f484341d5fb78b3e2446cf539dff514a9fb85eabb65ec9c342507855121bfa87135b848ea16d29ddcc19a4f
|
7
|
+
data.tar.gz: 8873beb624b2cbc3144e8b46cb3d03709855491cfbeba79b796e5f15bdc6540eaa1ec3c59cc67dd43be4b20815ac4ecfc55885ea1cb8034212f924f06197110c
|
data/CHANGELOG.md
CHANGED
@@ -10,6 +10,20 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo
|
|
10
10
|
|
11
11
|
## [Unreleased]
|
12
12
|
|
13
|
+
## [14.0.0] - 2024-08-08
|
14
|
+
### Changed
|
15
|
+
- Permit usage of gherkin up to v29 and messages up to v26
|
16
|
+
- **Internal Breaking Change**: Structure of `Action` classes have changed.
|
17
|
+
See upgrading notes for [14.0.0.md](upgrading_notes/14.0.0.md#upgrading-to-cucumber-core-1400)
|
18
|
+
([#282](https://github.com/cucumber/cucumber-ruby-core/pull/282))
|
19
|
+
|
20
|
+
### Removed
|
21
|
+
- Remove support for ruby 2.6 and below. 2.7 or higher is required now (Autofixed to Ruby 2.7 styles)
|
22
|
+
|
23
|
+
## [13.0.3] - 2024-07-24
|
24
|
+
### Changed
|
25
|
+
- Fixed up all remaining Layout auto-correct cops in the codebase
|
26
|
+
|
13
27
|
## [13.0.2] - 2024-03-21
|
14
28
|
### Changed
|
15
29
|
- Added CI testing for Ruby 3.3
|
@@ -27,8 +41,8 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo
|
|
27
41
|
- Now using a 2-tiered changelog to avoid any bugs when using polyglot-release
|
28
42
|
- More refactoring of the repo by fixing up a bunch of manual rubocop offenses (See PR's for details)
|
29
43
|
([#259](https://github.com/cucumber/cucumber-ruby-core/pull/259) [#262](https://github.com/cucumber/cucumber-ruby-core/pull/262) [#268](https://github.com/cucumber/cucumber-ruby-core/pull/268) [#274](https://github.com/cucumber/cucumber-ruby-core/pull/274))
|
30
|
-
- In all `Summary` and `Result` classes, changed the `strict` argument into a keyword argument
|
31
|
-
See upgrading notes for [13.0.0.md](upgrading_notes/13.0.0.md#upgrading-to-1300)
|
44
|
+
- In all `Summary` and `Result` classes, changed the `strict` argument into a keyword argument.
|
45
|
+
See upgrading notes for [13.0.0.md](upgrading_notes/13.0.0.md#upgrading-to-cucumber-core-1300)
|
32
46
|
([#261](https://github.com/cucumber/cucumber-ruby-core/pull/261))
|
33
47
|
- Permit usage of gherkin v27
|
34
48
|
|
@@ -60,7 +74,9 @@ See upgrading notes for [13.0.0.md](upgrading_notes/13.0.0.md#upgrading-to-1300)
|
|
60
74
|
### Changed
|
61
75
|
- Updated `cucumber-gherkin` and `cucumber-messages`
|
62
76
|
|
63
|
-
[Unreleased]: https://github.com/cucumber/cucumber-ruby-core/compare/
|
77
|
+
[Unreleased]: https://github.com/cucumber/cucumber-ruby-core/compare/v14.0.0...HEAD
|
78
|
+
[14.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v13.0.3...v14.0.0
|
79
|
+
[13.0.3]: https://github.com/cucumber/cucumber-ruby-core/compare/v13.0.2...v13.0.3
|
64
80
|
[13.0.2]: https://github.com/cucumber/cucumber-ruby-core/compare/v13.0.1...v13.0.2
|
65
81
|
[13.0.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v13.0.0...v13.0.1
|
66
82
|
[13.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v12.0.0...v13.0.0
|
data/LICENSE
CHANGED
data/lib/cucumber/core/event.rb
CHANGED
@@ -48,11 +48,11 @@ module Cucumber
|
|
48
48
|
def underscore(string)
|
49
49
|
string
|
50
50
|
.to_s
|
51
|
-
.gsub('::', '/')
|
52
|
-
gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
53
|
-
gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
54
|
-
tr('-', '_')
|
55
|
-
downcase
|
51
|
+
.gsub('::', '/')
|
52
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
53
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
54
|
+
.tr('-', '_')
|
55
|
+
.downcase
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -29,6 +29,7 @@ module Cucumber
|
|
29
29
|
|
30
30
|
def broadcast(event)
|
31
31
|
raise ArgumentError, "Event type #{event.class} is not registered. Try one of these:\n#{event_types.values.join("\n")}" unless registered_type?(event.class)
|
32
|
+
|
32
33
|
handlers_for(event.class).each { |handler| handler.call(event) }
|
33
34
|
@event_queue << event
|
34
35
|
end
|
data/lib/cucumber/core/events.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require 'cucumber/core/event'
|
@@ -40,7 +39,7 @@ module Cucumber
|
|
40
39
|
attr_reader :test_case
|
41
40
|
end
|
42
41
|
|
43
|
-
#
|
42
|
+
# Signals that a {Test::Step} is about to be executed
|
44
43
|
class TestStepStarted < Event.new(:test_step)
|
45
44
|
# @return [Test::Step] the test step to be executed
|
46
45
|
attr_reader :test_step
|
@@ -87,7 +86,7 @@ module Cucumber
|
|
87
86
|
#
|
88
87
|
# @return [Hash{Symbol => Class}]
|
89
88
|
def self.build_registry(*types)
|
90
|
-
types.
|
89
|
+
types.to_h { |type| [type.event_id, type] }
|
91
90
|
end
|
92
91
|
end
|
93
92
|
end
|
@@ -50,7 +50,7 @@ module Cucumber
|
|
50
50
|
case type?(message)
|
51
51
|
when :gherkin_document; then event_bus.gherkin_source_parsed(message.gherkin_document)
|
52
52
|
when :pickle; then receiver.pickle(message.pickle)
|
53
|
-
when :parse_error; then raise ParseError
|
53
|
+
when :parse_error; then raise ParseError, "#{document.uri}: #{message.parse_error.message}"
|
54
54
|
else raise "Unknown message: #{message.to_hash}"
|
55
55
|
end
|
56
56
|
end
|
@@ -16,7 +16,8 @@ module Cucumber
|
|
16
16
|
|
17
17
|
class Gherkin
|
18
18
|
def initialize(uri, &source)
|
19
|
-
@uri
|
19
|
+
@uri = uri
|
20
|
+
@source = source
|
20
21
|
end
|
21
22
|
|
22
23
|
def comment(line)
|
@@ -174,7 +175,7 @@ module Cucumber
|
|
174
175
|
|
175
176
|
elements :table
|
176
177
|
|
177
|
-
def doc_string(string, content_type='')
|
178
|
+
def doc_string(string, content_type = '')
|
178
179
|
elements << DocString.new(string, content_type)
|
179
180
|
end
|
180
181
|
|
@@ -193,8 +194,7 @@ module Cucumber
|
|
193
194
|
include Indentation.level(6)
|
194
195
|
include HasRows
|
195
196
|
|
196
|
-
def initialize(*)
|
197
|
-
end
|
197
|
+
def initialize(*); end
|
198
198
|
|
199
199
|
def build(source)
|
200
200
|
source + statements
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cucumber/core/test/location'
|
4
|
+
require 'cucumber/core/test/result'
|
5
|
+
require 'cucumber/core/test/timer'
|
6
|
+
|
7
|
+
module Cucumber
|
8
|
+
module Core
|
9
|
+
module Test
|
10
|
+
module Action
|
11
|
+
class Defined
|
12
|
+
attr_reader :location
|
13
|
+
|
14
|
+
def initialize(location = nil, &block)
|
15
|
+
raise ArgumentError, 'Passing a block to execute the action is mandatory.' unless block
|
16
|
+
|
17
|
+
@location = location || Test::Location.new(*block.source_location)
|
18
|
+
@block = block
|
19
|
+
@timer = Timer.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def skip(*)
|
23
|
+
skipped
|
24
|
+
end
|
25
|
+
|
26
|
+
def execute(*args)
|
27
|
+
@timer.start
|
28
|
+
@block.call(*args)
|
29
|
+
passed
|
30
|
+
rescue Result::Raisable => e
|
31
|
+
e.with_duration(@timer.duration)
|
32
|
+
rescue Exception => e
|
33
|
+
failed(e)
|
34
|
+
end
|
35
|
+
|
36
|
+
def inspect
|
37
|
+
"#<#{self.class}: #{location}>"
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def passed
|
43
|
+
Result::Passed.new(@timer.duration)
|
44
|
+
end
|
45
|
+
|
46
|
+
def failed(exception)
|
47
|
+
Result::Failed.new(@timer.duration, exception)
|
48
|
+
end
|
49
|
+
|
50
|
+
def skipped
|
51
|
+
Result::Skipped.new
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cucumber/core/test/result'
|
4
|
+
|
5
|
+
module Cucumber
|
6
|
+
module Core
|
7
|
+
module Test
|
8
|
+
module Action
|
9
|
+
class Undefined
|
10
|
+
attr_reader :location
|
11
|
+
|
12
|
+
def initialize(source_location)
|
13
|
+
@location = source_location
|
14
|
+
end
|
15
|
+
|
16
|
+
def execute(*)
|
17
|
+
undefined
|
18
|
+
end
|
19
|
+
|
20
|
+
def skip(*)
|
21
|
+
undefined
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def undefined
|
27
|
+
Result::Undefined.new
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cucumber/core/test/result'
|
4
|
+
require 'cucumber/core/test/action/defined'
|
5
|
+
|
6
|
+
module Cucumber
|
7
|
+
module Core
|
8
|
+
module Test
|
9
|
+
module Action
|
10
|
+
class Unskippable < Defined
|
11
|
+
def skip(*args)
|
12
|
+
execute(*args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -4,81 +4,6 @@ require 'cucumber/core/test/location'
|
|
4
4
|
require 'cucumber/core/test/result'
|
5
5
|
require 'cucumber/core/test/timer'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
class Action
|
11
|
-
def initialize(location = nil, &block)
|
12
|
-
raise ArgumentError, 'Passing a block to execute the action is mandatory.' unless block
|
13
|
-
@location = location || Test::Location.new(*block.source_location)
|
14
|
-
@block = block
|
15
|
-
@timer = Timer.new
|
16
|
-
end
|
17
|
-
|
18
|
-
def skip(*)
|
19
|
-
skipped
|
20
|
-
end
|
21
|
-
|
22
|
-
def execute(*args)
|
23
|
-
@timer.start
|
24
|
-
@block.call(*args)
|
25
|
-
passed
|
26
|
-
rescue Result::Raisable => exception
|
27
|
-
exception.with_duration(@timer.duration)
|
28
|
-
rescue Exception => exception
|
29
|
-
failed(exception)
|
30
|
-
end
|
31
|
-
|
32
|
-
def location
|
33
|
-
@location
|
34
|
-
end
|
35
|
-
|
36
|
-
def inspect
|
37
|
-
"#<#{self.class}: #{location}>"
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def passed
|
43
|
-
Result::Passed.new(@timer.duration)
|
44
|
-
end
|
45
|
-
|
46
|
-
def failed(exception)
|
47
|
-
Result::Failed.new(@timer.duration, exception)
|
48
|
-
end
|
49
|
-
|
50
|
-
def skipped
|
51
|
-
Result::Skipped.new
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class UnskippableAction < Action
|
56
|
-
def skip(*args)
|
57
|
-
execute(*args)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class UndefinedAction
|
62
|
-
attr_reader :location
|
63
|
-
|
64
|
-
def initialize(source_location)
|
65
|
-
@location = source_location
|
66
|
-
end
|
67
|
-
|
68
|
-
def execute(*)
|
69
|
-
undefined
|
70
|
-
end
|
71
|
-
|
72
|
-
def skip(*)
|
73
|
-
undefined
|
74
|
-
end
|
75
|
-
|
76
|
-
private
|
77
|
-
|
78
|
-
def undefined
|
79
|
-
Result::Undefined.new
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
7
|
+
require 'cucumber/core/test/action/defined'
|
8
|
+
require 'cucumber/core/test/action/undefined'
|
9
|
+
require 'cucumber/core/test/action/unskippable'
|
@@ -21,10 +21,10 @@ module Cucumber
|
|
21
21
|
@timer.start
|
22
22
|
@block.call(continue)
|
23
23
|
Result::Unknown.new # Around hook does not know the result of the inner test steps
|
24
|
-
rescue Result::Raisable =>
|
25
|
-
|
26
|
-
rescue Exception =>
|
27
|
-
failed(
|
24
|
+
rescue Result::Raisable => e
|
25
|
+
e.with_duration(@timer.duration)
|
26
|
+
rescue Exception => e
|
27
|
+
failed(e)
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
@@ -10,7 +10,8 @@ module Cucumber
|
|
10
10
|
attr_reader :id, :name, :test_steps, :location, :parent_locations, :tags, :language, :around_hooks
|
11
11
|
|
12
12
|
def initialize(id, name, test_steps, location, parent_locations, tags, language, around_hooks = [])
|
13
|
-
raise ArgumentError
|
13
|
+
raise ArgumentError, "test_steps should be an Array but is a #{test_steps.class}" unless test_steps.is_a?(Array)
|
14
|
+
|
14
15
|
@id = id
|
15
16
|
@name = name
|
16
17
|
@test_steps = test_steps
|
@@ -43,6 +43,7 @@ module Cucumber
|
|
43
43
|
|
44
44
|
def map
|
45
45
|
raise ArgumentError, 'No block given' unless block_given?
|
46
|
+
|
46
47
|
new_content = yield content
|
47
48
|
self.class.new(new_content, content_type)
|
48
49
|
end
|
@@ -59,9 +60,8 @@ module Cucumber
|
|
59
60
|
if other.respond_to?(:content_type)
|
60
61
|
return false unless content_type == other.content_type
|
61
62
|
end
|
62
|
-
if other.respond_to?(:to_str)
|
63
|
-
|
64
|
-
end
|
63
|
+
return content == other.to_str if other.respond_to?(:to_str)
|
64
|
+
|
65
65
|
false
|
66
66
|
end
|
67
67
|
|
@@ -23,11 +23,11 @@ module Cucumber
|
|
23
23
|
private
|
24
24
|
|
25
25
|
def sorted_test_cases
|
26
|
-
filter_locations.map
|
27
|
-
test_cases[filter_location.file].select
|
26
|
+
filter_locations.map do |filter_location|
|
27
|
+
test_cases[filter_location.file].select do |test_case|
|
28
28
|
test_case.match_locations?([filter_location])
|
29
|
-
|
30
|
-
|
29
|
+
end
|
30
|
+
end.flatten.uniq
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_cases
|
@@ -8,9 +8,7 @@ module Cucumber
|
|
8
8
|
class TagFilter < Filter.new(:filter_expressions)
|
9
9
|
def test_case(test_case)
|
10
10
|
test_cases << test_case
|
11
|
-
if test_case.match_tags?(filter_expressions)
|
12
|
-
test_case.describe_to(receiver)
|
13
|
-
end
|
11
|
+
test_case.describe_to(receiver) if test_case.match_tags?(filter_expressions)
|
14
12
|
self
|
15
13
|
end
|
16
14
|
|
@@ -22,14 +22,14 @@ module Cucumber
|
|
22
22
|
pwd = File.expand_path(Dir.pwd)
|
23
23
|
pwd.force_encoding(file.encoding)
|
24
24
|
if file.index(pwd)
|
25
|
-
file = file[pwd.length + 1
|
25
|
+
file = file[pwd.length + 1..]
|
26
26
|
elsif file =~ /.*\/gems\/(.*\.rb)$/
|
27
27
|
file = $1
|
28
28
|
end
|
29
29
|
new(file, line)
|
30
30
|
end
|
31
31
|
|
32
|
-
def self.new(file, raw_lines=nil)
|
32
|
+
def self.new(file, raw_lines = nil)
|
33
33
|
file || raise(ArgumentError, 'file is mandatory')
|
34
34
|
if raw_lines
|
35
35
|
Precise.new(file, Lines.new(raw_lines))
|
@@ -38,7 +38,7 @@ module Cucumber
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
|
41
|
+
Wildcard = Struct.new(:file) do
|
42
42
|
def to_s
|
43
43
|
file
|
44
44
|
end
|
@@ -52,7 +52,7 @@ module Cucumber
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
|
55
|
+
Precise = Struct.new(:file, :lines) do
|
56
56
|
def include?(other_lines)
|
57
57
|
lines.include?(other_lines)
|
58
58
|
end
|
@@ -96,7 +96,7 @@ module Cucumber
|
|
96
96
|
end
|
97
97
|
|
98
98
|
require 'set'
|
99
|
-
|
99
|
+
Lines = Struct.new(:data) do
|
100
100
|
protected :data
|
101
101
|
|
102
102
|
def initialize(raw_data)
|
@@ -167,17 +167,17 @@ module Cucumber
|
|
167
167
|
end
|
168
168
|
|
169
169
|
def tags
|
170
|
-
# will be
|
170
|
+
# will be overridden by nodes that actually have tags
|
171
171
|
[]
|
172
172
|
end
|
173
173
|
|
174
174
|
def comments
|
175
|
-
# will be
|
175
|
+
# will be overridden by nodes that actually have comments
|
176
176
|
[]
|
177
177
|
end
|
178
178
|
|
179
179
|
def multiline_arg
|
180
|
-
# will be
|
180
|
+
# will be overridden by nodes that actually have a multiline_argument
|
181
181
|
Test::EmptyMultilineArgument.new
|
182
182
|
end
|
183
183
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require 'cucumber/messages'
|
@@ -64,6 +63,7 @@ module Cucumber
|
|
64
63
|
|
65
64
|
def initialize(duration)
|
66
65
|
raise ArgumentError unless duration
|
66
|
+
|
67
67
|
@duration = duration
|
68
68
|
end
|
69
69
|
|
@@ -109,6 +109,7 @@ module Cucumber
|
|
109
109
|
def initialize(duration, exception)
|
110
110
|
raise ArgumentError unless duration
|
111
111
|
raise ArgumentError unless exception
|
112
|
+
|
112
113
|
@duration = duration
|
113
114
|
@exception = exception
|
114
115
|
end
|
@@ -171,7 +172,8 @@ module Cucumber
|
|
171
172
|
attr_reader :message, :duration
|
172
173
|
|
173
174
|
def initialize(message = '', duration = UnknownDuration.new, backtrace = nil)
|
174
|
-
@message
|
175
|
+
@message = message
|
176
|
+
@duration = duration
|
175
177
|
super(message)
|
176
178
|
set_backtrace(backtrace) if backtrace
|
177
179
|
end
|
@@ -186,6 +188,7 @@ module Cucumber
|
|
186
188
|
|
187
189
|
def with_appended_backtrace(step)
|
188
190
|
return self unless step.respond_to?(:backtrace_line)
|
191
|
+
|
189
192
|
set_backtrace([]) unless backtrace
|
190
193
|
backtrace << step.backtrace_line
|
191
194
|
self
|
@@ -193,6 +196,7 @@ module Cucumber
|
|
193
196
|
|
194
197
|
def with_filtered_backtrace(filter)
|
195
198
|
return self unless backtrace
|
199
|
+
|
196
200
|
filter.new(dup).exception
|
197
201
|
end
|
198
202
|
|
@@ -283,7 +287,7 @@ module Cucumber
|
|
283
287
|
private :settings
|
284
288
|
|
285
289
|
def initialize(strict_types = [])
|
286
|
-
@settings = STRICT_AFFECTED_TYPES.
|
290
|
+
@settings = STRICT_AFFECTED_TYPES.to_h { |t| [t, :default] }
|
287
291
|
strict_types.each do |type|
|
288
292
|
set_strict(true, type)
|
289
293
|
end
|
@@ -298,6 +302,7 @@ module Cucumber
|
|
298
302
|
else
|
299
303
|
return false unless settings.key?(type)
|
300
304
|
return false unless set?(type)
|
305
|
+
|
301
306
|
settings[type]
|
302
307
|
end
|
303
308
|
end
|
@@ -377,7 +382,7 @@ module Cucumber
|
|
377
382
|
if for_status
|
378
383
|
@totals.fetch(for_status, 0)
|
379
384
|
else
|
380
|
-
@totals.values.reduce(0) { |total,count| total + count }
|
385
|
+
@totals.values.reduce(0) { |total, count| total + count }
|
381
386
|
end
|
382
387
|
end
|
383
388
|
|
@@ -10,8 +10,9 @@ module Cucumber
|
|
10
10
|
class Step
|
11
11
|
attr_reader :id, :text, :location, :multiline_arg
|
12
12
|
|
13
|
-
def initialize(id, text, location, multiline_arg = Test::EmptyMultilineArgument.new, action = Test::
|
13
|
+
def initialize(id, text, location, multiline_arg = Test::EmptyMultilineArgument.new, action = Test::Action::Undefined.new(location))
|
14
14
|
raise ArgumentError if text.nil? || text.empty?
|
15
|
+
|
15
16
|
@id = id
|
16
17
|
@text = text
|
17
18
|
@location = location
|
@@ -36,7 +37,7 @@ module Cucumber
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def with_action(action_location = nil, &block)
|
39
|
-
self.class.new(id, text, location, multiline_arg, Test::Action.new(action_location, &block))
|
40
|
+
self.class.new(id, text, location, multiline_arg, Test::Action::Defined.new(action_location, &block))
|
40
41
|
end
|
41
42
|
|
42
43
|
def backtrace_line
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 14.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aslak Hellesøy
|
@@ -12,48 +12,48 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2024-
|
15
|
+
date: 2024-08-08 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: cucumber-gherkin
|
19
19
|
requirement: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- - "
|
21
|
+
- - ">"
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: '27'
|
24
24
|
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '30'
|
27
27
|
type: :runtime
|
28
28
|
prerelease: false
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '27'
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: '
|
36
|
+
version: '30'
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: cucumber-messages
|
39
39
|
requirement: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - "
|
41
|
+
- - ">"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '22'
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '27'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "
|
51
|
+
- - ">"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '22'
|
54
54
|
- - "<"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
56
|
+
version: '27'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: cucumber-tag-expressions
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,14 +80,14 @@ dependencies:
|
|
80
80
|
requirements:
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '13.
|
83
|
+
version: '13.2'
|
84
84
|
type: :development
|
85
85
|
prerelease: false
|
86
86
|
version_requirements: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '13.
|
90
|
+
version: '13.2'
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rspec
|
93
93
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,56 +108,56 @@ dependencies:
|
|
108
108
|
requirements:
|
109
109
|
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: 1.
|
111
|
+
version: 1.61.0
|
112
112
|
type: :development
|
113
113
|
prerelease: false
|
114
114
|
version_requirements: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.
|
118
|
+
version: 1.61.0
|
119
119
|
- !ruby/object:Gem::Dependency
|
120
|
-
name: rubocop-
|
120
|
+
name: rubocop-packaging
|
121
121
|
requirement: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: 0.
|
125
|
+
version: 0.5.2
|
126
126
|
type: :development
|
127
127
|
prerelease: false
|
128
128
|
version_requirements: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
130
|
- - "~>"
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: 0.
|
132
|
+
version: 0.5.2
|
133
133
|
- !ruby/object:Gem::Dependency
|
134
|
-
name: rubocop-
|
134
|
+
name: rubocop-rake
|
135
135
|
requirement: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
137
|
- - "~>"
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version:
|
139
|
+
version: 0.6.0
|
140
140
|
type: :development
|
141
141
|
prerelease: false
|
142
142
|
version_requirements: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
144
|
- - "~>"
|
145
145
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
146
|
+
version: 0.6.0
|
147
147
|
- !ruby/object:Gem::Dependency
|
148
|
-
name: rubocop-
|
148
|
+
name: rubocop-rspec
|
149
149
|
requirement: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
151
|
- - "~>"
|
152
152
|
- !ruby/object:Gem::Version
|
153
|
-
version: 0.
|
153
|
+
version: 3.0.1
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
156
|
version_requirements: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
158
|
- - "~>"
|
159
159
|
- !ruby/object:Gem::Version
|
160
|
-
version: 0.
|
160
|
+
version: 3.0.1
|
161
161
|
description: Core library for the Cucumber BDD app
|
162
162
|
email: cukes@googlegroups.com
|
163
163
|
executables: []
|
@@ -180,13 +180,15 @@ files:
|
|
180
180
|
- lib/cucumber/core/platform.rb
|
181
181
|
- lib/cucumber/core/report/summary.rb
|
182
182
|
- lib/cucumber/core/test/action.rb
|
183
|
+
- lib/cucumber/core/test/action/defined.rb
|
184
|
+
- lib/cucumber/core/test/action/undefined.rb
|
185
|
+
- lib/cucumber/core/test/action/unskippable.rb
|
183
186
|
- lib/cucumber/core/test/around_hook.rb
|
184
187
|
- lib/cucumber/core/test/case.rb
|
185
188
|
- lib/cucumber/core/test/data_table.rb
|
186
189
|
- lib/cucumber/core/test/doc_string.rb
|
187
190
|
- lib/cucumber/core/test/empty_multiline_argument.rb
|
188
191
|
- lib/cucumber/core/test/filters.rb
|
189
|
-
- lib/cucumber/core/test/filters/activate_steps_for_self_test.rb
|
190
192
|
- lib/cucumber/core/test/filters/locations_filter.rb
|
191
193
|
- lib/cucumber/core/test/filters/name_filter.rb
|
192
194
|
- lib/cucumber/core/test/filters/tag_filter.rb
|
@@ -215,15 +217,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
215
217
|
requirements:
|
216
218
|
- - ">="
|
217
219
|
- !ruby/object:Gem::Version
|
218
|
-
version: '2.
|
220
|
+
version: '2.7'
|
219
221
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
220
222
|
requirements:
|
221
223
|
- - ">="
|
222
224
|
- !ruby/object:Gem::Version
|
223
|
-
version: 3.
|
225
|
+
version: 3.2.8
|
224
226
|
requirements: []
|
225
227
|
rubygems_version: 3.3.5
|
226
228
|
signing_key:
|
227
229
|
specification_version: 4
|
228
|
-
summary: cucumber-core-
|
230
|
+
summary: cucumber-core-14.0.0
|
229
231
|
test_files: []
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Cucumber
|
4
|
-
module Core
|
5
|
-
module Test
|
6
|
-
module Filters
|
7
|
-
# This filter is used for testing Cucumber itself. It adds step definitions
|
8
|
-
# that will activate steps to have passed / failed / pending results
|
9
|
-
# if they use conventional names.
|
10
|
-
#
|
11
|
-
# It was extracted from our test code, and does not have any tests of its own.
|
12
|
-
class ActivateStepsForSelfTest < Core::Filter.new
|
13
|
-
Failure = Class.new(StandardError)
|
14
|
-
|
15
|
-
def test_case(test_case)
|
16
|
-
test_case.with_steps(test_steps(test_case)).describe_to(receiver)
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def test_steps(test_case)
|
22
|
-
test_case.test_steps.map do |step|
|
23
|
-
case step.text
|
24
|
-
when /fail/ then step.with_action { raise Failure }
|
25
|
-
when /pending/ then step.with_action { raise Test::Result::Pending }
|
26
|
-
when /pass/ then step.with_action { :no_op }
|
27
|
-
else; step
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|