allure-cucumber 0.6.1 → 2.10.0.beta2

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.
@@ -1,7 +0,0 @@
1
- require 'aruba/cucumber'
2
-
3
- Aruba.configure do |config|
4
- # Such big values were added for debugging of the code into IDE
5
- config.exit_timeout = 6000
6
- config.io_wait_timeout = 6000
7
- end
@@ -1 +0,0 @@
1
- require 'bundler/setup'
@@ -1,17 +0,0 @@
1
- module AllureCucumber
2
- module DSL
3
-
4
- def attach_file(title, file, attach_to_step=true)
5
- @tracker = AllureCucumber::FeatureTracker.tracker
6
- options = {:file => file, :title => title}
7
- options.merge!(:step => @tracker.step_name) if attach_to_step
8
- if @tracker.scenario_name
9
- AllureRubyAdaptorApi::Builder.add_attachment(@tracker.feature_name, @tracker.scenario_name, options)
10
- else
11
- # TODO: This is possible for background steps.
12
- puts "Cannot attach #{title} to step #{@tracker.step_name} as scenario name is undefined"
13
- end
14
- end
15
-
16
- end
17
- end
@@ -1,19 +0,0 @@
1
- module AllureCucumber
2
-
3
- class FeatureTracker
4
-
5
- attr_accessor :feature_name, :scenario_name, :step_name, :step_id
6
- @@tracker = nil
7
-
8
- def self.create
9
- @@tracker = FeatureTracker.new unless @@tracker
10
- private_class_method :new
11
- @@tracker
12
- end
13
-
14
- def self.tracker
15
- @@tracker
16
- end
17
-
18
- end
19
- end
@@ -1,259 +0,0 @@
1
- require 'pathname'
2
- require 'uuid'
3
- require 'allure-ruby-adaptor-api'
4
-
5
- module AllureCucumber
6
- class Formatter
7
-
8
- include AllureCucumber::DSL
9
-
10
- TEST_HOOK_NAMES_TO_IGNORE = ['Before hook', 'After hook']
11
- ALLOWED_SEVERITIES = ['blocker', 'critical', 'normal', 'minor', 'trivial']
12
- POSSIBLE_STATUSES = ['passed', 'failed', 'pending', 'skipped', 'undefined']
13
-
14
- def initialize(step_mother, path_or_io, options)
15
- AllureCucumber::Config.output_dir = path_or_io if path_or_io.is_a?(String)
16
- dir = Pathname.new(AllureCucumber::Config.output_dir)
17
- FileUtils.rm_rf(dir) unless AllureCucumber::Config.clean_dir == false
18
- FileUtils.mkdir_p(dir)
19
- @tracker = AllureCucumber::FeatureTracker.create
20
- @deferred_before_test_steps = []
21
- @deferred_after_test_steps = []
22
- @scenario_tags = {}
23
- end
24
-
25
- # Start the test suite
26
- def before_feature(feature)
27
- feature_identifier = ENV['FEATURE_IDENTIFIER'] && "#{ENV['FEATURE_IDENTIFIER']} - "
28
- @tracker.feature_name = "#{feature_identifier}#{feature.name.gsub(/\n/, " ")}"
29
- AllureRubyAdaptorApi::Builder.start_suite(@tracker.feature_name)
30
- end
31
-
32
- # Find sceanrio type
33
- def before_feature_element(feature_element)
34
- @scenario_outline = feature_element.instance_of?(Cucumber::Core::Ast::ScenarioOutline)
35
- end
36
-
37
- def scenario_name(keyword, name, *args)
38
- scenario_name = (name.nil? || name == "") ? "Unnamed scenario" : name.gsub(/\n/, " ")
39
- @scenario_outline ? @scenario_outline_name = scenario_name : @tracker.scenario_name = scenario_name
40
- end
41
-
42
- # Analyze Cucumber Scenario Tags
43
- def after_tags(tags)
44
- tags.each do |tag|
45
- if AllureCucumber::Config.tms_prefix && tag.name.include?(AllureCucumber::Config.tms_prefix)
46
- @scenario_tags[:testId] = remove_tag_prefix(tag.name, AllureCucumber::Config.tms_prefix)
47
- end
48
-
49
- if tag.name.include?(AllureCucumber::Config.issue_prefix)
50
- @scenario_tags[:issue] = remove_tag_prefix(tag.name, AllureCucumber::Config.issue_prefix)
51
- end
52
-
53
- if tag.name.include?(AllureCucumber::Config.severity_prefix) && ALLOWED_SEVERITIES.include?(remove_tag_prefix(tag.name, AllureCucumber::Config.severity_prefix))
54
- @scenario_tags[:severity] = remove_tag_prefix(tag.name, AllureCucumber::Config.severity_prefix).downcase.to_sym
55
- end
56
- end
57
- end
58
-
59
- def before_examples(*args)
60
- @header_row = true
61
- end
62
-
63
- def before_scenario(scenario)
64
- # not used now, but keeping for later.
65
- end
66
-
67
- # Start the test for normal scenarios
68
- def before_steps(steps)
69
- if !@scenario_outline
70
- start_test
71
- end
72
- end
73
-
74
- # Stop the test for normal scenarios
75
- def after_steps(steps)
76
- if !@scenario_outline
77
- @result = test_result(steps)
78
- end
79
- end
80
-
81
- def after_scenario(scenario)
82
- @result[:status] = cucumber_status_to_allure_status(scenario.status)
83
- stop_test(@result)
84
- end
85
-
86
- def after_feature_element(feature_element)
87
- after_scenario(feature_element)
88
- end
89
-
90
- # Start the test for scenario examples
91
- def before_table_row(table_row)
92
- if @scenario_outline && !@header_row && !@in_multiline_arg
93
- @tracker.scenario_name = "#{@scenario_outline_name}: #{table_row.values.join(' | ')}"
94
- start_test
95
- end
96
- end
97
-
98
- # Stop the test for scenario examples
99
- def after_table_row(table_row)
100
- unless @multiline_arg
101
- if @scenario_outline && !@header_row
102
- @result = test_result(table_row)
103
- stop_test(@result)
104
- end
105
- @header_row = false
106
- end
107
- end
108
-
109
- def before_test_step(test_step)
110
- if !TEST_HOOK_NAMES_TO_IGNORE.include?(test_step.name)
111
- if @tracker.scenario_name
112
- step_location = test_step.location.lines.first.to_s
113
- step_name = test_step.name
114
- @tracker.step_id = "#{@tracker.feature_name}-#{@tracker.scenario_name}-#{step_name}-#{step_location}"
115
- @tracker.step_name = step_name
116
- start_step
117
- else
118
- @deferred_before_test_steps << {:step => test_step, :timestamp => Time.now}
119
- end
120
- end
121
- end
122
-
123
- def after_test_step(test_step, result)
124
- if test_step.name == 'Before hook'
125
- if (!@before_hook_exception) && result.methods.include?(:exception)
126
- @before_hook_exception = result.exception
127
- end
128
- elsif test_step.name != 'After hook'
129
- if @tracker.scenario_name
130
- status = step_status(result)
131
- stop_step(status)
132
- else
133
- @deferred_after_test_steps << {:step => test_step, :result => result, :timestamp => Time.now}
134
- end
135
- end
136
- end
137
-
138
- # Stop the suite
139
- def after_feature(feature)
140
- AllureRubyAdaptorApi::Builder.stop_suite(@tracker.feature_name)
141
- end
142
-
143
- def after_features(features)
144
- AllureRubyAdaptorApi::Builder.build!
145
- end
146
-
147
- def before_multiline_arg(multiline_arg)
148
- @in_multiline_arg = true
149
- # For background steps defer multiline attachment
150
- if @tracker.scenario_name.nil?
151
- @deferred_before_test_steps[-1].merge!({:multiline_arg => multiline_arg})
152
- else
153
- attach_multiline_arg_to_file(multiline_arg)
154
- end
155
- end
156
-
157
- def after_multiline_arg(multiline_arg)
158
- @in_multiline_arg = false
159
- end
160
-
161
- def embed(src, mime_type, label)
162
- file = File.open(src)
163
- file.close
164
- attach_file(label, file)
165
- end
166
-
167
- private
168
-
169
- def remove_tag_prefix(tag, prefix)
170
- tag.gsub(prefix,'')
171
- end
172
-
173
- def step_status(result)
174
- POSSIBLE_STATUSES.each do |status|
175
- return cucumber_status_to_allure_status(status) if result.send("#{status}?")
176
- end
177
- end
178
-
179
- def test_result(result)
180
- status = cucumber_status_to_allure_status(result.status)
181
- if @before_hook_exception
182
- exception = @before_hook_exception
183
- else
184
- exception = status == 'failed' && result.exception.nil? ? Exception.new("Some steps were undefined") : result.exception
185
- end
186
- if exception
187
- return {:status => status, :exception => exception}
188
- else
189
- return {:status => status}
190
- end
191
- end
192
-
193
- def cucumber_status_to_allure_status(status)
194
- case status.to_s
195
- when "undefined"
196
- return "broken"
197
- when "skipped"
198
- return "canceled"
199
- else
200
- return status.to_s
201
- end
202
- end
203
-
204
- def attach_multiline_arg_to_file(multiline_arg)
205
- dir = File.expand_path(AllureCucumber::Config.output_dir)
206
- out_file = "#{dir}/#{UUID.new.generate}.txt"
207
- File.open(out_file, "w+") { |file| file.write(multiline_arg.to_s.gsub(/\e\[(\d+)(;\d+)*m/,'')) }
208
- attach_file("multiline_arg", File.open(out_file))
209
- end
210
-
211
- def start_test
212
- if @tracker.scenario_name
213
- @scenario_tags[:feature] = @tracker.feature_name
214
- @scenario_tags[:story] = @tracker.scenario_name
215
- AllureRubyAdaptorApi::Builder.start_test(@tracker.feature_name, @tracker.scenario_name, @scenario_tags)
216
- post_deferred_steps
217
- end
218
- end
219
-
220
- def post_deferred_steps
221
- @deferred_before_test_steps.size.times do |index|
222
- step_location = @deferred_before_test_steps[index][:step].location.lines.first.to_s
223
- step_name = @deferred_before_test_steps[index][:step].name
224
- @tracker.step_id = "#{@tracker.feature_name}-#{@tracker.scenario_name}-#{step_name}-#{step_location}"
225
- @tracker.step_name = step_name
226
- start_step
227
- multiline_arg = @deferred_before_test_steps[index][:multiline_arg]
228
- attach_multiline_arg_to_file(multiline_arg) if multiline_arg
229
- if index < @deferred_after_test_steps.size
230
- result = step_status(@deferred_after_test_steps[index][:result])
231
- stop_step(result)
232
- end
233
- end
234
- end
235
-
236
- def stop_test(result)
237
- if @deferred_before_test_steps != []
238
- result[:started_at] = @deferred_before_test_steps[0][:timestamp]
239
- end
240
- if @tracker.scenario_name
241
- AllureRubyAdaptorApi::Builder.stop_test(@tracker.feature_name, @tracker.scenario_name, result)
242
- @tracker.scenario_name = nil
243
- @deferred_before_test_steps = []
244
- @deferred_after_test_steps = []
245
- @scenario_tags = {}
246
- @before_hook_exception = nil
247
- end
248
- end
249
-
250
- def start_step(step_name = @tracker.step_name, step_id = @tracker.step_id)
251
- AllureRubyAdaptorApi::Builder.start_step(@tracker.feature_name, @tracker.scenario_name, step_name, step_id)
252
- end
253
-
254
- def stop_step(status, step_name = @tracker.step_name, step_id = @tracker.step_id)
255
- AllureRubyAdaptorApi::Builder.stop_step(@tracker.feature_name, @tracker.scenario_name, step_name, step_id, status)
256
- end
257
-
258
- end
259
- end
@@ -1,5 +0,0 @@
1
- module AllureCucumber
2
- module Version
3
- STRING = '0.6.1'
4
- end
5
- end