cuke_modeler 0.4.1 → 1.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/.gitignore +17 -17
- data/.travis.yml +1 -1
- data/Gemfile +4 -0
- data/History.rdoc +71 -3
- data/LICENSE.txt +22 -22
- data/README.md +24 -10
- data/Rakefile +2 -12
- data/cuke_modeler.gemspec +1 -1
- data/features/analysis/test_comparison.feature +37 -122
- data/features/modeling/background_modeling.feature +77 -0
- data/features/modeling/background_output.feature +42 -0
- data/features/modeling/cell_modeling.feature +23 -0
- data/features/modeling/cell_output.feature +22 -0
- data/features/modeling/directory_modeling.feature +65 -0
- data/features/modeling/directory_output.feature +12 -0
- data/features/modeling/doc_string_modeling.feature +61 -0
- data/features/modeling/doc_string_output.feature +32 -0
- data/features/modeling/example_modeling.feature +125 -0
- data/features/modeling/example_output.feature +39 -0
- data/features/modeling/feature_file_modeling.feature +40 -0
- data/features/modeling/feature_file_output.feature +12 -0
- data/features/modeling/feature_modeling.feature +109 -0
- data/features/modeling/feature_output.feature +104 -0
- data/features/modeling/model_output.feature +22 -0
- data/features/modeling/model_structure.feature +48 -0
- data/features/modeling/outline_modeling.feature +144 -0
- data/features/modeling/outline_output.feature +69 -0
- data/features/modeling/row_modeling.feature +48 -0
- data/features/modeling/row_output.feature +22 -0
- data/features/modeling/scenario_modeling.feature +118 -0
- data/features/modeling/scenario_output.feature +45 -0
- data/features/modeling/step_modeling.feature +84 -0
- data/features/modeling/step_output.feature +29 -0
- data/features/modeling/table_modeling.feature +50 -0
- data/features/modeling/table_output.feature +24 -0
- data/features/modeling/tag_modeling.feature +43 -0
- data/features/modeling/tag_output.feature +22 -0
- data/features/step_definitions/action_steps.rb +11 -1
- data/features/step_definitions/background_steps.rb +1 -85
- data/features/step_definitions/directory_steps.rb +2 -48
- data/features/step_definitions/doc_string_steps.rb +1 -67
- data/features/step_definitions/feature_file_steps.rb +2 -37
- data/features/step_definitions/feature_steps.rb +4 -100
- data/features/step_definitions/modeling_steps.rb +44 -0
- data/features/step_definitions/setup_steps.rb +19 -41
- data/features/step_definitions/step_steps.rb +2 -166
- data/features/step_definitions/table_steps.rb +1 -58
- data/features/step_definitions/tag_steps.rb +2 -72
- data/features/step_definitions/verification_steps.rb +152 -4
- data/features/support/env.rb +4 -6
- data/gemfiles/{gherkin.gemfile → gherkin2.gemfile} +4 -0
- data/gemfiles/gherkin3.gemfile +4 -0
- data/gemfiles/gherkin4.gemfile +4 -0
- data/lib/cuke_modeler.rb +24 -22
- data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +103 -31
- data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +103 -40
- data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +111 -50
- data/lib/cuke_modeler/containing.rb +255 -4
- data/lib/cuke_modeler/described.rb +28 -0
- data/lib/cuke_modeler/models/background.rb +66 -0
- data/lib/cuke_modeler/models/cell.rb +48 -0
- data/lib/cuke_modeler/models/directory.rb +95 -0
- data/lib/cuke_modeler/models/doc_string.rb +59 -0
- data/lib/cuke_modeler/models/example.rb +167 -0
- data/lib/cuke_modeler/models/feature.rb +106 -0
- data/lib/cuke_modeler/models/feature_file.rb +64 -0
- data/lib/cuke_modeler/models/model.rb +32 -0
- data/lib/cuke_modeler/models/outline.rb +79 -0
- data/lib/cuke_modeler/models/row.rb +49 -0
- data/lib/cuke_modeler/models/scenario.rb +69 -0
- data/lib/cuke_modeler/models/step.rb +68 -0
- data/lib/cuke_modeler/models/table.rb +67 -0
- data/lib/cuke_modeler/models/tag.rb +46 -0
- data/lib/cuke_modeler/named.rb +19 -0
- data/lib/cuke_modeler/nested.rb +22 -15
- data/lib/cuke_modeler/parsed.rb +11 -0
- data/lib/cuke_modeler/parsing.rb +66 -83
- data/lib/cuke_modeler/sourceable.rb +3 -11
- data/lib/cuke_modeler/stepped.rb +24 -0
- data/lib/cuke_modeler/taggable.rb +6 -29
- data/lib/cuke_modeler/version.rb +2 -1
- data/spec/integration/background_integration_spec.rb +332 -7
- data/spec/integration/cell_integration_spec.rb +321 -0
- data/spec/integration/directory_integration_spec.rb +175 -9
- data/spec/integration/doc_string_integration_spec.rb +318 -7
- data/spec/integration/example_integration_spec.rb +602 -19
- data/spec/integration/feature_file_integration_spec.rb +98 -3
- data/spec/integration/feature_integration_spec.rb +445 -27
- data/spec/integration/gherkin_2_adapter_spec.rb +122 -0
- data/spec/integration/gherkin_3_adapter_spec.rb +125 -0
- data/spec/integration/gherkin_4_adapter_spec.rb +123 -0
- data/spec/integration/model_integration_spec.rb +15 -0
- data/spec/integration/nested_integration_spec.rb +91 -0
- data/spec/integration/outline_integration_spec.rb +485 -12
- data/spec/integration/parsing_integration_spec.rb +85 -0
- data/spec/integration/row_integration_spec.rb +221 -18
- data/spec/integration/scenario_integration_spec.rb +368 -14
- data/spec/integration/shared/models_integration_specs.rb +18 -0
- data/spec/integration/step_integration_spec.rb +328 -77
- data/spec/integration/table_integration_spec.rb +242 -20
- data/spec/integration/tag_integration_spec.rb +178 -13
- data/spec/spec_helper.rb +32 -18
- data/spec/unit/background_unit_spec.rb +24 -44
- data/spec/unit/cell_unit_spec.rb +73 -0
- data/spec/unit/described_unit_spec.rb +23 -0
- data/spec/unit/directory_unit_spec.rb +52 -62
- data/spec/unit/doc_string_unit_spec.rb +47 -100
- data/spec/unit/example_unit_spec.rb +50 -296
- data/spec/unit/feature_file_unit_spec.rb +53 -52
- data/spec/unit/feature_unit_spec.rb +39 -83
- data/spec/unit/model_unit_spec.rb +15 -0
- data/spec/unit/named_unit_spec.rb +23 -0
- data/spec/unit/nested_unit_spec.rb +24 -21
- data/spec/unit/outline_unit_spec.rb +46 -69
- data/spec/unit/parsed_unit_spec.rb +27 -0
- data/spec/unit/parsing_unit_spec.rb +2 -70
- data/spec/unit/row_unit_spec.rb +22 -51
- data/spec/unit/scenario_unit_spec.rb +27 -59
- data/spec/unit/{bare_bones_unit_specs.rb → shared/bare_bones_models_unit_specs.rb} +2 -2
- data/spec/unit/shared/containing_models_unit_specs.rb +18 -0
- data/spec/unit/shared/described_models_unit_specs.rb +38 -0
- data/spec/unit/shared/models_unit_specs.rb +15 -0
- data/spec/unit/shared/named_models_unit_specs.rb +39 -0
- data/spec/unit/shared/nested_models_unit_specs.rb +51 -0
- data/spec/unit/shared/parsed_models_unit_specs.rb +39 -0
- data/spec/unit/shared/prepopulated_models_unit_specs.rb +18 -0
- data/spec/unit/shared/sourced_models_unit_specs.rb +39 -0
- data/spec/unit/shared/stepped_models_unit_specs.rb +46 -0
- data/spec/unit/shared/stringifiable_models_unit_specs.rb +18 -0
- data/spec/unit/shared/tagged_models_unit_specs.rb +72 -0
- data/spec/unit/sourceable_unit_spec.rb +12 -4
- data/spec/unit/step_unit_spec.rb +40 -231
- data/spec/unit/stepped_unit_spec.rb +23 -0
- data/spec/unit/table_unit_spec.rb +27 -89
- data/spec/unit/tag_unit_spec.rb +30 -53
- data/spec/unit/taggable_unit_spec.rb +26 -42
- data/todo.txt +32 -0
- metadata +135 -217
- data/features/analysis/test_manipulation.feature +0 -37
- data/features/modeling/gherkin/background_modeling.feature +0 -65
- data/features/modeling/gherkin/background_output.feature +0 -131
- data/features/modeling/gherkin/directory_modeling.feature +0 -110
- data/features/modeling/gherkin/directory_output.feature +0 -14
- data/features/modeling/gherkin/doc_string_modeling.feature +0 -53
- data/features/modeling/gherkin/doc_string_output.feature +0 -72
- data/features/modeling/gherkin/example_modeling.feature +0 -101
- data/features/modeling/gherkin/example_output.feature +0 -193
- data/features/modeling/gherkin/feature_file_modeling.feature +0 -54
- data/features/modeling/gherkin/feature_file_output.feature +0 -14
- data/features/modeling/gherkin/feature_modeling.feature +0 -154
- data/features/modeling/gherkin/feature_output.feature +0 -245
- data/features/modeling/gherkin/outline_modeling.feature +0 -90
- data/features/modeling/gherkin/outline_output.feature +0 -198
- data/features/modeling/gherkin/row_modeling.feature +0 -68
- data/features/modeling/gherkin/row_output.feature +0 -28
- data/features/modeling/gherkin/scenario_modeling.feature +0 -79
- data/features/modeling/gherkin/scenario_output.feature +0 -148
- data/features/modeling/gherkin/step_modeling.feature +0 -75
- data/features/modeling/gherkin/step_output.feature +0 -53
- data/features/modeling/gherkin/table_modeling.feature +0 -42
- data/features/modeling/gherkin/table_output.feature +0 -43
- data/features/modeling/gherkin/table_row_modeling.feature +0 -57
- data/features/modeling/gherkin/table_row_output.feature +0 -28
- data/features/modeling/gherkin/tag_modeling.feature +0 -48
- data/features/modeling/gherkin/tag_output.feature +0 -17
- data/features/modeling/gherkin3/background_modeling.feature +0 -64
- data/features/modeling/gherkin3/background_output.feature +0 -131
- data/features/modeling/gherkin3/directory_modeling.feature +0 -110
- data/features/modeling/gherkin3/directory_output.feature +0 -14
- data/features/modeling/gherkin3/doc_string_modeling.feature +0 -53
- data/features/modeling/gherkin3/doc_string_output.feature +0 -72
- data/features/modeling/gherkin3/example_modeling.feature +0 -100
- data/features/modeling/gherkin3/example_output.feature +0 -207
- data/features/modeling/gherkin3/feature_file_modeling.feature +0 -54
- data/features/modeling/gherkin3/feature_file_output.feature +0 -14
- data/features/modeling/gherkin3/feature_modeling.feature +0 -155
- data/features/modeling/gherkin3/feature_output.feature +0 -249
- data/features/modeling/gherkin3/outline_modeling.feature +0 -89
- data/features/modeling/gherkin3/outline_output.feature +0 -255
- data/features/modeling/gherkin3/row_modeling.feature +0 -68
- data/features/modeling/gherkin3/row_output.feature +0 -28
- data/features/modeling/gherkin3/scenario_modeling.feature +0 -78
- data/features/modeling/gherkin3/scenario_output.feature +0 -148
- data/features/modeling/gherkin3/step_modeling.feature +0 -75
- data/features/modeling/gherkin3/step_output.feature +0 -53
- data/features/modeling/gherkin3/table_modeling.feature +0 -42
- data/features/modeling/gherkin3/table_output.feature +0 -43
- data/features/modeling/gherkin3/table_row_modeling.feature +0 -57
- data/features/modeling/gherkin3/table_row_output.feature +0 -28
- data/features/modeling/gherkin3/tag_modeling.feature +0 -49
- data/features/modeling/gherkin3/tag_output.feature +0 -17
- data/features/modeling/gherkin4/background_modeling.feature +0 -64
- data/features/modeling/gherkin4/background_output.feature +0 -131
- data/features/modeling/gherkin4/directory_modeling.feature +0 -110
- data/features/modeling/gherkin4/directory_output.feature +0 -14
- data/features/modeling/gherkin4/doc_string_modeling.feature +0 -53
- data/features/modeling/gherkin4/doc_string_output.feature +0 -72
- data/features/modeling/gherkin4/example_modeling.feature +0 -100
- data/features/modeling/gherkin4/example_output.feature +0 -193
- data/features/modeling/gherkin4/feature_file_modeling.feature +0 -54
- data/features/modeling/gherkin4/feature_file_output.feature +0 -14
- data/features/modeling/gherkin4/feature_modeling.feature +0 -153
- data/features/modeling/gherkin4/feature_output.feature +0 -245
- data/features/modeling/gherkin4/outline_modeling.feature +0 -89
- data/features/modeling/gherkin4/outline_output.feature +0 -198
- data/features/modeling/gherkin4/row_modeling.feature +0 -68
- data/features/modeling/gherkin4/row_output.feature +0 -28
- data/features/modeling/gherkin4/scenario_modeling.feature +0 -78
- data/features/modeling/gherkin4/scenario_output.feature +0 -148
- data/features/modeling/gherkin4/step_modeling.feature +0 -75
- data/features/modeling/gherkin4/step_output.feature +0 -53
- data/features/modeling/gherkin4/table_modeling.feature +0 -42
- data/features/modeling/gherkin4/table_output.feature +0 -43
- data/features/modeling/gherkin4/table_row_modeling.feature +0 -57
- data/features/modeling/gherkin4/table_row_output.feature +0 -28
- data/features/modeling/gherkin4/tag_modeling.feature +0 -48
- data/features/modeling/gherkin4/tag_output.feature +0 -17
- data/features/step_definitions/outline_steps.rb +0 -258
- data/features/step_definitions/test_steps.rb +0 -123
- data/lib/cuke_modeler/background.rb +0 -38
- data/lib/cuke_modeler/directory.rb +0 -83
- data/lib/cuke_modeler/doc_string.rb +0 -87
- data/lib/cuke_modeler/example.rb +0 -195
- data/lib/cuke_modeler/feature.rb +0 -147
- data/lib/cuke_modeler/feature_element.rb +0 -73
- data/lib/cuke_modeler/feature_file.rb +0 -77
- data/lib/cuke_modeler/outline.rb +0 -68
- data/lib/cuke_modeler/raw.rb +0 -20
- data/lib/cuke_modeler/row.rb +0 -64
- data/lib/cuke_modeler/scenario.rb +0 -45
- data/lib/cuke_modeler/step.rb +0 -216
- data/lib/cuke_modeler/table.rb +0 -90
- data/lib/cuke_modeler/table_row.rb +0 -64
- data/lib/cuke_modeler/tag.rb +0 -62
- data/lib/cuke_modeler/test_element.rb +0 -79
- data/lib/cuke_modeler/world.rb +0 -113
- data/spec/integration/table_row_integration_spec.rb +0 -76
- data/spec/integration/world_integration_spec.rb +0 -14
- data/spec/unit/containing_element_unit_specs.rb +0 -18
- data/spec/unit/feature_element_unit_spec.rb +0 -19
- data/spec/unit/feature_element_unit_specs.rb +0 -52
- data/spec/unit/nested_element_unit_specs.rb +0 -39
- data/spec/unit/prepopulated_unit_specs.rb +0 -14
- data/spec/unit/raw_element_unit_specs.rb +0 -27
- data/spec/unit/raw_unit_spec.rb +0 -28
- data/spec/unit/sourced_element_unit_specs.rb +0 -18
- data/spec/unit/table_row_unit_spec.rb +0 -102
- data/spec/unit/tagged_element_unit_specs.rb +0 -67
- data/spec/unit/test_element_unit_spec.rb +0 -54
- data/spec/unit/test_element_unit_specs.rb +0 -34
- data/spec/unit/world_unit_spec.rb +0 -140
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
module CukeModeler
|
|
2
|
-
|
|
3
|
-
# A class modeling a Cucumber Scenario.
|
|
4
|
-
|
|
5
|
-
class Scenario < TestElement
|
|
6
|
-
|
|
7
|
-
include Taggable
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Creates a new Scenario object and, if *source* is provided, populates the
|
|
11
|
-
# object.
|
|
12
|
-
def initialize(source = nil)
|
|
13
|
-
parsed_scenario = process_source(source, 'cuke_modeler_stand_alone_scenario.feature')
|
|
14
|
-
|
|
15
|
-
super(parsed_scenario)
|
|
16
|
-
|
|
17
|
-
@tags = []
|
|
18
|
-
@tag_elements = []
|
|
19
|
-
|
|
20
|
-
build_scenario(parsed_scenario) if parsed_scenario
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Returns gherkin representation of the scenario.
|
|
24
|
-
def to_s
|
|
25
|
-
text = ''
|
|
26
|
-
|
|
27
|
-
text << tag_output_string + "\n" unless tags.empty?
|
|
28
|
-
text << "Scenario:#{name_output_string}"
|
|
29
|
-
text << "\n" + description_output_string unless description_text.empty?
|
|
30
|
-
text << "\n" unless steps.empty? || description_text.empty?
|
|
31
|
-
text << "\n" + steps_output_string unless steps.empty?
|
|
32
|
-
|
|
33
|
-
text
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
private
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def build_scenario(scenario)
|
|
41
|
-
populate_element_tags(scenario)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
|
45
|
-
end
|
data/lib/cuke_modeler/step.rb
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
module CukeModeler
|
|
2
|
-
|
|
3
|
-
# A class modeling a Cucumber Feature.
|
|
4
|
-
|
|
5
|
-
class Step
|
|
6
|
-
|
|
7
|
-
include Containing
|
|
8
|
-
include Sourceable
|
|
9
|
-
include Raw
|
|
10
|
-
include Nested
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
# The step's keyword
|
|
14
|
-
attr_accessor :keyword
|
|
15
|
-
|
|
16
|
-
# The base text of the step
|
|
17
|
-
attr_accessor :base
|
|
18
|
-
|
|
19
|
-
# The step's passed block
|
|
20
|
-
attr_accessor :block
|
|
21
|
-
|
|
22
|
-
# The step's arguments
|
|
23
|
-
attr_accessor :arguments
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# Creates a new Step object and, if *source* is provided, populates the
|
|
27
|
-
# object.
|
|
28
|
-
def initialize(source = nil)
|
|
29
|
-
@arguments = []
|
|
30
|
-
|
|
31
|
-
parsed_step = process_source(source)
|
|
32
|
-
|
|
33
|
-
build_step(parsed_step) if parsed_step
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Sets the delimiter that will be used by default when determining the
|
|
37
|
-
# boundaries of step arguments.
|
|
38
|
-
def delimiter=(new_delimiter)
|
|
39
|
-
self.left_delimiter = new_delimiter
|
|
40
|
-
self.right_delimiter = new_delimiter
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Returns the delimiter that is used to mark the beginning of a step
|
|
44
|
-
# argument.
|
|
45
|
-
def left_delimiter
|
|
46
|
-
@left_delimiter || World.left_delimiter
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Sets the left delimiter that will be used by default when determining
|
|
50
|
-
# step arguments.
|
|
51
|
-
def left_delimiter=(new_delimiter)
|
|
52
|
-
@left_delimiter = new_delimiter
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Returns the delimiter that is used to mark the end of a step
|
|
56
|
-
# argument.
|
|
57
|
-
def right_delimiter
|
|
58
|
-
@right_delimiter || World.right_delimiter
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Sets the right delimiter that will be used by default when determining
|
|
62
|
-
# step arguments.
|
|
63
|
-
def right_delimiter=(new_delimiter)
|
|
64
|
-
@right_delimiter = new_delimiter
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Returns true if the two steps have the same text, minus any keywords
|
|
68
|
-
# and arguments, and false otherwise.
|
|
69
|
-
def ==(other_step)
|
|
70
|
-
return false unless other_step.respond_to?(:step_text)
|
|
71
|
-
|
|
72
|
-
left_step = step_text(:with_keywords => false, :with_arguments => false)
|
|
73
|
-
right_step = other_step.step_text(:with_keywords => false, :with_arguments => false)
|
|
74
|
-
|
|
75
|
-
left_step == right_step
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
# Deprecated
|
|
79
|
-
#
|
|
80
|
-
# Returns the entire text of the step. Options can be set to selectively
|
|
81
|
-
# exclude certain portions of the text. *left_delimiter* and *right_delimiter*
|
|
82
|
-
# are used to determine which parts of the step are arguments.
|
|
83
|
-
#
|
|
84
|
-
# a_step = CukeModeler::Step.new("Given *some* step with a block:\n|block line 1|\n|block line 2|")
|
|
85
|
-
#
|
|
86
|
-
# a_step.step_text
|
|
87
|
-
# #=> ['Given *some* step with a block:', '|block line 1|', '|block line 2|']
|
|
88
|
-
# a_step.step_text(:with_keywords => false)
|
|
89
|
-
# #=> ['*some* step with a block:', '|block line 1|', '|block line 2|']
|
|
90
|
-
# a_step.step_text(:with_arguments => false, :left_delimiter => '*', :right_delimiter => '*')
|
|
91
|
-
# #=> ['Given ** step with a block:']
|
|
92
|
-
# a_step.step_text(:with_keywords => false, :with_arguments => false, :left_delimiter => '-', :right_delimiter => '-'))
|
|
93
|
-
# #=> ['*some* step with a block:']
|
|
94
|
-
#
|
|
95
|
-
def step_text(options = {})
|
|
96
|
-
options = {:with_keywords => true,
|
|
97
|
-
:with_arguments => true,
|
|
98
|
-
:left_delimiter => self.left_delimiter,
|
|
99
|
-
:right_delimiter => self.right_delimiter}.merge(options)
|
|
100
|
-
|
|
101
|
-
final_step = []
|
|
102
|
-
step_text = ''
|
|
103
|
-
|
|
104
|
-
step_text += "#{@keyword} " if options[:with_keywords]
|
|
105
|
-
|
|
106
|
-
if options[:with_arguments]
|
|
107
|
-
step_text += @base
|
|
108
|
-
final_step << step_text
|
|
109
|
-
final_step.concat(rebuild_block_text(@block)) if @block
|
|
110
|
-
else
|
|
111
|
-
step_text += stripped_step(@base, options[:left_delimiter], options[:right_delimiter])
|
|
112
|
-
final_step << step_text
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
final_step
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
# Populates the step's arguments based on the step's text and some method of
|
|
119
|
-
# determining which parts of the text are arguments. Methods include using
|
|
120
|
-
# a regular expression and using the step's delimiters.
|
|
121
|
-
def scan_arguments(*how)
|
|
122
|
-
if how.count == 1
|
|
123
|
-
pattern = how.first
|
|
124
|
-
else
|
|
125
|
-
left_delimiter = how[0] || self.left_delimiter
|
|
126
|
-
right_delimiter = how[1] || self.right_delimiter
|
|
127
|
-
|
|
128
|
-
return [] unless left_delimiter && right_delimiter
|
|
129
|
-
|
|
130
|
-
pattern = Regexp.new(Regexp.escape(left_delimiter) + '(.*?)' + Regexp.escape(right_delimiter))
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
@arguments = @base.scan(pattern).flatten
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# Returns a gherkin representation of the step.
|
|
137
|
-
def to_s
|
|
138
|
-
text = "#{keyword} #{base}"
|
|
139
|
-
text << "\n" + block.to_s.split("\n").collect { |line| " #{line}" }.join("\n") if block
|
|
140
|
-
|
|
141
|
-
text
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
private
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
def process_source(source)
|
|
149
|
-
case
|
|
150
|
-
when source.is_a?(String)
|
|
151
|
-
parse_step(source)
|
|
152
|
-
else
|
|
153
|
-
source
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def parse_step(source_text)
|
|
158
|
-
base_file_string = "Feature: Fake feature to parse\nScenario:\n"
|
|
159
|
-
source_text = base_file_string + source_text
|
|
160
|
-
|
|
161
|
-
parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_step.feature')
|
|
162
|
-
|
|
163
|
-
parsed_file.first['elements'].first['steps'].first
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def build_step(step)
|
|
167
|
-
populate_base(step)
|
|
168
|
-
populate_block(step)
|
|
169
|
-
populate_keyword(step)
|
|
170
|
-
populate_element_source_line(step)
|
|
171
|
-
populate_raw_element(step)
|
|
172
|
-
|
|
173
|
-
scan_arguments
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def populate_base(step)
|
|
177
|
-
@base = step['name']
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def populate_block(step)
|
|
181
|
-
@block = build_block(step)
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
def populate_keyword(step)
|
|
185
|
-
@keyword = step['keyword'].strip
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
# Returns the step string minus any arguments based on the given delimiters.
|
|
189
|
-
def stripped_step(step, left_delimiter, right_delimiter)
|
|
190
|
-
unless left_delimiter.nil? || right_delimiter.nil?
|
|
191
|
-
pattern = Regexp.new(Regexp.escape(left_delimiter) + '.*?' + Regexp.escape(right_delimiter))
|
|
192
|
-
step = step.gsub(pattern, left_delimiter + right_delimiter)
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
step
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
def build_block(step)
|
|
199
|
-
case
|
|
200
|
-
when step['rows']
|
|
201
|
-
@block = build_child_element(Table, step['rows'])
|
|
202
|
-
when step['doc_string']
|
|
203
|
-
@block = build_child_element(DocString, step['doc_string'])
|
|
204
|
-
else
|
|
205
|
-
@block = nil
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
@block
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
def rebuild_block_text(blok)
|
|
212
|
-
blok.contents.collect { |row| "|#{row.join('|')}|" }
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
end
|
|
216
|
-
end
|
data/lib/cuke_modeler/table.rb
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
module CukeModeler
|
|
2
|
-
|
|
3
|
-
# A class modeling the table of a Step.
|
|
4
|
-
|
|
5
|
-
class Table
|
|
6
|
-
|
|
7
|
-
include Containing
|
|
8
|
-
include Raw
|
|
9
|
-
include Nested
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# The contents of the table
|
|
13
|
-
#
|
|
14
|
-
# Deprecated
|
|
15
|
-
attr_accessor :contents
|
|
16
|
-
|
|
17
|
-
# The row elements that make up the table
|
|
18
|
-
attr_accessor :row_elements
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# Creates a new Table object and, if *source* is provided, populates
|
|
22
|
-
# the object.
|
|
23
|
-
def initialize(source = nil)
|
|
24
|
-
@contents = []
|
|
25
|
-
@row_elements = []
|
|
26
|
-
|
|
27
|
-
parsed_table = process_source(source)
|
|
28
|
-
|
|
29
|
-
build_table(parsed_table) if parsed_table
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Returns a gherkin representation of the table.
|
|
33
|
-
def to_s
|
|
34
|
-
row_elements.empty? ? '' : row_elements.collect { |row| row_output_string(row) }.join("\n")
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def process_source(source)
|
|
42
|
-
case
|
|
43
|
-
when source.is_a?(String)
|
|
44
|
-
parse_table(source)
|
|
45
|
-
else
|
|
46
|
-
source
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def parse_table(source_text)
|
|
51
|
-
base_file_string = "Feature:\nScenario:\n* step\n"
|
|
52
|
-
source_text = base_file_string + source_text
|
|
53
|
-
|
|
54
|
-
parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_table.feature')
|
|
55
|
-
|
|
56
|
-
parsed_file.first['elements'].first['steps'].first['rows']
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def build_table(table)
|
|
60
|
-
populate_contents(table)
|
|
61
|
-
populate_row_elements(table)
|
|
62
|
-
populate_raw_element(table)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def populate_contents(table)
|
|
66
|
-
@contents = table['rows'].collect { |row| row['cells'] }
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def populate_row_elements(table)
|
|
70
|
-
table['rows'].each do |row|
|
|
71
|
-
@row_elements << build_child_element(TableRow, row)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def row_output_string(row)
|
|
76
|
-
row_text = '|'
|
|
77
|
-
|
|
78
|
-
row.cells.count.times do |count|
|
|
79
|
-
row_text << " #{row.cells[count].ljust(determine_buffer_size(count))} |"
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
row_text
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def determine_buffer_size(index)
|
|
86
|
-
row_elements.collect { |row| row.cells[index].length }.max || 0
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
module CukeModeler
|
|
2
|
-
|
|
3
|
-
# A class modeling a step table row.
|
|
4
|
-
|
|
5
|
-
class TableRow
|
|
6
|
-
|
|
7
|
-
include Sourceable
|
|
8
|
-
include Raw
|
|
9
|
-
include Nested
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# The cells that make up the row
|
|
13
|
-
attr_accessor :cells
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# Creates a new TableRow object and, if *source* is provided, populates
|
|
17
|
-
# the object.
|
|
18
|
-
def initialize(source = nil)
|
|
19
|
-
parsed_row = process_source(source)
|
|
20
|
-
|
|
21
|
-
@cells = []
|
|
22
|
-
|
|
23
|
-
build_row(parsed_row) if parsed_row
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Returns a gherkin representation of the table row.
|
|
27
|
-
def to_s
|
|
28
|
-
"| #{cells.join(' | ')} |"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def process_source(source)
|
|
36
|
-
case
|
|
37
|
-
when source.is_a?(String)
|
|
38
|
-
parse_row(source)
|
|
39
|
-
else
|
|
40
|
-
source
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def parse_row(source_text)
|
|
45
|
-
base_file_string = "Feature: Fake feature to parse\nScenario:\n* fake step\n"
|
|
46
|
-
source_text = base_file_string + source_text
|
|
47
|
-
|
|
48
|
-
parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_table_row.feature')
|
|
49
|
-
|
|
50
|
-
parsed_file.first['elements'].first['steps'].first['rows']['rows'].first
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def build_row(parsed_row)
|
|
54
|
-
populate_element_source_line(parsed_row)
|
|
55
|
-
populate_row_cells(parsed_row)
|
|
56
|
-
populate_raw_element(parsed_row)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def populate_row_cells(parsed_row)
|
|
60
|
-
@cells = parsed_row['cells']
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
end
|
data/lib/cuke_modeler/tag.rb
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
module CukeModeler
|
|
2
|
-
|
|
3
|
-
# A class modeling a Tag.
|
|
4
|
-
|
|
5
|
-
class Tag
|
|
6
|
-
|
|
7
|
-
include Raw
|
|
8
|
-
include Sourceable
|
|
9
|
-
include Nested
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# The name of the Tag
|
|
13
|
-
attr_accessor :name
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# Creates a new Tag object and, if *source* is provided, populates the
|
|
17
|
-
# object.
|
|
18
|
-
def initialize(source = nil)
|
|
19
|
-
parsed_tag = process_source(source)
|
|
20
|
-
|
|
21
|
-
build_tag(parsed_tag) if parsed_tag
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Returns gherkin representation of the tag.
|
|
25
|
-
def to_s
|
|
26
|
-
name || ''
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def process_source(source)
|
|
34
|
-
case
|
|
35
|
-
when source.is_a?(String)
|
|
36
|
-
parse_tag(source)
|
|
37
|
-
else
|
|
38
|
-
source
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def parse_tag(source_text)
|
|
43
|
-
base_file_string = "\nFeature: Fake feature to parse"
|
|
44
|
-
source_text = source_text + base_file_string
|
|
45
|
-
|
|
46
|
-
parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_tag.feature')
|
|
47
|
-
|
|
48
|
-
parsed_file.first['tags'].first
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def build_tag(parsed_tag)
|
|
52
|
-
populate_name(parsed_tag)
|
|
53
|
-
populate_raw_element(parsed_tag)
|
|
54
|
-
populate_element_source_line(parsed_tag)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def populate_name(parsed_tag)
|
|
58
|
-
@name = parsed_tag['name']
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
|
-
end
|