rspec 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/CHANGES +78 -1
  2. data/EXAMPLES.rd +8 -5
  3. data/README +1 -0
  4. data/Rakefile +1 -1
  5. data/examples/pending_example.rb +20 -0
  6. data/lib/autotest/rspec.rb +46 -18
  7. data/lib/spec/dsl.rb +1 -0
  8. data/lib/spec/dsl/behaviour.rb +37 -27
  9. data/lib/spec/dsl/behaviour_callbacks.rb +4 -0
  10. data/lib/spec/dsl/behaviour_eval.rb +27 -16
  11. data/lib/spec/dsl/behaviour_factory.rb +2 -2
  12. data/lib/spec/dsl/composite_proc_builder.rb +9 -4
  13. data/lib/spec/dsl/configuration.rb +20 -4
  14. data/lib/spec/dsl/description.rb +7 -0
  15. data/lib/spec/dsl/errors.rb +9 -0
  16. data/lib/spec/dsl/example.rb +18 -10
  17. data/lib/spec/matchers/have.rb +10 -13
  18. data/lib/spec/matchers/operator_matcher.rb +3 -3
  19. data/lib/spec/matchers/raise_error.rb +8 -3
  20. data/lib/spec/mocks/error_generator.rb +1 -1
  21. data/lib/spec/mocks/message_expectation.rb +11 -0
  22. data/lib/spec/mocks/methods.rb +9 -5
  23. data/lib/spec/mocks/proxy.rb +13 -9
  24. data/lib/spec/rake/spectask.rb +80 -38
  25. data/lib/spec/runner/backtrace_tweaker.rb +2 -1
  26. data/lib/spec/runner/behaviour_runner.rb +37 -16
  27. data/lib/spec/runner/formatter/base_formatter.rb +23 -15
  28. data/lib/spec/runner/formatter/base_text_formatter.rb +39 -11
  29. data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +7 -3
  30. data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -3
  31. data/lib/spec/runner/formatter/html_formatter.rb +32 -25
  32. data/lib/spec/runner/formatter/progress_bar_formatter.rb +6 -5
  33. data/lib/spec/runner/formatter/rdoc_formatter.rb +6 -6
  34. data/lib/spec/runner/formatter/specdoc_formatter.rb +7 -6
  35. data/lib/spec/runner/option_parser.rb +6 -5
  36. data/lib/spec/runner/options.rb +60 -43
  37. data/lib/spec/runner/reporter.rb +17 -6
  38. data/lib/spec/runner/spec_parser.rb +1 -1
  39. data/lib/spec/translator.rb +8 -0
  40. data/lib/spec/version.rb +3 -3
  41. data/plugins/mock_frameworks/flexmock.rb +14 -18
  42. data/plugins/mock_frameworks/mocha.rb +0 -2
  43. data/plugins/mock_frameworks/rr.rb +21 -0
  44. data/spec/autotest/discover_spec.rb +19 -0
  45. data/spec/autotest/rspec_spec.rb +257 -0
  46. data/spec/autotest_helper.rb +4 -0
  47. data/spec/spec/dsl/behaviour_eval_spec.rb +30 -0
  48. data/spec/spec/dsl/behaviour_factory_spec.rb +18 -0
  49. data/spec/spec/dsl/behaviour_spec.rb +95 -58
  50. data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -13
  51. data/spec/spec/dsl/configuration_spec.rb +6 -1
  52. data/spec/spec/dsl/description_spec.rb +9 -1
  53. data/spec/spec/dsl/example_class_spec.rb +3 -3
  54. data/spec/spec/dsl/example_instance_spec.rb +26 -28
  55. data/spec/spec/dsl/example_matcher_spec.rb +91 -0
  56. data/spec/spec/dsl/shared_behaviour_spec.rb +24 -0
  57. data/spec/spec/expectations/extensions/object_spec.rb +2 -2
  58. data/spec/spec/expectations/fail_with_spec.rb +2 -2
  59. data/spec/spec/matchers/have_spec.rb +1 -1
  60. data/spec/spec/matchers/operator_matcher_spec.rb +10 -10
  61. data/spec/spec/matchers/raise_error_spec.rb +38 -0
  62. data/spec/spec/mocks/argument_expectation_spec.rb +18 -14
  63. data/spec/spec/mocks/at_most_spec.rb +1 -1
  64. data/spec/spec/mocks/bug_report_11545_spec.rb +31 -0
  65. data/spec/spec/mocks/partial_mock_spec.rb +33 -1
  66. data/spec/spec/runner/behaviour_runner_spec.rb +72 -49
  67. data/spec/spec/runner/command_line_spec.rb +1 -1
  68. data/spec/spec/runner/context_matching_spec.rb +10 -10
  69. data/spec/spec/runner/drb_command_line_spec.rb +62 -59
  70. data/spec/spec/runner/extensions/bug_report_10577_spec.rb +35 -0
  71. data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +15 -2
  72. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +3 -3
  73. data/spec/spec/runner/formatter/html_formatter_spec.rb +1 -1
  74. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +14 -15
  75. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +1 -1
  76. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +42 -9
  77. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +40 -40
  78. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +55 -49
  79. data/spec/spec/runner/option_parser_spec.rb +16 -15
  80. data/spec/spec/runner/options_spec.rb +64 -31
  81. data/spec/spec/runner/reporter_spec.rb +67 -15
  82. data/spec/spec/spec_classes.rb +9 -1
  83. data/spec/spec/translator_spec.rb +48 -0
  84. data/spec/spec_helper.rb +5 -2
  85. metadata +13 -6
  86. data/examples/not_yet_implemented_spec.rb +0 -12
  87. data/spec/spec/runner/example_matcher_spec.rb +0 -127
@@ -33,7 +33,8 @@ module Spec
33
33
  /Ruby\.tmbundle\/Support\/tmruby.rb:/,
34
34
  /RSpec\.tmbundle\/Support\/lib/,
35
35
  /temp_textmate\./,
36
- /mock_frameworks\/rspec/
36
+ /mock_frameworks\/rspec/,
37
+ /spec_server/
37
38
  ]
38
39
  end
39
40
 
@@ -2,34 +2,28 @@ module Spec
2
2
  module Runner
3
3
  class BehaviourRunner
4
4
 
5
- def initialize(options)
5
+ def initialize(options, arg=nil)
6
6
  @behaviours = []
7
7
  @options = options
8
8
  end
9
9
 
10
10
  def add_behaviour(behaviour)
11
- if !specified_examples.nil? && !specified_examples.empty? #&& behaviour.matches?(specified_examples)
12
- behaviour.retain_examples_matching!(specified_examples) #if behaviour.matches?(specified_examples)
11
+ if !specified_examples.nil? && !specified_examples.empty?
12
+ behaviour.retain_examples_matching!(specified_examples)
13
13
  end
14
14
  @behaviours << behaviour if behaviour.number_of_examples != 0 && !behaviour.shared?
15
15
  end
16
16
 
17
- # Runs all contexts and returns the number of failures.
17
+ # Runs all behaviours and returns the number of failures.
18
18
  def run(paths, exit_when_done)
19
- unless paths.nil? # It's nil when running single specs with ruby
20
- paths = find_paths(paths)
21
- sorted_paths = sort_paths(paths)
22
- load_specs(sorted_paths)
23
- end
24
- @options.reporter.start(number_of_examples)
25
- behaviours = @options.reverse ? @behaviours.reverse : @behaviours
19
+ prepare!(paths)
26
20
  begin
27
- run_behaviours(behaviours)
21
+ run_behaviours
28
22
  rescue Interrupt
29
23
  ensure
30
- @options.reporter.end
24
+ report_end
31
25
  end
32
- failure_count = @options.reporter.dump
26
+ failure_count = report_dump
33
27
 
34
28
  heckle if(failure_count == 0 && !@options.heckle_runner.nil?)
35
29
 
@@ -39,9 +33,28 @@ module Spec
39
33
  end
40
34
  failure_count
41
35
  end
36
+
37
+ def report_end
38
+ @options.reporter.end
39
+ end
40
+
41
+ def report_dump
42
+ @options.reporter.dump
43
+ end
44
+
45
+ def prepare!(paths)
46
+ unless paths.nil? # It's nil when running single specs with ruby
47
+ paths = find_paths(paths)
48
+ sorted_paths = sort_paths(paths)
49
+ load_specs(sorted_paths) # This will populate @behaviours via callbacks to add_behaviour
50
+ end
51
+ @options.reporter.start(number_of_examples)
52
+ @behaviours.reverse! if @options.reverse
53
+ set_sequence_numbers
54
+ end
42
55
 
43
- def run_behaviours(behaviours)
44
- behaviours.each do |behaviour|
56
+ def run_behaviours
57
+ @behaviours.each do |behaviour|
45
58
  behaviour.run(@options.reporter, @options.dry_run, @options.reverse, @options.timeout)
46
59
  end
47
60
  end
@@ -66,6 +79,14 @@ module Spec
66
79
 
67
80
  private
68
81
 
82
+ # Sets the #number on each Example
83
+ def set_sequence_numbers
84
+ number = 0
85
+ @behaviours.each do |behaviour|
86
+ number = behaviour.set_sequence_numbers(number, @options.reverse)
87
+ end
88
+ end
89
+
69
90
  def find_paths(paths)
70
91
  result = []
71
92
  paths.each do |path|
@@ -24,26 +24,27 @@ module Spec
24
24
  def add_behaviour(name)
25
25
  end
26
26
 
27
- # This method is invoked when an example starts. +name+ is the name of the
28
- # example.
29
- def example_started(name)
27
+ # This method is invoked when an +example+ starts.
28
+ def example_started(example)
30
29
  end
31
30
 
32
- # This method is invoked when an example passes. +name+ is the name of the
33
- # example.
34
- def example_passed(name)
31
+ # This method is invoked when an +example+ passes.
32
+ def example_passed(example)
35
33
  end
36
34
 
37
- # This method is invoked when an example fails, i.e. an exception occurred
38
- # inside it (such as a failed should or other exception). +name+ is the name
39
- # of the example. +counter+ is the sequence number of the failure
40
- # (starting at 1) and +failure+ is the associated Failure object.
41
- def example_failed(name, counter, failure)
35
+ # This method is invoked when an +example+ fails, i.e. an exception occurred
36
+ # inside it (such as a failed should or other exception). +counter+ is the
37
+ # sequence number of the failure (starting at 1) and +failure+ is the associated
38
+ # Failure object.
39
+ def example_failed(example, counter, failure)
42
40
  end
43
41
 
44
- # This method is invoked when an example is not yet implemented (i.e. has not been provided a block).
42
+ # This method is invoked when an example is not yet implemented (i.e. has not
43
+ # been provided a block), or when an ExamplePendingError is raised.
45
44
  # +name+ is the name of the example.
46
- def example_not_implemented(name)
45
+ # +message+ is the message from the ExamplePendingError, if it exists, or the
46
+ # default value of "Not Yet Implemented"
47
+ def example_pending(behaviour_name, example_name, message)
47
48
  end
48
49
 
49
50
  # This method is invoked after all of the examples have executed. The next method
@@ -58,10 +59,17 @@ module Spec
58
59
  def dump_failure(counter, failure)
59
60
  end
60
61
 
61
- # This method is invoked at the very end.
62
- def dump_summary(duration, example_count, failure_count, not_implemented_count)
62
+ # This method is invoked after the dumping of examples and failures.
63
+ def dump_summary(duration, example_count, failure_count, pending_count)
64
+ end
65
+
66
+ # This gets invoked after the summary if option is set to do so.
67
+ def dump_pending
63
68
  end
64
69
 
70
+ # This method is invoked at the very end. Allows the formatter to clean up, like closing open streams.
71
+ def close
72
+ end
65
73
  end
66
74
  end
67
75
  end
@@ -25,38 +25,47 @@ module Spec
25
25
  @colour = false
26
26
  @dry_run = false
27
27
  @snippet_extractor = SnippetExtractor.new
28
+ @pending_examples = []
29
+ end
30
+
31
+ def example_pending(behaviour_name, example_name, message)
32
+ @pending_examples << ["#{behaviour_name} #{example_name}", message]
28
33
  end
29
34
 
30
35
  def colour=(colour)
31
36
  @colour = colour
32
37
  begin ; require 'Win32/Console/ANSI' if @colour && PLATFORM =~ /win32/ ; rescue LoadError ; raise "You must gem install win32console to use colour on Windows" ; end
33
- end
38
+ end
34
39
 
35
40
  def dump_failure(counter, failure)
36
41
  @output.puts
37
42
  @output.puts "#{counter.to_s})"
43
+ @output.puts colourise("#{failure.header}\n#{failure.exception.message}", failure)
44
+ @output.puts format_backtrace(failure.exception.backtrace)
45
+ @output.flush
46
+ end
47
+
48
+ def colourise(s, failure)
38
49
  if(failure.expectation_not_met?)
39
- @output.puts red(failure.header)
40
- @output.puts red(failure.exception.message)
50
+ red(s)
51
+ elsif(failure.pending_fixed?)
52
+ blue(s)
41
53
  else
42
- @output.puts magenta(failure.header)
43
- @output.puts magenta(failure.exception.message)
54
+ magenta(s)
44
55
  end
45
- @output.puts format_backtrace(failure.exception.backtrace)
46
- @output.flush
47
56
  end
48
57
 
49
- def dump_summary(duration, example_count, failure_count, not_implemented_count)
58
+ def dump_summary(duration, example_count, failure_count, pending_count)
50
59
  return if @dry_run
51
60
  @output.puts
52
61
  @output.puts "Finished in #{duration} seconds"
53
62
  @output.puts
54
63
 
55
64
  summary = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
56
- summary << ", #{not_implemented_count} not implemented" if not_implemented_count > 0
65
+ summary << ", #{pending_count} pending" if pending_count > 0
57
66
 
58
67
  if failure_count == 0
59
- if not_implemented_count > 0
68
+ if pending_count > 0
60
69
  @output.puts yellow(summary)
61
70
  else
62
71
  @output.puts green(summary)
@@ -65,8 +74,26 @@ module Spec
65
74
  @output.puts red(summary)
66
75
  end
67
76
  @output.flush
77
+ dump_pending
68
78
  end
69
79
 
80
+ def dump_pending
81
+ unless @pending_examples.empty?
82
+ @output.puts
83
+ @output.puts "Pending:"
84
+ @pending_examples.each do |pending_example|
85
+ @output.puts "#{pending_example[0]} (#{pending_example[1]})"
86
+ end
87
+ end
88
+ @output.flush
89
+ end
90
+
91
+ def close
92
+ if IO === @output
93
+ @output.close
94
+ end
95
+ end
96
+
70
97
  def format_backtrace(backtrace)
71
98
  return "" if backtrace.nil?
72
99
  backtrace.map { |line| backtrace_line(line) }.join("\n")
@@ -91,10 +118,11 @@ module Spec
91
118
  end
92
119
  end
93
120
 
94
- def red(text); colour(text, "\e[31m"); end
95
121
  def green(text); colour(text, "\e[32m"); end
122
+ def red(text); colour(text, "\e[31m"); end
96
123
  def magenta(text); colour(text, "\e[35m"); end
97
124
  def yellow(text); colour(text, "\e[33m"); end
125
+ def blue(text); colour(text, "\e[34m"); end
98
126
 
99
127
  end
100
128
  end
@@ -3,10 +3,14 @@ module Spec
3
3
  module Formatter
4
4
  class FailingBehavioursFormatter < BaseTextFormatter
5
5
  def add_behaviour(behaviour_name)
6
- @behaviour_name = behaviour_name
6
+ if behaviour_name =~ /(.*) \(druby.*\)$/
7
+ @behaviour_name = $1
8
+ else
9
+ @behaviour_name = behaviour_name
10
+ end
7
11
  end
8
12
 
9
- def example_failed(name, counter, failure)
13
+ def example_failed(example, counter, failure)
10
14
  unless @behaviour_name.nil?
11
15
  @output.puts @behaviour_name
12
16
  @behaviour_name = nil
@@ -17,7 +21,7 @@ module Spec
17
21
  def dump_failure(counter, failure)
18
22
  end
19
23
 
20
- def dump_summary(duration, example_count, failure_count, not_implemented_count)
24
+ def dump_summary(duration, example_count, failure_count, pending_count)
21
25
  end
22
26
  end
23
27
  end
@@ -6,15 +6,15 @@ module Spec
6
6
  @behaviour_name = behaviour_name
7
7
  end
8
8
 
9
- def example_failed(name, counter, failure)
10
- @output.puts "#{@behaviour_name} #{name}"
9
+ def example_failed(example, counter, failure)
10
+ @output.puts "#{@behaviour_name} #{example.description}"
11
11
  @output.flush
12
12
  end
13
13
 
14
14
  def dump_failure(counter, failure)
15
15
  end
16
16
 
17
- def dump_summary(duration, example_count, failure_count, not_implemented_count)
17
+ def dump_summary(duration, example_count, failure_count, pending_count)
18
18
  end
19
19
  end
20
20
  end
@@ -1,7 +1,10 @@
1
+ require 'erb'
2
+
1
3
  module Spec
2
4
  module Runner
3
5
  module Formatter
4
6
  class HtmlFormatter < BaseTextFormatter
7
+ include ERB::Util # for the #h method
5
8
 
6
9
  def initialize(output)
7
10
  super
@@ -14,7 +17,7 @@ module Spec
14
17
  @current_behaviour_number
15
18
  end
16
19
 
17
- # The number of the currently running example
20
+ # The number of the currently running example (a global counter)
18
21
  def current_example_number
19
22
  @current_example_number
20
23
  end
@@ -37,7 +40,7 @@ module Spec
37
40
  end
38
41
  @output.puts "<div class=\"behaviour\">"
39
42
  @output.puts " <dl>"
40
- @output.puts " <dt id=\"behaviour_#{current_behaviour_number}\">#{escape(name)}</dt>"
43
+ @output.puts " <dt id=\"behaviour_#{current_behaviour_number}\">#{h(name)}</dt>"
41
44
  @output.flush
42
45
  end
43
46
 
@@ -47,26 +50,28 @@ module Spec
47
50
  @output.flush
48
51
  end
49
52
 
50
- def example_passed(name)
51
- @current_example_number += 1
53
+ def example_started(example)
54
+ @current_example_number = example.number
55
+ end
56
+
57
+ def example_passed(example)
52
58
  move_progress
53
- @output.puts " <dd class=\"spec passed\"><span class=\"passed_spec_name\">#{escape(name)}</span></dd>"
59
+ @output.puts " <dd class=\"spec passed\"><span class=\"passed_spec_name\">#{h(example.description)}</span></dd>"
54
60
  @output.flush
55
61
  end
56
62
 
57
- def example_failed(name, counter, failure)
63
+ def example_failed(example, counter, failure)
58
64
  extra = extra_failure_content(failure)
59
-
60
- @current_example_number += 1
65
+ failure_style = failure.pending_fixed? ? 'pending_fixed' : 'failed'
61
66
  @output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
62
67
  @header_red = true
63
68
  @output.puts " <script type=\"text/javascript\">makeRed('behaviour_#{current_behaviour_number}');</script>" unless @behaviour_red
64
69
  @behaviour_red = true
65
70
  move_progress
66
- @output.puts " <dd class=\"spec failed\">"
67
- @output.puts " <span class=\"failed_spec_name\">#{escape(name)}</span>"
71
+ @output.puts " <dd class=\"spec #{failure_style}\">"
72
+ @output.puts " <span class=\"failed_spec_name\">#{h(example.description)}</span>"
68
73
  @output.puts " <div class=\"failure\" id=\"failure_#{counter}\">"
69
- @output.puts " <div class=\"message\"><pre>#{escape(failure.exception.message)}</pre></div>" unless failure.exception.nil?
74
+ @output.puts " <div class=\"message\"><pre>#{h(failure.exception.message)}</pre></div>" unless failure.exception.nil?
70
75
  @output.puts " <div class=\"backtrace\"><pre>#{format_backtrace(failure.exception.backtrace)}</pre></div>" unless failure.exception.nil?
71
76
  @output.puts extra unless extra == ""
72
77
  @output.puts " </div>"
@@ -74,14 +79,14 @@ module Spec
74
79
  @output.flush
75
80
  end
76
81
 
77
- def example_not_implemented(name)
78
- @current_example_number += 1
82
+ def example_pending(behaviour_name, example_name, message)
79
83
  @output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
80
84
  @output.puts " <script type=\"text/javascript\">makeYellow('behaviour_#{current_behaviour_number}');</script>" unless @behaviour_red
81
85
  move_progress
82
- @output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{escape(name)}</span></dd>"
86
+ @output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example_name)}</span></dd>"
83
87
  @output.flush
84
88
  end
89
+
85
90
  # Override this method if you wish to output extra HTML for a failed spec. For example, you
86
91
  # could output links to images or other files produced during the specs.
87
92
  #
@@ -90,24 +95,20 @@ module Spec
90
95
  end
91
96
 
92
97
  def move_progress
93
- percent_done = @example_count == 0 ? 100.0 : (current_example_number.to_f / @example_count.to_f * 1000).to_i / 10.0
98
+ percent_done = @example_count == 0 ? 100.0 : ((current_example_number + 1).to_f / @example_count.to_f * 1000).to_i / 10.0
94
99
  @output.puts " <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>"
95
100
  @output.flush
96
101
  end
97
-
98
- def escape(string)
99
- string.gsub(/&/n, '&amp;').gsub(/\"/n, '&quot;').gsub(/>/n, '&gt;').gsub(/</n, '&lt;')
100
- end
101
102
 
102
103
  def dump_failure(counter, failure)
103
104
  end
104
105
 
105
- def dump_summary(duration, example_count, failure_count, not_implemented_count)
106
+ def dump_summary(duration, example_count, failure_count, pending_count)
106
107
  if @dry_run
107
108
  totals = "This was a dry-run"
108
109
  else
109
110
  totals = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
110
- totals << ", #{not_implemented_count} not implemented" if not_implemented_count > 0
111
+ totals << ", #{pending_count} pending" if pending_count > 0
111
112
  end
112
113
  @output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{duration} seconds</strong>\";</script>"
113
114
  @output.puts "<script type=\"text/javascript\">document.getElementById('totals').innerHTML = \"#{totals}\";</script>"
@@ -264,6 +265,12 @@ dd.spec.not_implemented {
264
265
  background: #FCFB98; color: #131313;
265
266
  }
266
267
 
268
+ dd.spec.pending_fixed {
269
+ border-left: 5px solid #0000C2;
270
+ border-bottom: 1px solid #0000C2;
271
+ color: #0000C2; background: #D3FBFF;
272
+ }
273
+
267
274
  .backtrace {
268
275
  color: #000;
269
276
  font-size: 12px;
@@ -303,10 +310,10 @@ a {
303
310
 
304
311
  .ruby .offending { background-color: gray; }
305
312
  .ruby .linenum {
306
- width: 75px;
307
- padding: 0.1em 1em 0.2em 0;
308
- color: #000000;
309
- background-color: #FFFBD3;
313
+ width: 75px;
314
+ padding: 0.1em 1em 0.2em 0;
315
+ color: #000000;
316
+ background-color: #FFFBD3;
310
317
  }
311
318
  EOF
312
319
  end
@@ -5,18 +5,19 @@ module Spec
5
5
  def add_behaviour(name)
6
6
  end
7
7
 
8
- def example_failed(name, counter, failure)
9
- @output.print failure.expectation_not_met? ? red('F') : magenta('F')
8
+ def example_failed(example, counter, failure)
9
+ @output.print colourise('F', failure)
10
10
  @output.flush
11
11
  end
12
12
 
13
- def example_passed(name)
13
+ def example_passed(example)
14
14
  @output.print green('.')
15
15
  @output.flush
16
16
  end
17
17
 
18
- def example_not_implemented(name)
19
- @output.print yellow('*')
18
+ def example_pending(behaviour_name, example_name, message)
19
+ super
20
+ @output.print yellow('P')
20
21
  @output.flush
21
22
  end
22
23