cukedep 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +4 -0
- data/Rakefile +4 -6
- data/lib/cukedep/application.rb +89 -91
- data/lib/cukedep/cli/cmd-line.rb +0 -7
- data/lib/cukedep/config.rb +70 -74
- data/lib/cukedep/constants.rb +1 -1
- data/lib/cukedep/cuke-runner.rb +0 -5
- data/lib/cukedep/customization.rb +0 -5
- data/lib/cukedep/feature-model.rb +1 -7
- data/lib/cukedep/feature-rep.rb +0 -4
- data/lib/cukedep/file-action.rb +209 -221
- data/lib/cukedep/gherkin-facade.rb +7 -10
- data/lib/cukedep/gherkin-listener.rb +82 -89
- data/lib/cukedep/hook-dsl.rb +0 -4
- data/lib/cukedep/sandbox.rb +0 -5
- data/sample/features/step_definitions/steps.rb +30 -26
- data/sample/features/support/env.rb +1 -1
- data/sample/model/model.rb +198 -205
- data/sample/result.html +1 -1
- data/spec/cukedep/application_spec.rb +15 -16
- data/spec/cukedep/cli/cmd-line_spec.rb +13 -16
- data/spec/cukedep/cuke-runner_spec.rb +55 -61
- data/spec/cukedep/customization_spec.rb +21 -26
- data/spec/cukedep/debug-file-action.rb +12 -10
- data/spec/cukedep/feature-model_spec.rb +13 -16
- data/spec/cukedep/feature-rep_spec.rb +4 -7
- data/spec/cukedep/file-action_spec.rb +18 -34
- data/spec/cukedep/file-parsing.rb +9 -11
- data/spec/cukedep/gherkin-facade_spec.rb +3 -8
- data/spec/cukedep/gherkin-listener_spec.rb +10 -12
- data/spec/cukedep/hook-dsl_spec.rb +6 -9
- data/spec/cukedep/sample_features/cukedep.rake +44 -37
- data/spec/cukedep/sample_features/cukedep_hooks.rb +2 -2
- data/spec/cukedep/sample_features/dependencies.dot +1 -1
- data/templates/rake.erb +36 -29
- metadata +2 -2
data/sample/result.html
CHANGED
@@ -469,4 +469,4 @@ e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["
|
|
469
469
|
$('#'+element_id).css('color', '#000000');
|
470
470
|
}
|
471
471
|
|
472
|
-
</script></head><body><!-- Step count 0--><div class="cucumber"><div id="cucumber-header"><div id="label"><h1>Cucumber Features</h1></div><div id="summary"><p id="totals"></p><p id="duration"></p><div id="expand-collapse"><p id="expander">Expand All</p><p id="collapser">Collapse All</p></div></div></div><div class="feature"><span class="tag">@a_few</span> <span class="tag">@feature:qux</span><h2><span class="val">Feature: Registering user credentials</span></h2><p class="narrative">As a video rental employee<br/>I want to enter my credentials<br/>So I can identify myself when use the rental application<br/></p><div class='scenario'><span class="scenario_file">features/a_few_tests.feature:8</span><h3 id="scenario_1"><span class="keyword">Scenario:</span> <span class="val">Start without credentials</span></h3><ol><li id='' class='step passed'><div class="step_name"><span class="keyword">Given </span><span class="step val">there is no registered user</span></div><div class="step_file"><span>features/step_definitions/steps.rb:
|
472
|
+
</script></head><body><!-- Step count 0--><div class="cucumber"><div id="cucumber-header"><div id="label"><h1>Cucumber Features</h1></div><div id="summary"><p id="totals"></p><p id="duration"></p><div id="expand-collapse"><p id="expander">Expand All</p><p id="collapser">Collapse All</p></div></div></div><div class="feature"><span class="tag">@a_few</span> <span class="tag">@feature:qux</span><h2><span class="val">Feature: Registering user credentials</span></h2><p class="narrative">As a video rental employee<br/>I want to enter my credentials<br/>So I can identify myself when use the rental application<br/></p><div class='scenario'><span class="scenario_file">features/a_few_tests.feature:8</span><h3 id="scenario_1"><span class="keyword">Scenario:</span> <span class="val">Start without credentials</span></h3><ol><li id='' class='step passed'><div class="step_name"><span class="keyword">Given </span><span class="step val">there is no registered user</span></div><div class="step_file"><span>features/step_definitions/steps.rb:50</span></div></li> <script type="text/javascript">moveProgressBar('100.0');</script><li id='' class='step passed'><div class="step_name"><span class="keyword">When </span><span class="step val">I enter the credentials "<span class="param">it's me</span>"</span></div><div class="step_file"><span>features/step_definitions/steps.rb:54</span></div></li> <script type="text/javascript">moveProgressBar('100.0');</script><li id='' class='step passed'><div class="step_name"><span class="keyword">Then </span><span class="step val">I should not be authorized</span></div><div class="step_file"><span>features/step_definitions/steps.rb:58</span></div></li><li class="step message">Invalid user credential</li> <script type="text/javascript">moveProgressBar('100.0');</script></ol></div><div class='scenario outline'><span class="scenario_file">features/a_few_tests.feature:14</span><h3 id="scenario_2"><span class="keyword">Scenario Outline:</span> <span class="val">Registering some credentials</span></h3><ol><li id='' class='step skipped'><div class="step_name"><span class="keyword">When </span><span class="step val">I register my credentials "<credentials>"</span></div><div class="step_file"><span>features/a_few_tests.feature:15</span></div></li> <script type="text/javascript">moveProgressBar('100.0');</script><li id='' class='step skipped'><div class="step_name"><span class="keyword">When </span><span class="step val">I enter the credentials "<credentials>"</span></div><div class="step_file"><span>features/a_few_tests.feature:16</span></div></li> <script type="text/javascript">moveProgressBar('100.0');</script><li id='' class='step skipped'><div class="step_name"><span class="keyword">Then </span><span class="step val">I should see a welcome message</span></div><div class="step_file"><span>features/a_few_tests.feature:17</span></div></li> <script type="text/javascript">moveProgressBar('100.0');</script></ol><div class="examples"><h4><span class="keyword">Examples</span> <span class="val"></span></h4><table><tr class='step' id='features_a_few_tests_feature_19'><th id="features_a_few_tests_feature_19_0" class="step skipped_param"><div><span class="step param">credentials</span></div></th></tr> <script type="text/javascript">moveProgressBar('100.0');</script><tr class='step' id='features_a_few_tests_feature_21'><td id="features_a_few_tests_feature_21_0" class="step passed"><div><span class="step param">it's me</span></div></td><td class="message">Welcome to the rental application.</td></tr> <script type="text/javascript">moveProgressBar('100.0');</script><tr class='step' id='features_a_few_tests_feature_22'><td id="features_a_few_tests_feature_22_0" class="step passed"><div><span class="step param">himself</span></div></td><td class="message">Welcome to the rental application.</td></tr> <script type="text/javascript">moveProgressBar('100.0');</script><tr class='step' id='features_a_few_tests_feature_23'><td id="features_a_few_tests_feature_23_0" class="step passed"><div><span class="step param">nemo</span></div></td><td class="message">Welcome to the rental application.</td></tr> <script type="text/javascript">moveProgressBar('100.0');</script></table></div></div></div><script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>0m0.031s seconds</strong>";</script><script type="text/javascript">document.getElementById('totals').innerHTML = "4 scenarios (4 passed)<br />12 steps (12 passed)";</script></div></body></html>
|
@@ -1,15 +1,14 @@
|
|
1
1
|
# File: cmd-line_spec.rb
|
2
2
|
|
3
3
|
require 'stringio'
|
4
|
+
require 'English'
|
4
5
|
require_relative '../spec_helper'
|
5
6
|
|
6
7
|
# Load the class under testing
|
7
8
|
require_relative '../../lib/cukedep/application'
|
8
9
|
|
9
10
|
module Cukedep # Open module to get rid of long qualified names
|
10
|
-
|
11
11
|
describe Application do
|
12
|
-
|
13
12
|
context 'Creation & initialization:' do
|
14
13
|
it 'should be created without argument' do
|
15
14
|
expect { Application.new }.not_to raise_error
|
@@ -20,7 +19,7 @@ describe Application do
|
|
20
19
|
subject { Application.new }
|
21
20
|
|
22
21
|
it 'should read its command-line' do
|
23
|
-
options = subject.send(:options_from,
|
22
|
+
options = subject.send(:options_from, [])
|
24
23
|
expect(options).to be_empty
|
25
24
|
end
|
26
25
|
|
@@ -29,7 +28,7 @@ describe Application do
|
|
29
28
|
File.delete(Cukedep::YMLFilename) if File.exist?(Cukedep::YMLFilename)
|
30
29
|
|
31
30
|
# --setup option creates the config file then stops the application
|
32
|
-
expect { subject.run!(['--setup'])}.to raise_error(SystemExit)
|
31
|
+
expect { subject.run!(['--setup']) }.to raise_error(SystemExit)
|
33
32
|
|
34
33
|
# Check that the config file was effectively created.
|
35
34
|
expect(File.exist?(Cukedep::YMLFilename)).to be true
|
@@ -39,14 +38,14 @@ describe Application do
|
|
39
38
|
# Re-run again with --setup option.
|
40
39
|
# It should ask permission for overwriting
|
41
40
|
# Capture console IO
|
42
|
-
old_stdout =
|
41
|
+
old_stdout = $DEFAULT_OUTPUT
|
43
42
|
ostream = StringIO.new('rw')
|
44
|
-
|
43
|
+
$DEFAULT_OUTPUT = ostream
|
45
44
|
old_stdin = $stdin
|
46
45
|
$stdin = StringIO.new("n\n", 'r')
|
47
|
-
expect { subject.run!(['--setup'])}.to raise_error(SystemExit)
|
48
|
-
|
49
|
-
$
|
46
|
+
expect { subject.run!(['--setup']) }.to raise_error(SystemExit)
|
47
|
+
$DEFAULT_OUTPUT = old_stdout
|
48
|
+
$stdin = old_stdin
|
50
49
|
end
|
51
50
|
|
52
51
|
it 'should complain in absence of project dir' do
|
@@ -55,20 +54,21 @@ describe Application do
|
|
55
54
|
expect(File.exist?(Cukedep::YMLFilename)).to be_falsey
|
56
55
|
|
57
56
|
# Create default config
|
58
|
-
expect { subject.run!(['--setup'])}.to raise_error(SystemExit)
|
57
|
+
expect { subject.run!(['--setup']) }.to raise_error(SystemExit)
|
59
58
|
|
60
59
|
err = StandardError
|
61
|
-
|
62
|
-
|
60
|
+
err_msg1 = "No project dir specified in '.cukedep.yml'"
|
61
|
+
err_msg2 = ' nor via --project option.'
|
62
|
+
expect { subject.run!([]) }.to raise_error(err, err_msg1 + err_msg2)
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'should parse the feature files' do
|
66
|
-
curr_dir = Dir.getwd
|
66
|
+
curr_dir = Dir.getwd
|
67
67
|
begin
|
68
68
|
file_dir = File.dirname(__FILE__)
|
69
69
|
Dir.chdir(file_dir + '/sample_features')
|
70
70
|
unless File.exist?(Cukedep::YMLFilename)
|
71
|
-
expect { subject.run!(['--setup'])}.to raise_error(SystemExit)
|
71
|
+
expect { subject.run!(['--setup']) }.to raise_error(SystemExit)
|
72
72
|
end
|
73
73
|
subject.run!(['--project', '../../../sample'])
|
74
74
|
ensure
|
@@ -77,5 +77,4 @@ describe Application do
|
|
77
77
|
end
|
78
78
|
end # context
|
79
79
|
end # describe
|
80
|
-
|
81
|
-
end # module
|
80
|
+
end # module
|
@@ -1,15 +1,14 @@
|
|
1
1
|
# File: cmd-line_spec.rb
|
2
2
|
|
3
3
|
require 'stringio'
|
4
|
+
require 'English'
|
4
5
|
require_relative '../../spec_helper'
|
5
6
|
|
6
7
|
# Load the class under testing
|
7
8
|
require_relative '../../../lib/cukedep/cli/cmd-line'
|
8
9
|
|
9
10
|
module Cukedep # Open module to get rid of long qualified names
|
10
|
-
|
11
11
|
describe CLI::CmdLine do
|
12
|
-
|
13
12
|
context 'Creation & initialization:' do
|
14
13
|
subject { CLI::CmdLine.new }
|
15
14
|
|
@@ -20,13 +19,13 @@ describe CLI::CmdLine do
|
|
20
19
|
|
21
20
|
context 'Provided services:' do
|
22
21
|
def capture_output()
|
23
|
-
@output =
|
22
|
+
@output = $DEFAULT_OUTPUT
|
24
23
|
ostream = StringIO.new('rw')
|
25
|
-
|
24
|
+
$DEFAULT_OUTPUT = ostream
|
26
25
|
end
|
27
26
|
|
28
27
|
def release_output()
|
29
|
-
|
28
|
+
$DEFAULT_OUTPUT = @output
|
30
29
|
end
|
31
30
|
|
32
31
|
|
@@ -37,12 +36,12 @@ describe CLI::CmdLine do
|
|
37
36
|
|
38
37
|
it 'should accept the dry-run option' do
|
39
38
|
expect { subject.parse!(['--dry-run']) }.not_to raise_error
|
40
|
-
expect(subject.options).to eq(
|
39
|
+
expect(subject.options).to eq(dryrun: true)
|
41
40
|
end
|
42
41
|
|
43
42
|
it 'should accept the setup option' do
|
44
43
|
expect { subject.parse!(['--setup']) }.not_to raise_error
|
45
|
-
expect(subject.options).to eq(
|
44
|
+
expect(subject.options).to eq(setup: true)
|
46
45
|
end
|
47
46
|
|
48
47
|
it 'should validate the project option argument' do
|
@@ -62,16 +61,16 @@ MSG_END
|
|
62
61
|
expect { subject.parse!(cmd_opts) }.to raise_error(err_type, err_msg)
|
63
62
|
|
64
63
|
# Case 3: project dir exists
|
65
|
-
#cmd_opts = ['--project', '../../../sample']
|
66
|
-
#expect { subject.parse!(cmd_opts) }.not_to raise_error
|
67
|
-
#expect(subject.options).to eq({ :project => '../../../sample' })
|
64
|
+
# cmd_opts = ['--project', '../../../sample']
|
65
|
+
# expect { subject.parse!(cmd_opts) }.not_to raise_error
|
66
|
+
# expect(subject.options).to eq({ :project => '../../../sample' })
|
68
67
|
end
|
69
68
|
|
70
69
|
it 'should handle the version option' do
|
71
70
|
capture_output
|
72
71
|
cmd_opts = ['--version']
|
73
72
|
expect { subject.parse!(cmd_opts) }.to raise_error(SystemExit)
|
74
|
-
expect(
|
73
|
+
expect($DEFAULT_OUTPUT.string).to eq(Cukedep::Version + "\n")
|
75
74
|
release_output
|
76
75
|
end
|
77
76
|
|
@@ -79,13 +78,11 @@ MSG_END
|
|
79
78
|
capture_output
|
80
79
|
cmd_opts = ['--help']
|
81
80
|
expect { subject.parse!(cmd_opts) }.to raise_error(SystemExit)
|
82
|
-
expect(
|
81
|
+
expect($DEFAULT_OUTPUT.string).to eq(subject.parser.to_s)
|
83
82
|
release_output
|
84
83
|
end
|
85
84
|
end # context
|
86
|
-
|
87
|
-
|
88
|
-
|
89
85
|
end # describe
|
86
|
+
end # module
|
90
87
|
|
91
|
-
|
88
|
+
# End of file
|
@@ -8,73 +8,67 @@ require_relative '../../lib/cukedep/cuke-runner'
|
|
8
8
|
|
9
9
|
|
10
10
|
module Cukedep # Open module to get rid of long qualified names
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
file_dir + '/sample_features'
|
17
|
-
end
|
18
|
-
|
19
|
-
subject { CukeRunner.new(base_dir, project_dir, Config.default) }
|
20
|
-
|
21
|
-
before(:each) do
|
22
|
-
@orig_dir = Dir.getwd
|
23
|
-
Dir.chdir(File.dirname(__FILE__))
|
24
|
-
end
|
25
|
-
|
26
|
-
after(:each) do
|
27
|
-
Dir.chdir(@orig_dir)
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
context 'Creation & initialization:' do
|
32
|
-
|
33
|
-
it 'should be created with three arguments' do
|
34
|
-
expect { CukeRunner.new(base_dir, project_dir, Config.default) }.not_to raise_error
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should know its work directory' do
|
38
|
-
expect(subject.base_dir).to eq(base_dir)
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should know the project directory' do
|
42
|
-
expect(subject.proj_dir).to eq(File.expand_path(project_dir))
|
43
|
-
end
|
44
|
-
end # context
|
45
|
-
|
46
|
-
|
47
|
-
context 'Provided services:' do
|
48
|
-
|
49
|
-
it 'should launch Cucumber when requested' do
|
50
|
-
#subject.invoke
|
11
|
+
describe CukeRunner do
|
12
|
+
let(:project_dir) { '../../sample' }
|
13
|
+
let(:base_dir) do
|
14
|
+
file_dir = File.dirname(__FILE__)
|
15
|
+
file_dir + '/sample_features'
|
51
16
|
end
|
52
17
|
|
53
|
-
|
54
|
-
expect { subject.before_all }.not_to raise_error
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should reject a second 'before_all' event" do
|
58
|
-
subject.before_all
|
59
|
-
err_msg = "expected state was 'Initialized' instead of 'ReadyToRun'."
|
60
|
-
expect { subject.before_all }.to raise_error(StandardError, err_msg)
|
61
|
-
end
|
18
|
+
subject { CukeRunner.new(base_dir, project_dir, Config.default) }
|
62
19
|
|
63
|
-
|
64
|
-
|
65
|
-
|
20
|
+
before(:each) do
|
21
|
+
@orig_dir = Dir.getwd
|
22
|
+
Dir.chdir(File.dirname(__FILE__))
|
66
23
|
end
|
67
24
|
|
68
|
-
|
69
|
-
|
70
|
-
#expect {
|
71
|
-
subject.run!(['a_few_tests.feature']) #}.not_to raise_error
|
25
|
+
after(:each) do
|
26
|
+
Dir.chdir(@orig_dir)
|
72
27
|
end
|
73
28
|
|
74
|
-
end # context
|
75
|
-
|
76
|
-
end # describe
|
77
29
|
|
30
|
+
context 'Creation & initialization:' do
|
31
|
+
it 'should be created with three arguments' do
|
32
|
+
expect { CukeRunner.new(base_dir, project_dir, Config.default) }
|
33
|
+
.not_to raise_error
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should know its work directory' do
|
37
|
+
expect(subject.base_dir).to eq(base_dir)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should know the project directory' do
|
41
|
+
expect(subject.proj_dir).to eq(File.expand_path(project_dir))
|
42
|
+
end
|
43
|
+
end # context
|
44
|
+
|
45
|
+
|
46
|
+
context 'Provided services:' do
|
47
|
+
it 'should launch Cucumber when requested' do
|
48
|
+
# subject.invoke
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should handle the 'before_all' event" do
|
52
|
+
expect { subject.before_all }.not_to raise_error
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should reject a second 'before_all' event" do
|
56
|
+
subject.before_all
|
57
|
+
err_msg = "expected state was 'Initialized' instead of 'ReadyToRun'."
|
58
|
+
expect { subject.before_all }.to raise_error(StandardError, err_msg)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should handle the 'after_all' event" do
|
62
|
+
subject.before_all
|
63
|
+
expect { subject.after_all }.not_to raise_error
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should run the designated feature files' do
|
67
|
+
subject.before_all
|
68
|
+
# expect {
|
69
|
+
subject.run!(['a_few_tests.feature']) # }.not_to raise_error
|
70
|
+
end
|
71
|
+
end # context
|
72
|
+
end # describe
|
78
73
|
end # module
|
79
|
-
|
80
|
-
# End of file
|
74
|
+
# End of file
|
@@ -6,31 +6,26 @@ require_relative '../spec_helper'
|
|
6
6
|
require_relative '../../lib/cukedep/customization'
|
7
7
|
|
8
8
|
module Cukedep # Open module to get rid of long qualified names
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
end # context
|
31
|
-
|
32
|
-
end # describe
|
33
|
-
|
9
|
+
describe Customization do
|
10
|
+
context 'Provided services:' do
|
11
|
+
it 'should load hook handlers' do
|
12
|
+
directory = File.join(File.dirname(__FILE__), '/sample_features')
|
13
|
+
|
14
|
+
expect { subject.build_handlers(directory) }.not_to raise_error
|
15
|
+
expect(subject.build_handlers(directory)).not_to be_nil
|
16
|
+
handlers = subject.build_handlers(directory)
|
17
|
+
expect(handlers[:before_hooks].size).to eq(2)
|
18
|
+
expect(handlers[:after_hooks].size).to eq(2)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should return nil when hook file absent' do
|
22
|
+
directory = File.dirname(__FILE__)
|
23
|
+
|
24
|
+
expect { subject.build_handlers(directory) }.not_to raise_error
|
25
|
+
expect(subject.build_handlers(directory)).to be_nil
|
26
|
+
end
|
27
|
+
end # context
|
28
|
+
end # describe
|
34
29
|
end # module
|
35
30
|
|
36
|
-
# End of file
|
31
|
+
# End of file
|
@@ -2,26 +2,28 @@ require 'pp'
|
|
2
2
|
|
3
3
|
require_relative '../../lib/cukedep/file-action'
|
4
4
|
|
5
|
-
copy_config = {
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
copy_config = {
|
6
|
+
save_patterns: [],
|
7
|
+
save_subdir: '',
|
8
|
+
delete_patterns: [],
|
9
|
+
delete_subdir: '',
|
10
|
+
copy_patterns: ['*.txt'],
|
11
|
+
copy_subdir: ''
|
12
|
+
}
|
11
13
|
|
12
14
|
pp Dir.pwd
|
13
15
|
instance = Cukedep::ActionTriplet.new(copy_config)
|
14
|
-
|
15
|
-
files_to_copy_dir = '
|
16
|
+
path = 'C:/Ruby193/lib/ruby/site_ruby/Cukedep/spec/cukedep/'
|
17
|
+
files_to_copy_dir = path + 'sample_features/files_to_copy'
|
16
18
|
|
17
19
|
Dir.chdir(files_to_copy_dir)
|
18
20
|
pp Dir.pwd
|
19
21
|
|
20
|
-
proj_dir =
|
22
|
+
proj_dir = path + 'dummy_project'
|
21
23
|
instance.run!(Dir.getwd, proj_dir)
|
22
24
|
|
23
25
|
# Check that the project dir contain the requested files
|
24
26
|
Dir.chdir(proj_dir)
|
25
27
|
pp Dir.pwd # TODO
|
26
28
|
actuals = Dir['*.*']
|
27
|
-
pp actuals
|
29
|
+
pp actuals
|
@@ -10,12 +10,11 @@ require_relative '../../lib/cukedep/gherkin-listener'
|
|
10
10
|
require_relative '../../lib/cukedep/feature-model'
|
11
11
|
|
12
12
|
module Cukedep # Open module to get rid of long qualified names
|
13
|
-
|
14
13
|
describe FeatureModel do
|
15
14
|
# An array of FeatureFile objects created after parsing sample files.
|
16
15
|
FeatureFiles = begin
|
17
16
|
listener = GherkinListener.new
|
18
|
-
|
17
|
+
extend(FileParsing) # Add behaviour from mixin module
|
19
18
|
parse_for(listener) # Method from mixin to parse sample feature files
|
20
19
|
listener.feature_files
|
21
20
|
end
|
@@ -31,7 +30,6 @@ describe FeatureModel do
|
|
31
30
|
it 'should know its feature file objects' do
|
32
31
|
expect(subject.feature_files).to eq(FeatureFiles)
|
33
32
|
end
|
34
|
-
|
35
33
|
end # context
|
36
34
|
|
37
35
|
context 'Provided services:' do
|
@@ -52,7 +50,7 @@ describe FeatureModel do
|
|
52
50
|
second_id = 'qux'
|
53
51
|
found = subject.select_by_ids(one_id, second_id)
|
54
52
|
expect(found.size).to eq(2)
|
55
|
-
actual_ids = found.map {|ff| ff.feature.identifier}
|
53
|
+
actual_ids = found.map { |ff| ff.feature.identifier }
|
56
54
|
expected_ids = [one_id, second_id]
|
57
55
|
expect(actual_ids.sort).to eq(expected_ids.sort)
|
58
56
|
|
@@ -60,29 +58,31 @@ describe FeatureModel do
|
|
60
58
|
wrong_id = 'does_not_exist'
|
61
59
|
err_type = StandardError
|
62
60
|
err_msg = "No feature file with identifier 'does_not_exist'."
|
63
|
-
expect { subject.select_by_ids(wrong_id) }
|
61
|
+
expect { subject.select_by_ids(wrong_id) }
|
62
|
+
.to raise_error(err_type, err_msg)
|
64
63
|
end
|
65
64
|
|
66
65
|
|
67
66
|
it 'should resolve dependency links' do
|
68
67
|
mapping = subject.send(:id2features)
|
69
|
-
deps = subject.dependency_links
|
68
|
+
deps = subject.dependency_links
|
70
69
|
expect(deps).not_to be_empty
|
71
70
|
|
72
71
|
# Case of an identified feature without dependencies
|
73
|
-
case1 = deps.find {|a_dep| a_dep.dependee == mapping['baz']}
|
72
|
+
case1 = deps.find { |a_dep| a_dep.dependee == mapping['baz'] }
|
74
73
|
expect(case1.dependents).to be_empty
|
75
74
|
|
76
75
|
# Case of a feature having dependencies
|
77
|
-
case2 = deps.find {|a_dep| a_dep.dependee == mapping['foo']}
|
76
|
+
case2 = deps.find { |a_dep| a_dep.dependee == mapping['foo'] }
|
78
77
|
expectations = subject.select_by_ids('bar', 'qux')
|
79
78
|
expect(case2.dependents).to eq(expectations)
|
80
79
|
end
|
81
80
|
|
82
81
|
it 'should sort the feature files' do
|
83
|
-
sorted_files = subject.sort_features_by_dep
|
84
|
-
actual_order = sorted_files.map {|f| f.feature.identifier}
|
85
|
-
expected_order = %w
|
82
|
+
sorted_files = subject.sort_features_by_dep
|
83
|
+
actual_order = sorted_files.map { |f| f.feature.identifier }
|
84
|
+
expected_order = %w(qux baz quux bar foo)
|
85
|
+
expect(actual_order).to eq(expected_order)
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'should generate mapping reports' do
|
@@ -90,14 +90,11 @@ describe FeatureModel do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
it 'should generate dependency graph' do
|
93
|
-
subject.dependency_links
|
93
|
+
subject.dependency_links
|
94
94
|
subject.draw_dependency_graph('dependencies.dot')
|
95
95
|
end
|
96
|
-
|
97
96
|
end # context
|
98
|
-
|
99
97
|
end # describe
|
100
|
-
|
101
98
|
end # module
|
102
99
|
|
103
|
-
# End of file
|
100
|
+
# End of file
|