cuke_modeler 1.5.0 → 3.1.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/CHANGELOG.md +341 -0
- data/LICENSE.txt +1 -1
- data/README.md +22 -15
- data/cuke_modeler.gemspec +15 -9
- data/lib/cuke_modeler/adapters/gherkin_10_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_11_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_12_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_13_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_14_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/{gherkin_6_adapter.rb → gherkin_9_adapter.rb} +75 -64
- data/lib/cuke_modeler/containing.rb +3 -0
- data/lib/cuke_modeler/described.rb +1 -0
- data/lib/cuke_modeler/models/background.rb +1 -1
- data/lib/cuke_modeler/models/cell.rb +1 -1
- data/lib/cuke_modeler/models/comment.rb +1 -1
- data/lib/cuke_modeler/models/directory.rb +2 -2
- data/lib/cuke_modeler/models/doc_string.rb +1 -1
- data/lib/cuke_modeler/models/example.rb +1 -1
- data/lib/cuke_modeler/models/feature.rb +1 -1
- data/lib/cuke_modeler/models/feature_file.rb +2 -2
- data/lib/cuke_modeler/models/outline.rb +1 -1
- data/lib/cuke_modeler/models/row.rb +1 -1
- data/lib/cuke_modeler/models/scenario.rb +1 -1
- data/lib/cuke_modeler/models/step.rb +32 -3
- data/lib/cuke_modeler/models/table.rb +1 -1
- data/lib/cuke_modeler/models/tag.rb +1 -1
- data/lib/cuke_modeler/named.rb +1 -0
- data/lib/cuke_modeler/nested.rb +1 -0
- data/lib/cuke_modeler/parsed.rb +1 -0
- data/lib/cuke_modeler/parsing.rb +89 -94
- data/lib/cuke_modeler/sourceable.rb +1 -0
- data/lib/cuke_modeler/stepped.rb +1 -0
- data/lib/cuke_modeler/taggable.rb +1 -0
- data/lib/cuke_modeler/version.rb +1 -1
- data/testing/cucumber/features/analysis/step_comparison.feature +25 -0
- data/testing/cucumber/features/analysis/test_comparison.feature +1 -1
- metadata +56 -142
- data/.gitignore +0 -18
- data/.simplecov +0 -7
- data/.travis.yml +0 -60
- data/Gemfile +0 -36
- data/History.md +0 -196
- data/Rakefile +0 -63
- data/appveyor.yml +0 -61
- data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +0 -273
- data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +0 -296
- data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +0 -308
- data/testing/cucumber/step_definitions/action_steps.rb +0 -13
- data/testing/cucumber/step_definitions/background_steps.rb +0 -1
- data/testing/cucumber/step_definitions/directory_steps.rb +0 -6
- data/testing/cucumber/step_definitions/doc_string_steps.rb +0 -1
- data/testing/cucumber/step_definitions/feature_file_steps.rb +0 -16
- data/testing/cucumber/step_definitions/feature_steps.rb +0 -7
- data/testing/cucumber/step_definitions/modeling_steps.rb +0 -44
- data/testing/cucumber/step_definitions/setup_steps.rb +0 -32
- data/testing/cucumber/step_definitions/step_steps.rb +0 -3
- data/testing/cucumber/step_definitions/table_steps.rb +0 -1
- data/testing/cucumber/step_definitions/tag_steps.rb +0 -3
- data/testing/cucumber/step_definitions/verification_steps.rb +0 -173
- data/testing/cucumber/support/env.rb +0 -30
- data/testing/dialect_helper.rb +0 -48
- data/testing/file_helper.rb +0 -47
- data/testing/gemfiles/gherkin2.gemfile +0 -32
- data/testing/gemfiles/gherkin3.gemfile +0 -26
- data/testing/gemfiles/gherkin4.gemfile +0 -27
- data/testing/gemfiles/gherkin5.gemfile +0 -27
- data/testing/gemfiles/gherkin6.gemfile +0 -10
- data/testing/rspec/spec/integration/background_integration_spec.rb +0 -442
- data/testing/rspec/spec/integration/cell_integration_spec.rb +0 -335
- data/testing/rspec/spec/integration/comment_integration_spec.rb +0 -177
- data/testing/rspec/spec/integration/directory_integration_spec.rb +0 -218
- data/testing/rspec/spec/integration/doc_string_integration_spec.rb +0 -402
- data/testing/rspec/spec/integration/example_integration_spec.rb +0 -741
- data/testing/rspec/spec/integration/feature_file_integration_spec.rb +0 -272
- data/testing/rspec/spec/integration/feature_integration_spec.rb +0 -650
- data/testing/rspec/spec/integration/gherkin_2_adapter_spec.rb +0 -166
- data/testing/rspec/spec/integration/gherkin_3_adapter_spec.rb +0 -166
- data/testing/rspec/spec/integration/gherkin_4_adapter_spec.rb +0 -165
- data/testing/rspec/spec/integration/gherkin_6_adapter_spec.rb +0 -166
- data/testing/rspec/spec/integration/model_integration_spec.rb +0 -15
- data/testing/rspec/spec/integration/nested_integration_spec.rb +0 -91
- data/testing/rspec/spec/integration/outline_integration_spec.rb +0 -624
- data/testing/rspec/spec/integration/parsing_integration_spec.rb +0 -122
- data/testing/rspec/spec/integration/row_integration_spec.rb +0 -291
- data/testing/rspec/spec/integration/scenario_integration_spec.rb +0 -479
- data/testing/rspec/spec/integration/shared/models_integration_specs.rb +0 -18
- data/testing/rspec/spec/integration/step_integration_spec.rb +0 -475
- data/testing/rspec/spec/integration/table_integration_spec.rb +0 -337
- data/testing/rspec/spec/integration/tag_integration_spec.rb +0 -259
- data/testing/rspec/spec/spec_helper.rb +0 -122
- data/testing/rspec/spec/unit/background_unit_spec.rb +0 -83
- data/testing/rspec/spec/unit/cell_unit_spec.rb +0 -68
- data/testing/rspec/spec/unit/comment_unit_spec.rb +0 -68
- data/testing/rspec/spec/unit/described_unit_spec.rb +0 -23
- data/testing/rspec/spec/unit/directory_unit_spec.rb +0 -127
- data/testing/rspec/spec/unit/doc_string_unit_spec.rb +0 -100
- data/testing/rspec/spec/unit/example_unit_spec.rb +0 -133
- data/testing/rspec/spec/unit/feature_file_unit_spec.rb +0 -125
- data/testing/rspec/spec/unit/feature_unit_spec.rb +0 -157
- data/testing/rspec/spec/unit/model_unit_spec.rb +0 -15
- data/testing/rspec/spec/unit/named_unit_spec.rb +0 -23
- data/testing/rspec/spec/unit/nested_unit_spec.rb +0 -43
- data/testing/rspec/spec/unit/outline_unit_spec.rb +0 -117
- data/testing/rspec/spec/unit/parsed_unit_spec.rb +0 -27
- data/testing/rspec/spec/unit/parsing_unit_spec.rb +0 -54
- data/testing/rspec/spec/unit/row_unit_spec.rb +0 -68
- data/testing/rspec/spec/unit/scenario_unit_spec.rb +0 -86
- data/testing/rspec/spec/unit/shared/bare_bones_models_unit_specs.rb +0 -14
- data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +0 -127
- data/testing/rspec/spec/unit/shared/described_models_unit_specs.rb +0 -38
- data/testing/rspec/spec/unit/shared/keyworded_models_unit_specs.rb +0 -58
- data/testing/rspec/spec/unit/shared/models_unit_specs.rb +0 -15
- data/testing/rspec/spec/unit/shared/named_models_unit_specs.rb +0 -39
- data/testing/rspec/spec/unit/shared/nested_models_unit_specs.rb +0 -51
- data/testing/rspec/spec/unit/shared/parsed_models_unit_specs.rb +0 -39
- data/testing/rspec/spec/unit/shared/prepopulated_models_unit_specs.rb +0 -18
- data/testing/rspec/spec/unit/shared/sourced_models_unit_specs.rb +0 -39
- data/testing/rspec/spec/unit/shared/stepped_models_unit_specs.rb +0 -46
- data/testing/rspec/spec/unit/shared/stringifiable_models_unit_specs.rb +0 -18
- data/testing/rspec/spec/unit/shared/tagged_models_unit_specs.rb +0 -72
- data/testing/rspec/spec/unit/sourceable_unit_spec.rb +0 -27
- data/testing/rspec/spec/unit/step_unit_spec.rb +0 -109
- data/testing/rspec/spec/unit/stepped_unit_spec.rb +0 -23
- data/testing/rspec/spec/unit/table_unit_spec.rb +0 -77
- data/testing/rspec/spec/unit/tag_unit_spec.rb +0 -68
- data/testing/rspec/spec/unit/taggable_unit_spec.rb +0 -69
- data/testing/test_languages.json +0 -45
- data/todo.txt +0 -24
@@ -1,18 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../../spec_helper"
|
2
|
-
|
3
|
-
shared_examples_for 'a stringifiable model' do
|
4
|
-
|
5
|
-
# clazz must be defined by the calling file
|
6
|
-
|
7
|
-
let(:model) { clazz.new }
|
8
|
-
|
9
|
-
|
10
|
-
it 'can provide a custom string representation of itself' do
|
11
|
-
expect(model.method(:to_s).owner).to equal(clazz), "#{clazz} does not override #to_s"
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'represents itself as a string' do
|
15
|
-
expect(model.to_s).to be_a(String)
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../../spec_helper"
|
2
|
-
|
3
|
-
shared_examples_for 'a tagged model' do
|
4
|
-
|
5
|
-
# clazz must be defined by the calling file
|
6
|
-
|
7
|
-
let(:model) { clazz.new }
|
8
|
-
|
9
|
-
|
10
|
-
it 'has tags' do
|
11
|
-
expect(model).to respond_to(:tags)
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'can change its tags' do
|
15
|
-
expect(model).to respond_to(:tags=)
|
16
|
-
|
17
|
-
model.tags = :some_tags
|
18
|
-
expect(model.tags).to eq(:some_tags)
|
19
|
-
model.tags = :some_other_tags
|
20
|
-
expect(model.tags).to eq(:some_other_tags)
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
describe 'abstract instantiation' do
|
25
|
-
|
26
|
-
context 'a new tagged object' do
|
27
|
-
|
28
|
-
let(:model) { clazz.new }
|
29
|
-
|
30
|
-
|
31
|
-
it 'starts with no tags' do
|
32
|
-
expect(model.tags).to eq([])
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'starts with no inherited tags' do
|
36
|
-
expect(model.applied_tags).to eq([])
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'starts with no tags at all' do
|
40
|
-
expect(model.all_tags).to eq([])
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'has applied tags' do
|
48
|
-
expect(model).to respond_to(:applied_tags)
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'inherits its applied tags from its ancestors' do
|
52
|
-
all_parent_tags = [:parent_tag_1, :parent_tag_2, :grandparent_tag_1]
|
53
|
-
parent = double(:all_tags => all_parent_tags)
|
54
|
-
|
55
|
-
model.parent_model = parent
|
56
|
-
|
57
|
-
expect(model.applied_tags).to match_array(all_parent_tags)
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'knows all of its applicable tags' do
|
61
|
-
all_parent_tags = [:parent_tag_1, :parent_tag_2, :grandparent_tag_1]
|
62
|
-
own_tags = [:tag_1, :tag_2]
|
63
|
-
|
64
|
-
parent = double(:all_tags => all_parent_tags)
|
65
|
-
|
66
|
-
model.parent_model = parent
|
67
|
-
model.tags = own_tags
|
68
|
-
|
69
|
-
expect(model.all_tags).to match_array(all_parent_tags + own_tags)
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../spec_helper"
|
2
|
-
|
3
|
-
|
4
|
-
describe 'Sourceable, Unit', :unit_test => true do
|
5
|
-
|
6
|
-
let(:nodule) { CukeModeler::Sourceable }
|
7
|
-
let(:model) { Object.new.extend(nodule) }
|
8
|
-
|
9
|
-
|
10
|
-
describe 'unique behavior' do
|
11
|
-
|
12
|
-
it 'has a source line' do
|
13
|
-
expect(model).to respond_to(:source_line)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'can change its source line' do
|
17
|
-
expect(model).to respond_to(:source_line=)
|
18
|
-
|
19
|
-
model.source_line = :some_source_line
|
20
|
-
expect(model.source_line).to eq(:some_source_line)
|
21
|
-
model.source_line = :some_other_source_line
|
22
|
-
expect(model.source_line).to eq(:some_other_source_line)
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
@@ -1,109 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../spec_helper"
|
2
|
-
|
3
|
-
|
4
|
-
describe 'Step, Unit', :unit_test => true do
|
5
|
-
|
6
|
-
let(:clazz) { CukeModeler::Step }
|
7
|
-
let(:step) { clazz.new }
|
8
|
-
|
9
|
-
|
10
|
-
describe 'common behavior' do
|
11
|
-
|
12
|
-
it_should_behave_like 'a model'
|
13
|
-
it_should_behave_like 'a keyworded model'
|
14
|
-
it_should_behave_like 'a sourced model'
|
15
|
-
it_should_behave_like 'a parsed model'
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
describe 'unique behavior' do
|
21
|
-
|
22
|
-
it 'has text' do
|
23
|
-
expect(step).to respond_to(:text)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'can change its text' do
|
27
|
-
expect(step).to respond_to(:text=)
|
28
|
-
|
29
|
-
step.text = :some_text
|
30
|
-
expect(step.text).to eq(:some_text)
|
31
|
-
step.text = :some_other_text
|
32
|
-
expect(step.text).to eq(:some_other_text)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'has a block' do
|
36
|
-
expect(step).to respond_to(:block)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'can change its block' do
|
40
|
-
expect(step).to respond_to(:block=)
|
41
|
-
|
42
|
-
step.block = :some_block
|
43
|
-
expect(step.block).to eq(:some_block)
|
44
|
-
step.block = :some_other_block
|
45
|
-
expect(step.block).to eq(:some_other_block)
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
describe 'abstract instantiation' do
|
50
|
-
|
51
|
-
context 'a new step object' do
|
52
|
-
|
53
|
-
let(:step) { clazz.new }
|
54
|
-
|
55
|
-
|
56
|
-
it 'starts with no text' do
|
57
|
-
expect(step.text).to be_nil
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'starts with no block' do
|
61
|
-
expect(step.block).to be_nil
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'contains some kind of block' do
|
69
|
-
block = :block
|
70
|
-
everything = [block]
|
71
|
-
|
72
|
-
step.block = block
|
73
|
-
|
74
|
-
expect(step.children).to match_array(everything)
|
75
|
-
end
|
76
|
-
|
77
|
-
|
78
|
-
describe 'step output' do
|
79
|
-
|
80
|
-
context 'from abstract instantiation' do
|
81
|
-
|
82
|
-
let(:step) { clazz.new }
|
83
|
-
|
84
|
-
|
85
|
-
it 'can output an empty step' do
|
86
|
-
expect { step.to_s }.to_not raise_error
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'can output a step that has only a text' do
|
90
|
-
step.text = 'step text'
|
91
|
-
|
92
|
-
expect { step.to_s }.to_not raise_error
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'can gracefully be compared to other types of objects' do
|
100
|
-
# Some common types of object
|
101
|
-
[1, 'foo', :bar, [], {}].each do |thing|
|
102
|
-
expect { step == thing }.to_not raise_error
|
103
|
-
expect(step == thing).to be false
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../spec_helper"
|
2
|
-
|
3
|
-
|
4
|
-
describe 'Stepped, Unit', :unit_test => true do
|
5
|
-
|
6
|
-
let(:nodule) { CukeModeler::Stepped }
|
7
|
-
let(:stepped_model) { Object.new.extend(nodule) }
|
8
|
-
|
9
|
-
|
10
|
-
it 'has steps' do
|
11
|
-
expect(stepped_model).to respond_to(:steps)
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'can change its steps' do
|
15
|
-
expect(stepped_model).to respond_to(:steps=)
|
16
|
-
|
17
|
-
stepped_model.steps = :some_steps
|
18
|
-
expect(stepped_model.steps).to eq(:some_steps)
|
19
|
-
stepped_model.steps = :some_other_steps
|
20
|
-
expect(stepped_model.steps).to eq(:some_other_steps)
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../spec_helper"
|
2
|
-
|
3
|
-
|
4
|
-
describe 'Table, Unit', :unit_test => true do
|
5
|
-
|
6
|
-
let(:clazz) { CukeModeler::Table }
|
7
|
-
let(:table) { clazz.new }
|
8
|
-
|
9
|
-
|
10
|
-
describe 'common behavior' do
|
11
|
-
|
12
|
-
it_should_behave_like 'a model'
|
13
|
-
it_should_behave_like 'a parsed model'
|
14
|
-
it_should_behave_like 'a sourced model'
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
describe 'unique behavior' do
|
20
|
-
|
21
|
-
it 'has rows' do
|
22
|
-
expect(table).to respond_to(:rows)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'can change its rows' do
|
26
|
-
expect(table).to respond_to(:rows=)
|
27
|
-
|
28
|
-
table.rows = :some_rows
|
29
|
-
expect(table.rows).to eq(:some_rows)
|
30
|
-
table.rows = :some_other_rows
|
31
|
-
expect(table.rows).to eq(:some_other_rows)
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
describe 'abstract instantiation' do
|
36
|
-
|
37
|
-
context 'a new table object' do
|
38
|
-
|
39
|
-
let(:table) { clazz.new }
|
40
|
-
|
41
|
-
|
42
|
-
it 'starts with no rows' do
|
43
|
-
expect(table.rows).to eq([])
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'contains rows' do
|
51
|
-
rows = [:row_1, :row_2]
|
52
|
-
everything = rows
|
53
|
-
|
54
|
-
table.rows = rows
|
55
|
-
|
56
|
-
expect(table.children).to match_array(everything)
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
describe 'table output' do
|
61
|
-
|
62
|
-
context 'from abstract instantiation' do
|
63
|
-
|
64
|
-
let(:table) { clazz.new }
|
65
|
-
|
66
|
-
|
67
|
-
it 'can output an empty table' do
|
68
|
-
expect { table.to_s }.to_not raise_error
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../spec_helper"
|
2
|
-
|
3
|
-
|
4
|
-
describe 'Tag, Unit', :unit_test => true do
|
5
|
-
|
6
|
-
let(:clazz) { CukeModeler::Tag }
|
7
|
-
let(:model) { clazz.new }
|
8
|
-
|
9
|
-
|
10
|
-
describe 'common behavior' do
|
11
|
-
|
12
|
-
it_should_behave_like 'a model'
|
13
|
-
it_should_behave_like 'a sourced model'
|
14
|
-
it_should_behave_like 'a parsed model'
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
describe 'unique behavior' do
|
20
|
-
|
21
|
-
it 'has a name' do
|
22
|
-
expect(model).to respond_to(:name)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'can change its name' do
|
26
|
-
expect(model).to respond_to(:name=)
|
27
|
-
|
28
|
-
model.name = :some_name
|
29
|
-
expect(model.name).to eq(:some_name)
|
30
|
-
model.name = :some_other_name
|
31
|
-
expect(model.name).to eq(:some_other_name)
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
describe 'abstract instantiation' do
|
36
|
-
|
37
|
-
context 'a new tag object' do
|
38
|
-
|
39
|
-
let(:tag) { clazz.new }
|
40
|
-
|
41
|
-
|
42
|
-
it 'starts with no name' do
|
43
|
-
expect(tag.name).to be_nil
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
|
53
|
-
describe 'tag output' do
|
54
|
-
|
55
|
-
context 'from abstract instantiation' do
|
56
|
-
|
57
|
-
let(:tag) { clazz.new }
|
58
|
-
|
59
|
-
|
60
|
-
it 'can output an empty tag' do
|
61
|
-
expect { tag.to_s }.to_not raise_error
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}/../spec_helper"
|
2
|
-
|
3
|
-
|
4
|
-
describe 'Taggable, Unit', :unit_test => true do
|
5
|
-
|
6
|
-
let(:nodule) { CukeModeler::Taggable }
|
7
|
-
let(:model) { o = Object.new.extend(nodule)
|
8
|
-
|
9
|
-
def o.parent_model
|
10
|
-
@parent_model
|
11
|
-
end
|
12
|
-
|
13
|
-
def o.parent_model=(parent)
|
14
|
-
@parent_model = parent
|
15
|
-
end
|
16
|
-
|
17
|
-
o
|
18
|
-
}
|
19
|
-
|
20
|
-
|
21
|
-
describe 'unique behavior' do
|
22
|
-
|
23
|
-
it 'has tags' do
|
24
|
-
expect(model).to respond_to(:tags)
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'can change its tags' do
|
28
|
-
expect(model).to respond_to(:tags=)
|
29
|
-
|
30
|
-
model.tags = :some_tags
|
31
|
-
expect(model.tags).to eq(:some_tags)
|
32
|
-
model.tags = :some_other_tags
|
33
|
-
expect(model.tags).to eq(:some_other_tags)
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'has applied tags' do
|
37
|
-
expect(model).to respond_to(:applied_tags)
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'inherits its applied tags from its ancestors' do
|
41
|
-
all_parent_tags = [:parent_tag_1, :parent_tag_2, :grandparent_tag_1]
|
42
|
-
parent = double(:all_tags => all_parent_tags)
|
43
|
-
|
44
|
-
model.parent_model = parent
|
45
|
-
|
46
|
-
expect(model.applied_tags).to eq(all_parent_tags)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'knows all of its applicable tags' do
|
50
|
-
all_parent_tags = [:parent_tag_1, :parent_tag_2, :grandparent_tag_1]
|
51
|
-
own_tags = [:tag_1, :tag_2]
|
52
|
-
|
53
|
-
parent = double(:all_tags => all_parent_tags)
|
54
|
-
|
55
|
-
model.parent_model = parent
|
56
|
-
model.tags = own_tags
|
57
|
-
|
58
|
-
expect(model.all_tags).to eq(all_parent_tags + own_tags)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'may have no applied tags' do
|
62
|
-
model.parent_model = :not_a_tagged_object
|
63
|
-
|
64
|
-
expect(model.applied_tags).to eq([])
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|