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,152 +1,99 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
SimpleCov.command_name('DocString') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
3
|
|
|
5
|
-
describe 'DocString, Unit' do
|
|
4
|
+
describe 'DocString, Unit', :unit_test => true do
|
|
6
5
|
|
|
7
6
|
let(:clazz) { CukeModeler::DocString }
|
|
8
7
|
let(:doc_string) { clazz.new }
|
|
9
8
|
|
|
10
9
|
describe 'common behavior' do
|
|
11
10
|
|
|
12
|
-
it_should_behave_like 'a
|
|
13
|
-
it_should_behave_like 'a
|
|
14
|
-
it_should_behave_like 'a
|
|
15
|
-
it_should_behave_like 'a raw element'
|
|
11
|
+
it_should_behave_like 'a model'
|
|
12
|
+
it_should_behave_like 'a parsed model'
|
|
13
|
+
it_should_behave_like 'a sourced model'
|
|
16
14
|
|
|
17
15
|
end
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
describe 'unique behavior' do
|
|
21
19
|
|
|
22
|
-
it 'can be parsed from stand alone text' do
|
|
23
|
-
source = "\"\"\"\nsome doc string\n\"\"\""
|
|
24
|
-
|
|
25
|
-
expect { @element = clazz.new(source) }.to_not raise_error
|
|
26
|
-
|
|
27
|
-
# Sanity check in case instantiation failed in a non-explosive manner
|
|
28
|
-
@element.contents_text.should == "some doc string"
|
|
29
|
-
#todo Remove once Array contents is no longer supported
|
|
30
|
-
@element.contents.should == ["some doc string"]
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it 'provides a descriptive filename when being parsed from stand alone text' do
|
|
34
|
-
source = 'bad doc string text'
|
|
35
|
-
|
|
36
|
-
expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_doc_string\.feature'/)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
|
|
40
|
-
doc_string = clazz.new("\"\"\"\nsome doc string\n\"\"\"")
|
|
41
|
-
raw_data = doc_string.raw_element
|
|
42
|
-
|
|
43
|
-
expect(raw_data.keys).to match_array([:type, :location, :content])
|
|
44
|
-
expect(raw_data[:type]).to eq(:DocString)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
|
|
48
|
-
doc_string = clazz.new("\"\"\"\nsome doc string\n\"\"\"")
|
|
49
|
-
raw_data = doc_string.raw_element
|
|
50
|
-
|
|
51
|
-
expect(raw_data.keys).to match_array([:type, :location, :content])
|
|
52
|
-
expect(raw_data[:type]).to eq(:DocString)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
|
|
56
|
-
doc_string = clazz.new("\"\"\"\nsome doc string\n\"\"\"")
|
|
57
|
-
raw_data = doc_string.raw_element
|
|
58
|
-
|
|
59
|
-
expect(raw_data.keys).to match_array(['value', 'content_type', 'line'])
|
|
60
|
-
expect(raw_data['value']).to eq('some doc string')
|
|
61
|
-
end
|
|
62
|
-
|
|
63
20
|
it 'has a content type' do
|
|
64
|
-
doc_string.
|
|
21
|
+
expect(doc_string).to respond_to(:content_type)
|
|
65
22
|
end
|
|
66
23
|
|
|
67
24
|
it 'can change its content type' do
|
|
68
25
|
expect(doc_string).to respond_to(:content_type=)
|
|
69
26
|
|
|
70
27
|
doc_string.content_type = :some_content_type
|
|
71
|
-
doc_string.content_type.
|
|
28
|
+
expect(doc_string.content_type).to eq(:some_content_type)
|
|
72
29
|
doc_string.content_type = :some_other_content_type
|
|
73
|
-
doc_string.content_type.
|
|
30
|
+
expect(doc_string.content_type).to eq(:some_other_content_type)
|
|
74
31
|
end
|
|
75
32
|
|
|
76
|
-
it '
|
|
77
|
-
doc_string.
|
|
33
|
+
it 'has content' do
|
|
34
|
+
expect(doc_string).to respond_to(:content)
|
|
78
35
|
end
|
|
79
36
|
|
|
80
|
-
it '
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
doc_string.
|
|
37
|
+
it 'can change its content' do
|
|
38
|
+
expect(doc_string).to respond_to(:content=)
|
|
39
|
+
|
|
40
|
+
doc_string.content = :some_content
|
|
41
|
+
expect(doc_string.content).to eq(:some_content)
|
|
42
|
+
doc_string.content = :some_other_content
|
|
43
|
+
expect(doc_string.content).to eq(:some_other_content)
|
|
84
44
|
end
|
|
85
45
|
|
|
86
|
-
it 'can get and set its contents' do
|
|
87
|
-
expect(doc_string).to respond_to(:contents=)
|
|
88
|
-
expect(doc_string).to respond_to(:contents_text=)
|
|
89
46
|
|
|
90
|
-
|
|
91
|
-
doc_string.contents = :some_contents
|
|
92
|
-
doc_string.contents.should == :some_contents
|
|
93
|
-
doc_string.contents = :some_other_contents
|
|
94
|
-
doc_string.contents.should == :some_other_contents
|
|
47
|
+
describe 'abstract instantiation' do
|
|
95
48
|
|
|
96
|
-
|
|
97
|
-
doc_string.contents_text.should == :some_contents
|
|
98
|
-
doc_string.contents_text = :some_other_contents
|
|
99
|
-
doc_string.contents_text.should == :some_other_contents
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it 'starts with no contents' do
|
|
103
|
-
#todo Remove once Array contents is no longer supported
|
|
104
|
-
doc_string.contents.should == []
|
|
105
|
-
doc_string.contents_text.should == ''
|
|
106
|
-
end
|
|
49
|
+
context 'a new doc string object' do
|
|
107
50
|
|
|
108
|
-
|
|
109
|
-
it 'stores its contents as an array of strings - deprecated' do
|
|
110
|
-
source = "\"\"\"\nsome text\nsome more text\n\"\"\""
|
|
111
|
-
doc_string = clazz.new(source)
|
|
51
|
+
let(:doc_string) { clazz.new }
|
|
112
52
|
|
|
113
|
-
contents = doc_string.contents
|
|
114
53
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
end
|
|
119
|
-
end
|
|
54
|
+
it 'starts with no content type' do
|
|
55
|
+
expect(doc_string.content_type).to be_nil
|
|
56
|
+
end
|
|
120
57
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
58
|
+
it 'starts with no content' do
|
|
59
|
+
expect(doc_string.content).to be_nil
|
|
60
|
+
end
|
|
124
61
|
|
|
125
|
-
|
|
62
|
+
end
|
|
126
63
|
|
|
127
|
-
contents.is_a?(String).should be_true
|
|
128
64
|
end
|
|
129
65
|
|
|
130
|
-
|
|
66
|
+
|
|
67
|
+
describe 'doc string output' do
|
|
131
68
|
|
|
132
69
|
it 'is a String' do
|
|
133
|
-
doc_string.to_s.
|
|
70
|
+
expect(doc_string.to_s).to be_a(String)
|
|
134
71
|
end
|
|
135
72
|
|
|
136
73
|
|
|
137
|
-
context '
|
|
74
|
+
context 'from abstract instantiation' do
|
|
138
75
|
|
|
139
|
-
|
|
76
|
+
context 'a new doc string object' do
|
|
140
77
|
|
|
78
|
+
let(:doc_string) { clazz.new }
|
|
141
79
|
|
|
142
|
-
it 'can output an empty doc string' do
|
|
143
|
-
expect { doc_string.to_s }.to_not raise_error
|
|
144
|
-
end
|
|
145
80
|
|
|
146
|
-
|
|
147
|
-
|
|
81
|
+
it 'can output an empty doc string' do
|
|
82
|
+
expect { doc_string.to_s }.to_not raise_error
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'can output a doc string that has only a content type' do
|
|
86
|
+
doc_string.content_type = 'some type'
|
|
87
|
+
|
|
88
|
+
expect { doc_string.to_s }.to_not raise_error
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'can output a doc string that has only content' do
|
|
92
|
+
doc_string.content = 'foo'
|
|
93
|
+
|
|
94
|
+
expect { doc_string.to_s }.to_not raise_error
|
|
95
|
+
end
|
|
148
96
|
|
|
149
|
-
expect { doc_string.to_s }.to_not raise_error
|
|
150
97
|
end
|
|
151
98
|
|
|
152
99
|
end
|
|
@@ -1,333 +1,107 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
SimpleCov.command_name('Example') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
3
|
|
|
5
|
-
describe 'Example, Unit' do
|
|
4
|
+
describe 'Example, Unit', :unit_test => true do
|
|
6
5
|
|
|
7
6
|
let(:clazz) { CukeModeler::Example }
|
|
8
7
|
let(:example) { clazz.new }
|
|
9
8
|
|
|
10
9
|
describe 'common behavior' do
|
|
11
10
|
|
|
12
|
-
it_should_behave_like 'a
|
|
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 containing element'
|
|
19
|
-
it_should_behave_like 'a raw element'
|
|
11
|
+
it_should_behave_like 'a model'
|
|
12
|
+
it_should_behave_like 'a named model'
|
|
13
|
+
it_should_behave_like 'a described model'
|
|
14
|
+
it_should_behave_like 'a tagged model'
|
|
15
|
+
it_should_behave_like 'a sourced model'
|
|
16
|
+
it_should_behave_like 'a parsed model'
|
|
20
17
|
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
|
|
24
21
|
describe 'unique behavior' do
|
|
25
22
|
|
|
26
|
-
it 'can be parsed from stand alone text' do
|
|
27
|
-
source = ['Examples: test example',
|
|
28
|
-
'|param| ',
|
|
29
|
-
'|value|']
|
|
30
|
-
|
|
31
|
-
source = source.join("\n")
|
|
32
|
-
|
|
33
|
-
expect { @element = clazz.new(source) }.to_not raise_error
|
|
34
|
-
|
|
35
|
-
# Sanity check in case instantiation failed in a non-explosive manner
|
|
36
|
-
@element.name.should == 'test example'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# todo - add more tests like this to the 'barebones' test set
|
|
40
|
-
it 'can be instantiated with the minimum viable Gherkin', :gherkin4 => true do
|
|
41
|
-
source = ['Examples:']
|
|
42
|
-
source = source.join("\n")
|
|
43
|
-
|
|
44
|
-
expect { @element = clazz.new(source) }.to_not raise_error
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# todo - add more tests like this to the 'barebones' test set
|
|
48
|
-
it 'can be instantiated with the minimum viable Gherkin', :gherkin3 => true do
|
|
49
|
-
source = ['Examples:',
|
|
50
|
-
'|param|',
|
|
51
|
-
'|value|']
|
|
52
|
-
source = source.join("\n")
|
|
53
|
-
|
|
54
|
-
expect { @element = clazz.new(source) }.to_not raise_error
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# todo - add more tests like this to the 'barebones' test set
|
|
58
|
-
it 'can be instantiated with the minimum viable Gherkin', :gherkin2 => true do
|
|
59
|
-
source = ['Examples:',
|
|
60
|
-
'|param|']
|
|
61
|
-
source = source.join("\n")
|
|
62
|
-
|
|
63
|
-
expect { @element = clazz.new(source) }.to_not raise_error
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it 'provides a descriptive filename when being parsed from stand alone text' do
|
|
67
|
-
source = 'bad example text'
|
|
68
|
-
|
|
69
|
-
expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_example\.feature'/)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
|
|
73
|
-
example = clazz.new("Examples: test example\n|param|\n|value|")
|
|
74
|
-
raw_data = example.raw_element
|
|
75
|
-
|
|
76
|
-
expect(raw_data.keys).to match_array([:type, :tags, :location, :keyword, :name, :tableHeader, :tableBody])
|
|
77
|
-
expect(raw_data[:type]).to eq(:Examples)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
|
|
81
|
-
example = clazz.new("Examples: test example\n|param|\n|value|")
|
|
82
|
-
raw_data = example.raw_element
|
|
83
|
-
|
|
84
|
-
expect(raw_data.keys).to match_array([:type, :tags, :location, :keyword, :name, :tableHeader, :tableBody])
|
|
85
|
-
expect(raw_data[:type]).to eq(:Examples)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
|
|
89
|
-
example = clazz.new("Examples: test example\n|param|\n|value|")
|
|
90
|
-
raw_data = example.raw_element
|
|
91
|
-
|
|
92
|
-
expect(raw_data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'rows'])
|
|
93
|
-
expect(raw_data['keyword']).to eq('Examples')
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it 'has parameters' do
|
|
97
|
-
example.should respond_to(:parameters)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it 'can change its parameters' do
|
|
101
|
-
expect(example).to respond_to(:parameters=)
|
|
102
|
-
|
|
103
|
-
example.parameters = :some_parameters
|
|
104
|
-
example.parameters.should == :some_parameters
|
|
105
|
-
example.parameters = :some_other_parameters
|
|
106
|
-
example.parameters.should == :some_other_parameters
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it 'starts with no parameters' do
|
|
110
|
-
example.parameters.should == []
|
|
111
|
-
end
|
|
112
|
-
|
|
113
23
|
it 'has rows' do
|
|
114
|
-
example.
|
|
24
|
+
expect(example).to respond_to(:rows)
|
|
115
25
|
end
|
|
116
26
|
|
|
117
|
-
#todo - remove once Hash rows are no longer supported
|
|
118
27
|
it 'can change its rows' do
|
|
119
28
|
expect(example).to respond_to(:rows=)
|
|
120
29
|
|
|
121
30
|
example.rows = :some_rows
|
|
122
|
-
example.rows.
|
|
31
|
+
expect(example.rows).to eq(:some_rows)
|
|
123
32
|
example.rows = :some_other_rows
|
|
124
|
-
example.rows.
|
|
33
|
+
expect(example.rows).to eq(:some_other_rows)
|
|
125
34
|
end
|
|
126
35
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
example.rows.should == []
|
|
36
|
+
it 'can selectively access its parameter row' do
|
|
37
|
+
expect(example).to respond_to(:parameter_row)
|
|
130
38
|
end
|
|
131
39
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
135
|
-
example = clazz.new(source)
|
|
136
|
-
|
|
137
|
-
rows = example.rows
|
|
138
|
-
|
|
139
|
-
rows.is_a?(Array).should be_true
|
|
140
|
-
rows.empty?.should be_false
|
|
141
|
-
rows.each { |row| row.is_a?(Hash).should be_true }
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it 'does not include the parameter row as a row' do
|
|
145
|
-
source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
|
|
146
|
-
example = clazz.new(source)
|
|
147
|
-
|
|
148
|
-
rows = example.rows
|
|
149
|
-
|
|
150
|
-
rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
|
|
40
|
+
it 'can selectively access its argument rows' do
|
|
41
|
+
expect(example).to respond_to(:argument_rows)
|
|
151
42
|
end
|
|
152
43
|
|
|
153
|
-
it '
|
|
154
|
-
example.
|
|
44
|
+
it 'can determine its parameters' do
|
|
45
|
+
expect(example).to respond_to(:parameters)
|
|
155
46
|
end
|
|
156
47
|
|
|
157
|
-
it 'can change its row elements' do
|
|
158
|
-
expect(example).to respond_to(:row_elements=)
|
|
159
|
-
|
|
160
|
-
example.row_elements = :some_row_elements
|
|
161
|
-
example.row_elements.should == :some_row_elements
|
|
162
|
-
example.row_elements = :some_other_row_elements
|
|
163
|
-
example.row_elements.should == :some_other_row_elements
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it 'starts with no row elements' do
|
|
167
|
-
example.row_elements.should == []
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
describe '#add_row' do
|
|
171
|
-
|
|
172
|
-
it 'can add a new example row' do
|
|
173
|
-
clazz.new.should respond_to(:add_row)
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it 'can add a new row as a hash, string values' do
|
|
177
|
-
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
178
|
-
example = clazz.new(source)
|
|
179
|
-
|
|
180
|
-
new_row = {'param1' => 'value3', 'param2' => 'value4'}
|
|
181
|
-
example.add_row(new_row)
|
|
182
|
-
|
|
183
|
-
#todo - remove once Hash rows are no longer supported
|
|
184
|
-
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
|
|
185
|
-
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4']]
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
it 'can add a new row as a hash, non-string values' do
|
|
189
|
-
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
190
|
-
example = clazz.new(source)
|
|
191
48
|
|
|
192
|
-
|
|
193
|
-
example.add_row(new_row)
|
|
49
|
+
describe 'abstract instantiation' do
|
|
194
50
|
|
|
195
|
-
|
|
196
|
-
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => '4'}]
|
|
197
|
-
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', '4']]
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
it 'can add a new row as an array, string values' do
|
|
201
|
-
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
202
|
-
example = clazz.new(source)
|
|
203
|
-
|
|
204
|
-
new_row = ['value3', 'value4']
|
|
205
|
-
example.add_row(new_row)
|
|
206
|
-
|
|
207
|
-
#todo - remove once Hash rows are no longer supported
|
|
208
|
-
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
|
|
209
|
-
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4']]
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
it 'can add a new row as an array, non-string values' do
|
|
213
|
-
source = "Examples:\n|param1|param2|param3|\n|value1|value2|value3|"
|
|
214
|
-
example = clazz.new(source)
|
|
215
|
-
|
|
216
|
-
new_row = [:value4, 5, 'value6']
|
|
217
|
-
example.add_row(new_row)
|
|
218
|
-
|
|
219
|
-
#todo - remove once Hash rows are no longer supported
|
|
220
|
-
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2', 'param3' => 'value3'}, {'param1' => 'value4', 'param2' => '5', 'param3' => 'value6'}]
|
|
221
|
-
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2', 'value3'], ['value4', '5', 'value6']]
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
it 'can only use a Hash or an Array to add a new row' do
|
|
225
|
-
source = "Examples:\n|param|\n|value|"
|
|
226
|
-
example = clazz.new(source)
|
|
227
|
-
|
|
228
|
-
expect { example.add_row({}) }.to_not raise_error
|
|
229
|
-
expect { example.add_row([]) }.to_not raise_error
|
|
230
|
-
expect { example.add_row(:a_row) }.to raise_error(ArgumentError)
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
it 'trims whitespace from added rows' do
|
|
234
|
-
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
235
|
-
example = clazz.new(source)
|
|
236
|
-
|
|
237
|
-
hash_row = {'param1' => 'value3 ', 'param2' => ' value4'}
|
|
238
|
-
array_row = ['value5', ' value6 ']
|
|
239
|
-
example.add_row(hash_row)
|
|
240
|
-
example.add_row(array_row)
|
|
51
|
+
context 'a new example object' do
|
|
241
52
|
|
|
242
|
-
|
|
243
|
-
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}, {'param1' => 'value5', 'param2' => 'value6'}]
|
|
244
|
-
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4'], ['value5', 'value6']]
|
|
245
|
-
end
|
|
53
|
+
let(:example) { clazz.new }
|
|
246
54
|
|
|
247
|
-
#todo - remove once Hash rows are no longer supported
|
|
248
|
-
it 'will complain if a row is added and no parameters have been set' do
|
|
249
|
-
example = clazz.new
|
|
250
|
-
example.parameters = []
|
|
251
55
|
|
|
252
|
-
|
|
253
|
-
|
|
56
|
+
it 'starts with no rows' do
|
|
57
|
+
expect(example.rows).to eq([])
|
|
58
|
+
end
|
|
254
59
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
60
|
+
it 'starts with no argument rows' do
|
|
61
|
+
expect(example.argument_rows).to eq([])
|
|
62
|
+
end
|
|
258
63
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
example = clazz.new(source)
|
|
64
|
+
it 'starts with no parameter row' do
|
|
65
|
+
expect(example.parameter_row).to be_nil
|
|
66
|
+
end
|
|
263
67
|
|
|
264
|
-
|
|
265
|
-
|
|
68
|
+
it 'starts with no parameters' do
|
|
69
|
+
expect(example.parameters).to eq([])
|
|
70
|
+
end
|
|
266
71
|
|
|
267
|
-
new_row = {'param1'.freeze => 'value1'.freeze, 'param2'.freeze => 'value2'.freeze}.freeze
|
|
268
|
-
expect { example.add_row(new_row) }.to_not raise_error
|
|
269
72
|
end
|
|
270
73
|
|
|
271
74
|
end
|
|
272
75
|
|
|
273
|
-
describe '#remove_row' do
|
|
274
|
-
|
|
275
|
-
it 'can remove an existing example row' do
|
|
276
|
-
clazz.new.should respond_to(:remove_row)
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
it 'can remove an existing row as a hash' do
|
|
280
|
-
source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
|
|
281
|
-
example = clazz.new(source)
|
|
282
76
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
#todo - remove once Hash rows are no longer supported
|
|
287
|
-
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
|
|
288
|
-
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
it 'can remove an existing row as an array' do
|
|
292
|
-
source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
|
|
293
|
-
example = clazz.new(source)
|
|
294
|
-
|
|
295
|
-
old_row = ['value3', 'value4']
|
|
296
|
-
example.remove_row(old_row)
|
|
297
|
-
|
|
298
|
-
#todo - remove once Hash rows are no longer supported
|
|
299
|
-
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
|
|
300
|
-
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
|
|
301
|
-
end
|
|
77
|
+
it 'can add a new example row' do
|
|
78
|
+
expect(clazz.new).to respond_to(:add_row)
|
|
79
|
+
end
|
|
302
80
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
expect { example.remove_row(:a_row) }.to raise_error(ArgumentError)
|
|
307
|
-
end
|
|
81
|
+
it 'can remove an existing example row' do
|
|
82
|
+
expect(clazz.new).to respond_to(:remove_row)
|
|
83
|
+
end
|
|
308
84
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
85
|
+
it 'contains rows and tags' do
|
|
86
|
+
tags = [:tag_1, :tag_2]
|
|
87
|
+
rows = [:row_1, :row_2]
|
|
88
|
+
everything = rows + tags
|
|
312
89
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
example.remove_row(hash_row)
|
|
316
|
-
example.remove_row(array_row)
|
|
90
|
+
example.rows = rows
|
|
91
|
+
example.tags = tags
|
|
317
92
|
|
|
318
|
-
|
|
319
|
-
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
|
|
320
|
-
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
|
|
321
|
-
end
|
|
93
|
+
expect(example.children).to match_array(everything)
|
|
322
94
|
end
|
|
323
95
|
|
|
324
|
-
|
|
96
|
+
|
|
97
|
+
describe 'example output' do
|
|
325
98
|
|
|
326
99
|
it 'is a String' do
|
|
327
|
-
example.to_s.
|
|
100
|
+
expect(example.to_s).to be_a(String)
|
|
328
101
|
end
|
|
329
102
|
|
|
330
|
-
|
|
103
|
+
|
|
104
|
+
context 'from abstract instantiation' do
|
|
331
105
|
|
|
332
106
|
let(:example) { clazz.new }
|
|
333
107
|
|
|
@@ -343,27 +117,7 @@ describe 'Example, Unit' do
|
|
|
343
117
|
end
|
|
344
118
|
|
|
345
119
|
it 'can output an example that has only a description' do
|
|
346
|
-
example.
|
|
347
|
-
|
|
348
|
-
expect { example.to_s }.to_not raise_error
|
|
349
|
-
end
|
|
350
|
-
|
|
351
|
-
it 'can output an example that has only tags' do
|
|
352
|
-
example.tags = ['a tag']
|
|
353
|
-
|
|
354
|
-
expect { example.to_s }.to_not raise_error
|
|
355
|
-
end
|
|
356
|
-
|
|
357
|
-
#todo - remove once Hash rows are no longer supported
|
|
358
|
-
it 'can output an example that only has parameters' do
|
|
359
|
-
example.parameters = ['param1']
|
|
360
|
-
|
|
361
|
-
expect { example.to_s }.to_not raise_error
|
|
362
|
-
end
|
|
363
|
-
|
|
364
|
-
#todo - remove once Hash rows are no longer supported
|
|
365
|
-
it 'can output an example that only has rows' do
|
|
366
|
-
example.rows = [{:param1 => 'row1'}]
|
|
120
|
+
example.description = 'a description'
|
|
367
121
|
|
|
368
122
|
expect { example.to_s }.to_not raise_error
|
|
369
123
|
end
|