cucumber-core 12.0.0 → 13.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 +31 -263
- data/lib/cucumber/core/compiler.rb +41 -20
- data/lib/cucumber/core/event.rb +26 -27
- data/lib/cucumber/core/event_bus.rb +16 -19
- data/lib/cucumber/core/events.rb +3 -11
- data/lib/cucumber/core/filter.rb +1 -3
- data/lib/cucumber/core/gherkin/parser.rb +41 -13
- data/lib/cucumber/core/gherkin/writer/helpers.rb +6 -4
- data/lib/cucumber/core/gherkin/writer.rb +11 -2
- data/lib/cucumber/core/platform.rb +2 -1
- data/lib/cucumber/core/report/summary.rb +14 -5
- data/lib/cucumber/core/test/action.rb +3 -3
- data/lib/cucumber/core/test/around_hook.rb +3 -1
- data/lib/cucumber/core/test/case.rb +6 -4
- data/lib/cucumber/core/test/data_table.rb +4 -7
- data/lib/cucumber/core/test/doc_string.rb +6 -5
- data/lib/cucumber/core/test/empty_multiline_argument.rb +2 -1
- data/lib/cucumber/core/test/filters/activate_steps_for_self_test.rb +3 -3
- data/lib/cucumber/core/test/filters/locations_filter.rb +1 -2
- data/lib/cucumber/core/test/filters/name_filter.rb +1 -1
- data/lib/cucumber/core/test/filters/tag_filter.rb +1 -1
- data/lib/cucumber/core/test/filters.rb +1 -0
- data/lib/cucumber/core/test/location.rb +6 -7
- data/lib/cucumber/core/test/result.rb +41 -37
- data/lib/cucumber/core/test/runner.rb +7 -7
- data/lib/cucumber/core/test/tag.rb +1 -0
- data/lib/cucumber/core/test/timer.rb +1 -0
- data/lib/cucumber/core.rb +1 -1
- metadata +24 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8be25fb56be8e8108a968aaf270b1e296df496b660a5d8536bb1c7cfe3e74359
|
4
|
+
data.tar.gz: e08583f1d1cfabd07ed42fb58ec6c0b4f3361d7b0c90286f29d26dbfd8bfb918
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ad8d22710c9bff29cc1a4ab1a3d5cc41a4a10325aa25accdcde0a833489d4a0a6a98d9415452868551e312bc7672063ba89bf5f3929bc1448384c253a69768b
|
7
|
+
data.tar.gz: 14437bb84b31edf7bbad45cf1575770e90b907ccff5d284b89cb7b42aa9f3f5197f812a02dd762b3e121044dab6bc0a6fc4ecf322548267e56c8c7298b35e7c8
|
data/CHANGELOG.md
CHANGED
@@ -1,287 +1,55 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
## [12.0.0] - 2023-09-06
|
6
|
-
### Changed
|
7
|
-
- Update gherkin and messages minimum dependencies
|
8
|
-
- Added in new rubocop sub-gems for testing, pinning versions where appropriate
|
9
|
-
- Removed all redundant / incorrect rubocop config overrides (Placed in TODO file)
|
10
|
-
|
11
|
-
### Removed
|
12
|
-
- Remove support for ruby 2.4 and below. 2.5 or higher is required now
|
13
|
-
|
14
|
-
## [11.1.0] - 2022-12-22
|
15
|
-
### Changed
|
16
|
-
- Update gherkin and messages dependencies
|
17
|
-
|
18
|
-
### Fixed
|
19
|
-
- Restore support for matching a scenario by tag and step line numbers. ([#237](https://github.com/cucumber/cucumber-ruby-core/pull/237), [#238](https://github.com/cucumber/cucumber-ruby-core/pull/238), [#239](https://github.com/cucumber/cucumber-ruby-core/pull/239))
|
20
|
-
|
21
|
-
## [11.0.0]
|
22
|
-
### Changed
|
23
|
-
- Updated `cucumber-gherkin` and `cucumber-messages`
|
3
|
+
All notable changes to this project will be documented in this file.
|
24
4
|
|
25
|
-
|
26
|
-
### Changed
|
27
|
-
- Patched `cucumber-tag-expressions`
|
5
|
+
This project adheres to [Semantic Versioning](http://semver.org).
|
28
6
|
|
29
|
-
|
30
|
-
### Changed
|
31
|
-
- Patched `cucumber-gherkin`, `cucumber-messages` and `cucumber-tag-expressions`
|
7
|
+
This document is formatted according to the principles of [Keep A CHANGELOG](http://keepachangelog.com).
|
32
8
|
|
33
|
-
|
34
|
-
### Changed
|
35
|
-
- Patched `cucumber-gherkin` and `cucumber-messages`
|
9
|
+
Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blob/master/CONTRIBUTING.md) for more info on how to contribute to Cucumber.
|
36
10
|
|
37
|
-
## [
|
38
|
-
### Changed
|
39
|
-
- Upgraded to gherkin v20 and messages v17.
|
40
|
-
|
41
|
-
## [9.0.1]
|
42
|
-
### Fixed
|
43
|
-
- Skipped scenarios do not affect anymore status of flaky scenarios on retry
|
44
|
-
([#218](https://github.com/cucumber/cucumber-ruby-core/pull/218) @eduardrudko)
|
11
|
+
## [Unreleased]
|
45
12
|
|
46
|
-
## [
|
13
|
+
## [13.0.0] - 2023-12-05
|
47
14
|
### Changed
|
48
|
-
-
|
49
|
-
-
|
15
|
+
- Now using a 2-tiered changelog to avoid any bugs when using polyglot-release
|
16
|
+
- More refactoring of the repo by fixing up a bunch of manual rubocop offenses (See PR's for details)
|
17
|
+
([#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))
|
18
|
+
- In all `Summary` and `Result` classes, changed the `strict` argument into a keyword argument
|
19
|
+
See upgrading notes for [13.0.0.md](upgrading_notes/13.0.0.md#upgrading-to-1300)
|
20
|
+
([#261](https://github.com/cucumber/cucumber-ruby-core/pull/261))
|
21
|
+
- Permit usage of gherkin v27
|
50
22
|
|
51
|
-
## [8.0.1]
|
52
23
|
### Fixed
|
53
|
-
-
|
54
|
-
|
55
|
-
## [8.0.0]
|
56
|
-
### Changed
|
57
|
-
- Updated dependencies (look at the diff for details)
|
58
|
-
|
59
|
-
## [7.1.0]
|
60
|
-
### Changed
|
61
|
-
- `cucumber-gherkin` ~> 14.0.1
|
62
|
-
- `cucumber-messages` ~> 12.2.0
|
63
|
-
- Updated gems:
|
64
|
-
|
65
|
-
## [7.0.0]
|
66
|
-
### Changed
|
67
|
-
- cucumber-gherkin ~> 13
|
68
|
-
- cucumber-messages ~> 12
|
69
|
-
- Updated monorepo libraries:
|
70
|
-
|
71
|
-
## [6.0.0]
|
72
|
-
### Added
|
73
|
-
- Add `envelope` event, which are used when emitting `Cucumber::Messages`
|
74
|
-
- Add `TestCaseCreated` and `TestStepCreated` events, emitted when compiling a `Pickle`
|
75
|
-
- Add `Id` field to `TestCase` and `TestStep`
|
76
|
-
- Added rubocop (with todo file), and removed backports gems
|
77
|
-
([#186](https://github.com/cucumber/cucumber-ruby-core/pull/186),
|
78
|
-
[#182](https://github.com/cucumber/cucumber-ruby-core/issues/182)
|
79
|
-
[tas50](https://github.com/tas50),
|
80
|
-
[luke-hill](https://github.com/luke-hill))
|
81
|
-
|
82
|
-
### Changed
|
83
|
-
- Update to Gherkin 10
|
24
|
+
- Restore support for matching a scenario by its Feature, Background, and Rule line numbers ([#247](https://github.com/cucumber/cucumber-ruby-core/pull/247))
|
84
25
|
|
85
26
|
### Removed
|
86
|
-
- Remove
|
27
|
+
- Remove legacy `unindent` gem (Now no longer required since Ruby 2.3 and Squiggly heredocs) ([#278](https://github.com/cucumber/cucumber-ruby-core/pull/278))
|
87
28
|
|
88
|
-
## [
|
29
|
+
## [12.0.0] - 2023-09-06
|
89
30
|
### Changed
|
90
|
-
- Update
|
31
|
+
- Update gherkin and messages minimum dependencies
|
32
|
+
- Added in new rubocop sub-gems for testing, pinning versions where appropriate
|
33
|
+
- Removed all redundant / incorrect rubocop config overrides (Placed in TODO file)
|
34
|
+
- Began to refactor the repo by initially fixing up a bunch of rubocop auto-fix offenses (See PRs for details)
|
35
|
+
([#257](https://github.com/cucumber/cucumber-ruby-core/pull/257) [#258](https://github.com/cucumber/cucumber-ruby-core/pull/258))
|
91
36
|
|
92
|
-
## [5.0.1]
|
93
37
|
### Removed
|
94
|
-
- Remove support for ruby 2.
|
95
|
-
|
96
|
-
## [5.0.0]
|
97
|
-
### Changed
|
98
|
-
- Update to use Gherkin v7
|
38
|
+
- Remove support for ruby 2.4 and below. 2.5 or higher is required now
|
99
39
|
|
100
|
-
## [
|
40
|
+
## [11.1.0] - 2022-12-22
|
101
41
|
### Changed
|
102
|
-
- Update
|
103
|
-
- Let Scenarios with no Steps get the result status Undefined ([#157](https://github.com/cucumber/cucumber-ruby-core/pull/157) @brasmusson)
|
104
|
-
- Convert to use the Gherkin compiler and Pickles ([#156](https://github.com/cucumber/cucumber-ruby-core/pull/156) @brasmusson)
|
105
|
-
|
106
|
-
### Removed
|
107
|
-
- Remove the support for old style tag expressions ([#159](https://github.com/cucumber/cucumber-ruby-core/pull/159) @brasmusson)
|
108
|
-
|
109
|
-
## [3.2.1]
|
110
|
-
### Fixed
|
111
|
-
- Switched `gherkin` in Gemspec to use _pessimistic_ versioning. (These two commits aren't merged into `master`, as they already exist in newer commits. This is a 'backported' patch to resolve [#160](https://github.com/cucumber/cucumber-ruby-core/issues/160)).
|
112
|
-
|
113
|
-
## [3.2.0]
|
114
|
-
### Added
|
115
|
-
- Add the GherkinSourceParsedEvent ([#155](https://github.com/cucumber/cucumber-ruby-core/pull/155) @brasmusson)
|
116
|
-
- Add #original_location to Cucumber::Core::Ast::Step and Cucumber::Core::Test::Step ([#150](https://github.com/cucumber/cucumber-ruby-core/pull/150), [#149](https://github.com/cucumber/cucumber-ruby-core/issues/149) @brasmusson)
|
42
|
+
- Update gherkin and messages dependencies
|
117
43
|
|
118
44
|
### Fixed
|
119
|
-
-
|
120
|
-
|
121
|
-
## [3.1.0]
|
122
|
-
### Changed
|
123
|
-
- Upgraded to `cucumber-tag_expressions` 1.1.0
|
124
|
-
- Upgraded to `gherkin` 5.0.0
|
125
|
-
|
126
|
-
## [3.0.0]
|
127
|
-
### Added
|
128
|
-
- Do not create test cases for scenarios with no steps ([#144](https://github.com/cucumber/cucumber-ruby-core/pull/144) @brasmusson)
|
129
|
-
- Handle selective strict settings ([#143](https://github.com/cucumber/cucumber-ruby-core/pull/143) @brasmusson)
|
45
|
+
- Restore support for matching a scenario by tag and step line numbers. ([#237](https://github.com/cucumber/cucumber-ruby-core/pull/237), [#238](https://github.com/cucumber/cucumber-ruby-core/pull/238), [#239](https://github.com/cucumber/cucumber-ruby-core/pull/239))
|
130
46
|
|
47
|
+
## [11.0.0] - 2022-05-18
|
131
48
|
### Changed
|
132
|
-
-
|
133
|
-
- Use past tense in event names (`xStarting` -> `xStarted`) (see [cucumber/cucumber-ruby#1166](https://github.com/cucumber/cucumber-ruby/issues/1166) @brasmusson).
|
134
|
-
|
135
|
-
### Fixed
|
136
|
-
- Fix DataTable's Location to be aware of all of its lines ([#142](https://github.com/cucumber/cucumber-ruby-core/pull/142) @botandrose)
|
137
|
-
- As per [#251](https://github.com/cucumber/cucumber/issues/251): renamed History.md to CHANGELOG.md, added contributing message at beginning, and misc formatting. ([#145](https://github.com/cucumber/cucumber-ruby-core/pull/145) [jaysonesmith](https://github.com/jaysonesmith))
|
138
|
-
|
139
|
-
## [3.0.0.pre.2]
|
140
|
-
### Added
|
141
|
-
- Add a flaky result type to be used for flaky scenarios ([#141](https://github.com/cucumber/cucumber-ruby-core/pull/141), [cucumber/cucumber-ruby#1044](https://github.com/cucumber/cucumber-ruby/issues/1044) @brasmusson)
|
142
|
-
- Make the Summary report able to say if the total result is ok ([#140](https://github.com/cucumber/cucumber-ruby-core/pull/140) @brasmusson)
|
143
|
-
- Replay previous events to new subscribers ([#136](https://github.com/cucumber/cucumber-ruby-core/pull/136) @mattwynne)
|
144
|
-
- Ruby 2.4.0 compatibility ([#120](https://github.com/cucumber/cucumber-ruby-core/pull/120) @junaruga)
|
145
|
-
- Use tag expressions ([#116](https://github.com/cucumber/cucumber-ruby-core/pull/116) @brasmusson)
|
146
|
-
- Access example table row data by param name ([#118](https://github.com/cucumber/cucumber-ruby-core/pull/118) @enkessler)
|
147
|
-
|
148
|
-
### Fixed
|
149
|
-
- Travis: jruby-9.1.10.0 ([#130](https://github.com/cucumber/cucumber-ruby-core/pull/130) @olleolleolle)
|
150
|
-
- Travis: jruby-9.1.12.0 ([#133](https://github.com/cucumber/cucumber-ruby-core/pull/132) @olleolleolle)
|
151
|
-
|
152
|
-
## [2.0.0]
|
153
|
-
### Added
|
154
|
-
- Implement equality for test cases ([#111](https://github.com/cucumber/cucumber-ruby-core/pull/111) @mattwynne)
|
155
|
-
- Implement an event bus (moved from Cucumber-Ruby) ([#106](https://github.com/cucumber/cucumber-ruby-core/pull/106) @mattwynne)
|
156
|
-
- Use frozen string literals ([#105](https://github.com/cucumber/cucumber-ruby-core/pull/105) @twalpole)
|
157
|
-
|
158
|
-
### Fixed
|
159
|
-
- Handle incomplete examples to scenario outlines. ([109](https://github.com/cucumber/cucumber-ruby-core/pull/109) @brasmusson)
|
160
|
-
- Add with_filtered_backtrace method to unknown result ([107](https://github.com/cucumber/cucumber-ruby-core/pull/107) @danascheider)
|
161
|
-
|
162
|
-
### Removed
|
163
|
-
- Remove support for Ruby v1.9.3. ([112](https://github.com/cucumber/cucumber-ruby-core/pull/112) @brasmusson)
|
164
|
-
|
165
|
-
## [1.5.0]
|
166
|
-
### Added
|
167
|
-
- Update to Gherkin v4.0 (@brasmusson)
|
168
|
-
|
169
|
-
### Fixed
|
170
|
-
- Use monotonic time ([#103](https://github.com/cucumber/cucumber-ruby-core/pull/103) @mikz)
|
171
|
-
|
172
|
-
## [1.4.0]
|
173
|
-
### Added
|
174
|
-
- Update to Gherkin v3.2.0 (@brasmusson)
|
175
|
-
|
176
|
-
### Fixed
|
177
|
-
|
178
|
-
## [1.3.1]
|
179
|
-
### Added
|
180
|
-
|
181
|
-
### Fixed
|
182
|
-
- Speed up location filtering ([#99](https://github.com/cucumber/cucumber-ruby-core/issues/99) @mattwynne @akostadinov @brasmusson)
|
183
|
-
|
184
|
-
## [1.3.0]
|
185
|
-
### Added
|
186
|
-
- Add factory method to Cucumber::Core::Ast::Location that uses the output from Proc#source_location (@brasmusson)
|
187
|
-
- Integrate Gherkin3 parser (@brasmusson)
|
188
|
-
|
189
|
-
### Fixed
|
190
|
-
- Make sure that `after_test_step` is sent also when a test step is interrupted by (a timeout in) an around hook ([cucumber/cucumber-ruby#909](https://github.com/cucumber/cucumber-ruby/issues/909) @brasmusson)
|
191
|
-
- Improve the check that a test_step quacks like a Cucumber::Core::Test::Step ([95](https://github.com/cucumber/cucumber-ruby-core/issues/95) @brasmusson)
|
192
|
-
|
193
|
-
## [1.2.0]
|
194
|
-
### Added
|
195
|
-
- Enable the location of actions to be the step or hook location (@brasmusson)
|
196
|
-
- Add the comments to the Steps, Examples tables and Examples table rows Ast classes (@brasmusson)
|
197
|
-
- Expose name, description and examples_rows attributes of `Ast::ExamplesTable` (@mattwynne)
|
198
|
-
- Add #to_sym to Cucumber::Core::Test::Result classes ([#89](https://github.com/cucumber/cucumber-ruby-core/pull/89) @pdswan)
|
199
|
-
- Add #ok? to Cucumber::Core::Test::Result classes ([#92](https://github.com/cucumber/cucumber-ruby-core/pull/92) @brasmusson)
|
200
|
-
|
201
|
-
### Fixed
|
202
|
-
|
203
|
-
## [1.1.3]
|
204
|
-
### Added
|
205
|
-
- Added custom `inspect` methods for AST Nodes (@tooky)
|
206
|
-
|
207
|
-
## [1.1.2]
|
208
|
-
### Added
|
209
|
-
- Make Test Case names for Scenario Outlines language neutral [83](https://github.com/cucumber/cucumber-ruby-core/pull/83) (@brasmusson)
|
210
|
-
- Add predicate methods for Multline arguments (@mattwynne)
|
211
|
-
- Expose `Test::Case#feature` (@mattwynne)
|
212
|
-
- Fail test case if around hook fails (@mattwynne, @tooky)
|
213
|
-
- Expose `Test::Case#around_hooks` (@tooky)
|
214
|
-
|
215
|
-
## [1.1.1]
|
216
|
-
### Added
|
217
|
-
- Calculate actual keyword for snippets (@brasmusson)
|
218
|
-
|
219
|
-
### Fixed
|
220
|
-
- Remove keyword from `Test::Case#name` [82](https://github.com/cucumber/cucumber-ruby-core/pull/82) (@richarda)
|
221
|
-
|
222
|
-
## [1.1.0]
|
223
|
-
### Added
|
224
|
-
- LocationsFilter now sorts test cases as well as filtering them (@mattwynne)
|
225
|
-
|
226
|
-
## [1.0.0]
|
227
|
-
### Added
|
228
|
-
- Added dynamic filter class constructor (@mattwynne)
|
229
|
-
|
230
|
-
## [1.0.0.beta.4]
|
231
|
-
### Added
|
232
|
-
- Introduce a Duration object (#[71](https://github.com/cucumber/cucumber-ruby-core/pull/71) [@brasmusson](https://github.com/brasmusson))
|
233
|
-
- BeforeStep hooks (#[70](https://github.com/cucumber/cucumber-ruby-core/pull/70) [@almostwhitehat](https://github.com/almostwhitehat))
|
234
|
-
- Expose `Test::Case#test_steps` (@mattwynne)
|
235
|
-
|
236
|
-
### Fixed
|
237
|
-
- Handle empty feature files (#[77](https://github.com/cucumber/cucumber-ruby-core/pull/77), [cucumber/cucumber-ruby#771](https://github.com/cucumber/cucumber-ruby/issues/771) [@brasmusson](https://github.com/brasmusson))
|
238
|
-
- Run after hooks in reverse order (#[69](https://github.com/cucumber/cucumber-ruby-core/pull/69) [@erran](https://github.com/erran))
|
239
|
-
|
240
|
-
## [1.0.0.beta.3]
|
241
|
-
|
242
|
-
## [1.0.0.beta.2]
|
243
|
-
|
244
|
-
## [1.0.0.beta.3]
|
245
|
-
|
246
|
-
## [1.0.0.beta.2]
|
49
|
+
- Updated `cucumber-gherkin` and `cucumber-messages`
|
247
50
|
|
248
|
-
[Unreleased]: https://github.com/cucumber/cucumber-ruby-core/compare/
|
249
|
-
[
|
250
|
-
[
|
51
|
+
[Unreleased]: https://github.com/cucumber/cucumber-ruby-core/compare/v13.0.0...HEAD
|
52
|
+
[13.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v12.0.0...v13.0.0
|
53
|
+
[12.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v11.1.0...v12.0.0
|
54
|
+
[11.1.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v11.0.0...v11.1.0
|
251
55
|
[11.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v10.1.1...v11.0.0
|
252
|
-
[10.1.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v10.1.0...v10.1.1
|
253
|
-
[10.1.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v10.0.1...v10.1.0
|
254
|
-
[10.0.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v10.0.0...v10.0.1
|
255
|
-
[10.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v9.0.1...v10.0.0
|
256
|
-
[9.0.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v9.0.0...v9.0.1
|
257
|
-
[9.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v8.0.1...v9.0.0
|
258
|
-
[8.0.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v8.0.0...v8.0.1
|
259
|
-
[8.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v7.1.0...v8.0.0
|
260
|
-
[7.1.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v7.0.0...v7.1.0
|
261
|
-
[7.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v6.0.0...v7.0.0
|
262
|
-
[6.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v5.0.2...v6.0.0
|
263
|
-
[5.0.2]: https://github.com/cucumber/cucumber-ruby-core/compare/v5.0.1...v5.0.2
|
264
|
-
[5.0.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v5.0.0...v5.0.1
|
265
|
-
[5.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v4.0.0...v5.0.0
|
266
|
-
[4.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v3.2.0...v4.0.0
|
267
|
-
[3.2.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v3.2.0...v3.2.1
|
268
|
-
[3.2.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v3.1.0...v3.2.0
|
269
|
-
[3.1.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v3.0.0...3.1.0
|
270
|
-
[3.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v3.0.0.pre.2...v3.0.0
|
271
|
-
[3.0.0.pre.2]: https://github.com/cucumber/cucumber-ruby-core/compare/v2.0.0...3.0.0.pre.2
|
272
|
-
[2.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.5.0...2.0.0
|
273
|
-
[1.5.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.4.0...v1.5.0
|
274
|
-
[1.4.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.3.1...v1.4.0
|
275
|
-
[1.3.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.3.0...v1.3.1
|
276
|
-
[1.3.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.2.0...v1.3.0
|
277
|
-
[1.2.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.1.3...v1.2.0
|
278
|
-
[1.1.3]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.1.2...v1.1.3
|
279
|
-
[1.1.2]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.1.1...v1.1.2
|
280
|
-
[1.1.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.1.0...v1.1.1
|
281
|
-
[1.1.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.0.0...v1.1.0
|
282
|
-
[1.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.0.0.beta.4...v1.0.0
|
283
|
-
[1.0.0.beta.4]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.0.0.beta.3...v1.0.0.beta.4
|
284
|
-
[1.0.0.beta.3]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.0.0.beta.2...v1.0.0.beta.3
|
285
|
-
[1.0.0.beta.2]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.0.0.beta.1...v1.0.0.beta.2
|
286
|
-
[1.0.0.beta.3]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.0.0.beta.2...v1.0.0.beta.3
|
287
|
-
[1.0.0.beta.2]: https://github.com/cucumber/cucumber-ruby-core/compare/v1.0.0.beta.1...v1.0.0.beta.2
|
@@ -37,17 +37,18 @@ module Cucumber
|
|
37
37
|
def create_test_case(pickle)
|
38
38
|
uri = pickle.uri
|
39
39
|
test_steps = pickle.steps.map { |step| create_test_step(step, uri) }
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
location = location_from_pickle(pickle)
|
41
|
+
parent_locations = parent_locations_from_pickle(pickle)
|
42
|
+
tags = tags_from_pickle(pickle, uri)
|
43
|
+
test_case = Test::Case.new(id_generator.new_id, pickle.name, test_steps, location, parent_locations, tags, pickle.language)
|
43
44
|
@event_bus&.test_case_created(test_case, pickle)
|
44
45
|
test_case
|
45
46
|
end
|
46
47
|
|
47
48
|
def create_test_step(pickle_step, uri)
|
48
|
-
|
49
|
+
location = location_from_pickle_step(pickle_step, uri)
|
49
50
|
multiline_arg = create_multiline_arg(pickle_step, uri)
|
50
|
-
step = Test::Step.new(id_generator.new_id, pickle_step.text,
|
51
|
+
step = Test::Step.new(id_generator.new_id, pickle_step.text, location, multiline_arg)
|
51
52
|
@event_bus&.test_step_created(step, pickle_step)
|
52
53
|
step
|
53
54
|
end
|
@@ -55,37 +56,57 @@ module Cucumber
|
|
55
56
|
def create_multiline_arg(pickle_step, _uri)
|
56
57
|
if pickle_step.argument
|
57
58
|
if pickle_step.argument.doc_string
|
58
|
-
|
59
|
-
Test::DocString.new(
|
60
|
-
doc_string.content,
|
61
|
-
doc_string.media_type
|
62
|
-
)
|
59
|
+
doc_string_from_pickle_step(pickle_step)
|
63
60
|
elsif pickle_step.argument.data_table
|
64
|
-
|
65
|
-
Test::DataTable.new(
|
66
|
-
data_table.rows.map { |row| row.cells.map { |cell| cell.value } }
|
67
|
-
)
|
61
|
+
data_table_from_pickle_step(pickle_step)
|
68
62
|
end
|
69
63
|
else
|
70
64
|
Test::EmptyMultilineArgument.new
|
71
65
|
end
|
72
66
|
end
|
73
67
|
|
74
|
-
def
|
75
|
-
pickle.ast_node_ids.map { |id| source_line(id) }
|
68
|
+
def location_from_pickle(pickle)
|
69
|
+
lines = pickle.ast_node_ids.map { |id| source_line(id) }
|
70
|
+
Test::Location.new(pickle.uri, lines.sort.reverse)
|
76
71
|
end
|
77
72
|
|
78
|
-
def
|
79
|
-
|
73
|
+
def parent_locations_from_pickle(pickle)
|
74
|
+
parent_lines = gherkin_query.scenario_parent_locations(pickle.ast_node_ids[0]).map(&:line)
|
75
|
+
Test::Location.new(pickle.uri, parent_lines)
|
80
76
|
end
|
81
77
|
|
82
|
-
def
|
83
|
-
source_line(
|
78
|
+
def location_from_pickle_step(pickle_step, uri)
|
79
|
+
lines = pickle_step.ast_node_ids.map { |id| source_line(id) }
|
80
|
+
Test::Location.new(uri, lines.sort.reverse)
|
81
|
+
end
|
82
|
+
|
83
|
+
def tags_from_pickle(pickle, uri)
|
84
|
+
pickle.tags.map do |tag|
|
85
|
+
location = Test::Location.new(uri, source_line(tag.ast_node_id))
|
86
|
+
Test::Tag.new(location, tag.name)
|
87
|
+
end
|
84
88
|
end
|
85
89
|
|
86
90
|
def source_line(id)
|
87
91
|
gherkin_query.location(id).line
|
88
92
|
end
|
93
|
+
|
94
|
+
def doc_string_from_pickle_step(pickle_step)
|
95
|
+
doc_string = pickle_step.argument.doc_string
|
96
|
+
Test::DocString.new(
|
97
|
+
doc_string.content,
|
98
|
+
doc_string.media_type
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
102
|
+
def data_table_from_pickle_step(pickle_step)
|
103
|
+
data_table = pickle_step.argument.data_table
|
104
|
+
Test::DataTable.new(
|
105
|
+
data_table.rows.map do |row|
|
106
|
+
row.cells.map(&:value)
|
107
|
+
end
|
108
|
+
)
|
109
|
+
end
|
89
110
|
end
|
90
111
|
end
|
91
112
|
end
|
data/lib/cucumber/core/event.rb
CHANGED
@@ -1,61 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Cucumber
|
2
4
|
module Core
|
3
5
|
class Event
|
4
|
-
|
5
6
|
# Macro to generate new sub-classes of {Event} with
|
6
7
|
# attribute readers.
|
7
|
-
def self.new(*
|
8
|
+
def self.new(*events)
|
8
9
|
# Use normal constructor for subclasses of Event
|
9
|
-
return super if
|
10
|
+
return super if ancestors.index(Event) > 0
|
10
11
|
|
11
12
|
Class.new(Event) do
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
# NB: We need to use metaprogramming here instead of direct variable obtainment
|
14
|
+
# because JRuby does not guarantee the order in which variables are defined is equivalent
|
15
|
+
# to the order in which they are obtainable
|
16
|
+
#
|
17
|
+
# See https://github.com/jruby/jruby/issues/7988 for more info
|
18
|
+
attr_reader(*events)
|
19
|
+
|
20
|
+
define_method(:initialize) do |*attributes|
|
21
|
+
events.zip(attributes) do |name, value|
|
22
|
+
instance_variable_set("@#{name}".to_sym, value)
|
17
23
|
end
|
18
24
|
end
|
19
25
|
|
20
26
|
define_method(:attributes) do
|
21
|
-
|
27
|
+
events.map { |var| instance_variable_get(:"@#{var}") }
|
22
28
|
end
|
23
29
|
|
24
30
|
define_method(:to_h) do
|
25
|
-
|
26
|
-
value = self.send(attribute)
|
27
|
-
result[attribute] = value
|
28
|
-
result
|
29
|
-
}
|
31
|
+
events.zip(attributes).to_h
|
30
32
|
end
|
31
33
|
|
32
|
-
|
34
|
+
def event_id
|
33
35
|
self.class.event_id
|
34
36
|
end
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
38
|
-
|
39
40
|
class << self
|
40
|
-
|
41
|
-
# @return [Symbol] the underscored name of the class to be used
|
42
|
-
# as the key in an event registry.
|
41
|
+
# @return [Symbol] the underscored name of the class to be used as the key in an event registry
|
43
42
|
def event_id
|
44
|
-
underscore(
|
43
|
+
underscore(name.split('::').last).to_sym
|
45
44
|
end
|
46
45
|
|
47
46
|
private
|
48
47
|
|
49
48
|
def underscore(string)
|
50
|
-
string
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
string
|
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
|
55
56
|
end
|
56
|
-
|
57
57
|
end
|
58
|
-
|
59
58
|
end
|
60
59
|
end
|
61
60
|
end
|
@@ -1,13 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'cucumber/core/events'
|
2
4
|
|
3
5
|
module Cucumber
|
4
6
|
module Core
|
5
|
-
|
6
7
|
# Event Bus
|
7
8
|
#
|
8
9
|
# Implements an in-process pub-sub event broadcaster allowing multiple observers
|
9
10
|
# to subscribe to events that fire as your tests are executed.
|
10
|
-
#
|
11
11
|
class EventBus
|
12
12
|
attr_reader :event_types
|
13
13
|
|
@@ -18,8 +18,7 @@ module Cucumber
|
|
18
18
|
@event_queue = []
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
22
|
-
# of the event.
|
21
|
+
# Register for an event. The handler proc will be called back with each of the attributes of the event
|
23
22
|
def on(event_id, handler_object = nil, &handler_proc)
|
24
23
|
handler = handler_proc || handler_object
|
25
24
|
validate_handler_and_event_id!(handler, event_id)
|
@@ -28,9 +27,8 @@ module Cucumber
|
|
28
27
|
broadcast_queued_events_to handler, event_class
|
29
28
|
end
|
30
29
|
|
31
|
-
# Broadcast an event
|
32
30
|
def broadcast(event)
|
33
|
-
raise ArgumentError, "Event type #{event.class} is not registered. Try one of these:\n#{event_types.values.join("\n")}" unless
|
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)
|
34
32
|
handlers_for(event.class).each { |handler| handler.call(event) }
|
35
33
|
@event_queue << event
|
36
34
|
end
|
@@ -40,34 +38,33 @@ module Cucumber
|
|
40
38
|
broadcast event_class.new(*args)
|
41
39
|
end
|
42
40
|
|
41
|
+
def respond_to_missing?(event_id, *args)
|
42
|
+
event_types.key?(event_id) || super
|
43
|
+
end
|
44
|
+
|
43
45
|
private
|
44
46
|
|
45
47
|
def broadcast_queued_events_to(handler, event_type)
|
46
|
-
@event_queue.select { |event|
|
47
|
-
event.instance_of?(event_type)
|
48
|
-
}.each { |event|
|
49
|
-
handler.call(event)
|
50
|
-
}
|
48
|
+
@event_queue.select { |event| event.instance_of?(event_type) }.each { |event| handler.call(event) }
|
51
49
|
end
|
52
50
|
|
53
51
|
def handlers_for(event_class)
|
54
52
|
@handlers[event_class.to_s] ||= []
|
55
53
|
end
|
56
54
|
|
57
|
-
def
|
58
|
-
event_types.
|
55
|
+
def registered_type?(event_type)
|
56
|
+
event_types.values.include?(event_type)
|
59
57
|
end
|
60
58
|
|
61
|
-
def
|
62
|
-
event_types.
|
59
|
+
def registered_id?(event_id)
|
60
|
+
event_types.keys.include?(event_id)
|
63
61
|
end
|
64
62
|
|
65
63
|
def validate_handler_and_event_id!(handler, event_id)
|
66
|
-
raise ArgumentError,
|
67
|
-
raise ArgumentError,
|
68
|
-
raise ArgumentError, "Event ID #{event_id} is not recognised. Try one of these:\n#{event_types.keys.join("\n")}" unless
|
64
|
+
raise ArgumentError, 'Please pass either an object or a handler block' unless handler
|
65
|
+
raise ArgumentError, 'Please use a symbol for the event_id' unless event_id.is_a?(Symbol)
|
66
|
+
raise ArgumentError, "Event ID #{event_id} is not recognised. Try one of these:\n#{event_types.keys.join("\n")}" unless registered_id?(event_id)
|
69
67
|
end
|
70
68
|
end
|
71
|
-
|
72
69
|
end
|
73
70
|
end
|