]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/gems/rspec-1.1.2/spec/spec/runner/reporter_spec.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / spec / spec / runner / reporter_spec.rb
diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/reporter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/reporter_spec.rb
new file mode 100644 (file)
index 0000000..52377e7
--- /dev/null
@@ -0,0 +1,189 @@
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
+
+module Spec
+  module Runner
+    describe Reporter do
+      attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group
+      before(:each) do
+        @formatter_output = StringIO.new
+        @options = Options.new(StringIO.new, StringIO.new)
+        @backtrace_tweaker = stub("backtrace tweaker", :tweak_backtrace => nil)
+        options.backtrace_tweaker = backtrace_tweaker
+        @formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(options, formatter_output)
+        options.formatters << formatter
+        @reporter = Reporter.new(options)
+        @example_group = create_example_group("example_group")
+        reporter.add_example_group example_group
+      end
+
+      def failure
+        Mocks::DuckTypeArgConstraint.new(:header, :exception)
+      end
+
+      def create_example_group(description_text)
+        example_group = Class.new(Spec::Example::ExampleGroup)
+        example_group.describe description_text
+        example_group
+      end
+
+      it "should assign itself as the reporter to options" do
+        options.reporter.should equal(@reporter)
+      end
+
+      it "should tell formatter when example_group is added" do
+        formatter.should_receive(:add_example_group).with(example_group)
+        reporter.add_example_group(example_group)
+      end
+
+      it "should handle multiple example_groups with same name" do
+        formatter.should_receive(:add_example_group).exactly(3).times
+        formatter.should_receive(:example_started).exactly(3).times
+        formatter.should_receive(:example_passed).exactly(3).times
+        formatter.should_receive(:start_dump)
+        formatter.should_receive(:dump_pending)
+        formatter.should_receive(:close).with(no_args)
+        formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0)
+        reporter.add_example_group(create_example_group("example_group"))
+        reporter.example_started("spec 1")
+        reporter.example_finished("spec 1")
+        reporter.add_example_group(create_example_group("example_group"))
+        reporter.example_started("spec 2")
+        reporter.example_finished("spec 2")
+        reporter.add_example_group(create_example_group("example_group"))
+        reporter.example_started("spec 3")
+        reporter.example_finished("spec 3")
+        reporter.dump
+      end
+
+      it "should handle multiple examples with the same name" do
+        error=RuntimeError.new
+        passing = ExampleGroup.new("example")
+        failing = ExampleGroup.new("example")
+
+        formatter.should_receive(:add_example_group).exactly(2).times
+        formatter.should_receive(:example_passed).with(passing).exactly(2).times
+        formatter.should_receive(:example_failed).with(failing, 1, failure)
+        formatter.should_receive(:example_failed).with(failing, 2, failure)
+        formatter.should_receive(:dump_failure).exactly(2).times
+        formatter.should_receive(:start_dump)
+        formatter.should_receive(:dump_pending)
+        formatter.should_receive(:close).with(no_args)
+        formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0)
+        backtrace_tweaker.should_receive(:tweak_backtrace).twice
+
+        reporter.add_example_group(create_example_group("example_group"))
+        reporter.example_finished(passing)
+        reporter.example_finished(failing, error)
+
+        reporter.add_example_group(create_example_group("example_group"))
+        reporter.example_finished(passing)
+        reporter.example_finished(failing, error)
+        reporter.dump
+      end
+
+      it "should push stats to formatter even with no data" do
+        formatter.should_receive(:start_dump)
+        formatter.should_receive(:dump_pending)
+        formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0)
+        formatter.should_receive(:close).with(no_args)
+        reporter.dump
+      end
+
+      it "should push time to formatter" do
+        formatter.should_receive(:start).with(5)
+        formatter.should_receive(:start_dump)
+        formatter.should_receive(:dump_pending)
+        formatter.should_receive(:close).with(no_args)
+        formatter.should_receive(:dump_summary) do |time, a, b|
+          time.to_s.should match(/[0-9].[0-9|e|-]+/)
+        end
+        reporter.start(5)
+        reporter.end
+        reporter.dump
+      end
+
+      describe Reporter, "reporting one passing example" do
+        it "should tell formatter example passed" do
+          formatter.should_receive(:example_passed)
+          reporter.example_finished("example")
+        end
+
+        it "should not delegate to backtrace tweaker" do
+          formatter.should_receive(:example_passed)
+          backtrace_tweaker.should_not_receive(:tweak_backtrace)
+          reporter.example_finished("example")
+        end
+
+        it "should account for passing example in stats" do
+          formatter.should_receive(:example_passed)
+          formatter.should_receive(:start_dump)
+          formatter.should_receive(:dump_pending)
+          formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0)
+          formatter.should_receive(:close).with(no_args)
+          reporter.example_finished("example")
+          reporter.dump
+        end
+      end
+
+      describe Reporter, "reporting one failing example" do
+        it "should tell formatter that example failed" do
+          formatter.should_receive(:example_failed)
+          reporter.example_finished(example_group, RuntimeError.new)
+        end
+
+        it "should delegate to backtrace tweaker" do
+          formatter.should_receive(:example_failed)
+          backtrace_tweaker.should_receive(:tweak_backtrace)
+          reporter.example_finished(ExampleGroup.new("example"), RuntimeError.new)
+        end
+
+        it "should account for failing example in stats" do
+          example = ExampleGroup.new("example")
+          formatter.should_receive(:example_failed).with(example, 1, failure)
+          formatter.should_receive(:start_dump)
+          formatter.should_receive(:dump_pending)
+          formatter.should_receive(:dump_failure).with(1, anything())
+          formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0)
+          formatter.should_receive(:close).with(no_args)
+          reporter.example_finished(example, RuntimeError.new)
+          reporter.dump
+        end
+
+      end
+
+      describe Reporter, "reporting one pending example (ExamplePendingError)" do
+        it "should tell formatter example is pending" do
+          example = ExampleGroup.new("example")
+          formatter.should_receive(:example_pending).with(example_group.description, example, "reason")
+          formatter.should_receive(:add_example_group).with(example_group)
+          reporter.add_example_group(example_group)
+          reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason"))
+        end
+
+        it "should account for pending example in stats" do
+          example = ExampleGroup.new("example")
+          formatter.should_receive(:example_pending).with(example_group.description, example, "reason")
+          formatter.should_receive(:start_dump)
+          formatter.should_receive(:dump_pending)
+          formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
+          formatter.should_receive(:close).with(no_args)
+          formatter.should_receive(:add_example_group).with(example_group)
+          reporter.add_example_group(example_group)
+          reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason"))
+          reporter.dump
+        end
+      end
+
+      describe Reporter, "reporting one pending example (PendingExampleFixedError)" do
+        it "should tell formatter pending example is fixed" do
+          formatter.should_receive(:example_failed) do |name, counter, failure|
+            failure.header.should == "'example_group example' FIXED"
+          end
+          formatter.should_receive(:add_example_group).with(example_group)
+          reporter.add_example_group(example_group)
+          reporter.example_finished(ExampleGroup.new("example"), Spec::Example::PendingExampleFixedError.new("reason"))
+        end
+      end
+    end
+  end
+end