cuke_modeler 0.0.1
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 +7 -0
- data/.gitignore +17 -0
- data/.simplecov +8 -0
- data/Gemfile +4 -0
- data/History.rdoc +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +73 -0
- data/Rakefile +38 -0
- data/cuke_modeler.gemspec +29 -0
- data/features/analysis/test_comparison.feature +123 -0
- data/features/analysis/test_manipulation.feature +37 -0
- data/features/modeling/background_modeling.feature +75 -0
- data/features/modeling/background_output.feature +130 -0
- data/features/modeling/directory_modeling.feature +120 -0
- data/features/modeling/directory_output.feature +13 -0
- data/features/modeling/doc_string_modeling.feature +63 -0
- data/features/modeling/doc_string_output.feature +71 -0
- data/features/modeling/example_modeling.feature +111 -0
- data/features/modeling/example_output.feature +192 -0
- data/features/modeling/feature_file_modeling.feature +64 -0
- data/features/modeling/feature_file_output.feature +13 -0
- data/features/modeling/feature_modeling.feature +164 -0
- data/features/modeling/feature_output.feature +244 -0
- data/features/modeling/outline_modeling.feature +100 -0
- data/features/modeling/outline_output.feature +197 -0
- data/features/modeling/row_modeling.feature +77 -0
- data/features/modeling/row_output.feature +27 -0
- data/features/modeling/scenario_modeling.feature +89 -0
- data/features/modeling/scenario_output.feature +147 -0
- data/features/modeling/step_modeling.feature +85 -0
- data/features/modeling/step_output.feature +52 -0
- data/features/modeling/table_modeling.feature +52 -0
- data/features/modeling/table_output.feature +42 -0
- data/features/modeling/table_row_modeling.feature +67 -0
- data/features/modeling/table_row_output.feature +27 -0
- data/features/modeling/tag_modeling.feature +58 -0
- data/features/modeling/tag_output.feature +16 -0
- data/features/step_definitions/action_steps.rb +3 -0
- data/features/step_definitions/background_steps.rb +81 -0
- data/features/step_definitions/directory_steps.rb +52 -0
- data/features/step_definitions/doc_string_steps.rb +63 -0
- data/features/step_definitions/feature_file_steps.rb +41 -0
- data/features/step_definitions/feature_steps.rb +96 -0
- data/features/step_definitions/outline_steps.rb +252 -0
- data/features/step_definitions/setup_steps.rb +50 -0
- data/features/step_definitions/spec_steps.rb +18 -0
- data/features/step_definitions/step_steps.rb +159 -0
- data/features/step_definitions/table_steps.rb +54 -0
- data/features/step_definitions/tag_steps.rb +61 -0
- data/features/step_definitions/test_steps.rb +114 -0
- data/features/step_definitions/verification_steps.rb +9 -0
- data/features/support/env.rb +27 -0
- data/features/support/transforms.rb +3 -0
- data/lib/cuke_modeler.rb +29 -0
- data/lib/cuke_modeler/background.rb +38 -0
- data/lib/cuke_modeler/containing.rb +18 -0
- data/lib/cuke_modeler/directory.rb +86 -0
- data/lib/cuke_modeler/doc_string.rb +87 -0
- data/lib/cuke_modeler/example.rb +184 -0
- data/lib/cuke_modeler/feature.rb +147 -0
- data/lib/cuke_modeler/feature_element.rb +73 -0
- data/lib/cuke_modeler/feature_file.rb +77 -0
- data/lib/cuke_modeler/nested.rb +34 -0
- data/lib/cuke_modeler/outline.rb +68 -0
- data/lib/cuke_modeler/parsing.rb +32 -0
- data/lib/cuke_modeler/raw.rb +20 -0
- data/lib/cuke_modeler/row.rb +64 -0
- data/lib/cuke_modeler/scenario.rb +45 -0
- data/lib/cuke_modeler/sourceable.rb +20 -0
- data/lib/cuke_modeler/step.rb +214 -0
- data/lib/cuke_modeler/table.rb +90 -0
- data/lib/cuke_modeler/table_row.rb +64 -0
- data/lib/cuke_modeler/tag.rb +62 -0
- data/lib/cuke_modeler/taggable.rb +54 -0
- data/lib/cuke_modeler/test_element.rb +77 -0
- data/lib/cuke_modeler/version.rb +3 -0
- data/lib/cuke_modeler/world.rb +113 -0
- data/spec/integration/background_integration_spec.rb +72 -0
- data/spec/integration/directory_integration_spec.rb +48 -0
- data/spec/integration/doc_string_integration_spec.rb +66 -0
- data/spec/integration/example_integration_spec.rb +94 -0
- data/spec/integration/feature_file_integration_spec.rb +44 -0
- data/spec/integration/feature_integration_spec.rb +152 -0
- data/spec/integration/outline_integration_spec.rb +92 -0
- data/spec/integration/scenario_integration_spec.rb +80 -0
- data/spec/integration/step_integration_spec.rb +184 -0
- data/spec/integration/table_integration_spec.rb +86 -0
- data/spec/integration/table_row_integration_spec.rb +68 -0
- data/spec/integration/tag_integration_spec.rb +67 -0
- data/spec/integration/world_integration_spec.rb +13 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/unit/background_unit_spec.rb +55 -0
- data/spec/unit/bare_bones_unit_specs.rb +13 -0
- data/spec/unit/containing_element_unit_specs.rb +17 -0
- data/spec/unit/directory_unit_spec.rb +103 -0
- data/spec/unit/doc_string_unit_spec.rb +109 -0
- data/spec/unit/example_unit_spec.rb +251 -0
- data/spec/unit/feature_element_unit_spec.rb +19 -0
- data/spec/unit/feature_element_unit_specs.rb +46 -0
- data/spec/unit/feature_file_unit_spec.rb +94 -0
- data/spec/unit/feature_unit_spec.rb +135 -0
- data/spec/unit/nested_element_unit_specs.rb +36 -0
- data/spec/unit/nested_unit_spec.rb +37 -0
- data/spec/unit/outline_unit_spec.rb +91 -0
- data/spec/unit/parsing_unit_spec.rb +21 -0
- data/spec/unit/prepopulated_unit_specs.rb +13 -0
- data/spec/unit/raw_element_unit_specs.rb +24 -0
- data/spec/unit/raw_unit_spec.rb +25 -0
- data/spec/unit/row_unit_spec.rb +55 -0
- data/spec/unit/scenario_unit_spec.rb +71 -0
- data/spec/unit/sourceable_unit_spec.rb +17 -0
- data/spec/unit/sourced_element_unit_specs.rb +18 -0
- data/spec/unit/step_unit_spec.rb +259 -0
- data/spec/unit/table_row_unit_spec.rb +55 -0
- data/spec/unit/table_unit_spec.rb +96 -0
- data/spec/unit/tag_unit_spec.rb +51 -0
- data/spec/unit/taggable_unit_spec.rb +78 -0
- data/spec/unit/tagged_element_unit_specs.rb +63 -0
- data/spec/unit/test_element_unit_spec.rb +40 -0
- data/spec/unit/test_element_unit_specs.rb +31 -0
- data/spec/unit/world_unit_spec.rb +130 -0
- metadata +364 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
SimpleCov.command_name('Tag') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
|
+
|
|
5
|
+
describe 'Tag, Integration' do
|
|
6
|
+
|
|
7
|
+
context 'getting stuff' do
|
|
8
|
+
|
|
9
|
+
before(:each) do
|
|
10
|
+
source = ['@feature_tag',
|
|
11
|
+
'Feature: Test feature',
|
|
12
|
+
'',
|
|
13
|
+
' Scenario Outline: Test test',
|
|
14
|
+
' * a step',
|
|
15
|
+
'',
|
|
16
|
+
' @example_tag',
|
|
17
|
+
' Examples: Test example',
|
|
18
|
+
' | a param |']
|
|
19
|
+
source = source.join("\n")
|
|
20
|
+
|
|
21
|
+
file_path = "#{@default_file_directory}/tag_test_file.feature"
|
|
22
|
+
File.open(file_path, 'w') { |file| file.write(source) }
|
|
23
|
+
|
|
24
|
+
@directory = CukeModeler::Directory.new(@default_file_directory)
|
|
25
|
+
@tag = @directory.feature_files.first.features.first.tests.first.examples.first.tag_elements.first
|
|
26
|
+
@high_level_tag = @directory.feature_files.first.features.first.tag_elements.first
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
it 'can get its directory' do
|
|
31
|
+
directory = @tag.get_ancestor(:directory)
|
|
32
|
+
|
|
33
|
+
directory.should equal @directory
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'can get its feature file' do
|
|
37
|
+
feature_file = @tag.get_ancestor(:feature_file)
|
|
38
|
+
|
|
39
|
+
feature_file.should equal @directory.feature_files.first
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'can get its feature' do
|
|
43
|
+
feature = @tag.get_ancestor(:feature)
|
|
44
|
+
|
|
45
|
+
feature.should equal @directory.feature_files.first.features.first
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'can get its test' do
|
|
49
|
+
test = @tag.get_ancestor(:test)
|
|
50
|
+
|
|
51
|
+
test.should equal @directory.feature_files.first.features.first.tests.first
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'can get its example' do
|
|
55
|
+
example = @tag.get_ancestor(:example)
|
|
56
|
+
|
|
57
|
+
example.should equal @directory.feature_files.first.features.first.tests.first.examples.first
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'returns nil if it does not have the requested type of ancestor' do
|
|
61
|
+
example = @high_level_tag.get_ancestor(:example)
|
|
62
|
+
|
|
63
|
+
example.should be_nil
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
SimpleCov.command_name('World') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
|
+
|
|
5
|
+
describe 'World, Integration' do
|
|
6
|
+
|
|
7
|
+
before(:each) do
|
|
8
|
+
@world = CukeModeler::World
|
|
9
|
+
@world.loaded_step_patterns.clear
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Nothing left to do here for now.
|
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'simplecov' unless RUBY_VERSION.to_s < '1.9.0'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
require "#{File.dirname(__FILE__)}/../lib/cuke_modeler"
|
|
5
|
+
|
|
6
|
+
require "#{File.dirname(__FILE__)}/unit/feature_element_unit_specs"
|
|
7
|
+
require "#{File.dirname(__FILE__)}/unit/nested_element_unit_specs"
|
|
8
|
+
require "#{File.dirname(__FILE__)}/unit/tagged_element_unit_specs"
|
|
9
|
+
require "#{File.dirname(__FILE__)}/unit/containing_element_unit_specs"
|
|
10
|
+
require "#{File.dirname(__FILE__)}/unit/bare_bones_unit_specs"
|
|
11
|
+
require "#{File.dirname(__FILE__)}/unit/test_element_unit_specs"
|
|
12
|
+
require "#{File.dirname(__FILE__)}/unit/prepopulated_unit_specs"
|
|
13
|
+
require "#{File.dirname(__FILE__)}/unit/sourced_element_unit_specs"
|
|
14
|
+
require "#{File.dirname(__FILE__)}/unit/raw_element_unit_specs"
|
|
15
|
+
|
|
16
|
+
RSpec.configure do |config|
|
|
17
|
+
config.before(:all) do
|
|
18
|
+
@default_file_directory = "#{File.dirname(__FILE__)}/temp_files"
|
|
19
|
+
@default_feature_file_name = 'test_feature.feature'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
config.before(:each) do
|
|
23
|
+
FileUtils.mkdir(@default_file_directory)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
config.after(:each) do
|
|
27
|
+
FileUtils.remove_dir(@default_file_directory, true)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
SimpleCov.command_name('Background') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
|
+
|
|
5
|
+
describe 'Background, Unit' do
|
|
6
|
+
|
|
7
|
+
clazz = CukeModeler::Background
|
|
8
|
+
|
|
9
|
+
it_should_behave_like 'a feature element', clazz
|
|
10
|
+
it_should_behave_like 'a nested element', clazz
|
|
11
|
+
it_should_behave_like 'a containing element', clazz
|
|
12
|
+
it_should_behave_like 'a bare bones element', clazz
|
|
13
|
+
it_should_behave_like 'a prepopulated element', clazz
|
|
14
|
+
it_should_behave_like 'a test element', clazz
|
|
15
|
+
it_should_behave_like 'a sourced element', clazz
|
|
16
|
+
it_should_behave_like 'a raw element', clazz
|
|
17
|
+
|
|
18
|
+
it 'can be parsed from stand alone text' do
|
|
19
|
+
source = 'Background: test background'
|
|
20
|
+
|
|
21
|
+
expect { @element = clazz.new(source) }.to_not raise_error
|
|
22
|
+
|
|
23
|
+
# Sanity check in case instantiation failed in a non-explosive manner
|
|
24
|
+
@element.name.should == 'test background'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'background output edge cases' do
|
|
28
|
+
|
|
29
|
+
before(:each) do
|
|
30
|
+
@background = clazz.new
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'is a String' do
|
|
34
|
+
@background.to_s.should be_a(String)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'can output an empty background' do
|
|
38
|
+
expect { @background.to_s }.to_not raise_error
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'can output a background that has only a name' do
|
|
42
|
+
@background.name = 'a name'
|
|
43
|
+
|
|
44
|
+
expect { @background.to_s }.to_not raise_error
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'can output a background that has only a description' do
|
|
48
|
+
@background.description_text = 'a description'
|
|
49
|
+
|
|
50
|
+
expect { @background.to_s }.to_not raise_error
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
shared_examples_for 'a containing element' do |clazz|
|
|
4
|
+
|
|
5
|
+
before(:each) do
|
|
6
|
+
@element = clazz.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it 'has children - #contains' do
|
|
10
|
+
@element.should respond_to(:contains)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'returns a collection of children - #contains' do
|
|
14
|
+
@element.contains.is_a?(Array).should be_true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
SimpleCov.command_name('Directory') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
|
+
|
|
5
|
+
describe 'Directory, Unit' do
|
|
6
|
+
|
|
7
|
+
clazz = CukeModeler::Directory
|
|
8
|
+
|
|
9
|
+
it_should_behave_like 'a nested element', clazz
|
|
10
|
+
it_should_behave_like 'a containing element', clazz
|
|
11
|
+
it_should_behave_like 'a bare bones element', clazz
|
|
12
|
+
it_should_behave_like 'a prepopulated element', clazz
|
|
13
|
+
|
|
14
|
+
before(:each) do
|
|
15
|
+
@directory = clazz.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'cannot model a non-existent directory' do
|
|
19
|
+
path = "#{@default_file_directory}/missing_directory"
|
|
20
|
+
|
|
21
|
+
expect { CukeModeler::Directory.new(path) }.to raise_error(ArgumentError)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'knows the name of the directory that it is modeling' do
|
|
25
|
+
path = "#{@default_file_directory}"
|
|
26
|
+
|
|
27
|
+
directory = CukeModeler::Directory.new(path)
|
|
28
|
+
|
|
29
|
+
directory.name.should == 'temp_files'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'knows the path of the directory that it is modeling' do
|
|
33
|
+
path = "#{@default_file_directory}"
|
|
34
|
+
|
|
35
|
+
directory = CukeModeler::Directory.new(path)
|
|
36
|
+
|
|
37
|
+
directory.path.should == path
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'has feature files - #feature_files' do
|
|
41
|
+
@directory.should respond_to(:feature_files)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'can get and set its feature files - #feature_files, #feature_files=' do
|
|
45
|
+
@directory.feature_files = :some_feature_files
|
|
46
|
+
@directory.feature_files.should == :some_feature_files
|
|
47
|
+
@directory.feature_files = :some_other_feature_files
|
|
48
|
+
@directory.feature_files.should == :some_other_feature_files
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'knows how many feature files it has - #feature_file_count' do
|
|
52
|
+
@directory.feature_files = [:file_1, :file_2, :file_3]
|
|
53
|
+
|
|
54
|
+
@directory.feature_file_count.should == 3
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'has directories - #directories' do
|
|
58
|
+
@directory.should respond_to(:directories)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'can get and set its directories - #directories, #directories=' do
|
|
62
|
+
@directory.directories = :some_directories
|
|
63
|
+
@directory.directories.should == :some_directories
|
|
64
|
+
@directory.directories = :some_other_directories
|
|
65
|
+
@directory.directories.should == :some_other_directories
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'knows how many directories it has - #directory_count' do
|
|
69
|
+
@directory.directories = [:directory_1, :directory_2, :directory_3]
|
|
70
|
+
|
|
71
|
+
@directory.directory_count.should == 3
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'starts with no feature files or directories' do
|
|
75
|
+
@directory.feature_files.should == []
|
|
76
|
+
@directory.directories.should == []
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'contains feature files and directories' do
|
|
80
|
+
directories = [:directory_1, :directory_2, :directory_3]
|
|
81
|
+
files = [:file_1, :file_2, :file_3]
|
|
82
|
+
everything = files + directories
|
|
83
|
+
|
|
84
|
+
@directory.directories = directories
|
|
85
|
+
@directory.feature_files = files
|
|
86
|
+
|
|
87
|
+
@directory.contains.should =~ everything
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
context 'directory output edge cases' do
|
|
91
|
+
|
|
92
|
+
it 'is a String' do
|
|
93
|
+
@directory.to_s.should be_a(String)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'can output an empty directory' do
|
|
97
|
+
expect { @directory.to_s }.to_not raise_error
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
SimpleCov.command_name('DocString') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
|
+
|
|
5
|
+
describe 'DocString, Unit' do
|
|
6
|
+
|
|
7
|
+
clazz = CukeModeler::DocString
|
|
8
|
+
|
|
9
|
+
it_should_behave_like 'a nested element', clazz
|
|
10
|
+
it_should_behave_like 'a bare bones element', clazz
|
|
11
|
+
it_should_behave_like 'a prepopulated element', clazz
|
|
12
|
+
it_should_behave_like 'a raw element', clazz
|
|
13
|
+
|
|
14
|
+
it 'can be parsed from stand alone text' do
|
|
15
|
+
source = "\"\"\"\nsome doc string\n\"\"\""
|
|
16
|
+
|
|
17
|
+
expect { @element = clazz.new(source) }.to_not raise_error
|
|
18
|
+
|
|
19
|
+
# Sanity check in case instantiation failed in a non-explosive manner
|
|
20
|
+
@element.contents_text.should == "some doc string"
|
|
21
|
+
#todo Remove once Array contents is no longer supported
|
|
22
|
+
@element.contents.should == ["some doc string"]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
before(:each) do
|
|
26
|
+
@doc_string = clazz.new
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'has a content type - #content_type' do
|
|
30
|
+
@doc_string.should respond_to(:content_type)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'can get and set its content type - #content_type, #content_type=' do
|
|
34
|
+
@doc_string.content_type = :some_content_type
|
|
35
|
+
@doc_string.content_type.should == :some_content_type
|
|
36
|
+
@doc_string.content_type = :some_other_content_type
|
|
37
|
+
@doc_string.content_type.should == :some_other_content_type
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'starts with no content type' do
|
|
41
|
+
@doc_string.content_type.should == nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'has contents' do
|
|
45
|
+
#todo Remove once Array contents is no longer supported
|
|
46
|
+
@doc_string.should respond_to(:contents)
|
|
47
|
+
@doc_string.should respond_to(:contents_text)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'can get and set its contents' do
|
|
51
|
+
#todo Remove once Array contents is no longer supported
|
|
52
|
+
@doc_string.contents = :some_contents
|
|
53
|
+
@doc_string.contents.should == :some_contents
|
|
54
|
+
@doc_string.contents = :some_other_contents
|
|
55
|
+
@doc_string.contents.should == :some_other_contents
|
|
56
|
+
|
|
57
|
+
@doc_string.contents_text = :some_contents
|
|
58
|
+
@doc_string.contents_text.should == :some_contents
|
|
59
|
+
@doc_string.contents_text = :some_other_contents
|
|
60
|
+
@doc_string.contents_text.should == :some_other_contents
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'starts with no contents' do
|
|
64
|
+
#todo Remove once Array contents is no longer supported
|
|
65
|
+
@doc_string.contents.should == []
|
|
66
|
+
@doc_string.contents_text.should == ''
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
#todo Remove once Array contents is no longer supported
|
|
70
|
+
it 'stores its contents as an array of strings - deprecated' do
|
|
71
|
+
source = "\"\"\"\nsome text\nsome more text\n\"\"\""
|
|
72
|
+
doc_string = CukeModeler::DocString.new(source)
|
|
73
|
+
|
|
74
|
+
contents = doc_string.contents
|
|
75
|
+
|
|
76
|
+
contents.is_a?(Array).should be_true
|
|
77
|
+
contents.each do |line|
|
|
78
|
+
line.is_a?(String).should be_true
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'stores its contents as a String' do
|
|
83
|
+
source = "\"\"\"\nsome text\nsome more text\n\"\"\""
|
|
84
|
+
doc_string = clazz.new(source)
|
|
85
|
+
|
|
86
|
+
contents = doc_string.contents_text
|
|
87
|
+
|
|
88
|
+
contents.is_a?(String).should be_true
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context 'doc string output edge cases' do
|
|
92
|
+
|
|
93
|
+
it 'is a String' do
|
|
94
|
+
@doc_string.to_s.should be_a(String)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'can output an empty doc string' do
|
|
98
|
+
expect { @doc_string.to_s }.to_not raise_error
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'can output a doc string that has only a content type' do
|
|
102
|
+
@doc_string.content_type = 'some type'
|
|
103
|
+
|
|
104
|
+
expect { @doc_string.to_s }.to_not raise_error
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
SimpleCov.command_name('Example') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
|
+
|
|
5
|
+
describe 'Example, Unit' do
|
|
6
|
+
|
|
7
|
+
clazz = CukeModeler::Example
|
|
8
|
+
|
|
9
|
+
it_should_behave_like 'a feature element', clazz
|
|
10
|
+
it_should_behave_like 'a nested element', clazz
|
|
11
|
+
it_should_behave_like 'a tagged element', clazz
|
|
12
|
+
it_should_behave_like 'a bare bones element', clazz
|
|
13
|
+
it_should_behave_like 'a prepopulated element', clazz
|
|
14
|
+
it_should_behave_like 'a sourced element', clazz
|
|
15
|
+
it_should_behave_like 'a containing element', clazz
|
|
16
|
+
it_should_behave_like 'a raw element', clazz
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
it 'can be parsed from stand alone text' do
|
|
20
|
+
source = ['Examples: test example',
|
|
21
|
+
'|param| ']
|
|
22
|
+
|
|
23
|
+
source = source.join("\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.name.should == 'test example'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
before(:each) do
|
|
33
|
+
@example = clazz.new
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
it 'has parameters - #parameters' do
|
|
38
|
+
@example.should respond_to(:parameters)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'can get and set its parameters - #parameters, #parameters=' do
|
|
42
|
+
@example.parameters = :some_parameters
|
|
43
|
+
@example.parameters.should == :some_parameters
|
|
44
|
+
@example.parameters = :some_other_parameters
|
|
45
|
+
@example.parameters.should == :some_other_parameters
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'starts with no parameters' do
|
|
49
|
+
@example.parameters.should == []
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'has rows - #rows' do
|
|
53
|
+
@example.should respond_to(:rows)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#todo - remove once Hash rows are no longer supported
|
|
57
|
+
it 'can get and set its rows - #rows, #rows=' do
|
|
58
|
+
@example.rows = :some_rows
|
|
59
|
+
@example.rows.should == :some_rows
|
|
60
|
+
@example.rows = :some_other_rows
|
|
61
|
+
@example.rows.should == :some_other_rows
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
#todo - remove once Hash rows are no longer supported
|
|
65
|
+
it 'starts with no rows' do
|
|
66
|
+
@example.rows.should == []
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
#todo - remove once Hash rows are no longer supported
|
|
70
|
+
it 'stores its rows as an nested array of hashes' do
|
|
71
|
+
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
72
|
+
example = CukeModeler::Example.new(source)
|
|
73
|
+
|
|
74
|
+
rows = example.rows
|
|
75
|
+
|
|
76
|
+
rows.is_a?(Array).should be_true
|
|
77
|
+
rows.empty?.should be_false
|
|
78
|
+
rows.each { |row| row.is_a?(Hash).should be_true }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'does not include the parameter row as a row' do
|
|
82
|
+
source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
|
|
83
|
+
example = CukeModeler::Example.new(source)
|
|
84
|
+
|
|
85
|
+
rows = example.rows
|
|
86
|
+
|
|
87
|
+
rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'has row elements - #row_elements' do
|
|
91
|
+
@example.should respond_to(:row_elements)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'can get and set its row elements - #row_elements, #row_elements=' do
|
|
95
|
+
@example.row_elements = :some_row_elements
|
|
96
|
+
@example.row_elements.should == :some_row_elements
|
|
97
|
+
@example.row_elements = :some_other_row_elements
|
|
98
|
+
@example.row_elements.should == :some_other_row_elements
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'starts with no row elements' do
|
|
102
|
+
@example.row_elements.should == []
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context '#add_row' do
|
|
106
|
+
|
|
107
|
+
it 'can add a new example row' do
|
|
108
|
+
clazz.new.should respond_to(:add_row)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'can add a new row as a hash' do
|
|
112
|
+
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
113
|
+
example = CukeModeler::Example.new(source)
|
|
114
|
+
|
|
115
|
+
new_row = {'param1' => 'value3', 'param2' => 'value4'}
|
|
116
|
+
example.add_row(new_row)
|
|
117
|
+
|
|
118
|
+
#todo - remove once Hash rows are no longer supported
|
|
119
|
+
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
|
|
120
|
+
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4']]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it 'can add a new row as an array' do
|
|
124
|
+
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
125
|
+
example = CukeModeler::Example.new(source)
|
|
126
|
+
|
|
127
|
+
new_row = ['value3', 'value4']
|
|
128
|
+
example.add_row(new_row)
|
|
129
|
+
|
|
130
|
+
#todo - remove once Hash rows are no longer supported
|
|
131
|
+
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
|
|
132
|
+
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4']]
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it 'can only use a Hash or an Array to add a new row' do
|
|
136
|
+
expect { @example.add_row({}) }.to_not raise_error
|
|
137
|
+
expect { @example.add_row([]) }.to_not raise_error
|
|
138
|
+
expect { @example.add_row(:a_row) }.to raise_error(ArgumentError)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it 'trims whitespace from added rows' do
|
|
142
|
+
source = "Examples:\n|param1|param2|\n|value1|value2|"
|
|
143
|
+
example = CukeModeler::Example.new(source)
|
|
144
|
+
|
|
145
|
+
hash_row = {'param1' => 'value3 ', 'param2' => ' value4'}
|
|
146
|
+
array_row = ['value5', ' value6 ']
|
|
147
|
+
example.add_row(hash_row)
|
|
148
|
+
example.add_row(array_row)
|
|
149
|
+
|
|
150
|
+
#todo - remove once Hash rows are no longer supported
|
|
151
|
+
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}, {'param1' => 'value5', 'param2' => 'value6'}]
|
|
152
|
+
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4'], ['value5', 'value6']]
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
context '#remove_row' do
|
|
157
|
+
|
|
158
|
+
it 'can remove an existing example row' do
|
|
159
|
+
clazz.new.should respond_to(:remove_row)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it 'can remove an existing row as a hash' do
|
|
163
|
+
source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
|
|
164
|
+
example = CukeModeler::Example.new(source)
|
|
165
|
+
|
|
166
|
+
old_row = {'param1' => 'value3', 'param2' => 'value4'}
|
|
167
|
+
example.remove_row(old_row)
|
|
168
|
+
|
|
169
|
+
#todo - remove once Hash rows are no longer supported
|
|
170
|
+
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
|
|
171
|
+
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it 'can remove an existing row as an array' do
|
|
175
|
+
source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
|
|
176
|
+
example = CukeModeler::Example.new(source)
|
|
177
|
+
|
|
178
|
+
old_row = ['value3', 'value4']
|
|
179
|
+
example.remove_row(old_row)
|
|
180
|
+
|
|
181
|
+
#todo - remove once Hash rows are no longer supported
|
|
182
|
+
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
|
|
183
|
+
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it 'can only use a Hash or an Array to remove an existing row' do
|
|
187
|
+
expect { @example.remove_row({}) }.to_not raise_error
|
|
188
|
+
expect { @example.remove_row([]) }.to_not raise_error
|
|
189
|
+
expect { @example.remove_row(:a_row) }.to raise_error(ArgumentError)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
it 'trims whitespace from removed rows' do
|
|
193
|
+
source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|\n|value5|value6|"
|
|
194
|
+
example = CukeModeler::Example.new(source)
|
|
195
|
+
|
|
196
|
+
hash_row = {'param1' => 'value3 ', 'param2' => ' value4'}
|
|
197
|
+
array_row = ['value5', ' value6 ']
|
|
198
|
+
example.remove_row(hash_row)
|
|
199
|
+
example.remove_row(array_row)
|
|
200
|
+
|
|
201
|
+
#todo - remove once Hash rows are no longer supported
|
|
202
|
+
example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
|
|
203
|
+
example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
context 'example output edge cases' do
|
|
208
|
+
|
|
209
|
+
it 'is a String' do
|
|
210
|
+
@example.to_s.should be_a(String)
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
it 'can output an empty example' do
|
|
214
|
+
expect { @example.to_s }.to_not raise_error
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it 'can output an example that has only a name' do
|
|
218
|
+
@example.name = 'a name'
|
|
219
|
+
|
|
220
|
+
expect { @example.to_s }.to_not raise_error
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it 'can output an example that has only a description' do
|
|
224
|
+
@example.description_text = 'a description'
|
|
225
|
+
|
|
226
|
+
expect { @example.to_s }.to_not raise_error
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
it 'can output an example that has only a tags' do
|
|
230
|
+
@example.tags = ['a tag']
|
|
231
|
+
|
|
232
|
+
expect { @example.to_s }.to_not raise_error
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
#todo - remove once Hash rows are no longer supported
|
|
236
|
+
it 'can output an example that only has parameters' do
|
|
237
|
+
@example.parameters = ['param1']
|
|
238
|
+
|
|
239
|
+
expect { @example.to_s }.to_not raise_error
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
#todo - remove once Hash rows are no longer supported
|
|
243
|
+
it 'can output an example that only has rows' do
|
|
244
|
+
@example.rows = [{:param1 => 'row1'}]
|
|
245
|
+
|
|
246
|
+
expect { @example.to_s }.to_not raise_error
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
end
|