]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/plain_text_formatter.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / lib / spec / runner / formatter / story / plain_text_formatter.rb
diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/plain_text_formatter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/plain_text_formatter.rb
new file mode 100644 (file)
index 0000000..424e27c
--- /dev/null
@@ -0,0 +1,128 @@
+require 'spec/runner/formatter/base_text_formatter'
+
+module Spec
+  module Runner
+    module Formatter
+      module Story
+        class PlainTextFormatter < BaseTextFormatter
+          def initialize(options, where)
+            super
+            @successful_scenario_count = 0
+            @pending_scenario_count = 0
+            @failed_scenarios = []
+            @pending_steps = []
+            @previous_type = nil
+          end
+        
+          def run_started(count)
+            @count = count
+            @output.puts "Running #@count scenarios\n\n"
+          end
+
+          def story_started(title, narrative)
+            @current_story_title = title
+            @output.puts "Story: #{title}\n\n"
+            narrative.each_line do |line|
+              @output.print "  "
+              @output.print line
+            end
+          end
+        
+          def story_ended(title, narrative)
+            @output.puts
+            @output.puts
+          end
+
+          def scenario_started(story_title, scenario_name)
+            @current_scenario_name = scenario_name
+            @scenario_already_failed = false
+            @output.print "\n\n  Scenario: #{scenario_name}"
+            @scenario_ok = true
+          end
+        
+          def scenario_succeeded(story_title, scenario_name)
+            @successful_scenario_count += 1
+          end
+        
+          def scenario_failed(story_title, scenario_name, err)
+            @options.backtrace_tweaker.tweak_backtrace(err)
+            @failed_scenarios << [story_title, scenario_name, err] unless @scenario_already_failed
+            @scenario_already_failed = true
+          end
+        
+          def scenario_pending(story_title, scenario_name, msg)
+            @pending_scenario_count += 1 unless @scenario_already_failed
+            @scenario_already_failed = true
+          end
+        
+          def run_ended
+            @output.puts "#@count scenarios: #@successful_scenario_count succeeded, #{@failed_scenarios.size} failed, #@pending_scenario_count pending"
+            unless @pending_steps.empty?
+              @output.puts "\nPending Steps:"
+              @pending_steps.each_with_index do |pending, i|
+                story_name, scenario_name, msg = pending
+                @output.puts "#{i+1}) #{story_name} (#{scenario_name}): #{msg}"
+              end
+            end
+            unless @failed_scenarios.empty?
+              @output.print "\nFAILURES:"
+              @failed_scenarios.each_with_index do |failure, i|
+                title, scenario_name, err = failure
+                @output.print %[
+    #{i+1}) #{title} (#{scenario_name}) FAILED
+    #{err.class}: #{err.message}
+    #{err.backtrace.join("\n")}
+]
+              end
+            end            
+          end
+        
+          def step_succeeded(type, description, *args)
+            found_step(type, description, false, *args)
+          end
+        
+          def step_pending(type, description, *args)
+            found_step(type, description, false, *args)
+            @pending_steps << [@current_story_title, @current_scenario_name, description]
+            @output.print " (PENDING)"
+            @scenario_ok = false
+          end
+        
+          def step_failed(type, description, *args)
+            found_step(type, description, true, *args)
+            @output.print red(@scenario_ok ? " (FAILED)" : " (SKIPPED)")
+            @scenario_ok = false
+          end
+          
+          def collected_steps(steps)
+          end
+          
+          def method_missing(sym, *args, &block) #:nodoc:
+            # noop - ignore unknown messages
+          end
+
+        private
+
+          def found_step(type, description, failed, *args)
+            desc_string = description.step_name
+            arg_regexp = description.arg_regexp
+            text = if(type == @previous_type)
+              "\n    And "
+            else
+              "\n\n    #{type.to_s.capitalize} "
+            end
+            i = -1
+            text << desc_string.gsub(arg_regexp) { |param| args[i+=1] }
+            @output.print(failed ? red(text) : green(text))
+
+            if type == :'given scenario'
+              @previous_type = :given
+            else
+              @previous_type = type
+            end
+          end
+        end
+      end
+    end
+  end
+end