cuke_modeler 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|