]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/html_formatter.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / lib / spec / runner / formatter / story / html_formatter.rb
diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/html_formatter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/html_formatter.rb
new file mode 100644 (file)
index 0000000..b70ac15
--- /dev/null
@@ -0,0 +1,125 @@
+require 'erb'
+require 'spec/runner/formatter/base_text_formatter'
+
+module Spec
+  module Runner
+    module Formatter
+      module Story
+        class HtmlFormatter < BaseTextFormatter
+          include ERB::Util
+          
+          def run_started(count)
+            @output.puts <<-EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html 
+  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <title>Stories</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Expires" content="-1" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <script src="javascripts/prototype.js" type="text/javascript"></script>
+    <script src="javascripts/scriptaculous.js" type="text/javascript"></script>
+    <script src="javascripts/rspec.js" type="text/javascript"></script>
+    <link href="stylesheets/rspec.css" rel="stylesheet" type="text/css" />
+  </head>
+  <body>
+    <div id="container">
+EOF
+          end
+
+          def collected_steps(steps)
+            unless steps.empty?
+              @output.puts "      <ul id=\"stock_steps\" style=\"display: none;\">"
+              steps.each do |step|
+                @output.puts "        <li>#{step}</li>"
+              end
+              @output.puts "      </ul>"
+            end
+          end
+
+          def run_ended
+            @output.puts <<-EOF
+    </div>
+  </body>
+</head>
+EOF
+          end
+          
+          def story_started(title, narrative)
+            @output.puts <<-EOF
+      <dl class="story passed">
+        <dt>Story: #{h title}</dt>
+        <dd>
+          <p>
+            #{h(narrative).split("\n").join("<br />")}
+          </p>
+EOF
+          end
+
+          def story_ended(title, narrative)
+            @output.puts <<-EOF
+        </dd>
+      </dl>
+EOF
+          end
+
+          def scenario_started(story_title, scenario_name)
+            @output.puts <<-EOF
+          <dl class="passed">
+            <dt>Scenario: #{h scenario_name}</dt>
+            <dd>
+              <ul class="steps">
+EOF
+          end
+
+          def scenario_ended
+            @output.puts <<-EOF
+              </ul>
+            </dd>
+          </dl>
+EOF
+          end
+          
+          def found_scenario(type, description)
+          end
+
+          def scenario_succeeded(story_title, scenario_name)
+            scenario_ended
+          end
+
+          def scenario_pending(story_title, scenario_name, reason)
+            scenario_ended
+          end
+
+          def scenario_failed(story_title, scenario_name, err)
+            scenario_ended
+          end
+
+          def step_succeeded(type, description, *args)
+            print_step('passed', type, description, *args) # TODO: uses succeeded CSS class
+          end
+
+          def step_pending(type, description, *args)
+            print_step('pending', type, description, *args)
+          end
+
+          def step_failed(type, description, *args)
+            print_step('failed', type, description, *args)
+          end
+          
+          def print_step(klass, type, description, *args)
+            spans = args.map { |arg| "<span class=\"param\">#{arg}</span>" }
+            desc_string = description.step_name
+            arg_regexp = description.arg_regexp           
+            i = -1
+            inner = type.to_s.capitalize + ' ' + desc_string.gsub(arg_regexp) { |param| spans[i+=1] }
+            @output.puts "                <li class=\"#{klass}\">#{inner}</li>"
+          end
+        end
+      end
+    end
+  end
+end
\ No newline at end of file