cukedep 0.1.11 → 0.2.00

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.
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,41 +1,39 @@
1
- # File: file-parsing.rb
2
-
3
- require_relative '../../lib/cukedep/gherkin-facade'
4
-
5
- module Cukedep # This module is used as a namespace
6
- # Mixin module used in tests.
7
- # Purpose: to parse a sample of feature files.
8
- module FileParsing
9
- # The list of sample feature file names.
10
- SampleFileNames =
11
- [ 'a_few_tests.feature',
12
- 'some_tests.feature',
13
- 'still_other_tests.feature',
14
- 'yet_other_tests.feature',
15
- 'more_tests.feature',
16
- 'standalone.feature'
17
- ]
18
-
19
- # Helper method. It parses sample feature files and
20
- # notifies the provided listener of its progress.
21
- def parse_for(aListener)
22
- orig_dir = Dir.getwd
23
- begin
24
- # Determine the folder where the sample files reside
25
- my_dir = File.dirname(__FILE__)
26
- sample_dir = File.expand_path(my_dir + '/sample_features')
27
- Dir.chdir(sample_dir)
28
-
29
- # Parse the specified feature files in work directory
30
- is_verbose = false
31
- gherkin_facade = GherkinFacade.new(is_verbose, 'UTF-8')
32
- gherkin_facade.parse_features(aListener, SampleFileNames)
33
- ensure
34
- Dir.chdir(orig_dir)
35
- end
36
-
37
- end
38
-
39
- end # module
40
- end # module
41
- # End of file
1
+ # File: file-parsing.rb
2
+
3
+ require_relative '../../lib/cukedep/gherkin-facade'
4
+
5
+ module Cukedep # This module is used as a namespace
6
+ # Mixin module used in tests.
7
+ # Purpose: to parse a sample of feature files.
8
+ module FileParsing
9
+ # The list of sample feature file names.
10
+ SampleFileNames = [
11
+ 'a_few_tests.feature',
12
+ 'some_tests.feature',
13
+ 'still_other_tests.feature',
14
+ 'yet_other_tests.feature',
15
+ 'more_tests.feature',
16
+ 'standalone.feature'
17
+ ].freeze
18
+
19
+ # Helper method. It parses sample feature files and
20
+ # notifies the provided listener of its progress.
21
+ def parse_for(aListener)
22
+ orig_dir = Dir.getwd
23
+ begin
24
+ # Determine the folder where the sample files reside
25
+ my_dir = File.dirname(__FILE__)
26
+ sample_dir = File.expand_path(my_dir + '/sample_features')
27
+ Dir.chdir(sample_dir)
28
+
29
+ # Parse the specified feature files in work directory
30
+ is_verbose = false
31
+ gherkin_facade = GherkinFacade.new(is_verbose, 'UTF-8')
32
+ gherkin_facade.parse_features(aListener, SampleFileNames)
33
+ ensure
34
+ Dir.chdir(orig_dir)
35
+ end
36
+ end
37
+ end # module
38
+ end # module
39
+ # End of file
@@ -1,49 +1,48 @@
1
- # File: file-actions_spec.rb
2
-
3
- require_relative '../spec_helper'
4
-
5
- # Load the class under testing
6
- require_relative '../../lib/cukedep/gherkin-facade'
7
- require_relative '../../lib/cukedep/gherkin-listener'
8
-
9
- module Cukedep # Open module to get rid of long qualified names
10
- describe GherkinFacade do
11
- subject { GherkinFacade.new(false, 'UTF-8') }
12
-
13
- context 'Creation & initialization:' do
14
- it 'should be created with two arguments' do
15
- expect { GherkinFacade.new(true, 'UTF-8') }.not_to raise_error
16
- end
17
-
18
- it 'should whether it is verbose or not' do
19
- # Case 1: instance is verbose
20
- expect(subject.verbose).to be_falsey
21
-
22
- # Case 2: instance is silent
23
- instance = GherkinFacade.new(true, 'UTF-8')
24
- expect(instance.verbose).to be_truthy
25
- end
26
-
27
- it 'should know the feature file external encoding' do
28
- expect(subject.external_encoding).to eq('UTF-8')
29
- end
30
- end # context
31
-
32
-
33
-
34
- context 'Provided services:' do
35
- let(:listener) { GherkinListener.new }
36
- it 'should parse ASCII feature files' do
37
- instance = GherkinFacade.new(false, 'US-ASCII')
38
- patterns = [ 'sample_features/a_few_tests.feature' ]
39
- expect { instance.parse_features(listener, patterns) }.not_to raise_error
40
- end
41
-
42
- it 'should parse feature files with other external encoding' do
43
- patterns = [ 'sample_features/standalone.feature' ]
44
- expect { subject.parse_features(listener, patterns) }.not_to raise_error
45
- end
46
- end # context
47
- end # describe
48
- end # module
49
- # End of file
1
+ # File: file-actions_spec.rb
2
+
3
+ require_relative '../spec_helper'
4
+
5
+ # Load the class under testing
6
+ require_relative '../../lib/cukedep/gherkin-facade'
7
+ require_relative '../../lib/cukedep/gherkin-listener'
8
+
9
+ module Cukedep # Open module to get rid of long qualified names
10
+ describe GherkinFacade do
11
+ subject { GherkinFacade.new(false, 'UTF-8') }
12
+
13
+ context 'Creation & initialization:' do
14
+ it 'should be created with two arguments' do
15
+ expect { GherkinFacade.new(true, 'UTF-8') }.not_to raise_error
16
+ end
17
+
18
+ it 'should whether it is verbose or not' do
19
+ # Case 1: instance is verbose
20
+ expect(subject.verbose).to be_falsey
21
+
22
+ # Case 2: instance is silent
23
+ instance = GherkinFacade.new(true, 'UTF-8')
24
+ expect(instance.verbose).to be_truthy
25
+ end
26
+
27
+ it 'should know the feature file external encoding' do
28
+ expect(subject.external_encoding).to eq('UTF-8')
29
+ end
30
+ end # context
31
+
32
+
33
+ context 'Provided services:' do
34
+ let(:listener) { GherkinListener.new }
35
+ it 'should parse ASCII feature files' do
36
+ instance = GherkinFacade.new(false, 'US-ASCII')
37
+ patterns = ['sample_features/a_few_tests.feature']
38
+ expect { instance.parse_features(listener, patterns) }.not_to raise_error
39
+ end
40
+
41
+ # it 'should parse feature files with other external encoding' do
42
+ # patterns = [ 'sample_features/standalone.feature' ]
43
+ # expect { subject.parse_features(listener, patterns) }.not_to raise_error
44
+ # end
45
+ end # context
46
+ end # describe
47
+ end # module
48
+ # End of file
@@ -1,57 +1,55 @@
1
- # File: gherkin-listener_spec.rb
2
-
3
- require_relative '../spec_helper'
4
-
5
-
6
- require_relative 'file-parsing'
7
-
8
- # Load the class under testing
9
- require_relative '../../lib/cukedep/gherkin-listener'
10
-
11
- module Cukedep # Open module to get rid of long qualified names
12
- describe GherkinListener do
13
- include FileParsing # Use mixin module to parse of sample feature files
14
-
15
- subject { GherkinListener.new }
16
-
17
- context 'Creation and initialization:' do
18
- it 'should be created without argument' do
19
- expect { GherkinListener.new }.not_to raise_error
20
- end
21
-
22
- it 'should have no feature file at start' do
23
- expect(subject.feature_files.size).to eq(0)
24
- end
25
- end # context
26
-
27
- context 'Provided services:' do
28
- it 'should build a FeatureFileRep per parsed file' do
29
- parse_for(subject)
30
- expect(subject.feature_files.size)
31
- .to eq(FileParsing::SampleFileNames.size)
32
- end
33
-
34
- it 'should know the tags of each feature' do
35
- parse_for(subject)
36
-
37
- expectations = [
38
- %w(a_few feature:qux),
39
- %w(some feature:foo depends_on:bar depends_on:qux),
40
- %w(still_other feature:baz),
41
- %w(yet_other feature:bar depends_on:baz depends_on:qux depends_on:quux),
42
- %w(feature:quux more),
43
- []
44
- ]
45
-
46
- # Sort the expectations to ease further comparison
47
- expectations.map!(&:sort)
48
-
49
- subject.feature_files.each_with_index do |file, i|
50
- expect(file.feature.tags.sort).to eq(expectations[i])
51
- end
52
- end
53
- end # context
54
- end # describe
55
- end # module
56
-
57
- # End of file
1
+ # File: gherkin-listener_spec.rb
2
+
3
+ require_relative '../spec_helper'
4
+ require_relative 'file-parsing'
5
+
6
+ # Load the class under testing
7
+ require_relative '../../lib/cukedep/gherkin-listener'
8
+
9
+ module Cukedep # Open module to get rid of long qualified names
10
+ describe GherkinListener do
11
+ include FileParsing # Use mixin module to parse of sample feature files
12
+
13
+ subject { GherkinListener.new }
14
+
15
+ context 'Creation and initialization:' do
16
+ it 'should be created without argument' do
17
+ expect { GherkinListener.new }.not_to raise_error
18
+ end
19
+
20
+ it 'should have no feature file at start' do
21
+ expect(subject.feature_files.size).to eq(0)
22
+ end
23
+ end # context
24
+
25
+ context 'Provided services:' do
26
+ it 'should build a FeatureFileRep per parsed file' do
27
+ parse_for(subject)
28
+ expect(subject.feature_files.size)
29
+ .to eq(FileParsing::SampleFileNames.size)
30
+ end
31
+
32
+ it 'should know the tags of each feature' do
33
+ parse_for(subject)
34
+
35
+ expectations = [
36
+ %w(a_few feature:qux),
37
+ %w(some feature:foo depends_on:bar depends_on:qux),
38
+ %w(still_other feature:baz),
39
+ %w(yet_other feature:bar depends_on:baz depends_on:qux depends_on:quux),
40
+ %w(feature:quux more),
41
+ []
42
+ ]
43
+
44
+ # Sort the expectations to ease further comparison
45
+ expectations.map!(&:sort)
46
+
47
+ subject.feature_files.each_with_index do |file, i|
48
+ expect(file.feature.tags.sort).to eq(expectations[i])
49
+ end
50
+ end
51
+ end # context
52
+ end # describe
53
+ end # module
54
+
55
+ # End of file
@@ -1,182 +1,182 @@
1
- # File: file-action_spec.rb
2
-
3
- require 'stringio'
4
- require_relative '../spec_helper'
5
-
6
- # Load the class under testing
7
- require_relative '../../lib/cukedep/hook-dsl'
8
-
9
- module Cukedep # Open module to get rid of long qualified names
10
- # Let's specify the behaviour of the mix-in module
11
- describe HookDSL do
12
- subject do
13
- obj = Object.new
14
- obj.extend(HookDSL)
15
- obj
16
- end
17
-
18
- context 'Hook definitions:' do
19
- let(:code_block) do
20
- -> { }
21
- end
22
-
23
- it 'should accept the before all hook' do
24
- # Case 1: before all with block code
25
- expect { subject.before_cuke(:all, &code_block) }.not_to raise_error
26
-
27
- # Case 2: before all without block code
28
- expect { subject.before_cuke(:all) }.not_to raise_error
29
- end
30
-
31
- it 'should accept the before each hook' do
32
- # Case 1: before each with block code
33
- expect { subject.before_cuke(:each, &code_block) }.not_to raise_error
34
-
35
- # Case 2: before each without block code
36
- expect { subject.before_cuke(:each) }.not_to raise_error
37
- end
38
-
39
-
40
- it 'should accept the after all hook' do
41
- # Case 1: after all with block code
42
- expect { subject.after_cuke(:all, &code_block) }.not_to raise_error
43
-
44
- # Case 2: before all without block code
45
- expect { subject.after_cuke(:all) }.not_to raise_error
46
- end
47
-
48
- it 'should accept the after each hook' do
49
- # Case 1: after each with block code
50
- expect { subject.after_cuke(:each, &code_block) }.not_to raise_error
51
-
52
- # Case 2: after each without block code
53
- expect { subject.after_cuke(:each) }.not_to raise_error
54
- end
55
-
56
- it 'should reject invalid scope argument' do
57
- # Case 1: before invalid with block code
58
- msg = "Unknown scope 'invalid' for before_cuke hook."
59
- error = StandardError
60
- expect { subject.before_cuke(:invalid, &code_block) }
61
- .to raise_error(error, msg)
62
-
63
- # Case 2: after invalid with block code
64
- msg = "Unknown scope 'invalid' for after_cuke hook."
65
- expect { subject.after_cuke(:invalid, &code_block) }
66
- .to raise_error(error, msg)
67
- end
68
-
69
-
70
- it 'should register the block code with the event' do
71
- # No block code registered yet.
72
- expect(subject.instance_variables).not_to include(:@before_hooks)
73
-
74
- # Case 1: No before all handler provided
75
- subject.before_cuke(:all)
76
- expect(subject.instance_variables).not_to include(:@before_hooks)
77
-
78
- # Case 1: Add before all handler
79
- subject.before_cuke(:all, &code_block)
80
-
81
- # Check that handler code is stored in instance variable
82
- expect(subject.instance_variables).to include(:@before_hooks)
83
- expect(subject.before_hooks.keys).to eq([:all])
84
- expect(subject.before_hooks[:all]).to eq(code_block)
85
-
86
- # Case 2: No before each handler provided
87
- subject.before_cuke(:each)
88
- expect(subject.before_hooks.keys).to eq([:all])
89
-
90
- # Case 3: Add before each handler
91
- subject.before_cuke(:each, &code_block)
92
-
93
- # Check that handler code is stored in instance variable
94
- expect(subject.before_hooks.keys).to eq([:all, :each])
95
- expect(subject.before_hooks[:each]).to eq(code_block)
96
-
97
-
98
- # Case 4: No after all handler provided
99
- subject.after_cuke(:all)
100
- expect(subject.instance_variables).not_to include(:@after_hooks)
101
-
102
- # Case 5: Add after all handler
103
- subject.after_cuke(:all, &code_block)
104
-
105
- # Check that handler code is stored in instance variable
106
- expect(subject.instance_variables).to include(:@after_hooks)
107
- expect(subject.after_hooks.keys).to eq([:all])
108
- expect(subject.after_hooks[:all]).to eq(code_block)
109
-
110
- # Case 6: No after each handler provided
111
- subject.after_cuke(:each)
112
- expect(subject.after_hooks.keys).to eq([:all])
113
-
114
- # Case 7: Add after each handler
115
- subject.after_cuke(:each, &code_block)
116
-
117
- # Check that handler code is stored in instance variable
118
- expect(subject.after_hooks.keys).to eq([:all, :each])
119
- expect(subject.after_hooks[:each]).to eq(code_block)
120
- end
121
- end # context
122
- =begin
123
- context 'Executing handler code:' do
124
- let(:ostream) { StringIO.new('', 'w') }
125
-
126
- it 'should ignore missing handler' do
127
- expect { subject.execute_hook(:before, :all) }.not_to raise_error
128
- end
129
-
130
- it 'should execute the before all handler' do
131
- text = 'before all'
132
- # Let's create the hook
133
- subject.before_cuke(:all) { ostream.print text }
134
-
135
- # Let's execute it...
136
- subject.execute_hook(:before, :all)
137
-
138
- expect(ostream.string).to eq(text)
139
- end
140
-
141
-
142
- it 'should execute the before all handler' do
143
- text = 'before each'
144
- # Let's create the hook
145
- subject.before_cuke(:each) { ostream.print text }
146
-
147
- # Let's execute it...
148
- subject.execute_hook(:before, :each)
149
-
150
- expect(ostream.string).to eq(text)
151
- end
152
-
153
-
154
- it 'should execute the after all handler' do
155
- text = 'after all'
156
- # Let's create the hook
157
- subject.after_cuke(:all) { ostream.print text }
158
-
159
- # Let's execute it...
160
- subject.execute_hook(:after, :all)
161
-
162
- expect(ostream.string).to eq(text)
163
- end
164
-
165
-
166
- it 'should execute the after each handler' do
167
- text = 'after each'
168
- # Let's create the hook
169
- subject.after_cuke(:each) { ostream.print text }
170
-
171
- # Let's execute it...
172
- subject.execute_hook(:after, :each)
173
-
174
- expect(ostream.string).to eq(text)
175
- end
176
-
177
- end # context
178
- =end
179
- end # describe
180
- end # module
181
-
182
- # End of file
1
+ # File: file-action_spec.rb
2
+
3
+ require 'stringio'
4
+ require_relative '../spec_helper'
5
+
6
+ # Load the class under testing
7
+ require_relative '../../lib/cukedep/hook-dsl'
8
+
9
+ module Cukedep # Open module to get rid of long qualified names
10
+ # Let's specify the behaviour of the mix-in module
11
+ describe HookDSL do
12
+ subject do
13
+ obj = Object.new
14
+ obj.extend(HookDSL)
15
+ obj
16
+ end
17
+
18
+ context 'Hook definitions:' do
19
+ let(:code_block) do
20
+ -> {}
21
+ end
22
+
23
+ it 'should accept the before all hook' do
24
+ # Case 1: before all with block code
25
+ expect { subject.before_cuke(:all, &code_block) }.not_to raise_error
26
+
27
+ # Case 2: before all without block code
28
+ expect { subject.before_cuke(:all) }.not_to raise_error
29
+ end
30
+
31
+ it 'should accept the before each hook' do
32
+ # Case 1: before each with block code
33
+ expect { subject.before_cuke(:each, &code_block) }.not_to raise_error
34
+
35
+ # Case 2: before each without block code
36
+ expect { subject.before_cuke(:each) }.not_to raise_error
37
+ end
38
+
39
+
40
+ it 'should accept the after all hook' do
41
+ # Case 1: after all with block code
42
+ expect { subject.after_cuke(:all, &code_block) }.not_to raise_error
43
+
44
+ # Case 2: before all without block code
45
+ expect { subject.after_cuke(:all) }.not_to raise_error
46
+ end
47
+
48
+ it 'should accept the after each hook' do
49
+ # Case 1: after each with block code
50
+ expect { subject.after_cuke(:each, &code_block) }.not_to raise_error
51
+
52
+ # Case 2: after each without block code
53
+ expect { subject.after_cuke(:each) }.not_to raise_error
54
+ end
55
+
56
+ it 'should reject invalid scope argument' do
57
+ # Case 1: before invalid with block code
58
+ msg = "Unknown scope 'invalid' for before_cuke hook."
59
+ error = StandardError
60
+ expect { subject.before_cuke(:invalid, &code_block) }
61
+ .to raise_error(error, msg)
62
+
63
+ # Case 2: after invalid with block code
64
+ msg = "Unknown scope 'invalid' for after_cuke hook."
65
+ expect { subject.after_cuke(:invalid, &code_block) }
66
+ .to raise_error(error, msg)
67
+ end
68
+
69
+
70
+ it 'should register the block code with the event' do
71
+ # No block code registered yet.
72
+ expect(subject.instance_variables).not_to include(:@before_hooks)
73
+
74
+ # Case 1: No before all handler provided
75
+ subject.before_cuke(:all)
76
+ expect(subject.instance_variables).not_to include(:@before_hooks)
77
+
78
+ # Case 1: Add before all handler
79
+ subject.before_cuke(:all, &code_block)
80
+
81
+ # Check that handler code is stored in instance variable
82
+ expect(subject.instance_variables).to include(:@before_hooks)
83
+ expect(subject.before_hooks.keys).to eq([:all])
84
+ expect(subject.before_hooks[:all]).to eq(code_block)
85
+
86
+ # Case 2: No before each handler provided
87
+ subject.before_cuke(:each)
88
+ expect(subject.before_hooks.keys).to eq([:all])
89
+
90
+ # Case 3: Add before each handler
91
+ subject.before_cuke(:each, &code_block)
92
+
93
+ # Check that handler code is stored in instance variable
94
+ expect(subject.before_hooks.keys).to eq(%i[all each])
95
+ expect(subject.before_hooks[:each]).to eq(code_block)
96
+
97
+
98
+ # Case 4: No after all handler provided
99
+ subject.after_cuke(:all)
100
+ expect(subject.instance_variables).not_to include(:@after_hooks)
101
+
102
+ # Case 5: Add after all handler
103
+ subject.after_cuke(:all, &code_block)
104
+
105
+ # Check that handler code is stored in instance variable
106
+ expect(subject.instance_variables).to include(:@after_hooks)
107
+ expect(subject.after_hooks.keys).to eq([:all])
108
+ expect(subject.after_hooks[:all]).to eq(code_block)
109
+
110
+ # Case 6: No after each handler provided
111
+ subject.after_cuke(:each)
112
+ expect(subject.after_hooks.keys).to eq([:all])
113
+
114
+ # Case 7: Add after each handler
115
+ subject.after_cuke(:each, &code_block)
116
+
117
+ # Check that handler code is stored in instance variable
118
+ expect(subject.after_hooks.keys).to eq(%i[all each])
119
+ expect(subject.after_hooks[:each]).to eq(code_block)
120
+ end
121
+ end # context
122
+ =begin
123
+ context 'Executing handler code:' do
124
+ let(:ostream) { StringIO.new('', 'w') }
125
+
126
+ it 'should ignore missing handler' do
127
+ expect { subject.execute_hook(:before, :all) }.not_to raise_error
128
+ end
129
+
130
+ it 'should execute the before all handler' do
131
+ text = 'before all'
132
+ # Let's create the hook
133
+ subject.before_cuke(:all) { ostream.print text }
134
+
135
+ # Let's execute it...
136
+ subject.execute_hook(:before, :all)
137
+
138
+ expect(ostream.string).to eq(text)
139
+ end
140
+
141
+
142
+ it 'should execute the before all handler' do
143
+ text = 'before each'
144
+ # Let's create the hook
145
+ subject.before_cuke(:each) { ostream.print text }
146
+
147
+ # Let's execute it...
148
+ subject.execute_hook(:before, :each)
149
+
150
+ expect(ostream.string).to eq(text)
151
+ end
152
+
153
+
154
+ it 'should execute the after all handler' do
155
+ text = 'after all'
156
+ # Let's create the hook
157
+ subject.after_cuke(:all) { ostream.print text }
158
+
159
+ # Let's execute it...
160
+ subject.execute_hook(:after, :all)
161
+
162
+ expect(ostream.string).to eq(text)
163
+ end
164
+
165
+
166
+ it 'should execute the after each handler' do
167
+ text = 'after each'
168
+ # Let's create the hook
169
+ subject.after_cuke(:each) { ostream.print text }
170
+
171
+ # Let's execute it...
172
+ subject.execute_hook(:after, :each)
173
+
174
+ expect(ostream.string).to eq(text)
175
+ end
176
+
177
+ end # context
178
+ =end
179
+ end # describe
180
+ end # module
181
+
182
+ # End of file