rocha 0.1.0 → 0.2.0
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/Rakefile +5 -0
- data/lib/rocha/version.rb +1 -1
- data/lib/rocha.rb +1 -0
- data/rocha.gemspec +3 -0
- data/spec/formatter_spec.rb +69 -0
- data/spec/reporter/example_group_spec.rb +64 -0
- data/spec/reporter/example_spec.rb +77 -0
- data/spec/reporter/metadata_spec.rb +73 -0
- data/spec/reporter_spec.rb +123 -0
- data/spec/spec_helper.rb +7 -0
- metadata +68 -2
data/Rakefile
CHANGED
data/lib/rocha/version.rb
CHANGED
data/lib/rocha.rb
CHANGED
data/rocha.gemspec
CHANGED
@@ -9,6 +9,9 @@ Gem::Specification.new do |gem|
|
|
9
9
|
gem.homepage = ""
|
10
10
|
|
11
11
|
gem.add_dependency "colorize"
|
12
|
+
gem.add_dependency "activesupport"
|
13
|
+
gem.add_dependency "rake"
|
14
|
+
gem.add_development_dependency "rspec"
|
12
15
|
|
13
16
|
gem.files = `git ls-files`.split($\)
|
14
17
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rocha::Formatter do
|
4
|
+
let(:io) { StringIO.new }
|
5
|
+
subject { described_class.new(io) }
|
6
|
+
|
7
|
+
shared_examples "test result" do |method, dot|
|
8
|
+
it "stores the example in the examples array" do
|
9
|
+
subject.send(method, nil)
|
10
|
+
subject.examples.should be_present
|
11
|
+
end
|
12
|
+
|
13
|
+
it "outputs the dot" do
|
14
|
+
subject.send(method, nil)
|
15
|
+
io.rewind
|
16
|
+
io.read.should include(dot)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#example_passed" do
|
21
|
+
it_behaves_like "test result", :example_passed, "."
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#example_failed" do
|
25
|
+
it_behaves_like "test result", :example_failed, "F"
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#example_pending" do
|
29
|
+
it_behaves_like "test result", :example_pending, "P"
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#dump_pending" do
|
33
|
+
let(:example) { double('example', :pending? => true, :full_description => "Pending example") }
|
34
|
+
before { subject.stub(:examples => [example]) }
|
35
|
+
|
36
|
+
it "outputs the pending message" do
|
37
|
+
subject.dump_pending
|
38
|
+
io.rewind
|
39
|
+
io.read.should include(" Pending: Pending example")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#dump_failures" do
|
44
|
+
let(:example) do
|
45
|
+
double('example',
|
46
|
+
:failed? => true,
|
47
|
+
:full_description => "Failed example",
|
48
|
+
:exception => double('exception',
|
49
|
+
:message => "exception",
|
50
|
+
:backtrace => nil))
|
51
|
+
end
|
52
|
+
|
53
|
+
before { subject.stub(:examples => [example]) }
|
54
|
+
|
55
|
+
it "outputs the failure message" do
|
56
|
+
subject.dump_failures
|
57
|
+
io.rewind
|
58
|
+
io.read.should include(" Failed: Failed example\n exception")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "#dump_summary" do
|
63
|
+
it "outputs the summary" do
|
64
|
+
subject.dump_summary(10, 10, 2, 3)
|
65
|
+
io.rewind
|
66
|
+
io.read.should == "\nFinished in 10.00 seconds\n10 examples, 2 failed, 3 pending\n"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rocha::Reporter::ExampleGroup do
|
4
|
+
subject { described_class.new({}, nil) }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "loads up a metadata instance and the parent" do
|
8
|
+
data = double('data')
|
9
|
+
parent = double('parent')
|
10
|
+
example_group = described_class.new(data, parent)
|
11
|
+
|
12
|
+
example_group.parent.should == parent
|
13
|
+
example_group.metadata.should be_a(Rocha::Reporter::Metadata)
|
14
|
+
example_group.metadata.data.should == data
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "delegated methods" do
|
19
|
+
let(:metadata) { double('metadata') }
|
20
|
+
before { Rocha::Reporter::Metadata.stub(:new) { metadata } }
|
21
|
+
|
22
|
+
[:full_description, :description, :file_path, :described_class].each do |method|
|
23
|
+
it "delegates #{method} to metadata" do
|
24
|
+
metadata.should_receive(method)
|
25
|
+
subject.send(method)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "aliased_methods" do
|
31
|
+
it "aliases display_name to description" do
|
32
|
+
subject.display_name.should == subject.description
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#parent_groups" do
|
37
|
+
let(:parent) { double('parent') }
|
38
|
+
let(:grandparent) { double('grandparent') }
|
39
|
+
|
40
|
+
before do
|
41
|
+
grandparent.stub(:parent => nil)
|
42
|
+
parent.stub(:parent => grandparent)
|
43
|
+
subject.stub(:parent => parent)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "finds all of this group's ancestors" do
|
47
|
+
subject.parent_groups.should == [parent, grandparent]
|
48
|
+
end
|
49
|
+
|
50
|
+
it "works via #ancestors" do
|
51
|
+
subject.ancestors.should == [parent, grandparent]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#update_metadata" do
|
56
|
+
it "calls metadata.update" do
|
57
|
+
data = double('data')
|
58
|
+
metadata = double('metadata')
|
59
|
+
metadata.should_receive(:update).with(data)
|
60
|
+
Rocha::Reporter::Metadata.stub(:new) { metadata }
|
61
|
+
subject.update_metadata(data)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rocha::Reporter::Example do
|
4
|
+
subject { described_class.new({}, nil) }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "loads up a metadata instance and the parent" do
|
8
|
+
data = double('data')
|
9
|
+
parent = double('parent')
|
10
|
+
example = described_class.new(data, parent)
|
11
|
+
|
12
|
+
example.parent.should == parent
|
13
|
+
example.metadata.should be_a(Rocha::Reporter::Metadata)
|
14
|
+
example.metadata.data.should == data
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "delegated methods" do
|
19
|
+
let(:metadata) { double('metadata') }
|
20
|
+
before { Rocha::Reporter::Metadata.stub(:new) { metadata } }
|
21
|
+
|
22
|
+
[:full_description, :description, :location, :file_path, :line_number, :pending, :pending_message, :exception, :execution_result].each do |method|
|
23
|
+
it "delegates #{method} to metadata" do
|
24
|
+
metadata.should_receive(method)
|
25
|
+
subject.send(method)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "aliased_methods" do
|
31
|
+
it "aliases pending? to pending" do
|
32
|
+
subject.pending?.should == subject.pending
|
33
|
+
end
|
34
|
+
|
35
|
+
it "aliases options to metadata" do
|
36
|
+
subject.options.should == subject.metadata
|
37
|
+
end
|
38
|
+
|
39
|
+
it "aliases example_group to parent" do
|
40
|
+
subject.example_group.should == subject.parent
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#passed?" do
|
45
|
+
it "returns true iff execution_result[:status] is passed" do
|
46
|
+
subject.should_receive(:execution_result) { {:status => "passed"} }
|
47
|
+
subject.passed?.should be_true
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns false" do
|
51
|
+
subject.should_receive(:execution_result) { {} }
|
52
|
+
subject.passed?.should be_false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "#failed?" do
|
57
|
+
it "returns true iff execution_result[:status] is failed" do
|
58
|
+
subject.should_receive(:execution_result) { {:status => "failed"} }
|
59
|
+
subject.failed?.should be_true
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns false" do
|
63
|
+
subject.should_receive(:execution_result) { {} }
|
64
|
+
subject.failed?.should be_false
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#update_metadata" do
|
69
|
+
it "calls metadata.update" do
|
70
|
+
data = double('data')
|
71
|
+
metadata = double('metadata')
|
72
|
+
metadata.should_receive(:update).with(data)
|
73
|
+
Rocha::Reporter::Metadata.stub(:new) { metadata }
|
74
|
+
subject.update_metadata(data)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rocha::Reporter::Metadata do
|
4
|
+
subject { described_class.new({}) }
|
5
|
+
|
6
|
+
describe "#[]" do
|
7
|
+
it "calls the method on self if available" do
|
8
|
+
subject.should_receive(:full_description)
|
9
|
+
subject[:full_description]
|
10
|
+
end
|
11
|
+
|
12
|
+
it "looks in the data hash" do
|
13
|
+
subject.should_receive(:data) { {} }
|
14
|
+
subject[:title]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#update" do
|
19
|
+
it "merges the new data into the data hash" do
|
20
|
+
subject.update(:title => "test")
|
21
|
+
subject.data.should == {:title => "test"}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#exception" do
|
26
|
+
it "returns unless the spec failed" do
|
27
|
+
subject.exception.should be_nil
|
28
|
+
end
|
29
|
+
|
30
|
+
it "builds a SpecException object" do
|
31
|
+
subject.update('status' => 'failed', 'error' => {'name' => 'Error', 'message' => 'expected this to work'})
|
32
|
+
subject.exception.should be_a(Rocha::Reporter::SpecException)
|
33
|
+
subject.exception.message.should == 'Error: expected this to work'
|
34
|
+
subject.exception.backtrace.should == []
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#execution_result" do
|
39
|
+
it "returns a hash with execution details" do
|
40
|
+
subject.execution_result.keys.map(&:to_s).sort.should == [:exception, :finished_at, :run_time, :started_at, :status].map(&:to_s)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#pending" do
|
45
|
+
it "returns true iff status is pending" do
|
46
|
+
subject.update('status' => 'pending')
|
47
|
+
subject.pending.should be_true
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns false" do
|
51
|
+
subject.pending.should be_false
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
shared_examples_for "data delegation method" do |key, method|
|
56
|
+
it "returns data['#{key}']" do
|
57
|
+
subject.update(key => 'super test')
|
58
|
+
subject.send(method).should == 'super test'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "#file_path" do
|
63
|
+
it_behaves_like "data delegation method", "path", "file_path"
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#description" do
|
67
|
+
it_behaves_like "data delegation method", "title", "description"
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#full_description" do
|
71
|
+
it_behaves_like "data delegation method", "fullTitle", "full_description"
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rocha::Reporter do
|
4
|
+
let(:formatter) { double('formatter').as_null_object }
|
5
|
+
subject { described_class.new(formatter) }
|
6
|
+
|
7
|
+
describe "#start" do
|
8
|
+
it "sets the start time to the current time" do
|
9
|
+
subject.start
|
10
|
+
subject.start_time.should be_within(1.second).of(Time.now)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "processes the start event" do
|
14
|
+
subject.should_receive(:process_event).with(:start, nil)
|
15
|
+
subject.start
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#finish" do
|
20
|
+
it "calls #stop" do
|
21
|
+
subject.should_receive(:stop)
|
22
|
+
subject.finish
|
23
|
+
end
|
24
|
+
|
25
|
+
it "processes events" do
|
26
|
+
subject.stub(:stop)
|
27
|
+
subject.should_receive(:process_event).with(:start_dump).ordered
|
28
|
+
subject.should_receive(:process_event).with(:dump_pending).ordered
|
29
|
+
subject.should_receive(:process_event).with(:dump_failures).ordered
|
30
|
+
subject.should_receive(:process_event).with(:dump_summary, nil, 0, 0, 0).ordered
|
31
|
+
subject.should_receive(:process_event).with(:close).ordered
|
32
|
+
subject.finish
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#stop" do
|
37
|
+
it "calculates duration" do
|
38
|
+
subject.start
|
39
|
+
subject.stop
|
40
|
+
subject.duration.should_not be_nil
|
41
|
+
end
|
42
|
+
|
43
|
+
it "processes the stop event" do
|
44
|
+
subject.should_receive(:process_event).with(:stop)
|
45
|
+
subject.stop
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#process_mocha_event" do
|
50
|
+
before { subject.stub(:process_event) }
|
51
|
+
|
52
|
+
it "calls #start if passed the start event" do
|
53
|
+
subject.should_receive(:start).with(4)
|
54
|
+
subject.process_mocha_event({'event' => 'start', 'testCount' => 4})
|
55
|
+
end
|
56
|
+
|
57
|
+
it "calls #finish if passed the end event" do
|
58
|
+
subject.should_receive(:finish)
|
59
|
+
subject.process_mocha_event({'event' => 'end'})
|
60
|
+
end
|
61
|
+
|
62
|
+
it "creates the object" do
|
63
|
+
subject.should_receive(:update_or_create_object).with('data', 'type')
|
64
|
+
subject.process_mocha_event({'data' => 'data', 'type' => 'type'})
|
65
|
+
end
|
66
|
+
|
67
|
+
it "calls #process_event with the converted event name" do
|
68
|
+
object = double('test')
|
69
|
+
subject.stub(:update_or_create_object) { object }
|
70
|
+
subject.should_receive(:process_event).with(:example_started, object)
|
71
|
+
subject.process_mocha_event({'event' => 'test', 'type' => 'test'})
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#process_event" do
|
76
|
+
describe "increments counts" do
|
77
|
+
it "increments example count" do
|
78
|
+
subject.process_event(:example_started)
|
79
|
+
subject.example_count.should == 1
|
80
|
+
end
|
81
|
+
|
82
|
+
it "increments pending count" do
|
83
|
+
subject.process_event(:example_pending)
|
84
|
+
subject.pending_count.should == 1
|
85
|
+
end
|
86
|
+
|
87
|
+
it "increments failed count" do
|
88
|
+
subject.process_event(:example_failed)
|
89
|
+
subject.failure_count.should == 1
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
it "forwards the call on to the formatters" do
|
94
|
+
formatter.should_receive(:example_started).with('arg!')
|
95
|
+
subject.process_event(:example_started, 'arg!')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "#update_or_create_object" do
|
100
|
+
describe "creates the right type of object" do
|
101
|
+
it "creates example if test" do
|
102
|
+
subject.update_or_create_object({}, 'test').should be_a(Rocha::Reporter::Example)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "creates example_group if suite" do
|
106
|
+
subject.update_or_create_object({}, 'suite').should be_a(Rocha::Reporter::ExampleGroup)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
it "updates if the object with same fullTitle exists" do
|
111
|
+
data = {'fullTitle' => 'title'}
|
112
|
+
object = subject.update_or_create_object(data, 'test')
|
113
|
+
object.should_receive(:update_metadata).with(data)
|
114
|
+
subject.update_or_create_object(data, 'test').should == object
|
115
|
+
end
|
116
|
+
|
117
|
+
it "links up the parent correctly" do
|
118
|
+
suite = subject.update_or_create_object({'fullTitle' => 'suite'}, 'suite')
|
119
|
+
object = subject.update_or_create_object({'fullTitle' => 'suite awesome', 'parentFullTitle' => 'suite'}, 'test')
|
120
|
+
object.parent.should == suite
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -27,6 +27,54 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activesupport
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
30
78
|
description: RSpec reporter for mocha
|
31
79
|
email:
|
32
80
|
- paul@chavard.net
|
@@ -47,6 +95,12 @@ files:
|
|
47
95
|
- lib/rocha/reporter/metadata.rb
|
48
96
|
- lib/rocha/version.rb
|
49
97
|
- rocha.gemspec
|
98
|
+
- spec/formatter_spec.rb
|
99
|
+
- spec/reporter/example_group_spec.rb
|
100
|
+
- spec/reporter/example_spec.rb
|
101
|
+
- spec/reporter/metadata_spec.rb
|
102
|
+
- spec/reporter_spec.rb
|
103
|
+
- spec/spec_helper.rb
|
50
104
|
homepage: ''
|
51
105
|
licenses: []
|
52
106
|
post_install_message:
|
@@ -59,16 +113,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
59
113
|
- - ! '>='
|
60
114
|
- !ruby/object:Gem::Version
|
61
115
|
version: '0'
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
hash: 1361958445993374469
|
62
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
120
|
none: false
|
64
121
|
requirements:
|
65
122
|
- - ! '>='
|
66
123
|
- !ruby/object:Gem::Version
|
67
124
|
version: '0'
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
hash: 1361958445993374469
|
68
128
|
requirements: []
|
69
129
|
rubyforge_project:
|
70
130
|
rubygems_version: 1.8.23
|
71
131
|
signing_key:
|
72
132
|
specification_version: 3
|
73
133
|
summary: RSpec reporter for mocha
|
74
|
-
test_files:
|
134
|
+
test_files:
|
135
|
+
- spec/formatter_spec.rb
|
136
|
+
- spec/reporter/example_group_spec.rb
|
137
|
+
- spec/reporter/example_spec.rb
|
138
|
+
- spec/reporter/metadata_spec.rb
|
139
|
+
- spec/reporter_spec.rb
|
140
|
+
- spec/spec_helper.rb
|