]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / spec / spec / runner / formatter / story / plain_text_formatter_spec.rb
diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
new file mode 100644 (file)
index 0000000..27e184b
--- /dev/null
@@ -0,0 +1,335 @@
+require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
+require 'spec/runner/formatter/story/plain_text_formatter'
+
+module Spec
+  module Runner
+    module Formatter
+      module Story
+        describe PlainTextFormatter do
+          before :each do
+            # given
+            @out = StringIO.new
+            @tweaker = mock('tweaker')
+            @tweaker.stub!(:tweak_backtrace)
+            @options = mock('options')
+            @options.stub!(:colour).and_return(false)
+            @options.stub!(:backtrace_tweaker).and_return(@tweaker)
+            @formatter = PlainTextFormatter.new(@options, @out)
+          end
+        
+          it 'should summarize the number of scenarios when the run ends' do
+            # when
+            @formatter.run_started(3)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario1')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario2')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario3')
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include('3 scenarios')
+          end
+        
+          it 'should summarize the number of successful scenarios when the run ends' do
+            # when
+            @formatter.run_started(3)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario1')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario2')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario3')
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include('3 scenarios: 3 succeeded')
+          end
+        
+          it 'should summarize the number of failed scenarios when the run ends' do
+            # when
+            @formatter.run_started(3)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario1')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
+          end
+        
+          it 'should end cleanly (no characters on the last line) with successes' do
+            # when
+            @formatter.run_started(1)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario')
+            @formatter.run_ended
+          
+            # then
+            @out.string.should =~ /\n\z/
+          end
+        
+          it 'should end cleanly (no characters on the last line) with failures' do
+            # when
+            @formatter.run_started(1)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_failed('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
+            @formatter.run_ended
+          
+            # then
+            @out.string.should =~ /\n\z/
+          end
+        
+          it 'should end cleanly (no characters on the last line) with pending steps' do
+            # when
+            @formatter.run_started(1)
+            @formatter.scenario_started(nil, nil)
+            @formatter.step_pending(:then, 'do pend')
+            @formatter.scenario_pending('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
+            @formatter.run_ended
+          
+            # then
+            @out.string.should =~ /\n\z/
+          end
+        
+          it 'should summarize the number of pending scenarios when the run ends' do
+            # when
+            @formatter.run_started(3)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario1')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_pending('story', 'scenario2', 'message')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_pending('story', 'scenario3', 'message')
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
+          end
+        
+          it "should only count the first failure in one scenario" do
+            # when
+            @formatter.run_started(3)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario1')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
+            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
+          end
+        
+          it "should only count the first pending in one scenario" do
+            # when
+            @formatter.run_started(3)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario1')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_pending('story', 'scenario2', 'because ...')
+            @formatter.scenario_pending('story', 'scenario2', 'because ...')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_pending('story', 'scenario3', 'because ...')
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
+          end
+        
+          it "should only count a failure before the first pending in one scenario" do
+            # when
+            @formatter.run_started(3)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario1')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_pending('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
+            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include("3 scenarios: 1 succeeded, 1 failed, 1 pending")
+          end
+        
+          it 'should produce details of the first failure each failed scenario when the run ends' do
+            # when
+            @formatter.run_started(3)
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_succeeded('story', 'scenario1')
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2' })
+            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2 - this one should not appear' })
+            @formatter.scenario_started(nil, nil)
+            @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops3' })
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include("FAILURES:\n")
+            @out.string.should include("1) story (scenario2) FAILED")
+            @out.string.should include("RuntimeError: oops2")
+            @out.string.should_not include("RuntimeError: oops2 - this one should not appear")
+            @out.string.should include("2) story (scenario3) FAILED")
+            @out.string.should include("RuntimeError: oops3")
+          end
+        
+          it 'should produce details of each pending step when the run ends' do
+            # when
+            @formatter.run_started(2)
+            @formatter.story_started('story 1', 'narrative')
+            @formatter.scenario_started('story 1', 'scenario 1')
+            @formatter.step_pending(:given, 'todo 1', [])
+            @formatter.story_started('story 2', 'narrative')
+            @formatter.scenario_started('story 2', 'scenario 2')
+            @formatter.step_pending(:given, 'todo 2', [])
+            @formatter.run_ended
+          
+            # then
+            @out.string.should include("Pending Steps:\n")
+            @out.string.should include("1) story 1 (scenario 1): todo 1")
+            @out.string.should include("2) story 2 (scenario 2): todo 2")
+          end
+        
+          it 'should document a story title and narrative' do
+            # when
+            @formatter.story_started 'story', 'narrative'
+          
+            # then
+            @out.string.should include("Story: story\n\n  narrative")
+          end
+        
+          it 'should document a scenario name' do
+            # when
+            @formatter.scenario_started 'story', 'scenario'
+          
+            # then
+            @out.string.should include("\n\n  Scenario: scenario")
+          end
+        
+          it 'should document a step by sentence-casing its name' do
+            # when
+            @formatter.step_succeeded :given, 'a context'
+            @formatter.step_succeeded :when, 'an event'
+            @formatter.step_succeeded :then, 'an outcome'
+          
+            # then
+            @out.string.should include("\n\n    Given a context\n\n    When an event\n\n    Then an outcome")
+          end
+        
+          it 'should document additional givens using And' do
+            # when
+            @formatter.step_succeeded :given, 'step 1'
+            @formatter.step_succeeded :given, 'step 2'
+            @formatter.step_succeeded :given, 'step 3'
+          
+            # then
+            @out.string.should include("    Given step 1\n    And step 2\n    And step 3")
+          end
+        
+          it 'should document additional events using And' do
+            # when
+            @formatter.step_succeeded :when, 'step 1'
+            @formatter.step_succeeded :when, 'step 2'
+            @formatter.step_succeeded :when, 'step 3'
+          
+            # then
+            @out.string.should include("    When step 1\n    And step 2\n    And step 3")
+          end
+        
+          it 'should document additional outcomes using And' do
+            # when
+            @formatter.step_succeeded :then, 'step 1'
+            @formatter.step_succeeded :then, 'step 2'
+            @formatter.step_succeeded :then, 'step 3'
+          
+            # then
+            @out.string.should include("    Then step 1\n    And step 2\n    And step 3")
+          end
+        
+          it 'should document a GivenScenario followed by a Given using And' do
+            # when
+            @formatter.step_succeeded :'given scenario', 'a scenario'
+            @formatter.step_succeeded :given, 'a context'
+          
+            # then
+            @out.string.should include("    Given scenario a scenario\n    And a context")
+          end
+        
+          it 'should document steps with replaced params' do
+            @formatter.step_succeeded :given, 'a $coloured dog with $n legs', 'pink', 21
+            @out.string.should include("  Given a pink dog with 21 legs")
+          end
+        
+          it 'should document regexp steps with replaced params' do
+            @formatter.step_succeeded :given, /a (pink|blue) dog with (.*) legs/, 'pink', 21
+            @out.string.should include("  Given a pink dog with 21 legs")
+          end
+        
+          it "should append PENDING for the first pending step" do
+            @formatter.scenario_started('','')
+            @formatter.step_pending(:given, 'a context')
+          
+            @out.string.should include('Given a context (PENDING)')
+          end
+        
+          it "should append PENDING for pending after already pending" do
+            @formatter.scenario_started('','')
+            @formatter.step_pending(:given, 'a context')
+            @formatter.step_pending(:when, 'I say hey')
+          
+            @out.string.should include('When I say hey (PENDING)')
+          end
+        
+          it "should append FAILED for the first failiure" do
+            @formatter.scenario_started('','')
+            @formatter.step_failed(:given, 'a context')
+          
+            @out.string.should include('Given a context (FAILED)')
+          end
+        
+          it "should append SKIPPED for the second failiure" do
+            @formatter.scenario_started('','')
+            @formatter.step_failed(:given, 'a context')
+            @formatter.step_failed(:when, 'I say hey')
+          
+            @out.string.should include('When I say hey (SKIPPED)')
+          end
+        
+          it "should append SKIPPED for the a failiure after PENDING" do
+            @formatter.scenario_started('','')
+            @formatter.step_pending(:given, 'a context')
+            @formatter.step_failed(:when, 'I say hey')
+          
+            @out.string.should include('When I say hey (SKIPPED)')
+          end
+        
+          it 'should print some white space after each story' do
+            # when
+            @formatter.story_ended 'title', 'narrative'
+          
+            # then
+            @out.string.should include("\n\n")
+          end
+          
+          it "should print nothing for collected_steps" do
+            @formatter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
+            @out.string.should == ("")
+          end
+          
+          it "should ignore messages it doesn't care about" do
+            lambda {
+              @formatter.this_method_does_not_exist
+            }.should_not raise_error
+          end
+        end
+      end
+    end
+  end
+end