rspec 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +78 -1
- data/EXAMPLES.rd +8 -5
- data/README +1 -0
- data/Rakefile +1 -1
- data/examples/pending_example.rb +20 -0
- data/lib/autotest/rspec.rb +46 -18
- data/lib/spec/dsl.rb +1 -0
- data/lib/spec/dsl/behaviour.rb +37 -27
- data/lib/spec/dsl/behaviour_callbacks.rb +4 -0
- data/lib/spec/dsl/behaviour_eval.rb +27 -16
- data/lib/spec/dsl/behaviour_factory.rb +2 -2
- data/lib/spec/dsl/composite_proc_builder.rb +9 -4
- data/lib/spec/dsl/configuration.rb +20 -4
- data/lib/spec/dsl/description.rb +7 -0
- data/lib/spec/dsl/errors.rb +9 -0
- data/lib/spec/dsl/example.rb +18 -10
- data/lib/spec/matchers/have.rb +10 -13
- data/lib/spec/matchers/operator_matcher.rb +3 -3
- data/lib/spec/matchers/raise_error.rb +8 -3
- data/lib/spec/mocks/error_generator.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +11 -0
- data/lib/spec/mocks/methods.rb +9 -5
- data/lib/spec/mocks/proxy.rb +13 -9
- data/lib/spec/rake/spectask.rb +80 -38
- data/lib/spec/runner/backtrace_tweaker.rb +2 -1
- data/lib/spec/runner/behaviour_runner.rb +37 -16
- data/lib/spec/runner/formatter/base_formatter.rb +23 -15
- data/lib/spec/runner/formatter/base_text_formatter.rb +39 -11
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +7 -3
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -3
- data/lib/spec/runner/formatter/html_formatter.rb +32 -25
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +6 -5
- data/lib/spec/runner/formatter/rdoc_formatter.rb +6 -6
- data/lib/spec/runner/formatter/specdoc_formatter.rb +7 -6
- data/lib/spec/runner/option_parser.rb +6 -5
- data/lib/spec/runner/options.rb +60 -43
- data/lib/spec/runner/reporter.rb +17 -6
- data/lib/spec/runner/spec_parser.rb +1 -1
- data/lib/spec/translator.rb +8 -0
- data/lib/spec/version.rb +3 -3
- data/plugins/mock_frameworks/flexmock.rb +14 -18
- data/plugins/mock_frameworks/mocha.rb +0 -2
- data/plugins/mock_frameworks/rr.rb +21 -0
- data/spec/autotest/discover_spec.rb +19 -0
- data/spec/autotest/rspec_spec.rb +257 -0
- data/spec/autotest_helper.rb +4 -0
- data/spec/spec/dsl/behaviour_eval_spec.rb +30 -0
- data/spec/spec/dsl/behaviour_factory_spec.rb +18 -0
- data/spec/spec/dsl/behaviour_spec.rb +95 -58
- data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -13
- data/spec/spec/dsl/configuration_spec.rb +6 -1
- data/spec/spec/dsl/description_spec.rb +9 -1
- data/spec/spec/dsl/example_class_spec.rb +3 -3
- data/spec/spec/dsl/example_instance_spec.rb +26 -28
- data/spec/spec/dsl/example_matcher_spec.rb +91 -0
- data/spec/spec/dsl/shared_behaviour_spec.rb +24 -0
- data/spec/spec/expectations/extensions/object_spec.rb +2 -2
- data/spec/spec/expectations/fail_with_spec.rb +2 -2
- data/spec/spec/matchers/have_spec.rb +1 -1
- data/spec/spec/matchers/operator_matcher_spec.rb +10 -10
- data/spec/spec/matchers/raise_error_spec.rb +38 -0
- data/spec/spec/mocks/argument_expectation_spec.rb +18 -14
- data/spec/spec/mocks/at_most_spec.rb +1 -1
- data/spec/spec/mocks/bug_report_11545_spec.rb +31 -0
- data/spec/spec/mocks/partial_mock_spec.rb +33 -1
- data/spec/spec/runner/behaviour_runner_spec.rb +72 -49
- data/spec/spec/runner/command_line_spec.rb +1 -1
- data/spec/spec/runner/context_matching_spec.rb +10 -10
- data/spec/spec/runner/drb_command_line_spec.rb +62 -59
- data/spec/spec/runner/extensions/bug_report_10577_spec.rb +35 -0
- data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +15 -2
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +3 -3
- data/spec/spec/runner/formatter/html_formatter_spec.rb +1 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +14 -15
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +1 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +42 -9
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +40 -40
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +55 -49
- data/spec/spec/runner/option_parser_spec.rb +16 -15
- data/spec/spec/runner/options_spec.rb +64 -31
- data/spec/spec/runner/reporter_spec.rb +67 -15
- data/spec/spec/spec_classes.rb +9 -1
- data/spec/spec/translator_spec.rb +48 -0
- data/spec/spec_helper.rb +5 -2
- metadata +13 -6
- data/examples/not_yet_implemented_spec.rb +0 -12
- data/spec/spec/runner/example_matcher_spec.rb +0 -127
@@ -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?
|
12
|
-
behaviour.retain_examples_matching!(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
|
17
|
+
# Runs all behaviours and returns the number of failures.
|
18
18
|
def run(paths, exit_when_done)
|
19
|
-
|
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
|
21
|
+
run_behaviours
|
28
22
|
rescue Interrupt
|
29
23
|
ensure
|
30
|
-
|
24
|
+
report_end
|
31
25
|
end
|
32
|
-
failure_count =
|
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
|
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.
|
28
|
-
|
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.
|
33
|
-
|
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). +
|
39
|
-
# of the
|
40
|
-
#
|
41
|
-
def example_failed(
|
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
|
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
|
-
|
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
|
62
|
-
def dump_summary(duration, example_count, failure_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
|
-
|
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
|
-
|
40
|
-
|
50
|
+
red(s)
|
51
|
+
elsif(failure.pending_fixed?)
|
52
|
+
blue(s)
|
41
53
|
else
|
42
|
-
|
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,
|
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 << ", #{
|
65
|
+
summary << ", #{pending_count} pending" if pending_count > 0
|
57
66
|
|
58
67
|
if failure_count == 0
|
59
|
-
if
|
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
|
-
|
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(
|
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,
|
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(
|
10
|
-
@output.puts "#{@behaviour_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,
|
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}\">#{
|
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
|
51
|
-
@current_example_number
|
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\">#{
|
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(
|
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
|
67
|
-
@output.puts " <span class=\"failed_spec_name\">#{
|
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>#{
|
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
|
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\">#{
|
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, '&').gsub(/\"/n, '"').gsub(/>/n, '>').gsub(/</n, '<')
|
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,
|
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 << ", #{
|
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
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
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(
|
9
|
-
@output.print
|
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(
|
13
|
+
def example_passed(example)
|
14
14
|
@output.print green('.')
|
15
15
|
@output.flush
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
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
|
|