allure-rspec 0.5.4 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +20 -16
- data/allure-rspec.gemspec +2 -2
- data/lib/allure-rspec.rb +1 -3
- data/lib/allure-rspec/adaptor.rb +3 -1
- data/lib/allure-rspec/dsl.rb +35 -32
- data/lib/allure-rspec/formatter.rb +31 -28
- data/lib/allure-rspec/hooks.rb +31 -25
- data/lib/allure-rspec/version.rb +1 -1
- data/spec/another_spec.rb +2 -4
- data/spec/extend_steps_spec.rb +9 -10
- metadata +28 -19
- checksums.yaml +0 -7
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
allure-rspec (0.
|
5
|
-
allure-ruby-adaptor-api (= 0.6.
|
6
|
-
rspec (
|
4
|
+
allure-rspec (0.6.1)
|
5
|
+
allure-ruby-adaptor-api (= 0.6.3)
|
6
|
+
rspec (= 3.0.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
allure-ruby-adaptor-api (0.6.
|
11
|
+
allure-ruby-adaptor-api (0.6.3)
|
12
12
|
mimemagic
|
13
13
|
nokogiri (~> 1.6.0)
|
14
14
|
uuid
|
@@ -16,18 +16,22 @@ GEM
|
|
16
16
|
macaddr (1.7.1)
|
17
17
|
systemu (~> 2.6.2)
|
18
18
|
mimemagic (0.2.1)
|
19
|
-
mini_portile (0.6.
|
20
|
-
nokogiri (1.6.
|
21
|
-
mini_portile (
|
22
|
-
rake (10.
|
23
|
-
rspec (
|
24
|
-
rspec-core (~>
|
25
|
-
rspec-expectations (~>
|
26
|
-
rspec-mocks (~>
|
27
|
-
rspec-core (
|
28
|
-
|
29
|
-
|
30
|
-
|
19
|
+
mini_portile (0.6.0)
|
20
|
+
nokogiri (1.6.3.1)
|
21
|
+
mini_portile (= 0.6.0)
|
22
|
+
rake (10.3.2)
|
23
|
+
rspec (3.0.0)
|
24
|
+
rspec-core (~> 3.0.0)
|
25
|
+
rspec-expectations (~> 3.0.0)
|
26
|
+
rspec-mocks (~> 3.0.0)
|
27
|
+
rspec-core (3.0.4)
|
28
|
+
rspec-support (~> 3.0.0)
|
29
|
+
rspec-expectations (3.0.4)
|
30
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
31
|
+
rspec-support (~> 3.0.0)
|
32
|
+
rspec-mocks (3.0.4)
|
33
|
+
rspec-support (~> 3.0.0)
|
34
|
+
rspec-support (3.0.4)
|
31
35
|
systemu (2.6.4)
|
32
36
|
uuid (2.3.7)
|
33
37
|
macaddr (~> 1.0)
|
data/allure-rspec.gemspec
CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
|
-
s.add_dependency 'rspec', '
|
22
|
-
s.add_dependency 'allure-ruby-adaptor-api', '0.6.
|
21
|
+
s.add_dependency 'rspec', '3.0.0'
|
22
|
+
s.add_dependency 'allure-ruby-adaptor-api', '0.6.3'
|
23
23
|
|
24
24
|
s.add_development_dependency 'bundler'
|
25
25
|
s.add_development_dependency 'rake'
|
data/lib/allure-rspec.rb
CHANGED
@@ -6,8 +6,6 @@ require 'allure-rspec/dsl'
|
|
6
6
|
require 'allure-rspec/hooks'
|
7
7
|
|
8
8
|
module AllureRSpec
|
9
|
-
include AllureRSpec::DSL
|
10
|
-
|
11
9
|
module Config
|
12
10
|
class << self
|
13
11
|
attr_accessor :output_dir
|
@@ -42,7 +40,7 @@ module AllureRSpec
|
|
42
40
|
class << self
|
43
41
|
def configure(&block)
|
44
42
|
yield Config
|
45
|
-
AllureRubyAdaptorApi.configure {|c|
|
43
|
+
AllureRubyAdaptorApi.configure { |c|
|
46
44
|
c.output_dir = Config.output_dir
|
47
45
|
}
|
48
46
|
end
|
data/lib/allure-rspec/adaptor.rb
CHANGED
@@ -3,10 +3,12 @@ module AllureRSpec
|
|
3
3
|
def self.included(base)
|
4
4
|
AllureRSpec.context.rspec = base
|
5
5
|
base.send :include, AllureRSpec::DSL
|
6
|
-
if RSpec.
|
6
|
+
if RSpec::Core::Formatters::Loader.formatters.keys.find_all { |f| f == AllureRSpec::Formatter }.empty?
|
7
|
+
RSpec::Core::Formatters.register AllureRSpec::Formatter, *AllureRSpec::Formatter::NOTIFICATIONS
|
7
8
|
RSpec.configuration.add_formatter(AllureRSpec::Formatter)
|
8
9
|
end
|
9
10
|
RSpec::Core::ExampleGroup.send :include, AllureRSpec::Hooks
|
11
|
+
RSpec::Core::Example.send :include, AllureRSpec::DSL::Example
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
data/lib/allure-rspec/dsl.rb
CHANGED
@@ -2,44 +2,47 @@ require 'digest'
|
|
2
2
|
require 'mimemagic'
|
3
3
|
module AllureRSpec
|
4
4
|
module DSL
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
module Example
|
6
|
+
|
7
|
+
def current_step
|
8
|
+
if defined? @@__current_step
|
9
|
+
@@__current_step
|
10
|
+
else
|
11
|
+
nil
|
12
|
+
end
|
10
13
|
end
|
11
|
-
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
def step(step, &block)
|
16
|
+
suite = metadata[:example_group][:description_args].first.to_s
|
17
|
+
test = metadata[:description].to_s
|
18
|
+
AllureRubyAdaptorApi::Builder.start_step(suite, test, step)
|
19
|
+
__with_step step, &block
|
20
|
+
AllureRubyAdaptorApi::Builder.stop_step(suite, test, step)
|
21
|
+
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
def attach_file(title, file, opts = {})
|
24
|
+
suite = metadata[:example_group][:description_args].first.to_s
|
25
|
+
test = metadata[:description].to_s
|
26
|
+
step = current_step
|
27
|
+
AllureRubyAdaptorApi::Builder.add_attachment suite, test, opts.merge(:title => title, :file => file, :step => step)
|
28
|
+
end
|
27
29
|
|
28
|
-
|
30
|
+
private
|
29
31
|
|
30
|
-
|
31
|
-
|
32
|
-
|
32
|
+
def __mutex
|
33
|
+
@@__mutex ||= Mutex.new
|
34
|
+
end
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
36
|
+
def __with_step(step, &block)
|
37
|
+
__mutex.synchronize do
|
38
|
+
begin
|
39
|
+
@@__current_step = step
|
40
|
+
AllureRSpec.context.rspec.hooks.send :run, :before, :step, self
|
41
|
+
yield self
|
42
|
+
ensure
|
43
|
+
AllureRSpec.context.rspec.hooks.send :run, :after, :step, self
|
44
|
+
@@__current_step = nil
|
45
|
+
end
|
43
46
|
end
|
44
47
|
end
|
45
48
|
end
|
@@ -5,53 +5,52 @@ module AllureRSpec
|
|
5
5
|
|
6
6
|
class Formatter < RSpec::Core::Formatters::BaseFormatter
|
7
7
|
|
8
|
+
NOTIFICATIONS = [:example_group_started, :example_group_finished, :example_started,
|
9
|
+
:example_failed, :example_passed, :example_pending, :start, :stop]
|
8
10
|
ALLOWED_LABELS = [:feature, :story, :severity, :language, :framework]
|
9
11
|
|
10
12
|
def example_failed(example)
|
13
|
+
res = example.example.execution_result
|
11
14
|
AllureRubyAdaptorApi::Builder.stop_test(
|
12
|
-
example.
|
13
|
-
example.
|
14
|
-
|
15
|
-
:
|
16
|
-
:
|
17
|
-
|
15
|
+
example.example.example_group.description,
|
16
|
+
example.example.description.to_s,
|
17
|
+
{
|
18
|
+
:exception => res.exception,
|
19
|
+
:status => res.status,
|
20
|
+
:finished_at => res.finished_at,
|
21
|
+
:started_at => res.started_at
|
22
|
+
}
|
18
23
|
)
|
19
|
-
super
|
20
24
|
end
|
21
25
|
|
22
26
|
def example_group_finished(group)
|
23
|
-
AllureRubyAdaptorApi::Builder.stop_suite(group.
|
24
|
-
super
|
27
|
+
AllureRubyAdaptorApi::Builder.stop_suite(group.group.description.to_s)
|
25
28
|
end
|
26
29
|
|
27
30
|
def example_group_started(group)
|
28
|
-
AllureRubyAdaptorApi::Builder.start_suite(group.
|
29
|
-
super
|
31
|
+
AllureRubyAdaptorApi::Builder.start_suite(group.group.description.to_s, labels(group))
|
30
32
|
end
|
31
33
|
|
32
34
|
def example_passed(example)
|
35
|
+
res = example.example.execution_result
|
33
36
|
AllureRubyAdaptorApi::Builder.stop_test(
|
34
|
-
example.
|
35
|
-
example.
|
36
|
-
|
37
|
+
example.example_group.description,
|
38
|
+
example.description.to_s,
|
39
|
+
{
|
40
|
+
:status => res.status,
|
41
|
+
:finished_at => res.finished_at,
|
42
|
+
:started_at => res.started_at
|
43
|
+
}
|
37
44
|
)
|
38
|
-
super
|
39
45
|
end
|
40
46
|
|
41
47
|
def example_pending(example)
|
42
|
-
AllureRubyAdaptorApi::Builder.stop_test(
|
43
|
-
example.metadata[:example_group][:description_args].first,
|
44
|
-
example.metadata[:description],
|
45
|
-
:status => :pending
|
46
|
-
)
|
47
|
-
super
|
48
48
|
end
|
49
49
|
|
50
50
|
def example_started(example)
|
51
|
-
suite = example.
|
52
|
-
test = example.
|
51
|
+
suite = example.example.example_group.description
|
52
|
+
test = example.example.description.to_s
|
53
53
|
AllureRubyAdaptorApi::Builder.start_test(suite, test, labels(example))
|
54
|
-
super
|
55
54
|
end
|
56
55
|
|
57
56
|
def start(example_count)
|
@@ -61,19 +60,23 @@ module AllureRSpec
|
|
61
60
|
FileUtils.rm_rf(dir)
|
62
61
|
end
|
63
62
|
FileUtils.mkdir_p(dir)
|
64
|
-
super
|
65
63
|
end
|
66
64
|
|
67
|
-
def stop
|
65
|
+
def stop(notify)
|
68
66
|
AllureRubyAdaptorApi::Builder.build!
|
69
|
-
super
|
70
67
|
end
|
71
68
|
|
72
69
|
private
|
73
70
|
|
71
|
+
def metadata(example_or_group)
|
72
|
+
(example_or_group.respond_to? :group) ?
|
73
|
+
example_or_group.group.metadata :
|
74
|
+
example_or_group.example.metadata
|
75
|
+
end
|
76
|
+
|
74
77
|
def labels(example_or_group)
|
75
78
|
ALLOWED_LABELS.
|
76
|
-
map { |label| [label, example_or_group
|
79
|
+
map { |label| [label, metadata(example_or_group)[label]] }.
|
77
80
|
find_all { |value| !value[1].nil? }.
|
78
81
|
inject({}) { |res, value| res.merge(value[0] => value[1]) }
|
79
82
|
end
|
data/lib/allure-rspec/hooks.rb
CHANGED
@@ -7,47 +7,53 @@ module AllureRSpec
|
|
7
7
|
|
8
8
|
module OverrideHooksMethods
|
9
9
|
include RSpec::Core::Hooks
|
10
|
-
alias_method :old_extract_scope_from, :extract_scope_from
|
11
|
-
alias_method :old_hooks, :hooks
|
12
|
-
alias_method :old_find_hook, :find_hook
|
13
10
|
|
14
|
-
|
11
|
+
alias_method :old_hooks, :hooks
|
15
12
|
|
16
13
|
def hooks
|
17
14
|
if @__hooks.nil?
|
18
|
-
|
15
|
+
old = old_hooks
|
16
|
+
@__hooks ||= OverridenHookCollections.new(old.instance_variable_get(:@owner), old.instance_variable_get(:@data))
|
19
17
|
[:before, :after].each { |scope|
|
20
18
|
@__hooks[scope][:step] = HookCollection.new
|
21
19
|
}
|
22
20
|
end
|
23
21
|
@__hooks
|
24
22
|
end
|
23
|
+
private
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
end
|
25
|
+
class OverridenHookCollections < RSpec::Core::Hooks::HookCollections
|
26
|
+
private
|
29
27
|
|
30
|
-
|
31
|
-
HookCollection.new(parent_groups.map { |a| a.hooks[:after][:step] }.flatten).for(example)
|
32
|
-
end
|
28
|
+
SCOPES = [:each, :all, :suite, :step]
|
33
29
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
when [:after, :step]
|
39
|
-
after_step_hooks_for(example_or_group)
|
40
|
-
else
|
41
|
-
old_find_hook(hook, scope, example_or_group, initial_procsy)
|
30
|
+
def before_step_hooks_for(example)
|
31
|
+
RSpec::Core::Hooks::HookCollection.new(RSpec::Core::FlatMap.flat_map(@owner.parent_groups.reverse) do |a|
|
32
|
+
a.hooks[:before][:step]
|
33
|
+
end).for(example)
|
42
34
|
end
|
43
|
-
end
|
44
35
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
old_extract_scope_from(args)
|
36
|
+
def after_step_hooks_for(example)
|
37
|
+
RSpec::Core::Hooks::HookCollection.new(RSpec::Core::FlatMap.flat_map(@owner.parent_groups) do |a|
|
38
|
+
a.hooks[:after][:step]
|
39
|
+
end).for(example)
|
50
40
|
end
|
41
|
+
|
42
|
+
def find_hook(hook, scope, example_or_group, initial_procsy)
|
43
|
+
case [hook, scope]
|
44
|
+
when [:before, :step]
|
45
|
+
before_step_hooks_for(example_or_group)
|
46
|
+
when [:after, :step]
|
47
|
+
after_step_hooks_for(example_or_group)
|
48
|
+
else
|
49
|
+
super(hook, scope, example_or_group, initial_procsy)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def known_scope?(scope)
|
54
|
+
SCOPES.include?(scope) || super(scope)
|
55
|
+
end
|
56
|
+
|
51
57
|
end
|
52
58
|
end
|
53
59
|
end
|
data/lib/allure-rspec/version.rb
CHANGED
data/spec/another_spec.rb
CHANGED
@@ -12,12 +12,10 @@ describe "Some another spec", :feature => ["Some Feature"], :severity => :normal
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "10 cannot be greater than 19", :story => ["Some story"] do
|
15
|
-
10.
|
15
|
+
expect(10).to be > 19
|
16
16
|
end
|
17
17
|
|
18
18
|
it "4 must not be equal to 5" do
|
19
|
-
5.
|
19
|
+
expect(5).to be eql(4)
|
20
20
|
end
|
21
|
-
|
22
|
-
it "must be pending"
|
23
21
|
end
|
data/spec/extend_steps_spec.rb
CHANGED
@@ -35,20 +35,19 @@ describe AllureRSpec, :feature => "Basics" do
|
|
35
35
|
puts "after all"
|
36
36
|
end
|
37
37
|
|
38
|
-
it "should build", :story => "Main story" do
|
39
|
-
attach_file "test-file1", Tempfile.new("test")
|
40
|
-
step "step1" do
|
41
|
-
attach_file "test-file2", Tempfile.new("test")
|
38
|
+
it "should build", :story => "Main story" do |ex|
|
39
|
+
ex.attach_file "test-file1", Tempfile.new("test")
|
40
|
+
ex.step "step1" do |step|
|
41
|
+
step.attach_file "test-file2", Tempfile.new("test")
|
42
42
|
end
|
43
43
|
|
44
|
-
step "step2" do
|
45
|
-
attach_file "logo", File.new("logo.png")
|
46
|
-
5.
|
44
|
+
ex.step "step2" do |step|
|
45
|
+
step.attach_file "logo", File.new("logo.png")
|
46
|
+
expect(5).to be > 1
|
47
47
|
end
|
48
48
|
|
49
|
-
step "step3" do
|
50
|
-
|
51
|
-
0.should == 1
|
49
|
+
ex.step "step3" do
|
50
|
+
expect(0).to be eql(1)
|
52
51
|
end
|
53
52
|
end
|
54
53
|
end
|
metadata
CHANGED
@@ -1,69 +1,78 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: allure-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Ilya Sadykov
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2014-08-22 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rspec
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - '='
|
18
20
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
21
|
+
version: 3.0.0
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - '='
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
29
|
+
version: 3.0.0
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: allure-ruby-adaptor-api
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - '='
|
32
36
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.6.
|
37
|
+
version: 0.6.3
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - '='
|
39
44
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.6.
|
45
|
+
version: 0.6.3
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: bundler
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rake
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- - '>='
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- - '>='
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0'
|
69
78
|
description: Adaptor to use Allure framework along with the RSpec 2
|
@@ -91,26 +100,26 @@ files:
|
|
91
100
|
homepage: http://allure.qatools.ru
|
92
101
|
licenses:
|
93
102
|
- Apache2
|
94
|
-
metadata: {}
|
95
103
|
post_install_message:
|
96
104
|
rdoc_options: []
|
97
105
|
require_paths:
|
98
106
|
- lib
|
99
107
|
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
100
109
|
requirements:
|
101
|
-
- - '>='
|
110
|
+
- - ! '>='
|
102
111
|
- !ruby/object:Gem::Version
|
103
112
|
version: '0'
|
104
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
105
115
|
requirements:
|
106
|
-
- - '>='
|
116
|
+
- - ! '>='
|
107
117
|
- !ruby/object:Gem::Version
|
108
118
|
version: '0'
|
109
119
|
requirements: []
|
110
120
|
rubyforge_project:
|
111
|
-
rubygems_version:
|
121
|
+
rubygems_version: 1.8.25
|
112
122
|
signing_key:
|
113
|
-
specification_version:
|
114
|
-
summary: allure-rspec-0.
|
123
|
+
specification_version: 3
|
124
|
+
summary: allure-rspec-0.6.1
|
115
125
|
test_files: []
|
116
|
-
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 5a3d449b806a2d0770c852e75d40f29a44e1786c
|
4
|
-
data.tar.gz: 447f526780571ed70fb9d1a78b59762bd406b933
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 3b9c08a1ce890a68f26b54bc3412e82231672338007425752b895bccdb68fe2958de70c07e0c40532d329d14228a4a35ebace6134413ebc0910d20e21ca02c19
|
7
|
-
data.tar.gz: a6ac9a4afd1b20443c33f625a1b3f4a1e8f9faa789064dce6123c50252c06a52d4addf13e57ba4813485619b6516f4868a0e4a211823b96c18db8869ea126268
|