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,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