cucumber-core 3.2.1 → 4.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.
Files changed (33) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +52 -0
  3. data/lib/cucumber/core/compiler.rb +37 -145
  4. data/lib/cucumber/core/events.rb +1 -4
  5. data/lib/cucumber/core/gherkin/parser.rb +14 -22
  6. data/lib/cucumber/core/report/summary.rb +1 -23
  7. data/lib/cucumber/core/test/action.rb +2 -2
  8. data/lib/cucumber/core/test/around_hook.rb +4 -0
  9. data/lib/cucumber/core/test/case.rb +15 -121
  10. data/lib/cucumber/core/{ast → test}/data_table.rb +6 -8
  11. data/lib/cucumber/core/{ast → test}/doc_string.rb +5 -9
  12. data/lib/cucumber/core/{ast → test}/empty_multiline_argument.rb +1 -2
  13. data/lib/cucumber/core/test/filters/locations_filter.rb +2 -2
  14. data/lib/cucumber/core/{ast → test}/location.rb +10 -17
  15. data/lib/cucumber/core/test/runner.rb +5 -3
  16. data/lib/cucumber/core/test/step.rb +20 -36
  17. data/lib/cucumber/core/{ast → test}/tag.rb +1 -1
  18. data/lib/cucumber/core/version.rb +1 -1
  19. metadata +12 -26
  20. data/lib/cucumber/core/ast.rb +0 -14
  21. data/lib/cucumber/core/ast/background.rb +0 -41
  22. data/lib/cucumber/core/ast/comment.rb +0 -28
  23. data/lib/cucumber/core/ast/describes_itself.rb +0 -21
  24. data/lib/cucumber/core/ast/empty_background.rb +0 -17
  25. data/lib/cucumber/core/ast/examples_table.rb +0 -119
  26. data/lib/cucumber/core/ast/feature.rb +0 -88
  27. data/lib/cucumber/core/ast/names.rb +0 -25
  28. data/lib/cucumber/core/ast/outline_step.rb +0 -53
  29. data/lib/cucumber/core/ast/scenario.rb +0 -42
  30. data/lib/cucumber/core/ast/scenario_outline.rb +0 -45
  31. data/lib/cucumber/core/ast/step.rb +0 -83
  32. data/lib/cucumber/core/gherkin/ast_builder.rb +0 -403
  33. data/lib/cucumber/core/gherkin/tag_expression.rb +0 -65
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/core/ast/location'
3
-
4
- module Cucumber
5
- module Core
6
- module Ast
7
- class Comment
8
- include HasLocation
9
-
10
- attr_reader :location, :value
11
- private :value
12
-
13
- def initialize(location, value)
14
- @location = location
15
- @value = value
16
- end
17
-
18
- def to_s
19
- value
20
- end
21
-
22
- def inspect
23
- %{#<#{self.class} #{value} (#{location})}
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
- module Cucumber
3
- module Core
4
- module Ast
5
- module DescribesItself
6
- def describe_to(visitor, *args)
7
- visitor.send(description_for_visitors, self, *args) do |child_visitor|
8
- children.each do |child|
9
- begin
10
- child.describe_to(child_visitor, *args)
11
- rescue => e
12
- raise e.class, "Failed describing child of #{self.inspect} - #{e.message}", e.backtrace
13
- end
14
- end
15
- end
16
- self
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- module Cucumber
3
- module Core
4
- module Ast
5
- class EmptyBackground
6
- def describe_to(*)
7
- self
8
- end
9
-
10
- def inspect
11
- "#<#{self.class.name}>"
12
- end
13
- end
14
- end
15
- end
16
- end
17
-
@@ -1,119 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/core/ast/describes_itself'
3
- require 'cucumber/core/ast/location'
4
- require 'cucumber/core/ast/names'
5
-
6
- module Cucumber
7
- module Core
8
- module Ast
9
-
10
- class ExamplesTable
11
- include Names
12
- include HasLocation
13
- include DescribesItself
14
-
15
- def initialize(location, comments, tags, keyword, name, description, header, example_rows)
16
- @location = location
17
- @comments = comments
18
- @tags = tags
19
- @keyword = keyword
20
- @name = name
21
- @description = description
22
- @header = header
23
- @example_rows = example_rows
24
- end
25
-
26
- attr_reader :location, :tags, :keyword, :comments,
27
- :header, :example_rows
28
-
29
- private
30
-
31
- def description_for_visitors
32
- :examples_table
33
- end
34
-
35
- def children
36
- @example_rows
37
- end
38
-
39
- class Header
40
- include HasLocation
41
-
42
- attr_reader :comments
43
-
44
- def initialize(cells, location, comments)
45
- @cells = cells
46
- @location = location
47
- @comments = comments
48
- end
49
-
50
- def values
51
- @cells
52
- end
53
-
54
- def build_row(row_cells, number, location, language, comments)
55
- Row.new(Hash[@cells.zip(row_cells)], number, location, language, comments)
56
- end
57
-
58
- def inspect
59
- "#<#{self.class} #{values} (#{location})>"
60
- end
61
- end
62
-
63
- class Row
64
- include DescribesItself
65
- include HasLocation
66
-
67
- attr_reader :number, :language, :comments
68
-
69
- def initialize(data, number, location, language, comments)
70
- raise ArgumentError, data.to_s unless data.is_a?(Hash)
71
- @data = data
72
- @number = number
73
- @location = location
74
- @language = language
75
- @comments = comments
76
- end
77
-
78
- def ==(other)
79
- return false unless other.class == self.class
80
- other.number == number &&
81
- other.location == location &&
82
- other.data == data
83
- end
84
-
85
- def [](parameter_name)
86
- @data[parameter_name]
87
- end
88
-
89
- def values
90
- @data.values
91
- end
92
-
93
- def expand(string)
94
- result = string.dup
95
- @data.each do |key, value|
96
- result.gsub!("<#{key}>", value.to_s)
97
- end
98
- result
99
- end
100
-
101
- def inspect
102
- "#<#{self.class}: #{@data.inspect} (#{location})>"
103
- end
104
-
105
- protected
106
-
107
- attr_reader :data
108
-
109
- private
110
-
111
- def description_for_visitors
112
- :examples_table_row
113
- end
114
- end
115
- end
116
- class Examples < ExamplesTable; end
117
- end
118
- end
119
- end
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/core/ast/describes_itself'
3
- require 'cucumber/core/ast/names'
4
- require 'cucumber/core/ast/location'
5
- require 'gherkin/dialect'
6
-
7
- module Cucumber
8
- module Core
9
- module Ast
10
- # Represents the root node of a parsed feature.
11
- class Feature
12
- include Names
13
- include HasLocation
14
- include DescribesItself
15
-
16
- attr_reader :language, :location, :background,
17
- :comments, :tags, :keyword, :description,
18
- :feature_elements
19
-
20
- def initialize(language, location, comments, tags, keyword, name, description, feature_elements)
21
- @language = language
22
- @location = location
23
- @background = BackgroundFinder.new(feature_elements).result
24
- @comments = comments
25
- @tags = tags
26
- @keyword = keyword
27
- @name = name
28
- @description = description
29
- @feature_elements = feature_elements
30
- end
31
-
32
- def children
33
- @feature_elements
34
- end
35
-
36
- def short_name
37
- first_line = name.split(/\n/)[0]
38
- if first_line =~ /#{language.feature_keywords}:(.*)/
39
- $1.strip
40
- else
41
- first_line
42
- end
43
- end
44
-
45
- private
46
-
47
- def description_for_visitors
48
- :feature
49
- end
50
-
51
- end
52
-
53
- class NullFeature
54
- def method_missing(*args, &block)
55
- self
56
- end
57
- end
58
-
59
- class BackgroundFinder
60
- def initialize(feature_elements)
61
- @background = nil
62
- feature_elements[0].describe_to(self) unless feature_elements.empty?
63
- end
64
-
65
- def background(background)
66
- @background = background
67
- end
68
-
69
- def result
70
- @background ? @background : EmptyBackground.new
71
- end
72
-
73
- def method_missing(*)
74
- end
75
- end
76
-
77
- require 'delegate'
78
- class LanguageDelegator < SimpleDelegator
79
- attr_reader :iso_code
80
-
81
- def initialize(iso_code, obj)
82
- super(obj)
83
- @iso_code = iso_code
84
- end
85
- end
86
- end
87
- end
88
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
- module Cucumber
3
- module Core
4
- module Ast
5
- module Names
6
- attr_reader :description, :name
7
-
8
- def legacy_conflated_name_and_description
9
- s = name
10
- s += "\n#{@description}" if @description != ""
11
- s
12
- end
13
-
14
- def to_s
15
- name
16
- end
17
-
18
- def inspect
19
- keyword_and_name = [keyword, name].join(": ")
20
- %{#<#{self.class} "#{keyword_and_name}" (#{location})>}
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/core/ast/location'
3
- require 'cucumber/core/ast/describes_itself'
4
- require 'cucumber/core/ast/step'
5
-
6
- module Cucumber
7
- module Core
8
- module Ast
9
-
10
- class OutlineStep
11
- include HasLocation
12
- include DescribesItself
13
-
14
- attr_reader :language, :location, :comments, :keyword, :text, :multiline_arg
15
-
16
- def initialize(language, location, comments, keyword, text, multiline_arg)
17
- @language, @location, @comments, @keyword, @text, @multiline_arg = language, location, comments, keyword, text, multiline_arg
18
- end
19
-
20
- def to_step(row)
21
- Ast::ExpandedOutlineStep.new(self, language, row.location, comments, keyword, row.expand(text), replace_multiline_arg(row))
22
- end
23
-
24
- def to_s
25
- text
26
- end
27
-
28
- def inspect
29
- keyword_and_text = [keyword, text].join(": ")
30
- %{#<#{self.class} "#{keyword_and_text}" (#{location})>}
31
- end
32
-
33
- private
34
-
35
- def description_for_visitors
36
- :outline_step
37
- end
38
-
39
- def children
40
- # TODO remove duplication with Step
41
- # TODO spec
42
- [@multiline_arg]
43
- end
44
-
45
- def replace_multiline_arg(example_row)
46
- return unless multiline_arg
47
- multiline_arg.map { |cell| example_row.expand(cell) }
48
- end
49
- end
50
-
51
- end
52
- end
53
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/core/ast/describes_itself'
3
- require 'cucumber/core/ast/names'
4
- require 'cucumber/core/ast/empty_background'
5
- require 'cucumber/core/ast/location'
6
-
7
- module Cucumber
8
- module Core
9
- module Ast
10
- class Scenario
11
- include Names
12
- include HasLocation
13
- include DescribesItself
14
-
15
- attr_reader :location, :background,
16
- :comments, :tags, :keyword,
17
- :description, :raw_steps
18
- private :raw_steps
19
-
20
- def initialize(location, comments, tags, keyword, name, description, steps)
21
- @location = location
22
- @comments = comments
23
- @tags = tags
24
- @keyword = keyword
25
- @name = name
26
- @description = description
27
- @raw_steps = steps
28
- end
29
-
30
- def children
31
- raw_steps
32
- end
33
-
34
- private
35
-
36
- def description_for_visitors
37
- :scenario
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/core/ast/names'
3
- require 'cucumber/core/ast/location'
4
- require 'cucumber/core/ast/describes_itself'
5
-
6
- module Cucumber
7
- module Core
8
- module Ast
9
- class ScenarioOutline
10
- include Names
11
- include HasLocation
12
- include DescribesItself
13
-
14
- MissingExamples = Class.new(StandardError)
15
-
16
- attr_reader :comments, :tags, :keyword,
17
- :steps, :examples_tables, :line
18
- private :line
19
-
20
- def initialize(location, comments, tags, keyword, name, description, steps, examples)
21
- @location = location
22
- @comments = comments
23
- @tags = tags
24
- @keyword = keyword
25
- @name = name
26
- @description = description
27
- @steps = steps
28
- @examples_tables = examples
29
- end
30
-
31
- private
32
-
33
- def children
34
- @steps + @examples_tables
35
- end
36
-
37
- def description_for_visitors
38
- :scenario_outline
39
- end
40
-
41
- end
42
-
43
- end
44
- end
45
- end