cucumber-core 5.0.2 → 9.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 +73 -0
- data/CONTRIBUTING.md +3 -3
- data/README.md +0 -2
- data/lib/cucumber/core.rb +8 -6
- data/lib/cucumber/core/compiler.rb +35 -14
- data/lib/cucumber/core/event.rb +3 -5
- data/lib/cucumber/core/event_bus.rb +1 -1
- data/lib/cucumber/core/events.rb +25 -1
- data/lib/cucumber/core/gherkin/parser.rb +10 -8
- data/lib/cucumber/core/gherkin/writer.rb +15 -5
- data/lib/cucumber/core/gherkin/writer/helpers.rb +2 -2
- data/lib/cucumber/core/test/action.rb +1 -2
- data/lib/cucumber/core/test/case.rb +5 -4
- data/lib/cucumber/core/test/data_table.rb +6 -10
- data/lib/cucumber/core/test/doc_string.rb +3 -6
- data/lib/cucumber/core/test/filters/activate_steps_for_self_test.rb +0 -1
- data/lib/cucumber/core/test/result.rb +68 -7
- data/lib/cucumber/core/test/step.rb +6 -5
- data/lib/cucumber/core/test/timer.rb +2 -2
- data/lib/cucumber/core/version.rb +1 -1
- data/spec/coverage.rb +1 -0
- data/spec/cucumber/core/compiler_spec.rb +66 -3
- data/spec/cucumber/core/event_bus_spec.rb +2 -2
- data/spec/cucumber/core/event_spec.rb +3 -3
- data/spec/cucumber/core/filter_spec.rb +2 -2
- data/spec/cucumber/core/gherkin/parser_spec.rb +18 -2
- data/spec/cucumber/core/gherkin/writer_spec.rb +0 -1
- data/spec/cucumber/core/test/action_spec.rb +1 -2
- data/spec/cucumber/core/test/case_spec.rb +3 -2
- data/spec/cucumber/core/test/data_table_spec.rb +10 -12
- data/spec/cucumber/core/test/doc_string_spec.rb +8 -11
- data/spec/cucumber/core/test/location_spec.rb +7 -7
- data/spec/cucumber/core/test/result_spec.rb +41 -11
- data/spec/cucumber/core/test/runner_spec.rb +23 -21
- data/spec/cucumber/core/test/step_spec.rb +10 -9
- data/spec/cucumber/core_spec.rb +2 -2
- metadata +91 -53
- data/spec/capture_warnings.rb +0 -74
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aeb7e9695298dfc63cddf549b2522341be7321f72fbd62b5d1c9f27aaf4209e5
|
4
|
+
data.tar.gz: d382bca49b619bede78e599748bf07b69c3041d1d4a0124ce77dde76d58865cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0fbe65ed295c80bdea85ad91574edeefb12b4689ada4cad11aab513c7c5acc0f080f5872b9a733b22d005e3db7db32e06ff8a24fced4041bb5e334e50fd2bce
|
7
|
+
data.tar.gz: b143b5bbefc63fb2dc5b36595c46588a90dfc23dbeaa5847ef9388796597d0635847f78a76237393d5d7d7ac946f84976871c0043850f712dac770cb2e634697
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,78 @@
|
|
1
1
|
Please see [CONTRIBUTING.md](https://github.com/cucumber/cucumber/blob/master/CONTRIBUTING.md) on how to contribute to Cucumber.
|
2
2
|
|
3
|
+
## [In GIT](https://github.com/cucumber/cucumber-ruby-core/compare/v9.0.0...master)
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
|
9
|
+
### Deprecate
|
10
|
+
|
11
|
+
### Removed
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
### Dependencies
|
16
|
+
|
17
|
+
## [9.0.0](https://github.com/cucumber/cucumber-ruby-core/compare/v8.0.1...v9.0.0)
|
18
|
+
|
19
|
+
### Dependencies
|
20
|
+
|
21
|
+
* Upgraded to gherkin v18 and messages v15
|
22
|
+
* Updated other dependencies (look at the diff for details)
|
23
|
+
|
24
|
+
## [8.0.1](https://github.com/cucumber/cucumber-ruby-core/compare/v8.0.0...v8.0.1)
|
25
|
+
|
26
|
+
### Fixed
|
27
|
+
|
28
|
+
* Make releases from docker using secrets from keybase
|
29
|
+
|
30
|
+
## [8.0.0](https://github.com/cucumber/cucumber-ruby-core/compare/v7.1.0...v8.0.0)
|
31
|
+
|
32
|
+
This release failed
|
33
|
+
|
34
|
+
### Dependencies
|
35
|
+
|
36
|
+
* Updated dependencies (look at the diff for details)
|
37
|
+
|
38
|
+
## [7.1.0](https://github.com/cucumber/cucumber-ruby-core/compare/v7.0.0...v7.1.0)
|
39
|
+
|
40
|
+
### Changed
|
41
|
+
|
42
|
+
* Updated gems:
|
43
|
+
* `cucumber-gherkin` ~> 14.0.1
|
44
|
+
* `cucumber-messages` ~> 12.2.0
|
45
|
+
|
46
|
+
## [7.0.0](https://github.com/cucumber/cucumber-ruby-core/compare/v6.0.0...v7.0.0)
|
47
|
+
|
48
|
+
### Changed
|
49
|
+
|
50
|
+
* Updated monorepo libraries:
|
51
|
+
- cucumber-gherkin ~> 13
|
52
|
+
- cucumber-messages ~> 12
|
53
|
+
|
54
|
+
## [6.0.0](https://github.com/cucumber/cucumber-ruby-core/compare/v5.0.2...v6.0.0)
|
55
|
+
|
56
|
+
### Changed
|
57
|
+
|
58
|
+
* Update to Gherkin 10
|
59
|
+
|
60
|
+
### Added
|
61
|
+
|
62
|
+
* Add `envelope` event, which are used when emitting `Cucumber::Messages`
|
63
|
+
* Add `TestCaseCreated` and `TestStepCreated` events, emitted when compiling a `Pickle`
|
64
|
+
* Add `Id` field to `TestCase` and `TestStep`
|
65
|
+
* Added rubocop (with todo file), and removed backports gems
|
66
|
+
([#186](https://github.com/cucumber/cucumber-ruby-core/pull/186),
|
67
|
+
[#182](https://github.com/cucumber/cucumber-ruby-core/issues/182)
|
68
|
+
[tas50](https://github.com/tas50),
|
69
|
+
[luke-hill](https://github.com/luke-hill))
|
70
|
+
|
71
|
+
### Removed
|
72
|
+
|
73
|
+
* Remove location for MultiLine arguments
|
74
|
+
|
75
|
+
|
3
76
|
## [5.0.2](https://github.com/cucumber/cucumber-ruby-core/compare/v5.0.1...v5.0.2)
|
4
77
|
|
5
78
|
### Changed
|
data/CONTRIBUTING.md
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
Release Process
|
2
2
|
===============
|
3
3
|
|
4
|
+
* Upgrade gems with `scripts/update-gemspec`
|
4
5
|
* Bump the version number in `lib/cucumber/core/version.rb`
|
5
6
|
* Update `CHANGELOG.md` with the upcoming version number and create a new `In Git` section
|
7
|
+
* Remove empty sections from `CHANGELOG.md`
|
6
8
|
* Now release it:
|
7
9
|
|
8
10
|
```
|
9
|
-
bundle update
|
10
|
-
bundle exec rake
|
11
11
|
git commit -m "Release X.Y.Z"
|
12
|
-
|
12
|
+
make release
|
13
13
|
```
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# cucumber-core
|
2
2
|
|
3
|
-
[](https://gitter.im/cucumber/cucumber-ruby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
3
|
[](https://circleci.com/gh/cucumber/cucumber-ruby-core)
|
5
|
-
[](https://travis-ci.org/cucumber/cucumber-ruby-core)
|
6
4
|
[](https://codeclimate.com/github/cucumber/cucumber-ruby-core)
|
7
5
|
[](https://coveralls.io/r/cucumber/cucumber-ruby-core?branch=master)
|
8
6
|
|
data/lib/cucumber/core.rb
CHANGED
@@ -4,6 +4,8 @@ require 'cucumber/core/gherkin/parser'
|
|
4
4
|
require 'cucumber/core/gherkin/document'
|
5
5
|
require 'cucumber/core/compiler'
|
6
6
|
require 'cucumber/core/test/runner'
|
7
|
+
require 'cucumber/messages'
|
8
|
+
require 'gherkin/query'
|
7
9
|
|
8
10
|
module Cucumber
|
9
11
|
module Core
|
@@ -11,21 +13,22 @@ module Cucumber
|
|
11
13
|
def execute(gherkin_documents, filters = [], event_bus = EventBus.new)
|
12
14
|
yield event_bus if block_given?
|
13
15
|
receiver = Test::Runner.new(event_bus)
|
14
|
-
compile gherkin_documents, receiver, filters
|
16
|
+
compile gherkin_documents, receiver, filters, event_bus
|
15
17
|
self
|
16
18
|
end
|
17
19
|
|
18
20
|
def compile(gherkin_documents, last_receiver, filters = [], event_bus = EventBus.new)
|
19
21
|
first_receiver = compose(filters, last_receiver)
|
20
|
-
|
21
|
-
|
22
|
+
gherkin_query = ::Gherkin::Query.new
|
23
|
+
compiler = Compiler.new(first_receiver, gherkin_query, event_bus)
|
24
|
+
parse gherkin_documents, compiler, event_bus, gherkin_query
|
22
25
|
self
|
23
26
|
end
|
24
27
|
|
25
28
|
private
|
26
29
|
|
27
|
-
def parse(gherkin_documents, compiler, event_bus)
|
28
|
-
parser = Core::Gherkin::Parser.new(compiler, event_bus)
|
30
|
+
def parse(gherkin_documents, compiler, event_bus, gherkin_query)
|
31
|
+
parser = Core::Gherkin::Parser.new(compiler, event_bus, gherkin_query)
|
29
32
|
gherkin_documents.each do |document|
|
30
33
|
parser.document document
|
31
34
|
end
|
@@ -38,6 +41,5 @@ module Cucumber
|
|
38
41
|
filter.with_receiver(receiver)
|
39
42
|
end
|
40
43
|
end
|
41
|
-
|
42
44
|
end
|
43
45
|
end
|
@@ -6,16 +6,20 @@ require 'cucumber/core/test/tag'
|
|
6
6
|
require 'cucumber/core/test/doc_string'
|
7
7
|
require 'cucumber/core/test/data_table'
|
8
8
|
require 'cucumber/core/test/empty_multiline_argument'
|
9
|
+
require 'cucumber/messages'
|
9
10
|
|
10
11
|
module Cucumber
|
11
12
|
module Core
|
12
13
|
# Compiles the Pickles into test cases
|
13
14
|
class Compiler
|
14
|
-
attr_reader :receiver
|
15
|
-
private :receiver
|
15
|
+
attr_reader :receiver, :gherkin_query, :id_generator
|
16
|
+
private :receiver, :gherkin_query, :id_generator
|
16
17
|
|
17
|
-
def initialize(receiver)
|
18
|
+
def initialize(receiver, gherkin_query, event_bus = nil)
|
18
19
|
@receiver = receiver
|
20
|
+
@id_generator = Cucumber::Messages::IdGenerator::UUID.new
|
21
|
+
@gherkin_query = gherkin_query
|
22
|
+
@event_bus = event_bus
|
19
23
|
end
|
20
24
|
|
21
25
|
def pickle(pickle)
|
@@ -33,38 +37,55 @@ module Cucumber
|
|
33
37
|
def create_test_case(pickle)
|
34
38
|
uri = pickle.uri
|
35
39
|
test_steps = pickle.steps.map { |step| create_test_step(step, uri) }
|
36
|
-
lines = pickle.
|
37
|
-
tags = pickle.tags.map { |tag| Test::Tag.new(Test::Location.new(uri, tag
|
38
|
-
Test::Case.new(pickle.name, test_steps, Test::Location.new(uri, lines), tags, pickle.language)
|
40
|
+
lines = source_lines_for_pickle(pickle).sort.reverse
|
41
|
+
tags = pickle.tags.map { |tag| Test::Tag.new(Test::Location.new(uri, source_line_for_pickle_tag(tag)), tag.name) }
|
42
|
+
test_case = Test::Case.new(id_generator.new_id, pickle.name, test_steps, Test::Location.new(uri, lines), tags, pickle.language)
|
43
|
+
@event_bus&.test_case_created(test_case, pickle)
|
44
|
+
test_case
|
39
45
|
end
|
40
46
|
|
41
47
|
def create_test_step(pickle_step, uri)
|
42
|
-
lines = pickle_step.
|
48
|
+
lines = source_lines_for_pickle_step(pickle_step).sort.reverse
|
43
49
|
multiline_arg = create_multiline_arg(pickle_step, uri)
|
44
|
-
Test::Step.new(pickle_step.text, Test::Location.new(uri, lines), multiline_arg)
|
50
|
+
step = Test::Step.new(id_generator.new_id, pickle_step.text, Test::Location.new(uri, lines), multiline_arg)
|
51
|
+
@event_bus&.test_step_created(step, pickle_step)
|
52
|
+
step
|
45
53
|
end
|
46
54
|
|
47
|
-
def create_multiline_arg(pickle_step,
|
55
|
+
def create_multiline_arg(pickle_step, _uri)
|
48
56
|
if pickle_step.argument
|
49
57
|
if pickle_step.argument.doc_string
|
50
58
|
doc_string = pickle_step.argument.doc_string
|
51
59
|
Test::DocString.new(
|
52
60
|
doc_string.content,
|
53
|
-
doc_string.
|
54
|
-
Test::Location.new(uri, doc_string.location.line)
|
61
|
+
doc_string.media_type
|
55
62
|
)
|
56
63
|
elsif pickle_step.argument.data_table
|
57
64
|
data_table = pickle_step.argument.data_table
|
58
|
-
first_cell = data_table.rows.first.cells.first
|
59
65
|
Test::DataTable.new(
|
60
|
-
data_table.rows.map { |row| row.cells.map { |cell| cell.value } }
|
61
|
-
Test::Location.new(uri, first_cell.location.line)
|
66
|
+
data_table.rows.map { |row| row.cells.map { |cell| cell.value } }
|
62
67
|
)
|
63
68
|
end
|
64
69
|
else
|
65
70
|
Test::EmptyMultilineArgument.new
|
66
71
|
end
|
67
72
|
end
|
73
|
+
|
74
|
+
def source_lines_for_pickle(pickle)
|
75
|
+
pickle.ast_node_ids.map { |id| source_line(id) }
|
76
|
+
end
|
77
|
+
|
78
|
+
def source_lines_for_pickle_step(pickle_step)
|
79
|
+
pickle_step.ast_node_ids.map { |id| source_line(id) }
|
80
|
+
end
|
81
|
+
|
82
|
+
def source_line_for_pickle_tag(tag)
|
83
|
+
source_line(tag.ast_node_id)
|
84
|
+
end
|
85
|
+
|
86
|
+
def source_line(id)
|
87
|
+
gherkin_query.location(id).line
|
88
|
+
end
|
68
89
|
end
|
69
90
|
end
|
70
91
|
end
|
data/lib/cucumber/core/event.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'backports/2.1.0/array/to_h'
|
2
|
-
|
3
1
|
module Cucumber
|
4
2
|
module Core
|
5
3
|
class Event
|
@@ -24,7 +22,7 @@ module Cucumber
|
|
24
22
|
end
|
25
23
|
|
26
24
|
define_method(:to_h) do
|
27
|
-
attributes.reduce({}) { |result, attribute|
|
25
|
+
attributes.reduce({}) { |result, attribute|
|
28
26
|
value = self.send(attribute)
|
29
27
|
result[attribute] = value
|
30
28
|
result
|
@@ -50,8 +48,8 @@ module Cucumber
|
|
50
48
|
|
51
49
|
def underscore(string)
|
52
50
|
string.to_s.gsub(/::/, '/').
|
53
|
-
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
54
|
-
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
51
|
+
gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
|
52
|
+
gsub(/([a-z\d])([A-Z])/, '\1_\2').
|
55
53
|
tr("-", "_").
|
56
54
|
downcase
|
57
55
|
end
|
data/lib/cucumber/core/events.rb
CHANGED
@@ -5,6 +5,10 @@ module Cucumber
|
|
5
5
|
module Core
|
6
6
|
module Events
|
7
7
|
|
8
|
+
class Envelope < Event.new(:envelope)
|
9
|
+
attr_reader :envelope
|
10
|
+
end
|
11
|
+
|
8
12
|
# Signals that a gherkin source has been parsed
|
9
13
|
class GherkinSourceParsed < Event.new(:gherkin_document)
|
10
14
|
# @return [GherkinDocument] the GherkinDocument Ast Node
|
@@ -12,6 +16,24 @@ module Cucumber
|
|
12
16
|
|
13
17
|
end
|
14
18
|
|
19
|
+
# Signals that a Test::Step was created from a PickleStep
|
20
|
+
class TestStepCreated < Event.new(:test_step, :pickle_step)
|
21
|
+
# The created test step
|
22
|
+
attr_reader :test_step
|
23
|
+
|
24
|
+
# The source pickle step
|
25
|
+
attr_reader :pickle_step
|
26
|
+
end
|
27
|
+
|
28
|
+
# Signals that a Test::Case was created from a Pickle
|
29
|
+
class TestCaseCreated < Event.new(:test_case, :pickle)
|
30
|
+
# The created test step
|
31
|
+
attr_reader :test_case
|
32
|
+
|
33
|
+
# The source pickle step
|
34
|
+
attr_reader :pickle
|
35
|
+
end
|
36
|
+
|
15
37
|
# Signals that a {Test::Case} is about to be executed
|
16
38
|
class TestCaseStarted < Event.new(:test_case)
|
17
39
|
|
@@ -39,7 +61,6 @@ module Cucumber
|
|
39
61
|
|
40
62
|
end
|
41
63
|
|
42
|
-
|
43
64
|
# Signals that a {Test::Case} has finished executing
|
44
65
|
class TestCaseFinished < Event.new(:test_case, :result)
|
45
66
|
|
@@ -55,7 +76,10 @@ module Cucumber
|
|
55
76
|
# that will be used by the {EventBus} by default.
|
56
77
|
def self.registry
|
57
78
|
build_registry(
|
79
|
+
Envelope,
|
58
80
|
GherkinSourceParsed,
|
81
|
+
TestStepCreated,
|
82
|
+
TestCaseCreated,
|
59
83
|
TestCaseStarted,
|
60
84
|
TestStepStarted,
|
61
85
|
TestStepFinished,
|
@@ -7,24 +7,26 @@ module Cucumber
|
|
7
7
|
ParseError = Class.new(StandardError)
|
8
8
|
|
9
9
|
class Parser
|
10
|
-
attr_reader :receiver, :event_bus
|
11
|
-
private :receiver, :event_bus
|
10
|
+
attr_reader :receiver, :event_bus, :gherkin_query
|
11
|
+
private :receiver, :event_bus, :gherkin_query
|
12
12
|
|
13
|
-
def initialize(receiver, event_bus)
|
13
|
+
def initialize(receiver, event_bus, gherkin_query)
|
14
14
|
@receiver = receiver
|
15
15
|
@event_bus = event_bus
|
16
|
+
@gherkin_query = gherkin_query
|
16
17
|
end
|
17
18
|
|
18
19
|
def document(document)
|
19
20
|
messages = ::Gherkin.from_source(document.uri, document.body, gherkin_options(document))
|
20
21
|
messages.each do |message|
|
21
|
-
|
22
|
-
|
22
|
+
event_bus.envelope(message)
|
23
|
+
gherkin_query.update(message)
|
24
|
+
if !message.gherkin_document.nil?
|
25
|
+
event_bus.gherkin_source_parsed(message.gherkin_document)
|
23
26
|
elsif !message.pickle.nil?
|
24
27
|
receiver.pickle(message.pickle)
|
25
|
-
elsif
|
26
|
-
#
|
27
|
-
raise Core::Gherkin::ParseError.new("#{document.uri}: #{message.attachment.data}")
|
28
|
+
elsif message.parse_error
|
29
|
+
raise Core::Gherkin::ParseError.new("#{document.uri}: #{message.parse_error.message}")
|
28
30
|
else
|
29
31
|
raise "Unknown message: #{message.to_hash}"
|
30
32
|
end
|
@@ -60,12 +60,14 @@ module Cucumber
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def statements
|
63
|
-
prepare_statements
|
63
|
+
prepare_statements(
|
64
|
+
language_statement,
|
64
65
|
comments_statement,
|
65
66
|
tag_statement,
|
66
67
|
name_statement,
|
67
68
|
description_statement,
|
68
69
|
NEW_LINE
|
70
|
+
)
|
69
71
|
end
|
70
72
|
|
71
73
|
def language_statement
|
@@ -85,10 +87,12 @@ module Cucumber
|
|
85
87
|
|
86
88
|
private
|
87
89
|
def statements
|
88
|
-
prepare_statements
|
90
|
+
prepare_statements(
|
91
|
+
comments_statement,
|
89
92
|
tag_statement,
|
90
93
|
name_statement,
|
91
94
|
description_statement
|
95
|
+
)
|
92
96
|
end
|
93
97
|
end
|
94
98
|
|
@@ -104,10 +108,12 @@ module Cucumber
|
|
104
108
|
|
105
109
|
private
|
106
110
|
def statements
|
107
|
-
prepare_statements
|
111
|
+
prepare_statements(
|
112
|
+
comments_statement,
|
108
113
|
name_statement,
|
109
114
|
description_statement,
|
110
115
|
NEW_LINE
|
116
|
+
)
|
111
117
|
end
|
112
118
|
end
|
113
119
|
|
@@ -123,10 +129,12 @@ module Cucumber
|
|
123
129
|
|
124
130
|
private
|
125
131
|
def statements
|
126
|
-
prepare_statements
|
132
|
+
prepare_statements(
|
133
|
+
comments_statement,
|
127
134
|
tag_statement,
|
128
135
|
name_statement,
|
129
136
|
description_statement
|
137
|
+
)
|
130
138
|
end
|
131
139
|
end
|
132
140
|
|
@@ -235,12 +243,14 @@ module Cucumber
|
|
235
243
|
|
236
244
|
private
|
237
245
|
def statements
|
238
|
-
prepare_statements
|
246
|
+
prepare_statements(
|
247
|
+
NEW_LINE,
|
239
248
|
comments_statement,
|
240
249
|
tag_statement,
|
241
250
|
name_statement,
|
242
251
|
description_statement,
|
243
252
|
row_statements(2)
|
253
|
+
)
|
244
254
|
end
|
245
255
|
end
|
246
256
|
end
|