cukedep 0.1.11 → 0.2.00

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +6 -14
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +10 -10
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +5 -5
  6. data/LICENSE.txt +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +30 -30
  9. data/bin/cukedep +15 -15
  10. data/lib/cukedep/application.rb +105 -112
  11. data/lib/cukedep/cli/cmd-line.rb +11 -13
  12. data/lib/cukedep/config.rb +85 -89
  13. data/lib/cukedep/constants.rb +5 -5
  14. data/lib/cukedep/cuke-runner.rb +191 -198
  15. data/lib/cukedep/customization.rb +30 -30
  16. data/lib/cukedep/feature-model.rb +43 -46
  17. data/lib/cukedep/feature-rep.rb +9 -11
  18. data/lib/cukedep/file-action.rb +11 -18
  19. data/lib/cukedep/gherkin-facade.rb +11 -6
  20. data/lib/cukedep/gherkin-listener.rb +12 -42
  21. data/lib/cukedep/hook-dsl.rb +78 -78
  22. data/lib/cukedep/sandbox.rb +15 -16
  23. data/lib/cukedep.rb +1 -2
  24. data/sample/features/step_definitions/steps.rb +2 -2
  25. data/sample/model/model.rb +19 -20
  26. data/spec/cukedep/application_spec.rb +80 -80
  27. data/spec/cukedep/cli/cmd-line_spec.rb +88 -88
  28. data/spec/cukedep/cuke-runner_spec.rb +74 -74
  29. data/spec/cukedep/customization_spec.rb +31 -31
  30. data/spec/cukedep/debug-file-action.rb +29 -29
  31. data/spec/cukedep/feature-model_spec.rb +100 -100
  32. data/spec/cukedep/feature-rep_spec.rb +2 -1
  33. data/spec/cukedep/file-action_spec.rb +365 -366
  34. data/spec/cukedep/file-parsing.rb +39 -41
  35. data/spec/cukedep/gherkin-facade_spec.rb +48 -49
  36. data/spec/cukedep/gherkin-listener_spec.rb +55 -57
  37. data/spec/cukedep/hook-dsl_spec.rb +182 -182
  38. data/spec/cukedep/sample_features/cukedep_hooks.rb +30 -30
  39. data/spec/cukedep/sample_features/standalone.feature +1 -1
  40. data/templates/rake.erb +12 -21
  41. metadata +80 -58
  42. data/sample/result.html +0 -472
  43. data/spec/cukedep/sample_features/cukedep.rake +0 -215
  44. data/spec/cukedep/sample_features/dependencies.dot +0 -38
  45. data/spec/cukedep/sample_features/feature2id.csv +0 -7
@@ -1,88 +1,88 @@
1
- # File: cmd-line_spec.rb
2
-
3
- require 'stringio'
4
- require 'English'
5
- require_relative '../../spec_helper'
6
-
7
- # Load the class under testing
8
- require_relative '../../../lib/cukedep/cli/cmd-line'
9
-
10
- module Cukedep # Open module to get rid of long qualified names
11
- describe CLI::CmdLine do
12
- context 'Creation & initialization:' do
13
- subject { CLI::CmdLine.new }
14
-
15
- it 'should be created without argument' do
16
- expect { CLI::CmdLine.new }.not_to raise_error
17
- end
18
- end # context
19
-
20
- context 'Provided services:' do
21
- def capture_output()
22
- @output = $DEFAULT_OUTPUT
23
- ostream = StringIO.new('rw')
24
- $DEFAULT_OUTPUT = ostream
25
- end
26
-
27
- def release_output()
28
- $DEFAULT_OUTPUT = @output
29
- end
30
-
31
-
32
- it 'should accept an empty command-line' do
33
- expect { subject.parse!([]) }.not_to raise_error
34
- expect(subject.options).to be_empty
35
- end
36
-
37
- it 'should accept the dry-run option' do
38
- expect { subject.parse!(['--dry-run']) }.not_to raise_error
39
- expect(subject.options).to eq(dryrun: true)
40
- end
41
-
42
- it 'should accept the setup option' do
43
- expect { subject.parse!(['--setup']) }.not_to raise_error
44
- expect(subject.options).to eq(setup: true)
45
- end
46
-
47
- it 'should validate the project option argument' do
48
- # Case 1: missing project dir argument
49
- cmd_opts = ['--project']
50
- err_type = StandardError
51
- err_msg = <<-MSG_END
52
- No argument provided with command line option: --project
53
- To see the command-line syntax, do:
54
- cukedep --help
55
- MSG_END
56
- expect { subject.parse!(cmd_opts) }.to raise_error(err_type)
57
-
58
- # Case 2: non existing project dir
59
- cmd_opts = ['--project', 'nowhere']
60
- err_msg = "Cannot find the directory 'nowhere'."
61
- expect { subject.parse!(cmd_opts) }.to raise_error(err_type, err_msg)
62
-
63
- # Case 3: project dir exists
64
- # cmd_opts = ['--project', '../../../sample']
65
- # expect { subject.parse!(cmd_opts) }.not_to raise_error
66
- # expect(subject.options).to eq({ :project => '../../../sample' })
67
- end
68
-
69
- it 'should handle the version option' do
70
- capture_output
71
- cmd_opts = ['--version']
72
- expect { subject.parse!(cmd_opts) }.to raise_error(SystemExit)
73
- expect($DEFAULT_OUTPUT.string).to eq(Cukedep::Version + "\n")
74
- release_output
75
- end
76
-
77
- it 'should handle the help option' do
78
- capture_output
79
- cmd_opts = ['--help']
80
- expect { subject.parse!(cmd_opts) }.to raise_error(SystemExit)
81
- expect($DEFAULT_OUTPUT.string).to eq(subject.parser.to_s)
82
- release_output
83
- end
84
- end # context
85
- end # describe
86
- end # module
87
-
88
- # End of file
1
+ # File: cmd-line_spec.rb
2
+
3
+ require 'stringio'
4
+ require 'English'
5
+ require_relative '../../spec_helper'
6
+
7
+ # Load the class under testing
8
+ require_relative '../../../lib/cukedep/cli/cmd-line'
9
+
10
+ module Cukedep # Open module to get rid of long qualified names
11
+ describe CLI::CmdLine do
12
+ context 'Creation & initialization:' do
13
+ subject { CLI::CmdLine.new }
14
+
15
+ it 'should be created without argument' do
16
+ expect { CLI::CmdLine.new }.not_to raise_error
17
+ end
18
+ end # context
19
+
20
+ context 'Provided services:' do
21
+ def capture_output
22
+ @output = $DEFAULT_OUTPUT
23
+ ostream = StringIO.new('rw')
24
+ $DEFAULT_OUTPUT = ostream
25
+ end
26
+
27
+ def release_output
28
+ $DEFAULT_OUTPUT = @output
29
+ end
30
+
31
+
32
+ it 'should accept an empty command-line' do
33
+ expect { subject.parse!([]) }.not_to raise_error
34
+ expect(subject.options).to be_empty
35
+ end
36
+
37
+ it 'should accept the dry-run option' do
38
+ expect { subject.parse!(['--dry-run']) }.not_to raise_error
39
+ expect(subject.options).to eq(dryrun: true)
40
+ end
41
+
42
+ it 'should accept the setup option' do
43
+ expect { subject.parse!(['--setup']) }.not_to raise_error
44
+ expect(subject.options).to eq(setup: true)
45
+ end
46
+
47
+ it 'should validate the project option argument' do
48
+ # Case 1: missing project dir argument
49
+ cmd_opts = ['--project']
50
+ err_type = StandardError
51
+ err_msg = <<-MSG_END
52
+ No argument provided with command line option: --project
53
+ To see the command-line syntax, do:
54
+ cukedep --help
55
+ MSG_END
56
+ expect { subject.parse!(cmd_opts) }.to raise_error(err_type)
57
+
58
+ # Case 2: non existing project dir
59
+ cmd_opts = ['--project', 'nowhere']
60
+ err_msg = "Cannot find the directory 'nowhere'."
61
+ expect { subject.parse!(cmd_opts) }.to raise_error(err_type, err_msg)
62
+
63
+ # Case 3: project dir exists
64
+ # cmd_opts = ['--project', '../../../sample']
65
+ # expect { subject.parse!(cmd_opts) }.not_to raise_error
66
+ # expect(subject.options).to eq({ :project => '../../../sample' })
67
+ end
68
+
69
+ it 'should handle the version option' do
70
+ capture_output
71
+ cmd_opts = ['--version']
72
+ expect { subject.parse!(cmd_opts) }.to raise_error(SystemExit)
73
+ expect($DEFAULT_OUTPUT.string).to eq(Cukedep::Version + "\n")
74
+ release_output
75
+ end
76
+
77
+ it 'should handle the help option' do
78
+ capture_output
79
+ cmd_opts = ['--help']
80
+ expect { subject.parse!(cmd_opts) }.to raise_error(SystemExit)
81
+ expect($DEFAULT_OUTPUT.string).to eq(subject.parser.to_s)
82
+ release_output
83
+ end
84
+ end # context
85
+ end # describe
86
+ end # module
87
+
88
+ # End of file
@@ -1,74 +1,74 @@
1
- # File: cuke-runner_spec.rb
2
-
3
- require_relative '../spec_helper'
4
- require_relative '../../lib/cukedep/config'
5
-
6
- # Load the class under testing
7
- require_relative '../../lib/cukedep/cuke-runner'
8
-
9
-
10
- module Cukedep # Open module to get rid of long qualified names
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'
16
- end
17
-
18
- subject { CukeRunner.new(base_dir, project_dir, Config.default) }
19
-
20
- before(:each) do
21
- @orig_dir = Dir.getwd
22
- Dir.chdir(File.dirname(__FILE__))
23
- end
24
-
25
- after(:each) do
26
- Dir.chdir(@orig_dir)
27
- end
28
-
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
73
- end # module
74
- # End of file
1
+ # File: cuke-runner_spec.rb
2
+
3
+ require_relative '../spec_helper'
4
+ require_relative '../../lib/cukedep/config'
5
+
6
+ # Load the class under testing
7
+ require_relative '../../lib/cukedep/cuke-runner'
8
+
9
+
10
+ module Cukedep # Open module to get rid of long qualified names
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'
16
+ end
17
+
18
+ subject { CukeRunner.new(base_dir, project_dir, Config.default) }
19
+
20
+ before(:each) do
21
+ @orig_dir = Dir.getwd
22
+ Dir.chdir(File.dirname(__FILE__))
23
+ end
24
+
25
+ after(:each) do
26
+ Dir.chdir(@orig_dir)
27
+ end
28
+
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
73
+ end # module
74
+ # End of file
@@ -1,31 +1,31 @@
1
- # File: customization_spec.rb
2
-
3
- require_relative '../spec_helper'
4
-
5
- # Load the class under testing
6
- require_relative '../../lib/cukedep/customization'
7
-
8
- module Cukedep # Open module to get rid of long qualified names
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
29
- end # module
30
-
31
- # End of file
1
+ # File: customization_spec.rb
2
+
3
+ require_relative '../spec_helper'
4
+
5
+ # Load the class under testing
6
+ require_relative '../../lib/cukedep/customization'
7
+
8
+ module Cukedep # Open module to get rid of long qualified names
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
29
+ end # module
30
+
31
+ # End of file
@@ -1,29 +1,29 @@
1
- require 'pp'
2
-
3
- require_relative '../../lib/cukedep/file-action'
4
-
5
- copy_config = {
6
- save_patterns: [],
7
- save_subdir: '',
8
- delete_patterns: [],
9
- delete_subdir: '',
10
- copy_patterns: ['*.txt'],
11
- copy_subdir: ''
12
- }
13
-
14
- pp Dir.pwd
15
- instance = Cukedep::ActionTriplet.new(copy_config)
16
- path = 'C:/Ruby193/lib/ruby/site_ruby/Cukedep/spec/cukedep/'
17
- files_to_copy_dir = path + 'sample_features/files_to_copy'
18
-
19
- Dir.chdir(files_to_copy_dir)
20
- pp Dir.pwd
21
-
22
- proj_dir = path + 'dummy_project'
23
- instance.run!(Dir.getwd, proj_dir)
24
-
25
- # Check that the project dir contain the requested files
26
- Dir.chdir(proj_dir)
27
- pp Dir.pwd # TODO
28
- actuals = Dir['*.*']
29
- pp actuals
1
+ require 'pp'
2
+
3
+ require_relative '../../lib/cukedep/file-action'
4
+
5
+ copy_config = {
6
+ save_patterns: [],
7
+ save_subdir: '',
8
+ delete_patterns: [],
9
+ delete_subdir: '',
10
+ copy_patterns: ['*.txt'],
11
+ copy_subdir: ''
12
+ }
13
+
14
+ pp Dir.pwd
15
+ instance = Cukedep::ActionTriplet.new(copy_config)
16
+ path = 'C:/Ruby193/lib/ruby/site_ruby/Cukedep/spec/cukedep/'
17
+ files_to_copy_dir = path + 'sample_features/files_to_copy'
18
+
19
+ Dir.chdir(files_to_copy_dir)
20
+ pp Dir.pwd
21
+
22
+ proj_dir = path + 'dummy_project'
23
+ instance.run!(Dir.getwd, proj_dir)
24
+
25
+ # Check that the project dir contain the requested files
26
+ Dir.chdir(proj_dir)
27
+ pp Dir.pwd # TODO
28
+ actuals = Dir['*.*']
29
+ pp actuals
@@ -1,100 +1,100 @@
1
- # File: feature-model_spec.rb
2
-
3
- require_relative '../spec_helper'
4
-
5
-
6
- require_relative 'file-parsing'
7
- require_relative '../../lib/cukedep/gherkin-listener'
8
-
9
- # Load the class under testing
10
- require_relative '../../lib/cukedep/feature-model'
11
-
12
- module Cukedep # Open module to get rid of long qualified names
13
- describe FeatureModel do
14
- # An array of FeatureFile objects created after parsing sample files.
15
- FeatureFiles = begin
16
- listener = GherkinListener.new
17
- extend(FileParsing) # Add behaviour from mixin module
18
- parse_for(listener) # Method from mixin to parse sample feature files
19
- listener.feature_files
20
- end
21
-
22
- # Default instantiation rule
23
- subject { FeatureModel.new(FeatureFiles) }
24
-
25
- context 'Creation and initialization:' do
26
- it 'should be created with a list of feature files' do
27
- expect { FeatureModel.new(FeatureFiles) }.not_to raise_error
28
- end
29
-
30
- it 'should know its feature file objects' do
31
- expect(subject.feature_files).to eq(FeatureFiles)
32
- end
33
- end # context
34
-
35
- context 'Provided services:' do
36
- it 'should list all features without identifiers' do
37
- unidentified = subject.anonymous_features
38
- expect(unidentified.size).to eq(1)
39
- expect(unidentified[0].filepath).to match(/standalone\.feature$/)
40
- end
41
-
42
- it 'should retrieve a feature file given its identifier' do
43
- # Case of a single id argument
44
- one_id = 'foo'
45
- found = subject.select_by_ids(one_id)
46
- expect(found.size).to eq(1)
47
- expect(found[0].feature.identifier).to eq(one_id)
48
-
49
- # Case of multiple id arguments
50
- second_id = 'qux'
51
- found = subject.select_by_ids(one_id, second_id)
52
- expect(found.size).to eq(2)
53
- actual_ids = found.map { |ff| ff.feature.identifier }
54
- expected_ids = [one_id, second_id]
55
- expect(actual_ids.sort).to eq(expected_ids.sort)
56
-
57
- # Case of unknown id
58
- wrong_id = 'does_not_exist'
59
- err_type = StandardError
60
- err_msg = "No feature file with identifier 'does_not_exist'."
61
- expect { subject.select_by_ids(wrong_id) }
62
- .to raise_error(err_type, err_msg)
63
- end
64
-
65
-
66
- it 'should resolve dependency links' do
67
- mapping = subject.send(:id2features)
68
- deps = subject.dependency_links
69
- expect(deps).not_to be_empty
70
-
71
- # Case of an identified feature without dependencies
72
- case1 = deps.find { |a_dep| a_dep.dependee == mapping['baz'] }
73
- expect(case1.dependents).to be_empty
74
-
75
- # Case of a feature having dependencies
76
- case2 = deps.find { |a_dep| a_dep.dependee == mapping['foo'] }
77
- expectations = subject.select_by_ids('bar', 'qux')
78
- expect(case2.dependents).to eq(expectations)
79
- end
80
-
81
- it 'should sort the feature files' do
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
- end
87
-
88
- it 'should generate mapping reports' do
89
- subject.mapping_reports('feature2id.csv', 'id2feature.csv')
90
- end
91
-
92
- it 'should generate dependency graph' do
93
- subject.dependency_links
94
- subject.draw_dependency_graph('dependencies.dot')
95
- end
96
- end # context
97
- end # describe
98
- end # module
99
-
100
- # End of file
1
+ # File: feature-model_spec.rb
2
+
3
+ require_relative '../spec_helper'
4
+
5
+
6
+ require_relative 'file-parsing'
7
+ require_relative '../../lib/cukedep/gherkin-listener'
8
+
9
+ # Load the class under testing
10
+ require_relative '../../lib/cukedep/feature-model'
11
+
12
+ module Cukedep # Open module to get rid of long qualified names
13
+ describe FeatureModel do
14
+ # An array of FeatureFile objects created after parsing sample files.
15
+ FeatureFiles = begin
16
+ listener = GherkinListener.new
17
+ extend(FileParsing) # Add behaviour from mixin module
18
+ parse_for(listener) # Method from mixin to parse sample feature files
19
+ listener.feature_files
20
+ end
21
+
22
+ # Default instantiation rule
23
+ subject { FeatureModel.new(FeatureFiles) }
24
+
25
+ context 'Creation and initialization:' do
26
+ it 'should be created with a list of feature files' do
27
+ expect { FeatureModel.new(FeatureFiles) }.not_to raise_error
28
+ end
29
+
30
+ it 'should know its feature file objects' do
31
+ expect(subject.feature_files).to eq(FeatureFiles)
32
+ end
33
+ end # context
34
+
35
+ context 'Provided services:' do
36
+ it 'should list all features without identifiers' do
37
+ unidentified = subject.anonymous_features
38
+ expect(unidentified.size).to eq(1)
39
+ expect(unidentified[0].filepath).to match(/standalone\.feature$/)
40
+ end
41
+
42
+ it 'should retrieve a feature file given its identifier' do
43
+ # Case of a single id argument
44
+ one_id = 'foo'
45
+ found = subject.select_by_ids(one_id)
46
+ expect(found.size).to eq(1)
47
+ expect(found[0].feature.identifier).to eq(one_id)
48
+
49
+ # Case of multiple id arguments
50
+ second_id = 'qux'
51
+ found = subject.select_by_ids(one_id, second_id)
52
+ expect(found.size).to eq(2)
53
+ actual_ids = found.map { |ff| ff.feature.identifier }
54
+ expected_ids = [one_id, second_id]
55
+ expect(actual_ids.sort).to eq(expected_ids.sort)
56
+
57
+ # Case of unknown id
58
+ wrong_id = 'does_not_exist'
59
+ err_type = StandardError
60
+ err_msg = "No feature file with identifier 'does_not_exist'."
61
+ expect { subject.select_by_ids(wrong_id) }
62
+ .to raise_error(err_type, err_msg)
63
+ end
64
+
65
+
66
+ it 'should resolve dependency links' do
67
+ mapping = subject.send(:id2features)
68
+ deps = subject.dependency_links
69
+ expect(deps).not_to be_empty
70
+
71
+ # Case of an identified feature without dependencies
72
+ case1 = deps.find { |a_dep| a_dep.dependee == mapping['baz'] }
73
+ expect(case1.dependents).to be_empty
74
+
75
+ # Case of a feature having dependencies
76
+ case2 = deps.find { |a_dep| a_dep.dependee == mapping['foo'] }
77
+ expectations = subject.select_by_ids('bar', 'qux')
78
+ expect(case2.dependents).to eq(expectations)
79
+ end
80
+
81
+ it 'should sort the feature files' do
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
+ end
87
+
88
+ it 'should generate mapping reports' do
89
+ subject.mapping_reports('feature2id.csv', 'id2feature.csv')
90
+ end
91
+
92
+ it 'should generate dependency graph' do
93
+ subject.dependency_links
94
+ subject.draw_dependency_graph('dependencies.dot')
95
+ end
96
+ end # context
97
+ end # describe
98
+ end # module
99
+
100
+ # End of file
@@ -8,7 +8,8 @@ require_relative '../../lib/cukedep/feature-rep'
8
8
  module Cukedep # Open module to get rid of long qualified names
9
9
  describe FeatureRep do
10
10
  # Tag names as provided by Gherkin parser
11
- RawTagNames = %w(@some @feature:CO801_foo @depends_on:CO201_bar @depends_on:CO001_qux)
11
+ RawTagNames = %w(@some @feature:CO801_foo @depends_on:CO201_bar
12
+ @depends_on:CO001_qux).freeze
12
13
 
13
14
  SampleTagNames = RawTagNames.map { |t| t[1..-1] }
14
15