webkit-rspec-formatter 2.0.1 → 2.0.2

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.
Files changed (62) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.md +7 -0
  3. data/README.md +10 -20
  4. data/Rakefile +16 -362
  5. metadata +68 -126
  6. metadata.gz.sig +0 -0
  7. data/ChangeLog +0 -81
  8. data/LICENSE +0 -27
  9. data/data/webkit-rspec-formatter/css/textmate-rspec.css +0 -332
  10. data/data/webkit-rspec-formatter/images/clock.png +0 -0
  11. data/data/webkit-rspec-formatter/images/cross_circle.png +0 -0
  12. data/data/webkit-rspec-formatter/images/cross_circle_frame.png +0 -0
  13. data/data/webkit-rspec-formatter/images/cross_octagon.png +0 -0
  14. data/data/webkit-rspec-formatter/images/cross_octagon_frame.png +0 -0
  15. data/data/webkit-rspec-formatter/images/cross_shield.png +0 -0
  16. data/data/webkit-rspec-formatter/images/exclamation.png +0 -0
  17. data/data/webkit-rspec-formatter/images/exclamation_frame.png +0 -0
  18. data/data/webkit-rspec-formatter/images/exclamation_shield.png +0 -0
  19. data/data/webkit-rspec-formatter/images/exclamation_small.png +0 -0
  20. data/data/webkit-rspec-formatter/images/plus_circle.png +0 -0
  21. data/data/webkit-rspec-formatter/images/plus_circle_frame.png +0 -0
  22. data/data/webkit-rspec-formatter/images/question.png +0 -0
  23. data/data/webkit-rspec-formatter/images/question_frame.png +0 -0
  24. data/data/webkit-rspec-formatter/images/question_shield.png +0 -0
  25. data/data/webkit-rspec-formatter/images/question_small.png +0 -0
  26. data/data/webkit-rspec-formatter/images/tick.png +0 -0
  27. data/data/webkit-rspec-formatter/images/tick_circle.png +0 -0
  28. data/data/webkit-rspec-formatter/images/tick_circle_frame.png +0 -0
  29. data/data/webkit-rspec-formatter/images/tick_shield.png +0 -0
  30. data/data/webkit-rspec-formatter/images/tick_small.png +0 -0
  31. data/data/webkit-rspec-formatter/images/tick_small_circle.png +0 -0
  32. data/data/webkit-rspec-formatter/images/ticket.png +0 -0
  33. data/data/webkit-rspec-formatter/images/ticket_arrow.png +0 -0
  34. data/data/webkit-rspec-formatter/images/ticket_exclamation.png +0 -0
  35. data/data/webkit-rspec-formatter/images/ticket_minus.png +0 -0
  36. data/data/webkit-rspec-formatter/images/ticket_pencil.png +0 -0
  37. data/data/webkit-rspec-formatter/images/ticket_plus.png +0 -0
  38. data/data/webkit-rspec-formatter/images/ticket_small.png +0 -0
  39. data/data/webkit-rspec-formatter/js/jquery-1.4.2.min.js +0 -154
  40. data/data/webkit-rspec-formatter/js/textmate-rspec.js +0 -402
  41. data/data/webkit-rspec-formatter/templates/failed.rhtml +0 -35
  42. data/data/webkit-rspec-formatter/templates/footer.rhtml +0 -9
  43. data/data/webkit-rspec-formatter/templates/header.rhtml +0 -35
  44. data/data/webkit-rspec-formatter/templates/page.rhtml +0 -131
  45. data/data/webkit-rspec-formatter/templates/passed.rhtml +0 -10
  46. data/data/webkit-rspec-formatter/templates/pending-fixed.rhtml +0 -25
  47. data/data/webkit-rspec-formatter/templates/pending.rhtml +0 -14
  48. data/lib/rspec/core/formatters/web_kit.rb +0 -4
  49. data/lib/rspec/core/formatters/webkit.rb +0 -222
  50. data/lib/rspec/mate/runner.rb +0 -65
  51. data/rake/191_compat.rb +0 -26
  52. data/rake/dependencies.rb +0 -76
  53. data/rake/documentation.rb +0 -123
  54. data/rake/helpers.rb +0 -502
  55. data/rake/hg.rb +0 -287
  56. data/rake/manual.rb +0 -787
  57. data/rake/packaging.rb +0 -129
  58. data/rake/publishing.rb +0 -341
  59. data/rake/style.rb +0 -62
  60. data/rake/svn.rb +0 -668
  61. data/rake/testing.rb +0 -151
  62. data/rake/verifytask.rb +0 -64
@@ -1,35 +0,0 @@
1
-
2
- <dd class="spec failed">
3
- <span class="spec-name"><%= h(example.description) %></span>
4
- <div class="failure" id="failure-<%= counter %>">
5
-
6
- <div class="message">Failure/Error:
7
- <code><%= h read_failed_line(exception, example).strip.gsub(/\n/, '<br />') %><br />
8
- % exception.message.split("\n").each do |line|
9
- <%= h line %><br />
10
- % end
11
- % example.example_group.ancestors.push(example.example_group).each do |group|
12
- % if group.metadata[:shared_group_name]
13
- Shared Example Group: "<%= h group.metadata[:shared_group_name] %>" called from
14
- "<%= backtrace_line(group.metadata[:example_group][:location]) %>
15
- % break
16
- % end
17
- % end
18
- </code>
19
- </div>
20
-
21
- <div class="backtrace"><p><code>
22
- % format_backtrace(exception.backtrace, example).each do |backtrace_info|
23
- <span class="backtrace-frame"><%= backtrace_info %></span><br />
24
- % end
25
- </code></p></div>
26
- <%= extra %>
27
- </div>
28
-
29
- % unless log_messages.nil? || log_messages.empty?
30
- <div class="log-messages">
31
- <%= log_messages.join("\n") %>
32
- </div>
33
- % end
34
- </dd>
35
-
@@ -1,9 +0,0 @@
1
- </div>
2
-
3
- <div id="summary">
4
- <p><%= example_count %> examples run in <span class="duration"><%= duration %>
5
- seconds</span>. <%= failure_count %> failed, <%= pending_count %> are pending.</p>
6
- </div>
7
-
8
- </body>
9
- </html>
@@ -1,35 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
-
4
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
- <head>
6
- <title>RSpec results</title>
7
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
- <meta http-equiv="Expires" content="-1" />
9
- <meta http-equiv="Pragma" content="no-cache" />
10
-
11
- <base href="<%= BASE_HREF %>" />
12
-
13
- <link rel="stylesheet" href="css/textmate-rspec.css" type="text/css" media="screen"
14
- title="no title" charset="utf-8" />
15
-
16
- <script type="text/javascript" charset="utf-8" src="js/jquery-1.4.2.min.js"></script>
17
- <script type="text/javascript" charset="utf-8" src="js/textmate-rspec.js"></script>
18
- </head>
19
- <body>
20
- <div class="rspec-report">
21
-
22
- <div id="rspec-header">
23
- <div id="rspec-title-section">
24
- <h1>RSpec Results:</h1>
25
- <span id="rspec-summary-stats">Running (<span id="spec-count"><%= example_count %></span>
26
- examples)...</span>
27
- </div>
28
-
29
- <div id="rspec-summary">
30
- <canvas width="450" height="38" id="rspec-summary-graph"></canvas>
31
- <div id="rspec-summary-graph-legend"></div>
32
- </div>
33
- </div>
34
-
35
- <div id="rspec-details">
@@ -1,131 +0,0 @@
1
- <div class="example-group">
2
- <dl>
3
- <dt id="example-group-1">Treequel::Filter</dt>
4
- <dd class="spec passed"><span class="spec-name">knows that it is promiscuous (will match any entry) if its component is promiscuous</span></dd>
5
- <dd class="spec passed"><span class="spec-name">knows that it isn't promiscuous if its component isn't promiscuous</span></dd>
6
- <dd class="spec passed"><span class="spec-name">defaults to selecting everything</span></dd>
7
- <dd class="spec passed"><span class="spec-name">can be created from a string literal</span></dd>
8
- <dd class="spec passed"><span class="spec-name">wraps string literal instances in parens if it requires them</span></dd>
9
- <dd class="spec passed"><span class="spec-name">parses a single Symbol argument as a presence filter</span></dd>
10
- <dd class="spec passed"><span class="spec-name">parses a single-element Array with a Symbol as a presence filter</span></dd>
11
- <dd class="spec passed"><span class="spec-name">parses a Symbol+value pair as a simple item equal filter</span></dd>
12
- <dd class="spec passed"><span class="spec-name">parses a Symbol+value pair in an Array as a simple item equal filter</span></dd>
13
- <dd class="spec passed"><span class="spec-name">parses an AND expression with only a single clause</span></dd>
14
- <dd class="spec passed"><span class="spec-name">parses an AND expression with multiple clauses</span></dd>
15
- <dd class="spec passed"><span class="spec-name">parses an OR expression with only a single clause</span></dd>
16
- <dd class="spec passed"><span class="spec-name">parses an OR expression with multiple clauses</span></dd>
17
- <dd class="spec passed"><span class="spec-name">parses an OR expression with String literal clauses</span></dd>
18
- <dd class="spec passed"><span class="spec-name">parses the hash form of OR expression</span></dd>
19
- <dd class="spec passed"><span class="spec-name">parses a NOT expression with only a single clause</span></dd>
20
- <dd class="spec passed"><span class="spec-name">raises an exception with a NOT expression that contains more than one clause</span></dd>
21
- <dd class="spec passed"><span class="spec-name">parses a Substring item from a filter that includes an asterisk</span></dd>
22
- <dd class="spec passed"><span class="spec-name">parses a Present item from a filter that is only an asterisk</span></dd>
23
- <dd class="spec passed"><span class="spec-name">raises an error when an extensible item filter is given</span></dd>
24
- <dd class="spec passed"><span class="spec-name">parses a complex nested expression</span></dd>
25
- </dl>
26
- </div>
27
- <div class="example-group">
28
- <dl>
29
- <dt id="example-group-2">Treequel::Filter operator methods</dt>
30
- <dd class="spec passed"><span class="spec-name">compares as equal with another filter if their components are equal</span></dd>
31
- <dd class="spec passed"><span class="spec-name">creates a new AND filter out of two filters that are added together</span></dd>
32
- <dd class="spec passed"><span class="spec-name">creates a new AND filter out of two filters that are bitwise-ANDed together</span></dd>
33
- <dd class="spec passed"><span class="spec-name">doesn't include the left operand in an AND filter if it is promiscuous</span></dd>
34
- <dd class="spec passed"><span class="spec-name">doesn't include the right operand in an AND filter if it is promiscuous</span></dd>
35
- </dl>
36
- </div>
37
- <div class="example-group">
38
- <dl>
39
- <dt id="example-group-3">Treequel::Filter components: Treequel::Filter::FilterList</dt>
40
- <dd class="spec passed"><span class="spec-name">stringifies by joining its stringified members</span></dd>
41
- </dl>
42
- </div>
43
- <div class="example-group">
44
- <dl>
45
- <dt id="example-group-4">Treequel::Filter components: Treequel::Filter::Component</dt>
46
- <dd class="spec passed"><span class="spec-name">is an abstract class</span></dd>
47
- <dd class="spec passed"><span class="spec-name">is non-promiscuous by default</span></dd>
48
- </dl>
49
- </div>
50
- <div class="example-group">
51
- <dl>
52
- <dt id="example-group-5">Treequel::Filter components: Treequel::Filter::SimpleItemComponent</dt>
53
- <dd class="spec passed"><span class="spec-name">can parse a component object from a string literal</span></dd>
54
- <dd class="spec passed"><span class="spec-name">raises an ExpressionError if it can't parse a string literal</span></dd>
55
- <dd class="spec passed"><span class="spec-name">uses the 'equal' operator if none is specified</span></dd>
56
- <dd class="spec passed"><span class="spec-name">knows what the appropriate operator is for its filtertype</span></dd>
57
- <dd class="spec passed"><span class="spec-name">knows what the appropriate operator is for its filtertype even if it's set to a string</span></dd>
58
- <dd class="spec passed"><span class="spec-name">stringifies as &lt;attribute&gt;&lt;operator&gt;&lt;value&gt;</span></dd>
59
- <dd class="spec passed"><span class="spec-name">uses the '~=' operator if its filtertype is 'approx'</span></dd>
60
- <dd class="spec passed"><span class="spec-name">uses the '&gt;=' operator if its filtertype is 'greater'</span></dd>
61
- <dd class="spec pending"><span class="spec-name">uses the '&lt;=' operator if its filtertype is 'less' (PENDING: Because I can)</span></dd>
62
- <dd class="spec passed"><span class="spec-name">raises an error if it's created with an unknown filtertype</span></dd>
63
- </dl>
64
- </div>
65
- <div class="example-group">
66
- <dl>
67
- <dt id="example-group-6">Treequel::Filter components: Treequel::Filter::SubstringItemComponent</dt>
68
- <dd class="spec failed">
69
- <span class="spec-name">can parse a component object from a string literal</span>
70
- <div class="failure" id="failure-1">
71
- <div class="message"><code>undefined local variable or method `saadsdf' for #&lt;Spec::Example::ExampleGroup::Subclass_1::Subclass_2::Subclass_4:0x1b343d0&gt;</code></div>
72
- <div class="backtrace">
73
- <code><a href="txmt://open?url=file:///Users/ged/source/ruby/Treequel/spec/treequel/filter_spec.rb&amp;line=296">/Users/ged/source/ruby/Treequel/spec/treequel/filter_spec.rb:296</a> -:3</code></div>
74
- <pre class="ruby"><code>
75
- <span class="linenum">294</span> <span class="ident">comp</span><span class="punct">.</span><span class="ident">attribute</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="punct">'</span><span class="string">description</span><span class="punct">'</span>
76
- <span class="linenum">295</span> <span class="ident">comp</span><span class="punct">.</span><span class="ident">options</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="punct">'</span><span class="string"></span><span class="punct">'</span>
77
- <span class="offending"><span class="linenum">296</span> <span class="ident">saadsdf</span></span>
78
- <span class="linenum">297</span> <span class="ident">comp</span><span class="punct">.</span><span class="ident">pattern</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="punct">'</span><span class="string">*basecamp*</span><span class="punct">'</span>
79
- <span class="linenum">298</span> <span class="keyword">end</span>
80
- </code></pre>
81
- </div>
82
- </dd>
83
- <dd class="spec passed"><span class="spec-name">can parse a component object from a string literal with attribute options</span></dd>
84
- <dd class="spec passed"><span class="spec-name">raises an ExpressionError if it can't parse a string literal</span></dd>
85
- </dl>
86
- </div>
87
- <div class="example-group">
88
- <dl>
89
- <dt id="example-group-7">Treequel::Filter components: Treequel::Filter::AndComponent</dt>
90
- <dd class="spec passed"><span class="spec-name">stringifies as its filters ANDed together</span></dd>
91
- <dd class="spec passed"><span class="spec-name">allows a single filter</span></dd>
92
- </dl>
93
- </div>
94
- <div class="example-group">
95
- <dl>
96
- <dt id="example-group-8">Treequel::Filter components: Treequel::Filter::OrComponent</dt>
97
- <dd class="spec passed"><span class="spec-name">stringifies as its filters ORed together</span></dd>
98
- <dd class="spec failed">
99
- <span class="spec-name">allows a single filter</span>
100
- <div class="failure" id="failure-2">
101
- <div class="message"><code>undefined local variable or method `sdsdf' for #&lt;Spec::Example::ExampleGroup::Subclass_1::Subclass_2::Subclass_6:0x1af8308&gt;</code></div>
102
- <div class="backtrace"><code><a href="txmt://open?url=file:///Users/ged/source/ruby/Treequel/spec/treequel/filter_spec.rb&amp;line=335">/Users/ged/source/ruby/Treequel/spec/treequel/filter_spec.rb:335</a> -:3</code></div>
103
- <pre class="ruby"><code>
104
- <span class="linenum">333</span>
105
- <span class="linenum">334</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">allows a single filter</span><span class="punct">&quot;</span> <span class="keyword">do</span>
106
- <span class="offending"><span class="linenum">335</span> <span class="ident">sdsdf</span></span>
107
- <span class="linenum">336</span> <span class="constant">Treequel</span><span class="punct">::</span><span class="constant">Filter</span><span class="punct">::</span><span class="constant">OrComponent</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span> <span class="attribute">@filter1</span> <span class="punct">).</span><span class="ident">to_s</span><span class="punct">.</span>
108
- <span class="linenum">337</span> <span class="ident">should</span> <span class="punct">==</span> <span class="punct">'</span><span class="string">|(filter1)</span><span class="punct">'</span>
109
- </code></pre>
110
- </div>
111
- </dd>
112
- </dl>
113
- </div>
114
- <div class="example-group">
115
- <dl>
116
- <dt id="example-group-9">Treequel::Filter components: Treequel::Filter::NotComponent</dt>
117
- <dd class="spec passed"><span class="spec-name">stringifies as the negation of its filter</span></dd>
118
- <dd class="spec passed"><span class="spec-name">can't be created with multiple filters</span></dd>
119
- </dl>
120
- </div>
121
- <div class="example-group">
122
- <dl>
123
- <dt id="example-group-10">Treequel::Filter support for Sequel expressions</dt>
124
- <dd class="spec passed"><span class="spec-name">supports the boolean expression syntax</span></dd>
125
- </dl>
126
- </div>
127
- </div>
128
- </div>
129
-
130
- </body>
131
- </html>
@@ -1,10 +0,0 @@
1
- <dd class="spec passed">
2
- <span class="spec-name"><%= h(example.description) %></span>
3
-
4
- % unless log_messages.nil? || log_messages.empty?
5
- <div class="log-messages">
6
- <%= log_messages.join("\n") %>
7
- </div>
8
- % end
9
- </dd>
10
-
@@ -1,25 +0,0 @@
1
-
2
- <dd class="spec pending-fixed">
3
- <span class="spec-name"><%= h(example.description) %></span>
4
- <div class="failure" id="failure-<%= counter %>">
5
-
6
- <div class="message">Expected pending
7
- <code><%= h(example.metadata[:execution_result][:pending_message]) %></code>
8
- to fail. No Error was raised.
9
- </div>
10
-
11
- <div class="backtrace"><p><code>
12
- % format_backtrace(exception.backtrace, example).each do |backtrace_info|
13
- <span class="backtrace-frame"><%= backtrace_info %></span><br />
14
- % end
15
- </code></p></div>
16
- <%= extra %>
17
- </div>
18
-
19
- % unless log_messages.nil? || log_messages.empty?
20
- <div class="log-messages">
21
- <%= log_messages.join("\n") %>
22
- </div>
23
- % end
24
- </dd>
25
-
@@ -1,14 +0,0 @@
1
-
2
- <dd class="spec pending">
3
- <span class="spec-name"><%= h(example.description) %></span>
4
- <span class="pending-message">
5
- (Pending <%= example.execution_result[:pending_message] %>)
6
- </span>
7
-
8
- % unless log_messages.nil? || log_messages.empty?
9
- <div class="log-messages">
10
- <%= log_messages.join("\n") %>
11
- </div>
12
- % end
13
- </dd>
14
-
@@ -1,4 +0,0 @@
1
- # Alow the formatter to be loaded as rspec/core/formatters/web_kit
2
-
3
- require 'rspec/core/formatters/webkit'
4
-
@@ -1,222 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pp'
4
- require 'rbconfig'
5
- require 'erb'
6
- require 'pathname'
7
-
8
- require 'rspec'
9
- require 'rspec/core/formatters/base_text_formatter'
10
- require 'rspec/core/formatters/snippet_extractor'
11
-
12
- class RSpec::Core::Formatters::WebKit < RSpec::Core::Formatters::BaseTextFormatter
13
- include ERB::Util
14
-
15
- # Version constant
16
- VERSION = '2.0.1'
17
-
18
- # Look up the datadir falling back to a relative path (mostly for prerelease testing)
19
- DEFAULT_DATADIR = Pathname( Config.datadir('webkit-rspec-formatter') )
20
- if DEFAULT_DATADIR.exist?
21
- BASE_PATH = DEFAULT_DATADIR
22
- else
23
- BASE_PATH = Pathname( __FILE__ ).dirname.parent.parent.parent.parent +
24
- 'data/webkit-rspec-formatter'
25
- end
26
-
27
- # The base HREF used in the header to map stuff to the datadir
28
- BASE_HREF = "file://#{BASE_PATH}/"
29
-
30
- # The directory to grab ERb templates out of
31
- TEMPLATE_DIR = BASE_PATH + 'templates'
32
-
33
- # The page part templates
34
- HEADER_TEMPLATE = TEMPLATE_DIR + 'header.rhtml'
35
- PASSED_EXAMPLE_TEMPLATE = TEMPLATE_DIR + 'passed.rhtml'
36
- FAILED_EXAMPLE_TEMPLATE = TEMPLATE_DIR + 'failed.rhtml'
37
- PENDING_EXAMPLE_TEMPLATE = TEMPLATE_DIR + 'pending.rhtml'
38
- PENDFIX_EXAMPLE_TEMPLATE = TEMPLATE_DIR + 'pending-fixed.rhtml'
39
- FOOTER_TEMPLATE = TEMPLATE_DIR + 'footer.rhtml'
40
-
41
-
42
- ### Create a new formatter
43
- def initialize( output ) # :notnew:
44
- super
45
- @previous_nesting_depth = 0
46
- @example_number = 0
47
- @failcounter = 0
48
- @snippet_extractor = RSpec::Core::Formatters::SnippetExtractor.new
49
- @example_templates = {
50
- :passed => self.load_template(PASSED_EXAMPLE_TEMPLATE),
51
- :failed => self.load_template(FAILED_EXAMPLE_TEMPLATE),
52
- :pending => self.load_template(PENDING_EXAMPLE_TEMPLATE),
53
- :pending_fixed => self.load_template(PENDFIX_EXAMPLE_TEMPLATE),
54
- }
55
-
56
- Thread.current['logger-output'] = []
57
- end
58
-
59
-
60
- ######
61
- public
62
- ######
63
-
64
- # Attributes made readable for ERb
65
- attr_reader :example_group_number, :example_number, :example_count
66
-
67
- # The counter for failed example IDs
68
- attr_accessor :failcounter
69
-
70
-
71
- ### Start the page by rendering the header.
72
- def start( example_count )
73
- @output.puts self.render_header( example_count )
74
- @output.flush
75
- end
76
-
77
-
78
- ### Callback called by each example group when it's entered --
79
- def example_group_started( example_group )
80
- super
81
- nesting_depth = example_group.ancestors.length
82
-
83
- # Close the previous example groups if this one isn't a
84
- # descendent of the previous one
85
- if @previous_nesting_depth.nonzero? && @previous_nesting_depth >= nesting_depth
86
- ( @previous_nesting_depth - nesting_depth + 1 ).times do
87
- @output.puts " </dl>", "</section>", " </dd>"
88
- end
89
- end
90
-
91
- @output.puts "<!-- nesting: %d, previous: %d -->" %
92
- [ nesting_depth, @previous_nesting_depth ]
93
- @previous_nesting_depth = nesting_depth
94
-
95
- if @previous_nesting_depth == 1
96
- @output.puts %{<section class="example-group">}
97
- else
98
- @output.puts %{<dd class="nested-group"><section class="example-group">}
99
- end
100
-
101
- @output.puts %{ <dl>},
102
- %{ <dt id="%s">%s</dt>} % [
103
- example_group.name.gsub(/[\W_]+/, '-').downcase,
104
- h(example_group.description)
105
- ]
106
- @output.flush
107
- end
108
- alias_method :add_example_group, :example_group_started
109
-
110
-
111
- ### Fetch any log messages added to the thread-local Array
112
- def log_messages
113
- return Thread.current[ 'logger-output' ] || []
114
- end
115
-
116
-
117
- ### Callback -- called when the examples are finished.
118
- def start_dump
119
- @previous_nesting_depth.downto( 1 ) do |i|
120
- @output.puts " </dl>",
121
- "</section>"
122
- @output.puts " </dd>" unless i == 1
123
- end
124
-
125
- @output.flush
126
- end
127
-
128
-
129
- ### Callback -- called when an example is entered
130
- def example_started( example )
131
- @example_number += 1
132
- Thread.current[ 'logger-output' ] ||= []
133
- Thread.current[ 'logger-output' ].clear
134
- end
135
-
136
-
137
- ### Callback -- called when an example is exited with no failures.
138
- def example_passed( example )
139
- status = 'passed'
140
- @output.puts( @example_templates[:passed].result(binding()) )
141
- @output.flush
142
- end
143
-
144
-
145
- ### Callback -- called when an example is exited with a failure.
146
- def example_failed( example )
147
- super
148
-
149
- counter = self.failcounter += 1
150
- exception = example.metadata[:execution_result][:exception_encountered]
151
- extra = self.extra_failure_content( exception )
152
- template = if exception.is_a?( RSpec::Core::PendingExampleFixedError )
153
- then @example_templates[:pending_fixed]
154
- else @example_templates[:failed]
155
- end
156
-
157
- @output.puts( template.result(binding()) )
158
- @output.flush
159
- end
160
-
161
-
162
- ### Callback -- called when an example is exited via a 'pending'.
163
- def example_pending( example )
164
- status = 'pending'
165
- @output.puts( @example_templates[:pending].result(binding()) )
166
- @output.flush
167
- end
168
-
169
-
170
- ### Format backtrace lines to include a textmate link to the file/line in question.
171
- def backtrace_line( line )
172
- return nil unless line = super
173
- return nil if line =~ %r{r?spec/mate|textmate-command}
174
- return h( line.strip ).gsub( /([^:]*\.rb):(\d*)/ ) do
175
- "<a href=\"txmt://open?url=file://#{File.expand_path($1)}&amp;line=#{$2}\">#{$1}:#{$2}</a> "
176
- end
177
- end
178
-
179
-
180
- ### Return any stuff that should be appended to the current example
181
- ### because it's failed. Returns a snippet of the source around the
182
- ### failure.
183
- def extra_failure_content( exception )
184
- snippet = @snippet_extractor.snippet( exception )
185
- return " <pre class=\"ruby\"><code>#{snippet}</code></pre>"
186
- end
187
-
188
-
189
- ### Returns content to be output when a failure occurs during the run; overridden to
190
- ### do nothing, as failures are handled by #example_failed.
191
- def dump_failures( *unused )
192
- end
193
-
194
-
195
- ### Output the content generated at the end of the run.
196
- def dump_summary( duration, example_count, failure_count, pending_count )
197
- @output.puts self.render_footer( duration, example_count, failure_count, pending_count )
198
- @output.flush
199
- end
200
-
201
-
202
- ### Render the header template in the context of the receiver.
203
- def render_header( example_count )
204
- template = self.load_template( HEADER_TEMPLATE )
205
- return template.result( binding() )
206
- end
207
-
208
-
209
- ### Render the footer template in the context of the receiver.
210
- def render_footer( duration, example_count, failure_count, pending_count )
211
- template = self.load_template( FOOTER_TEMPLATE )
212
- return template.result( binding() )
213
- end
214
-
215
-
216
- ### Load the ERB template at +templatepath+ and return it.
217
- ### @param [Pathname] templatepath the fully-qualified path to the template file
218
- def load_template( templatepath )
219
- return ERB.new( templatepath.read, nil, '%<>' ).freeze
220
- end
221
-
222
- end # class RSpec::Core::Formatter::WebKitFormatter