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 CHANGED
@@ -1,2 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+ require "rspec/core/rake_task"
4
+
5
+ RSpec::Core::RakeTask.new :spec
6
+
7
+ task :default => :spec
data/lib/rocha/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rocha
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/rocha.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "active_support/core_ext/class/delegating_attributes"
1
2
  require "rocha/reporter"
2
3
  require "rocha/formatter"
3
4
 
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
@@ -0,0 +1,7 @@
1
+ require "rspec/autorun"
2
+ require "active_support/core_ext/numeric"
3
+
4
+ require "rocha"
5
+ # RSpec.configure do |config|
6
+ # config.include Konacha::RequestSpec, :type => :request
7
+ # end
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.1.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