allure-cucumber 0.6.1 → 2.10.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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