spinach-console-reporter 0.0.1 → 0.0.2
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.
- data/.gitignore +1 -0
- data/README.md +17 -4
- data/images/after.png +0 -0
- data/images/before.png +0 -0
- data/lib/spinach-console-reporter.rb +1 -1
- data/lib/spinach-console-reporter/console.rb +274 -0
- data/spec/spec_helper.rb +1 -2
- data/spinach-console-reporter.gemspec +1 -1
- metadata +6 -4
- data/lib/spinach-console-reporter/out.rb +0 -276
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1
|
-
# Spinach::Console
|
1
|
+
# Spinach::Reporter::Console
|
2
2
|
|
3
|
-
|
3
|
+
[](http://badge.fury.io/rb/spinach-console-reporter)
|
4
|
+
|
5
|
+
This is a reporter that meant to use on Jenkins, combined with (https://github.com/dblock/jenkins-ansicolor-plugin) to bring the color output to Jenkins console.
|
6
|
+
|
7
|
+
See the comparison:
|
8
|
+
|
9
|
+
### Before
|
10
|
+
|
11
|
+

|
12
|
+
|
13
|
+
### After
|
14
|
+
|
15
|
+

|
4
16
|
|
5
17
|
## Installation
|
6
18
|
|
@@ -18,8 +30,9 @@ Or install it yourself as:
|
|
18
30
|
|
19
31
|
## Usage
|
20
32
|
|
21
|
-
|
22
|
-
|
33
|
+
```bash
|
34
|
+
$ bundle exec spinach -r console
|
35
|
+
```
|
23
36
|
## Contributing
|
24
37
|
|
25
38
|
1. Fork it
|
data/images/after.png
ADDED
Binary file
|
data/images/before.png
ADDED
Binary file
|
@@ -1,2 +1,2 @@
|
|
1
1
|
require_relative "spinach-console-reporter/error_reporting"
|
2
|
-
require_relative "spinach-console-reporter/
|
2
|
+
require_relative "spinach-console-reporter/console"
|
@@ -0,0 +1,274 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Spinach
|
3
|
+
class Reporter
|
4
|
+
class Console < Spinach::Reporter
|
5
|
+
include ErrorReporting
|
6
|
+
|
7
|
+
# The output buffers to store the reports.
|
8
|
+
attr_reader :out, :error
|
9
|
+
|
10
|
+
# The last scenario error
|
11
|
+
attr_accessor :scenario_error
|
12
|
+
|
13
|
+
# The last scenario
|
14
|
+
attr_accessor :scenario
|
15
|
+
|
16
|
+
# Initialitzes the runner
|
17
|
+
#
|
18
|
+
# @param [Hash] options
|
19
|
+
# Sets a custom output buffer by setting options[:output]
|
20
|
+
# Sets a custom error buffer by setting options[:error]
|
21
|
+
#
|
22
|
+
def initialize(*args)
|
23
|
+
super(*args)
|
24
|
+
@out = options[:output] || $stdout
|
25
|
+
@error = options[:error] || $stdout
|
26
|
+
@max_step_name_length = 0
|
27
|
+
end
|
28
|
+
|
29
|
+
# Prints the feature name to the standard output
|
30
|
+
#
|
31
|
+
# @param [Hash] data
|
32
|
+
# The feature in a JSON Gherkin format
|
33
|
+
#
|
34
|
+
def before_feature_run(feature)
|
35
|
+
name = feature.name
|
36
|
+
out.puts %Q|\n#{magenta("Feature:")} #{magenta(name)}|
|
37
|
+
end
|
38
|
+
|
39
|
+
# Prints the scenario name to the standard ouput
|
40
|
+
#
|
41
|
+
# @param [Hash] data
|
42
|
+
# The feature in a JSON Gherkin format
|
43
|
+
#
|
44
|
+
def before_scenario_run(scenario, step_definitions = nil)
|
45
|
+
@max_step_name_length = scenario.steps.map(&:name).map(&:length).max if scenario.steps.any?
|
46
|
+
name = scenario.name
|
47
|
+
out.puts "\n #{green('Scenario:')} #{green(name)}"
|
48
|
+
end
|
49
|
+
|
50
|
+
# Adds an error report and re
|
51
|
+
#
|
52
|
+
# @param [Hash] data
|
53
|
+
# The feature in a JSON Gherkin format
|
54
|
+
#
|
55
|
+
def after_scenario_run(scenario, step_definitions = nil)
|
56
|
+
if scenario_error
|
57
|
+
report_error(scenario_error, :full)
|
58
|
+
self.scenario_error = nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Adds a passed step to the output buffer.
|
63
|
+
#
|
64
|
+
# @param [Step] step
|
65
|
+
# The step.
|
66
|
+
#
|
67
|
+
# @param [Array] step_location
|
68
|
+
# The step source location
|
69
|
+
#
|
70
|
+
def on_successful_step(step, step_location, step_definitions = nil)
|
71
|
+
output_step('✔', step, :green, step_location)
|
72
|
+
self.scenario = [current_feature, current_scenario, step]
|
73
|
+
successful_steps << scenario
|
74
|
+
end
|
75
|
+
|
76
|
+
# Adds a failing step to the output buffer.
|
77
|
+
#
|
78
|
+
# @param [Hash] step
|
79
|
+
# The step in a JSON Gherkin format
|
80
|
+
#
|
81
|
+
# @param [Exception] failure
|
82
|
+
# The exception that caused the failure
|
83
|
+
#
|
84
|
+
def on_failed_step(step, failure, step_location, step_definitions = nil)
|
85
|
+
output_step('✘', step, :red, step_location)
|
86
|
+
self.scenario_error = [current_feature, current_scenario, step, failure]
|
87
|
+
failed_steps << scenario_error
|
88
|
+
end
|
89
|
+
|
90
|
+
# Adds a step that has raised an error to the output buffer.
|
91
|
+
#
|
92
|
+
# @param [Hash] step
|
93
|
+
# The step in a JSON Gherkin format
|
94
|
+
#
|
95
|
+
# @param [Exception] failure
|
96
|
+
# The exception that caused the failure
|
97
|
+
#
|
98
|
+
def on_error_step(step, failure, step_location, step_definitions = nil)
|
99
|
+
output_step('!', step, :red, step_location)
|
100
|
+
self.scenario_error = [current_feature, current_scenario, step, failure]
|
101
|
+
error_steps << scenario_error
|
102
|
+
end
|
103
|
+
|
104
|
+
# Adds an undefined step to the output buffer.
|
105
|
+
#
|
106
|
+
# @param [Hash] step
|
107
|
+
# The step in a JSON Gherkin format
|
108
|
+
#
|
109
|
+
def on_undefined_step(step, failure, step_definitions = nil)
|
110
|
+
output_step('?', step, :yellow)
|
111
|
+
self.scenario_error = [current_feature, current_scenario, step, failure]
|
112
|
+
undefined_steps << scenario_error
|
113
|
+
end
|
114
|
+
|
115
|
+
# Adds an undefined step to the output buffer.
|
116
|
+
#
|
117
|
+
# @param [Hash] step
|
118
|
+
# The step in a JSON Gherkin format
|
119
|
+
#
|
120
|
+
def on_pending_step(step, failure)
|
121
|
+
output_step('P', step, :yellow)
|
122
|
+
self.scenario_error = [current_feature, current_scenario, step, failure]
|
123
|
+
pending_steps << scenario_error
|
124
|
+
end
|
125
|
+
|
126
|
+
# Adds a feature not found message to the output buffer.
|
127
|
+
#
|
128
|
+
# @param [Hash] feature
|
129
|
+
# the feature in a json gherkin format
|
130
|
+
#
|
131
|
+
# @param [Spinach::FeatureNotFoundException] exception
|
132
|
+
# the related exception
|
133
|
+
#
|
134
|
+
def on_feature_not_found(feature)
|
135
|
+
generator = Generators::FeatureGenerator.new(feature)
|
136
|
+
lines = "Could not find steps for `#{feature.name}` feature\n\n"
|
137
|
+
lines << "\nPlease create the file #{generator.filename} at #{generator.path}, with:\n\n"
|
138
|
+
|
139
|
+
lines << generator.generate
|
140
|
+
|
141
|
+
lines.split("\n").each do |line|
|
142
|
+
out.puts " #{line}".yellow
|
143
|
+
end
|
144
|
+
out.puts "\n\n"
|
145
|
+
|
146
|
+
undefined_features << feature
|
147
|
+
end
|
148
|
+
|
149
|
+
# Adds a step that has been skipped to the output buffer.
|
150
|
+
#
|
151
|
+
# @param [Hash] step
|
152
|
+
# The step that Gherkin extracts
|
153
|
+
#
|
154
|
+
def on_skipped_step(step, step_definitions = nil)
|
155
|
+
output_step('~', step, :cyan)
|
156
|
+
end
|
157
|
+
|
158
|
+
# Adds to the output buffer a step result
|
159
|
+
#
|
160
|
+
# @param [String] symbol
|
161
|
+
# A symbol to prepend before the step keyword (might be useful to
|
162
|
+
# indicate if everything went ok or not).
|
163
|
+
#
|
164
|
+
# @param [Hash] step
|
165
|
+
# The step in a JSON Gherkin format
|
166
|
+
#
|
167
|
+
# @param [Symbol] color
|
168
|
+
# The color code to use with Colorize to colorize the output.
|
169
|
+
#
|
170
|
+
# @param [Array] step_location
|
171
|
+
# step source location and file line
|
172
|
+
#
|
173
|
+
def output_step(symbol, step, color, step_location = nil)
|
174
|
+
step_location = step_location.first.gsub("#{File.expand_path('.')}/", '# ')+":#{step_location.last.to_s}" if step_location
|
175
|
+
max_length = @max_step_name_length + 30 # Colorize and output format correction
|
176
|
+
|
177
|
+
# REMEMBER TO CORRECT PREVIOUS MAX LENGTH IF OUTPUT FORMAT IS MODIFIED
|
178
|
+
buffer = []
|
179
|
+
buffer << indent(4)
|
180
|
+
# buffer << symbol.foreground(color).bright
|
181
|
+
buffer << indent(2)
|
182
|
+
buffer << send(color, step.keyword)
|
183
|
+
buffer << indent(1)
|
184
|
+
buffer << send(color, step.name)
|
185
|
+
joined = buffer.join.ljust(max_length)
|
186
|
+
|
187
|
+
out.puts(joined + white(step_location.to_s))
|
188
|
+
end
|
189
|
+
|
190
|
+
# It prints the error summary if the run has failed
|
191
|
+
# It always print feature success summary
|
192
|
+
#
|
193
|
+
# @param [True,False] success
|
194
|
+
# whether the run has succeed or not
|
195
|
+
#
|
196
|
+
def after_run(success)
|
197
|
+
error_summary unless success
|
198
|
+
out.puts ""
|
199
|
+
run_summary
|
200
|
+
end
|
201
|
+
|
202
|
+
# Prints the feature success summary for this run.
|
203
|
+
#
|
204
|
+
def run_summary
|
205
|
+
successful_summary = format_summary(:green, successful_steps, 'Successful')
|
206
|
+
undefined_summary = format_summary(:yellow, undefined_steps, 'Undefined')
|
207
|
+
pending_summary = format_summary(:yellow, pending_steps, 'Pending')
|
208
|
+
failed_summary = format_summary(:red, failed_steps, 'Failed')
|
209
|
+
error_summary = format_summary(:red, error_steps, 'Error')
|
210
|
+
|
211
|
+
out.puts "Steps Summary: #{successful_summary}, #{undefined_summary}, #{pending_summary}, #{failed_summary}, #{error_summary}\n\n"
|
212
|
+
end
|
213
|
+
|
214
|
+
# Constructs the full step definition
|
215
|
+
#
|
216
|
+
# @param [Hash] step
|
217
|
+
# The step.
|
218
|
+
#
|
219
|
+
def full_step(step)
|
220
|
+
"#{step.keyword} #{step.name}"
|
221
|
+
end
|
222
|
+
|
223
|
+
private
|
224
|
+
|
225
|
+
def indent(n = 1)
|
226
|
+
" " * n
|
227
|
+
end
|
228
|
+
|
229
|
+
def format_summary(color, steps, message)
|
230
|
+
buffer = []
|
231
|
+
buffer << "(".colorize(color)
|
232
|
+
buffer << steps.length.to_s.colorize(:"light_#{color}")
|
233
|
+
buffer << ") ".colorize(color)
|
234
|
+
buffer << message.colorize(color)
|
235
|
+
buffer.join
|
236
|
+
end
|
237
|
+
def color(text, color_code)
|
238
|
+
"#{color_code}#{text}\e[0m"
|
239
|
+
end
|
240
|
+
|
241
|
+
def bold(text)
|
242
|
+
color(text, "\e[1m")
|
243
|
+
end
|
244
|
+
|
245
|
+
def red(text)
|
246
|
+
color(text, "\e[31m")
|
247
|
+
end
|
248
|
+
|
249
|
+
def green(text)
|
250
|
+
color(text, "\e[32m")
|
251
|
+
end
|
252
|
+
|
253
|
+
def yellow(text)
|
254
|
+
color(text, "\e[33m")
|
255
|
+
end
|
256
|
+
|
257
|
+
def blue(text)
|
258
|
+
color(text, "\e[34m")
|
259
|
+
end
|
260
|
+
|
261
|
+
def magenta(text)
|
262
|
+
color(text, "\e[35m")
|
263
|
+
end
|
264
|
+
|
265
|
+
def cyan(text)
|
266
|
+
color(text, "\e[36m")
|
267
|
+
end
|
268
|
+
|
269
|
+
def white(text)
|
270
|
+
color(text, "\e[37m")
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
16
16
|
gem.name = "spinach-console-reporter"
|
17
17
|
gem.require_paths = ["lib"]
|
18
|
-
gem.version = "0.0.
|
18
|
+
gem.version = "0.0.2"
|
19
19
|
gem.add_runtime_dependency(%q<spinach>)
|
20
20
|
gem.add_development_dependency(%q<rspec>)
|
21
21
|
gem.add_development_dependency(%q<rake>)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spinach-console-reporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: spinach
|
@@ -156,10 +156,12 @@ files:
|
|
156
156
|
- LICENSE
|
157
157
|
- README.md
|
158
158
|
- Rakefile
|
159
|
+
- images/after.png
|
160
|
+
- images/before.png
|
159
161
|
- lib/spinach-console-reporter.rb
|
162
|
+
- lib/spinach-console-reporter/console.rb
|
160
163
|
- lib/spinach-console-reporter/error_reporting.rb
|
161
164
|
- lib/spinach-console-reporter/gem_description.rb
|
162
|
-
- lib/spinach-console-reporter/out.rb
|
163
165
|
- spec/spec_helper.rb
|
164
166
|
- spinach-console-reporter.gemspec
|
165
167
|
- tasks/ci.rake
|
@@ -183,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
185
|
version: '0'
|
184
186
|
requirements: []
|
185
187
|
rubyforge_project:
|
186
|
-
rubygems_version: 1.8.
|
188
|
+
rubygems_version: 1.8.25
|
187
189
|
signing_key:
|
188
190
|
specification_version: 3
|
189
191
|
summary: A console reporter for spinach
|
@@ -1,276 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Spinach
|
3
|
-
module Console
|
4
|
-
module Reporter
|
5
|
-
class Out < Spinach::Reporter
|
6
|
-
include ErrorReporting
|
7
|
-
|
8
|
-
# The output buffers to store the reports.
|
9
|
-
attr_reader :out, :error
|
10
|
-
|
11
|
-
# The last scenario error
|
12
|
-
attr_accessor :scenario_error
|
13
|
-
|
14
|
-
# The last scenario
|
15
|
-
attr_accessor :scenario
|
16
|
-
|
17
|
-
# Initialitzes the runner
|
18
|
-
#
|
19
|
-
# @param [Hash] options
|
20
|
-
# Sets a custom output buffer by setting options[:output]
|
21
|
-
# Sets a custom error buffer by setting options[:error]
|
22
|
-
#
|
23
|
-
def initialize(*args)
|
24
|
-
super(*args)
|
25
|
-
@out = options[:output] || $stdout
|
26
|
-
@error = options[:error] || $stdout
|
27
|
-
@max_step_name_length = 0
|
28
|
-
end
|
29
|
-
|
30
|
-
# Prints the feature name to the standard output
|
31
|
-
#
|
32
|
-
# @param [Hash] data
|
33
|
-
# The feature in a JSON Gherkin format
|
34
|
-
#
|
35
|
-
def before_feature_run(feature)
|
36
|
-
name = feature.name
|
37
|
-
out.puts %Q|\n#{magenta("Feature:")} #{magenta(name)}|
|
38
|
-
end
|
39
|
-
|
40
|
-
# Prints the scenario name to the standard ouput
|
41
|
-
#
|
42
|
-
# @param [Hash] data
|
43
|
-
# The feature in a JSON Gherkin format
|
44
|
-
#
|
45
|
-
def before_scenario_run(scenario, step_definitions = nil)
|
46
|
-
@max_step_name_length = scenario.steps.map(&:name).map(&:length).max if scenario.steps.any?
|
47
|
-
name = scenario.name
|
48
|
-
out.puts "\n #{green('Scenario:')} #{green(name)}"
|
49
|
-
end
|
50
|
-
|
51
|
-
# Adds an error report and re
|
52
|
-
#
|
53
|
-
# @param [Hash] data
|
54
|
-
# The feature in a JSON Gherkin format
|
55
|
-
#
|
56
|
-
def after_scenario_run(scenario, step_definitions = nil)
|
57
|
-
if scenario_error
|
58
|
-
report_error(scenario_error, :full)
|
59
|
-
self.scenario_error = nil
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Adds a passed step to the output buffer.
|
64
|
-
#
|
65
|
-
# @param [Step] step
|
66
|
-
# The step.
|
67
|
-
#
|
68
|
-
# @param [Array] step_location
|
69
|
-
# The step source location
|
70
|
-
#
|
71
|
-
def on_successful_step(step, step_location, step_definitions = nil)
|
72
|
-
output_step('✔', step, :green, step_location)
|
73
|
-
self.scenario = [current_feature, current_scenario, step]
|
74
|
-
successful_steps << scenario
|
75
|
-
end
|
76
|
-
|
77
|
-
# Adds a failing step to the output buffer.
|
78
|
-
#
|
79
|
-
# @param [Hash] step
|
80
|
-
# The step in a JSON Gherkin format
|
81
|
-
#
|
82
|
-
# @param [Exception] failure
|
83
|
-
# The exception that caused the failure
|
84
|
-
#
|
85
|
-
def on_failed_step(step, failure, step_location, step_definitions = nil)
|
86
|
-
output_step('✘', step, :red, step_location)
|
87
|
-
self.scenario_error = [current_feature, current_scenario, step, failure]
|
88
|
-
failed_steps << scenario_error
|
89
|
-
end
|
90
|
-
|
91
|
-
# Adds a step that has raised an error to the output buffer.
|
92
|
-
#
|
93
|
-
# @param [Hash] step
|
94
|
-
# The step in a JSON Gherkin format
|
95
|
-
#
|
96
|
-
# @param [Exception] failure
|
97
|
-
# The exception that caused the failure
|
98
|
-
#
|
99
|
-
def on_error_step(step, failure, step_location, step_definitions = nil)
|
100
|
-
output_step('!', step, :red, step_location)
|
101
|
-
self.scenario_error = [current_feature, current_scenario, step, failure]
|
102
|
-
error_steps << scenario_error
|
103
|
-
end
|
104
|
-
|
105
|
-
# Adds an undefined step to the output buffer.
|
106
|
-
#
|
107
|
-
# @param [Hash] step
|
108
|
-
# The step in a JSON Gherkin format
|
109
|
-
#
|
110
|
-
def on_undefined_step(step, failure, step_definitions = nil)
|
111
|
-
output_step('?', step, :yellow)
|
112
|
-
self.scenario_error = [current_feature, current_scenario, step, failure]
|
113
|
-
undefined_steps << scenario_error
|
114
|
-
end
|
115
|
-
|
116
|
-
# Adds an undefined step to the output buffer.
|
117
|
-
#
|
118
|
-
# @param [Hash] step
|
119
|
-
# The step in a JSON Gherkin format
|
120
|
-
#
|
121
|
-
def on_pending_step(step, failure)
|
122
|
-
output_step('P', step, :yellow)
|
123
|
-
self.scenario_error = [current_feature, current_scenario, step, failure]
|
124
|
-
pending_steps << scenario_error
|
125
|
-
end
|
126
|
-
|
127
|
-
# Adds a feature not found message to the output buffer.
|
128
|
-
#
|
129
|
-
# @param [Hash] feature
|
130
|
-
# the feature in a json gherkin format
|
131
|
-
#
|
132
|
-
# @param [Spinach::FeatureNotFoundException] exception
|
133
|
-
# the related exception
|
134
|
-
#
|
135
|
-
def on_feature_not_found(feature)
|
136
|
-
generator = Generators::FeatureGenerator.new(feature)
|
137
|
-
lines = "Could not find steps for `#{feature.name}` feature\n\n"
|
138
|
-
lines << "\nPlease create the file #{generator.filename} at #{generator.path}, with:\n\n"
|
139
|
-
|
140
|
-
lines << generator.generate
|
141
|
-
|
142
|
-
lines.split("\n").each do |line|
|
143
|
-
out.puts " #{line}".yellow
|
144
|
-
end
|
145
|
-
out.puts "\n\n"
|
146
|
-
|
147
|
-
undefined_features << feature
|
148
|
-
end
|
149
|
-
|
150
|
-
# Adds a step that has been skipped to the output buffer.
|
151
|
-
#
|
152
|
-
# @param [Hash] step
|
153
|
-
# The step that Gherkin extracts
|
154
|
-
#
|
155
|
-
def on_skipped_step(step, step_definitions = nil)
|
156
|
-
output_step('~', step, :cyan)
|
157
|
-
end
|
158
|
-
|
159
|
-
# Adds to the output buffer a step result
|
160
|
-
#
|
161
|
-
# @param [String] symbol
|
162
|
-
# A symbol to prepend before the step keyword (might be useful to
|
163
|
-
# indicate if everything went ok or not).
|
164
|
-
#
|
165
|
-
# @param [Hash] step
|
166
|
-
# The step in a JSON Gherkin format
|
167
|
-
#
|
168
|
-
# @param [Symbol] color
|
169
|
-
# The color code to use with Colorize to colorize the output.
|
170
|
-
#
|
171
|
-
# @param [Array] step_location
|
172
|
-
# step source location and file line
|
173
|
-
#
|
174
|
-
def output_step(symbol, step, color, step_location = nil)
|
175
|
-
step_location = step_location.first.gsub("#{File.expand_path('.')}/", '# ')+":#{step_location.last.to_s}" if step_location
|
176
|
-
max_length = @max_step_name_length + 30 # Colorize and output format correction
|
177
|
-
|
178
|
-
# REMEMBER TO CORRECT PREVIOUS MAX LENGTH IF OUTPUT FORMAT IS MODIFIED
|
179
|
-
buffer = []
|
180
|
-
buffer << indent(4)
|
181
|
-
# buffer << symbol.foreground(color).bright
|
182
|
-
buffer << indent(2)
|
183
|
-
buffer << send(color, step.keyword)
|
184
|
-
buffer << indent(1)
|
185
|
-
buffer << send(color, step.name)
|
186
|
-
joined = buffer.join.ljust(max_length)
|
187
|
-
|
188
|
-
out.puts(joined + white(step_location.to_s))
|
189
|
-
end
|
190
|
-
|
191
|
-
# It prints the error summary if the run has failed
|
192
|
-
# It always print feature success summary
|
193
|
-
#
|
194
|
-
# @param [True,False] success
|
195
|
-
# whether the run has succeed or not
|
196
|
-
#
|
197
|
-
def after_run(success)
|
198
|
-
error_summary unless success
|
199
|
-
out.puts ""
|
200
|
-
run_summary
|
201
|
-
end
|
202
|
-
|
203
|
-
# Prints the feature success summary for this run.
|
204
|
-
#
|
205
|
-
def run_summary
|
206
|
-
successful_summary = format_summary(:green, successful_steps, 'Successful')
|
207
|
-
undefined_summary = format_summary(:yellow, undefined_steps, 'Undefined')
|
208
|
-
pending_summary = format_summary(:yellow, pending_steps, 'Pending')
|
209
|
-
failed_summary = format_summary(:red, failed_steps, 'Failed')
|
210
|
-
error_summary = format_summary(:red, error_steps, 'Error')
|
211
|
-
|
212
|
-
out.puts "Steps Summary: #{successful_summary}, #{undefined_summary}, #{pending_summary}, #{failed_summary}, #{error_summary}\n\n"
|
213
|
-
end
|
214
|
-
|
215
|
-
# Constructs the full step definition
|
216
|
-
#
|
217
|
-
# @param [Hash] step
|
218
|
-
# The step.
|
219
|
-
#
|
220
|
-
def full_step(step)
|
221
|
-
"#{step.keyword} #{step.name}"
|
222
|
-
end
|
223
|
-
|
224
|
-
private
|
225
|
-
|
226
|
-
def indent(n = 1)
|
227
|
-
" " * n
|
228
|
-
end
|
229
|
-
|
230
|
-
def format_summary(color, steps, message)
|
231
|
-
buffer = []
|
232
|
-
buffer << "(".colorize(color)
|
233
|
-
buffer << steps.length.to_s.colorize(:"light_#{color}")
|
234
|
-
buffer << ") ".colorize(color)
|
235
|
-
buffer << message.colorize(color)
|
236
|
-
buffer.join
|
237
|
-
end
|
238
|
-
def color(text, color_code)
|
239
|
-
"#{color_code}#{text}\e[0m"
|
240
|
-
end
|
241
|
-
|
242
|
-
def bold(text)
|
243
|
-
color(text, "\e[1m")
|
244
|
-
end
|
245
|
-
|
246
|
-
def red(text)
|
247
|
-
color(text, "\e[31m")
|
248
|
-
end
|
249
|
-
|
250
|
-
def green(text)
|
251
|
-
color(text, "\e[32m")
|
252
|
-
end
|
253
|
-
|
254
|
-
def yellow(text)
|
255
|
-
color(text, "\e[33m")
|
256
|
-
end
|
257
|
-
|
258
|
-
def blue(text)
|
259
|
-
color(text, "\e[34m")
|
260
|
-
end
|
261
|
-
|
262
|
-
def magenta(text)
|
263
|
-
color(text, "\e[35m")
|
264
|
-
end
|
265
|
-
|
266
|
-
def cyan(text)
|
267
|
-
color(text, "\e[36m")
|
268
|
-
end
|
269
|
-
|
270
|
-
def white(text)
|
271
|
-
color(text, "\e[37m")
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|