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,8 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
SimpleCov.command_name('Outline') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
3
|
|
|
5
|
-
describe 'Outline, Unit' do
|
|
4
|
+
describe 'Outline, Unit', :unit_test => true do
|
|
6
5
|
|
|
7
6
|
let(:clazz) { CukeModeler::Outline }
|
|
8
7
|
let(:outline) { clazz.new }
|
|
@@ -10,99 +9,83 @@ describe 'Outline, Unit' do
|
|
|
10
9
|
|
|
11
10
|
describe 'common behavior' do
|
|
12
11
|
|
|
13
|
-
it_should_behave_like 'a
|
|
14
|
-
it_should_behave_like 'a
|
|
15
|
-
it_should_behave_like 'a
|
|
16
|
-
it_should_behave_like 'a
|
|
17
|
-
it_should_behave_like 'a
|
|
18
|
-
it_should_behave_like 'a
|
|
19
|
-
it_should_behave_like 'a
|
|
20
|
-
it_should_behave_like 'a sourced element'
|
|
21
|
-
it_should_behave_like 'a raw element'
|
|
12
|
+
it_should_behave_like 'a model'
|
|
13
|
+
it_should_behave_like 'a named model'
|
|
14
|
+
it_should_behave_like 'a described model'
|
|
15
|
+
it_should_behave_like 'a stepped model'
|
|
16
|
+
it_should_behave_like 'a tagged model'
|
|
17
|
+
it_should_behave_like 'a sourced model'
|
|
18
|
+
it_should_behave_like 'a parsed model'
|
|
22
19
|
|
|
23
20
|
end
|
|
24
21
|
|
|
25
22
|
|
|
26
23
|
describe 'unique behavior' do
|
|
27
24
|
|
|
28
|
-
it '
|
|
29
|
-
|
|
30
|
-
Examples:
|
|
31
|
-
|param|
|
|
32
|
-
|value|"
|
|
33
|
-
|
|
34
|
-
expect { @element = clazz.new(source) }.to_not raise_error
|
|
35
|
-
|
|
36
|
-
# Sanity check in case instantiation failed in a non-explosive manner
|
|
37
|
-
@element.name.should == 'test outline'
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it 'provides a descriptive filename when being parsed from stand alone text' do
|
|
41
|
-
source = "bad outline text \n Scenario Outline:\n And a step\n @foo "
|
|
42
|
-
|
|
43
|
-
expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_outline\.feature'/)
|
|
25
|
+
it 'has examples' do
|
|
26
|
+
expect(outline).to respond_to(:examples)
|
|
44
27
|
end
|
|
45
28
|
|
|
46
|
-
it '
|
|
47
|
-
outline
|
|
48
|
-
raw_data = outline.raw_element
|
|
29
|
+
it 'can change its examples' do
|
|
30
|
+
expect(outline).to respond_to(:examples=)
|
|
49
31
|
|
|
50
|
-
|
|
51
|
-
expect(
|
|
32
|
+
outline.examples = :some_examples
|
|
33
|
+
expect(outline.examples).to eq(:some_examples)
|
|
34
|
+
outline.examples = :some_other_examples
|
|
35
|
+
expect(outline.examples).to eq(:some_other_examples)
|
|
52
36
|
end
|
|
53
37
|
|
|
54
|
-
it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
|
|
55
|
-
outline = clazz.new("Scenario Outline: test outline\nExamples:\n|param|\n|value|")
|
|
56
|
-
raw_data = outline.raw_element
|
|
57
38
|
|
|
58
|
-
|
|
59
|
-
expect(raw_data[:type]).to eq(:ScenarioOutline)
|
|
60
|
-
end
|
|
39
|
+
describe 'abstract instantiation' do
|
|
61
40
|
|
|
62
|
-
|
|
63
|
-
outline = clazz.new("Scenario Outline: test outline\nExamples:\n|param|\n|value|")
|
|
64
|
-
raw_data = outline.raw_element
|
|
41
|
+
context 'a new outline object' do
|
|
65
42
|
|
|
66
|
-
|
|
67
|
-
expect(raw_data['keyword']).to eq('Scenario Outline')
|
|
68
|
-
end
|
|
43
|
+
let(:outline) { clazz.new }
|
|
69
44
|
|
|
70
|
-
it 'has examples' do
|
|
71
|
-
outline.should respond_to(:examples)
|
|
72
|
-
end
|
|
73
45
|
|
|
74
|
-
|
|
75
|
-
|
|
46
|
+
it 'starts with no examples' do
|
|
47
|
+
expect(outline.examples).to eq([])
|
|
48
|
+
end
|
|
76
49
|
|
|
77
|
-
|
|
78
|
-
outline.examples.should == :some_examples
|
|
79
|
-
outline.examples = :some_other_examples
|
|
80
|
-
outline.examples.should == :some_other_examples
|
|
81
|
-
end
|
|
50
|
+
end
|
|
82
51
|
|
|
83
|
-
it 'starts with no examples' do
|
|
84
|
-
outline.examples.should == []
|
|
85
52
|
end
|
|
86
53
|
|
|
87
|
-
it 'contains steps and
|
|
54
|
+
it 'contains steps, examples, and tags' do
|
|
55
|
+
tags = [:tag_1, :tagt_2]
|
|
88
56
|
steps = [:step_1, :step_2, :step_3]
|
|
89
57
|
examples = [:example_1, :example_2, :example_3]
|
|
90
|
-
everything = steps + examples
|
|
58
|
+
everything = steps + examples + tags
|
|
91
59
|
|
|
92
60
|
outline.steps = steps
|
|
93
61
|
outline.examples = examples
|
|
62
|
+
outline.tags = tags
|
|
63
|
+
|
|
64
|
+
expect(outline.children).to match_array(everything)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
describe 'comparison' do
|
|
69
|
+
|
|
70
|
+
it 'can gracefully be compared to other types of objects' do
|
|
71
|
+
# Some common types of object
|
|
72
|
+
[1, 'foo', :bar, [], {}].each do |thing|
|
|
73
|
+
expect { outline == thing }.to_not raise_error
|
|
74
|
+
expect(outline == thing).to be false
|
|
75
|
+
end
|
|
76
|
+
end
|
|
94
77
|
|
|
95
|
-
outline.contains.should =~ everything
|
|
96
78
|
end
|
|
97
79
|
|
|
98
|
-
|
|
80
|
+
|
|
81
|
+
describe 'outline output' do
|
|
99
82
|
|
|
100
83
|
it 'is a String' do
|
|
101
|
-
outline.to_s.
|
|
84
|
+
expect(outline.to_s).to be_a(String)
|
|
102
85
|
end
|
|
103
86
|
|
|
104
87
|
|
|
105
|
-
context '
|
|
88
|
+
context 'from abstract instantiation' do
|
|
106
89
|
|
|
107
90
|
let(:outline) { clazz.new }
|
|
108
91
|
|
|
@@ -118,13 +101,7 @@ describe 'Outline, Unit' do
|
|
|
118
101
|
end
|
|
119
102
|
|
|
120
103
|
it 'can output an outline that has only a description' do
|
|
121
|
-
outline.
|
|
122
|
-
|
|
123
|
-
expect { outline.to_s }.to_not raise_error
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it 'can output an outline that has only tags' do
|
|
127
|
-
outline.tags = ['a tag']
|
|
104
|
+
outline.description = 'a description'
|
|
128
105
|
|
|
129
106
|
expect { outline.to_s }.to_not raise_error
|
|
130
107
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
describe 'Parsed, Unit' do
|
|
5
|
+
|
|
6
|
+
let(:nodule) { CukeModeler::Parsed }
|
|
7
|
+
let(:model) { Object.new.extend(nodule) }
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
describe 'unique behavior' do
|
|
11
|
+
|
|
12
|
+
it 'can access its original parsing data' do
|
|
13
|
+
expect(model).to respond_to(:parsing_data)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'can change its parsing data' do
|
|
17
|
+
expect(model).to respond_to(:parsing_data=)
|
|
18
|
+
|
|
19
|
+
model.parsing_data = :some_parsing_data
|
|
20
|
+
expect(model.parsing_data).to eq(:some_parsing_data)
|
|
21
|
+
model.parsing_data = :some_other_parsing_data
|
|
22
|
+
expect(model.parsing_data).to eq(:some_other_parsing_data)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
SimpleCov.command_name('Parsing') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
3
|
|
|
5
|
-
describe 'Parsing, Unit' do
|
|
4
|
+
describe 'Parsing, Unit', :unit_test => true do
|
|
6
5
|
|
|
7
6
|
let(:nodule) { CukeModeler::Parsing }
|
|
8
7
|
|
|
@@ -10,80 +9,13 @@ describe 'Parsing, Unit' do
|
|
|
10
9
|
describe 'unique behavior' do
|
|
11
10
|
|
|
12
11
|
it 'can parse text' do
|
|
13
|
-
nodule.
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it 'can only parse strings' do
|
|
17
|
-
expect { nodule.parse_text(5) }.to raise_error(ArgumentError)
|
|
18
|
-
expect { nodule.parse_text('Feature:') }.to_not raise_error
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'returns an Array' do
|
|
22
|
-
result = nodule.parse_text('Feature:')
|
|
23
|
-
result.is_a?(Array).should be_true
|
|
12
|
+
expect(nodule).to respond_to(:parse_text)
|
|
24
13
|
end
|
|
25
14
|
|
|
26
15
|
it 'takes the text that is to be parsed and an optional file name' do
|
|
27
16
|
expect(nodule.method(:parse_text).arity).to eq(-2)
|
|
28
17
|
end
|
|
29
18
|
|
|
30
|
-
it 'raises and error if an error is encountered while parsing text' do
|
|
31
|
-
expect { nodule.parse_text('bad file') }.to raise_error(ArgumentError, /Error encountered while parsing '.*'/)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it 'includes the file parsed in the error that it raises' do
|
|
35
|
-
expect { nodule.parse_text('bad file', 'file foo.txt') }.to raise_error(/'file foo\.txt'/)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it 'includes the underlying error message in the error that it raises' do
|
|
39
|
-
begin
|
|
40
|
-
# Custom error type in order to ensure that we are throwing the correct thing
|
|
41
|
-
module CukeModeler
|
|
42
|
-
class TestError < StandardError
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Monkey patch Gherkin to throw the error that we need for testing
|
|
47
|
-
if Gem.loaded_specs['gherkin'].version.version[/^3|4/]
|
|
48
|
-
old_method = Gherkin::Parser.instance_method(:parse)
|
|
49
|
-
|
|
50
|
-
module Gherkin
|
|
51
|
-
class Parser
|
|
52
|
-
def parse(*args)
|
|
53
|
-
raise(CukeModeler::TestError, 'something went wrong')
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
else
|
|
58
|
-
old_method = Gherkin::Parser::Parser.instance_method(:parse)
|
|
59
|
-
|
|
60
|
-
module Gherkin
|
|
61
|
-
module Parser
|
|
62
|
-
class Parser
|
|
63
|
-
def parse(*args)
|
|
64
|
-
raise(CukeModeler::TestError, 'something went wrong')
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
expect { nodule.parse_text('bad file') }.to raise_error(/CukeModeler::TestError.*something went wrong/)
|
|
72
|
-
ensure
|
|
73
|
-
# Making sure that our changes don't escape a test and ruin the rest of the suite
|
|
74
|
-
if Gem.loaded_specs['gherkin'].version.version[/^3|4/]
|
|
75
|
-
Gherkin::Parser.send(:define_method, :parse, old_method)
|
|
76
|
-
else
|
|
77
|
-
Gherkin::Parser::Parser.send(:define_method, :parse, old_method)
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it 'has a default file name if one is not provided' do
|
|
84
|
-
expect { nodule.parse_text('bad file') }.to raise_error(ArgumentError, /'cuke_modeler_fake_file\.feature'/)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
19
|
end
|
|
88
20
|
|
|
89
21
|
end
|
data/spec/unit/row_unit_spec.rb
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
SimpleCov.command_name('Row') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
3
|
|
|
5
|
-
describe 'Row, Unit' do
|
|
4
|
+
describe 'Row, Unit', :unit_test => true do
|
|
6
5
|
|
|
7
6
|
let(:clazz) { CukeModeler::Row }
|
|
8
7
|
let(:row) { clazz.new }
|
|
@@ -10,81 +9,53 @@ describe 'Row, Unit' do
|
|
|
10
9
|
|
|
11
10
|
describe 'common behavior' do
|
|
12
11
|
|
|
13
|
-
it_should_behave_like 'a
|
|
14
|
-
it_should_behave_like 'a
|
|
15
|
-
it_should_behave_like 'a
|
|
16
|
-
it_should_behave_like 'a sourced element'
|
|
17
|
-
it_should_behave_like 'a raw element'
|
|
12
|
+
it_should_behave_like 'a model'
|
|
13
|
+
it_should_behave_like 'a sourced model'
|
|
14
|
+
it_should_behave_like 'a parsed model'
|
|
18
15
|
|
|
19
16
|
end
|
|
20
17
|
|
|
21
18
|
|
|
22
19
|
describe 'unique behavior' do
|
|
23
20
|
|
|
24
|
-
it '
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
expect { @element = clazz.new(source) }.to_not raise_error
|
|
28
|
-
|
|
29
|
-
# Sanity check in case instantiation failed in a non-explosive manner
|
|
30
|
-
@element.cells.should == ['a', 'row']
|
|
21
|
+
it 'has cells' do
|
|
22
|
+
expect(row).to respond_to(:cells)
|
|
31
23
|
end
|
|
32
24
|
|
|
33
|
-
it '
|
|
34
|
-
|
|
25
|
+
it 'can change its cells' do
|
|
26
|
+
expect(row).to respond_to(:cells=)
|
|
35
27
|
|
|
36
|
-
|
|
28
|
+
row.cells = :some_cells
|
|
29
|
+
expect(row.cells).to eq(:some_cells)
|
|
30
|
+
row.cells = :some_other_cells
|
|
31
|
+
expect(row.cells).to eq(:some_other_cells)
|
|
37
32
|
end
|
|
38
33
|
|
|
39
|
-
it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
|
|
40
|
-
example_row = clazz.new("| a | row |")
|
|
41
|
-
raw_data = example_row.raw_element
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
expect(raw_data[:type]).to eq(:TableRow)
|
|
45
|
-
end
|
|
35
|
+
describe 'abstract instantiation' do
|
|
46
36
|
|
|
47
|
-
|
|
48
|
-
example_row = clazz.new("| a | row |")
|
|
49
|
-
raw_data = example_row.raw_element
|
|
37
|
+
context 'a new row object' do
|
|
50
38
|
|
|
51
|
-
|
|
52
|
-
expect(raw_data[:type]).to eq('TableRow')
|
|
53
|
-
end
|
|
39
|
+
let(:row) { clazz.new }
|
|
54
40
|
|
|
55
|
-
it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
|
|
56
|
-
example_row = clazz.new("| a | row |")
|
|
57
|
-
raw_data = example_row.raw_element
|
|
58
41
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
it 'has cells' do
|
|
64
|
-
row.should respond_to(:cells)
|
|
65
|
-
end
|
|
42
|
+
it 'starts with no cells' do
|
|
43
|
+
expect(row.cells).to eq([])
|
|
44
|
+
end
|
|
66
45
|
|
|
67
|
-
|
|
68
|
-
expect(row).to respond_to(:cells=)
|
|
46
|
+
end
|
|
69
47
|
|
|
70
|
-
row.cells = :some_cells
|
|
71
|
-
row.cells.should == :some_cells
|
|
72
|
-
row.cells = :some_other_cells
|
|
73
|
-
row.cells.should == :some_other_cells
|
|
74
48
|
end
|
|
75
49
|
|
|
76
|
-
it 'starts with no cells' do
|
|
77
|
-
row.cells.should == []
|
|
78
|
-
end
|
|
79
50
|
|
|
80
|
-
describe 'row output
|
|
51
|
+
describe 'row output' do
|
|
81
52
|
|
|
82
53
|
it 'is a String' do
|
|
83
|
-
row.to_s.
|
|
54
|
+
expect(row.to_s).to be_a(String)
|
|
84
55
|
end
|
|
85
56
|
|
|
86
57
|
|
|
87
|
-
context '
|
|
58
|
+
context 'from abstract instantiation' do
|
|
88
59
|
|
|
89
60
|
let(:row) { clazz.new }
|
|
90
61
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
SimpleCov.command_name('Scenario') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
3
|
|
|
5
|
-
describe 'Scenario, Unit' do
|
|
4
|
+
describe 'Scenario, Unit', :unit_test => true do
|
|
6
5
|
|
|
7
6
|
let(:clazz) { CukeModeler::Scenario }
|
|
8
7
|
let(:scenario) { clazz.new }
|
|
@@ -10,77 +9,52 @@ describe 'Scenario, Unit' do
|
|
|
10
9
|
|
|
11
10
|
describe 'common behavior' do
|
|
12
11
|
|
|
13
|
-
it_should_behave_like 'a
|
|
14
|
-
it_should_behave_like 'a
|
|
15
|
-
it_should_behave_like 'a
|
|
16
|
-
it_should_behave_like 'a
|
|
17
|
-
it_should_behave_like 'a
|
|
18
|
-
it_should_behave_like 'a
|
|
19
|
-
it_should_behave_like 'a
|
|
20
|
-
it_should_behave_like 'a sourced element'
|
|
21
|
-
it_should_behave_like 'a raw element'
|
|
12
|
+
it_should_behave_like 'a model'
|
|
13
|
+
it_should_behave_like 'a named model'
|
|
14
|
+
it_should_behave_like 'a described model'
|
|
15
|
+
it_should_behave_like 'a stepped model'
|
|
16
|
+
it_should_behave_like 'a tagged model'
|
|
17
|
+
it_should_behave_like 'a sourced model'
|
|
18
|
+
it_should_behave_like 'a parsed model'
|
|
22
19
|
|
|
23
20
|
end
|
|
24
21
|
|
|
25
22
|
|
|
26
23
|
describe 'unique behavior' do
|
|
27
24
|
|
|
28
|
-
it '
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# Sanity check in case instantiation failed in a non-explosive manner
|
|
34
|
-
@element.name.should == 'test scenario'
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it 'provides a descriptive filename when being parsed from stand alone text' do
|
|
38
|
-
source = "bad scenario text \n Scenario:\n And a step\n @foo "
|
|
39
|
-
|
|
40
|
-
expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_scenario\.feature'/)
|
|
41
|
-
end
|
|
25
|
+
it 'contains steps and tags' do
|
|
26
|
+
tags = [:tag_1, :tag_2]
|
|
27
|
+
steps = [:step_1, :step_2]
|
|
28
|
+
everything = steps + tags
|
|
42
29
|
|
|
43
|
-
|
|
44
|
-
scenario =
|
|
45
|
-
raw_data = scenario.raw_element
|
|
30
|
+
scenario.steps = steps
|
|
31
|
+
scenario.tags = tags
|
|
46
32
|
|
|
47
|
-
expect(
|
|
48
|
-
expect(raw_data[:type]).to eq(:Scenario)
|
|
33
|
+
expect(scenario.children).to match_array(everything)
|
|
49
34
|
end
|
|
50
35
|
|
|
51
|
-
it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
|
|
52
|
-
scenario = clazz.new("Scenario: test scenario")
|
|
53
|
-
raw_data = scenario.raw_element
|
|
54
36
|
|
|
55
|
-
|
|
56
|
-
expect(raw_data[:type]).to eq(:Scenario)
|
|
57
|
-
end
|
|
37
|
+
describe 'comparison' do
|
|
58
38
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
39
|
+
it 'can gracefully be compared to other types of objects' do
|
|
40
|
+
# Some common types of object
|
|
41
|
+
[1, 'foo', :bar, [], {}].each do |thing|
|
|
42
|
+
expect { scenario == thing }.to_not raise_error
|
|
43
|
+
expect(scenario == thing).to be false
|
|
44
|
+
end
|
|
45
|
+
end
|
|
62
46
|
|
|
63
|
-
expect(raw_data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'type'])
|
|
64
|
-
expect(raw_data['keyword']).to eq('Scenario')
|
|
65
47
|
end
|
|
66
48
|
|
|
67
|
-
it 'contains only steps' do
|
|
68
|
-
steps = [:step_1, :step_2]
|
|
69
|
-
everything = steps
|
|
70
|
-
|
|
71
|
-
scenario.steps = steps
|
|
72
|
-
|
|
73
|
-
scenario.contains.should =~ everything
|
|
74
|
-
end
|
|
75
49
|
|
|
76
|
-
describe 'scenario output
|
|
50
|
+
describe 'scenario output' do
|
|
77
51
|
|
|
78
52
|
it 'is a String' do
|
|
79
|
-
scenario.to_s.
|
|
53
|
+
expect(scenario.to_s).to be_a(String)
|
|
80
54
|
end
|
|
81
55
|
|
|
82
56
|
|
|
83
|
-
context '
|
|
57
|
+
context 'from abstract instantiation' do
|
|
84
58
|
|
|
85
59
|
let(:scenario) { clazz.new }
|
|
86
60
|
|
|
@@ -96,13 +70,7 @@ describe 'Scenario, Unit' do
|
|
|
96
70
|
end
|
|
97
71
|
|
|
98
72
|
it 'can output a scenario that has only a description' do
|
|
99
|
-
scenario.
|
|
100
|
-
|
|
101
|
-
expect { scenario.to_s }.to_not raise_error
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it 'can output a scenario that has only tags' do
|
|
105
|
-
scenario.tags = ['a tag']
|
|
73
|
+
scenario.description = 'a description'
|
|
106
74
|
|
|
107
75
|
expect { scenario.to_s }.to_not raise_error
|
|
108
76
|
end
|