rspec 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. data/History.rdoc +31 -1
  2. data/Manifest.txt +14 -12
  3. data/Rakefile +1 -1
  4. data/Upgrade.rdoc +43 -3
  5. data/examples/failing/failing_implicit_docstrings_example.rb +5 -5
  6. data/examples/passing/implicit_docstrings_example.rb +3 -3
  7. data/features/before_and_after_blocks/before_and_after_blocks.feature +20 -21
  8. data/features/example_groups/example_group_with_should_methods.feature +20 -8
  9. data/features/example_groups/implicit_docstrings.feature +36 -20
  10. data/features/example_groups/nested_groups.feature +25 -10
  11. data/features/extensions/custom_example_group.feature +19 -0
  12. data/features/formatters/custom_formatter.feature +30 -0
  13. data/features/heckle/heckle.feature +7 -7
  14. data/features/interop/examples_and_tests_together.feature +63 -14
  15. data/features/interop/rspec_output.feature +25 -0
  16. data/features/interop/test_but_not_test_unit.feature +19 -7
  17. data/features/interop/test_case_with_should_methods.feature +37 -8
  18. data/features/matchers/{create_matcher.feature → define_matcher.feature} +54 -30
  19. data/features/matchers/{create_matcher_outside_rspec.feature → define_matcher_outside_rspec.feature} +7 -7
  20. data/features/mock_framework_integration/use_flexmock.feature +3 -3
  21. data/features/mock_framework_integration/use_mocha.feature +3 -3
  22. data/features/mock_framework_integration/use_rr.feature +3 -3
  23. data/features/mocks/mix_stubs_and_mocks.feature +4 -4
  24. data/features/pending/pending_examples.feature +18 -18
  25. data/features/runner/specify_line_number.feature +32 -0
  26. data/features/step_definitions/running_rspec_steps.rb +41 -0
  27. data/features/subject/explicit_subject.feature +4 -4
  28. data/features/subject/implicit_subject.feature +4 -4
  29. data/features/support/env.rb +64 -11
  30. data/features/support/matchers/smart_match.rb +10 -35
  31. data/lib/spec.rb +1 -0
  32. data/lib/spec/deprecation.rb +40 -0
  33. data/lib/spec/dsl/main.rb +10 -5
  34. data/lib/spec/example.rb +1 -27
  35. data/lib/spec/example/args_and_options.rb +27 -0
  36. data/lib/spec/example/before_and_after_hooks.rb +30 -21
  37. data/lib/spec/example/errors.rb +8 -18
  38. data/lib/spec/example/example_group_factory.rb +0 -4
  39. data/lib/spec/example/example_group_methods.rb +27 -41
  40. data/lib/spec/example/example_group_proxy.rb +12 -22
  41. data/lib/spec/example/example_methods.rb +8 -18
  42. data/lib/spec/example/example_proxy.rb +4 -4
  43. data/lib/spec/example/pending.rb +3 -4
  44. data/lib/spec/example/predicate_matchers.rb +1 -1
  45. data/lib/spec/example/subject.rb +2 -0
  46. data/lib/spec/expectations.rb +1 -26
  47. data/lib/spec/expectations/extensions.rb +1 -1
  48. data/lib/spec/expectations/extensions/kernel.rb +52 -0
  49. data/lib/spec/expectations/handler.rb +21 -10
  50. data/lib/spec/matchers/be.rb +3 -3
  51. data/lib/spec/matchers/be_close.rb +17 -21
  52. data/lib/spec/matchers/be_instance_of.rb +7 -26
  53. data/lib/spec/matchers/be_kind_of.rb +7 -26
  54. data/lib/spec/matchers/dsl.rb +9 -4
  55. data/lib/spec/matchers/eql.rb +24 -25
  56. data/lib/spec/matchers/equal.rb +25 -25
  57. data/lib/spec/matchers/exist.rb +5 -21
  58. data/lib/spec/matchers/include.rb +22 -44
  59. data/lib/spec/matchers/match.rb +5 -25
  60. data/lib/spec/matchers/match_array.rb +8 -4
  61. data/lib/spec/matchers/matcher.rb +13 -2
  62. data/lib/spec/matchers/pretty.rb +1 -0
  63. data/lib/spec/matchers/simple_matcher.rb +2 -2
  64. data/lib/spec/mocks/mock.rb +10 -10
  65. data/lib/spec/mocks/spec_methods.rb +1 -1
  66. data/lib/spec/runner/configuration.rb +53 -42
  67. data/lib/spec/{expectations → runner}/differs/default.rb +0 -0
  68. data/lib/spec/{expectations → runner}/differs/load-diff-lcs.rb +0 -0
  69. data/lib/spec/runner/drb_command_line.rb +1 -1
  70. data/lib/spec/runner/example_group_runner.rb +0 -12
  71. data/lib/spec/runner/formatter/base_formatter.rb +77 -30
  72. data/lib/spec/runner/formatter/base_text_formatter.rb +19 -24
  73. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +1 -1
  74. data/lib/spec/runner/formatter/html_formatter.rb +4 -6
  75. data/lib/spec/runner/formatter/nested_text_formatter.rb +2 -2
  76. data/lib/spec/runner/formatter/no_op_method_missing.rb +21 -0
  77. data/lib/spec/runner/formatter/profile_formatter.rb +0 -4
  78. data/lib/spec/runner/formatter/progress_bar_formatter.rb +4 -5
  79. data/lib/spec/runner/formatter/silent_formatter.rb +10 -0
  80. data/lib/spec/runner/formatter/specdoc_formatter.rb +2 -2
  81. data/lib/spec/runner/option_parser.rb +14 -7
  82. data/lib/spec/runner/options.rb +17 -7
  83. data/lib/spec/runner/reporter.rb +69 -64
  84. data/lib/spec/version.rb +1 -1
  85. data/spec/spec/dsl/main_spec.rb +7 -0
  86. data/spec/spec/example/example_group_methods_spec.rb +16 -32
  87. data/spec/spec/example/example_group_proxy_spec.rb +25 -5
  88. data/spec/spec/example/example_group_spec.rb +2 -2
  89. data/spec/spec/example/example_methods_spec.rb +19 -24
  90. data/spec/spec/example/example_proxy_spec.rb +11 -1
  91. data/spec/spec/example/pending_module_spec.rb +2 -108
  92. data/spec/spec/example/predicate_matcher_spec.rb +23 -3
  93. data/spec/spec/expectations/extensions/object_spec.rb +9 -9
  94. data/spec/spec/expectations/fail_with_spec.rb +13 -13
  95. data/spec/spec/expectations/handler_spec.rb +44 -15
  96. data/spec/spec/matchers/be_close_spec.rb +9 -0
  97. data/spec/spec/matchers/be_instance_of_spec.rb +6 -4
  98. data/spec/spec/matchers/be_kind_of_spec.rb +5 -3
  99. data/spec/spec/matchers/be_spec.rb +1 -5
  100. data/spec/spec/matchers/compatibility_spec.rb +1 -1
  101. data/spec/spec/matchers/dsl_spec.rb +10 -1
  102. data/spec/spec/matchers/eql_spec.rb +8 -4
  103. data/spec/spec/matchers/equal_spec.rb +8 -4
  104. data/spec/spec/matchers/exist_spec.rb +1 -1
  105. data/spec/spec/matchers/include_spec.rb +1 -1
  106. data/spec/spec/matchers/match_array_spec.rb +26 -1
  107. data/spec/spec/matchers/match_spec.rb +2 -2
  108. data/spec/spec/matchers/matcher_methods_spec.rb +0 -3
  109. data/spec/spec/matchers/matcher_spec.rb +53 -0
  110. data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
  111. data/spec/spec/mocks/mock_spec.rb +6 -0
  112. data/spec/spec/runner/configuration_spec.rb +11 -1
  113. data/spec/spec/runner/drb_command_line_spec.rb +13 -1
  114. data/spec/spec/runner/example_group_runner_spec.rb +0 -7
  115. data/spec/spec/runner/formatter/base_formatter_spec.rb +19 -12
  116. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +2 -2
  117. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +4 -4
  118. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +2 -2
  119. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +31 -34
  120. data/spec/spec/runner/formatter/html_formatter_spec.rb +20 -0
  121. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +20 -20
  122. data/spec/spec/runner/formatter/profile_formatter_spec.rb +22 -3
  123. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +24 -3
  124. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +6 -6
  125. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +25 -28
  126. data/spec/spec/runner/formatter/text_mate_formatter_spec.rb +2 -2
  127. data/spec/spec/runner/option_parser_spec.rb +108 -40
  128. data/spec/spec/runner/reporter_spec.rb +16 -17
  129. data/spec/spec_helper.rb +4 -1
  130. metadata +20 -18
  131. data/features/example_groups/output.feature +0 -20
  132. data/features/step_definitions/running_rspec.rb +0 -69
  133. data/lib/spec/expectations/extensions/object.rb +0 -63
  134. data/resources/spec/example_group_with_should_methods.rb +0 -12
  135. data/resources/spec/simple_spec.rb +0 -8
  136. data/resources/test/spec_and_test_together.rb +0 -56
  137. data/resources/test/spec_including_test_but_not_unit.rb +0 -11
  138. data/resources/test/test_case_with_should_methods.rb +0 -29
@@ -32,7 +32,7 @@ module Spec
32
32
  # to any message it receives that it hasn't been explicitly instructed
33
33
  # to respond to.
34
34
  def stub_everything(name = 'stub')
35
- Kernel.warn(<<-WARNING)
35
+ Spec.warn(<<-WARNING)
36
36
 
37
37
  DEPRECATION: stub_everything('#{name}') is deprecated and will be removed
38
38
  from a future version of rspec. Please use mock('#{name}').as_null_object
@@ -1,6 +1,8 @@
1
1
  module Spec
2
2
  module Runner
3
3
  class Configuration
4
+ include Spec::Example::ArgsAndOptions
5
+
4
6
  # Chooses what mock framework to use. Example:
5
7
  #
6
8
  # Spec::Runner.configure do |config|
@@ -74,8 +76,8 @@ module Spec
74
76
  # # *Will* include ControllerExampleHelpers
75
77
  # end
76
78
  #
77
- def include(*args)
78
- include_or_extend(:include, *args)
79
+ def include(*modules_and_options)
80
+ include_or_extend(:include, *modules_and_options)
79
81
  end
80
82
 
81
83
  # :call-seq:
@@ -85,61 +87,61 @@ module Spec
85
87
  #
86
88
  # Works just like #include, but extends the example groups
87
89
  # with the modules rather than including them.
88
- def extend(*args)
89
- include_or_extend(:extend, *args)
90
- end
91
-
92
- # Defines global predicate matchers. Example:
93
- #
94
- # config.predicate_matchers[:swim] = :can_swim?
95
- #
96
- # This makes it possible to say:
97
- #
98
- # person.should swim # passes if person.can_swim? returns true
99
- #
100
- def predicate_matchers
101
- @predicate_matchers ||= {}
102
- end
103
-
104
- # Prepends a global <tt>before</tt> block to all example groups.
105
- # See #append_before for filtering semantics.
106
- def prepend_before(*args, &proc)
107
- add_callback(:prepend_before, *args, &proc)
90
+ def extend(*modules_and_options)
91
+ include_or_extend(:extend, *modules_and_options)
108
92
  end
109
93
 
110
94
  # Appends a global <tt>before</tt> block to all example groups.
111
- #
112
- # If you want to restrict the block to a subset of all the example
113
- # groups then specify this in a Hash as the last argument:
114
- #
115
- # config.prepend_before(:all, :type => :farm)
116
- #
117
- # or
118
- #
119
- # config.prepend_before(:type => :farm)
120
- #
121
- def append_before(*args, &proc)
122
- add_callback(:append_before, *args, &proc)
95
+ # <tt>scope</tt> can be any of <tt>:each</tt> (default), <tt>:all</tt>, or
96
+ # <tt>:suite</tt>. When <tt>:each</tt>, the block is executed before each
97
+ # example. When <tt>:all</tt>, the block is executed once per example
98
+ # group, before any of its examples are run. When <tt>:suite</tt> the
99
+ # block is run once before the entire suite is run.
100
+ def append_before(scope = :each, options={}, &proc)
101
+ add_callback(:append_before, scope, options, &proc)
123
102
  end
124
103
  alias_method :before, :append_before
125
104
 
105
+ # Prepends a global <tt>before</tt> block to all example groups.
106
+ #
107
+ # See <tt>append_before</tt> for scoping semantics.
108
+ def prepend_before(scope = :each, options={}, &proc)
109
+ add_callback(:prepend_before, scope, options, &proc)
110
+ end
111
+
126
112
  # Prepends a global <tt>after</tt> block to all example groups.
127
- # See #append_before for filtering semantics.
128
- def prepend_after(*args, &proc)
129
- add_callback(:prepend_after, *args, &proc)
113
+ #
114
+ # See <tt>append_before</tt> for scoping semantics.
115
+ def prepend_after(scope = :each, options={}, &proc)
116
+ add_callback(:prepend_after, scope, options, &proc)
130
117
  end
131
118
  alias_method :after, :prepend_after
132
119
 
133
120
  # Appends a global <tt>after</tt> block to all example groups.
134
- # See #append_before for filtering semantics.
135
- def append_after(*args, &proc)
136
- add_callback(:append_after, *args, &proc)
121
+ #
122
+ # See <tt>append_before</tt> for scoping semantics.
123
+ def append_after(scope = :each, options={}, &proc)
124
+ add_callback(:append_after, scope, options, &proc)
137
125
  end
138
126
 
127
+ # DEPRECATED - use Spec::Matchers::DSL instead
128
+ #
129
+ # Defines global predicate matchers. Example:
130
+ #
131
+ # config.predicate_matchers[:swim] = :can_swim?
132
+ #
133
+ # This makes it possible to say:
134
+ #
135
+ # person.should swim # passes if person.can_swim? returns true
136
+ #
137
+ def predicate_matchers
138
+ @predicate_matchers ||= Spec::HashWithDeprecationNotice.new("predicate_matchers", "the new Matcher DSL")
139
+ end
140
+
139
141
  private
140
142
 
141
143
  def include_or_extend(action, *args)
142
- modules, options = Spec::Example.args_and_options(*args)
144
+ modules, options = args_and_options(*args)
143
145
  [get_type_from_options(options)].flatten.each do |required_example_group|
144
146
  required_example_group = required_example_group.to_sym if required_example_group
145
147
  modules.each do |mod|
@@ -149,7 +151,7 @@ module Spec
149
151
  end
150
152
 
151
153
  def add_callback(sym, *args, &proc)
152
- scope, options = Spec::Example.scope_and_options(*args)
154
+ scope, options = scope_and_options(*args)
153
155
  example_group = Spec::Example::ExampleGroupFactory[get_type_from_options(options)]
154
156
  example_group.__send__(sym, scope, &proc)
155
157
  end
@@ -161,6 +163,15 @@ module Spec
161
163
  def mock_framework_path(framework_name)
162
164
  File.expand_path(File.join(File.dirname(__FILE__), "/../adapters/mock_frameworks/#{framework_name}"))
163
165
  end
166
+
167
+ def scope_and_options(*args) # :nodoc:
168
+ args, options = args_and_options(*args)
169
+ return scope_from(*args), options
170
+ end
171
+
172
+ def scope_from(*args) # :nodoc:
173
+ args[0] || :each
174
+ end
164
175
  end
165
176
  end
166
177
  end
@@ -12,7 +12,7 @@ module Spec
12
12
  DRb.start_service("druby://localhost:0")
13
13
  spec_server = DRbObject.new_with_uri("druby://127.0.0.1:8989")
14
14
  spec_server.run(options.argv, options.error_stream, options.output_stream)
15
- rescue DRb::DRbConnError => e
15
+ rescue DRb::DRbConnError
16
16
  options.error_stream.puts "No server is running"
17
17
  end
18
18
  end
@@ -55,17 +55,5 @@ module Spec
55
55
  @options.number_of_examples
56
56
  end
57
57
  end
58
-
59
- class BehaviourRunner < ExampleGroupRunner
60
- def initialize(options)
61
- Kernel.warn <<-WARNING
62
- DEPRECATED: The BeheviourRunner class is deprecated and will
63
- be removed from rspec-1.2.
64
-
65
- Use ExampleGroupRunner instead.
66
- WARNING
67
- super
68
- end
69
- end
70
58
  end
71
59
  end
@@ -1,14 +1,29 @@
1
1
  module Spec
2
2
  module Runner
3
3
  module Formatter
4
- # Formatter base-class, which implements all required methods.
5
- # Almost all of the implementations are no-ops, with the exception
6
- # of +add_example_group+ (see below).
4
+ # Formatter base-class, which implements all required methods as no-ops, with the exception
7
5
  class BaseFormatter
8
- attr_accessor :example_group, :options, :where
9
- def initialize(options, where)
10
- @options = options
11
- @where = where
6
+ # Formatters are initialized with <tt>options</tt> and <tt>output</tt>
7
+ # arguments. RSpec's built-in formatters already expect this, and any
8
+ # custom formatters should as well.
9
+ #
10
+ # ==== Parameters
11
+ # options::
12
+ # A struct containing boolean values for colour, autospec,
13
+ # and dry_run
14
+ # output::
15
+ # Used by RSpec's built-in formatters to determine where to
16
+ # write the output. Default is <tt>STDOUT</tt>, otherwise a
17
+ # filename is expected.
18
+ #
19
+ # === Example
20
+ # If you invoke the <tt>spec</tt> command with:
21
+ #
22
+ # --format progress:progress_report.txt
23
+ #
24
+ # ... the value of <tt>output</tt> will be progress_report.txt. If you
25
+ # don't identify an output destination, the default is STDOUT.
26
+ def initialize(options, output)
12
27
  end
13
28
 
14
29
  # This method is invoked before any examples are run, right after
@@ -16,55 +31,77 @@ module Spec
16
31
  # formatters that need to provide progress on feedback (graphical ones)
17
32
  #
18
33
  # This method will only be invoked once, and the next one to be invoked
19
- # is #add_example_group
34
+ # is #example_group_started
35
+ #
36
+ # ==== Parameters
37
+ # example_count:: the total number of examples to be run
20
38
  def start(example_count)
21
39
  end
22
40
 
23
- # This method is invoked at the beginning of the execution of each example_group.
24
- # +example_group_proxy+ is an instance of Spec::Example::ExampleGroupProxy, and
25
- # is assigned as the value returned by subsequent calls to +example_group()+
41
+ # This method is invoked at the beginning of the execution of each
42
+ # example_group. The next method to be invoked after this is
43
+ # #example_started
26
44
  #
27
- # The next method to be invoked after this is #example_started
45
+ # ==== Parameters
46
+ # example_group_proxy:: instance of Spec::Example::ExampleGroupProxy
47
+ def example_group_started(example_group_proxy)
48
+ end
49
+
50
+ # Deprecated - use example_group_started instead
28
51
  def add_example_group(example_group_proxy)
29
- @example_group = example_group_proxy
52
+ Spec.deprecate("BaseFormatter#add_example_group", "BaseFormatter#example_group_started")
53
+ example_group_started(example_group_proxy)
30
54
  end
31
55
 
32
- # This method is invoked when an +example+ starts.
33
- # +example_proxy+ is an instance of Spec::Example::ExampleProxy
56
+ # This method is invoked when an +example+ starts. The next method to be
57
+ # invoked after this is #example_passed, #example_failed, or
58
+ # #example_pending
34
59
  #
35
- # The next method to be invoked after this is #example_passed, #example_failed,
36
- # or #example_pending
60
+ # ==== Parameters
61
+ # example_proxy:: instance of Spec::Example::ExampleProxy
37
62
  def example_started(example_proxy)
38
63
  end
39
64
 
40
65
  # This method is invoked when an +example+ passes.
41
66
  # +example_proxy+ is the same instance of Spec::Example::ExampleProxy
42
67
  # that was passed to example_started
68
+ #
69
+ # ==== Parameters
70
+ # example_proxy:: instance of Spec::Example::ExampleProxy
43
71
  def example_passed(example_proxy)
44
72
  end
45
73
 
46
74
  # This method is invoked when an +example+ fails, i.e. an exception occurred
47
- # inside it (such as a failed should or other exception). +counter+ is the
48
- # sequence number of the failure (starting at 1) and +failure+ is the associated
49
- # Failure object.
50
- # +example_proxy+ is the same instance of Spec::Example::ExampleProxy
51
- # that was passed to example_started
75
+ # inside it (such as a failed should or other exception).
76
+ #
77
+ # ==== Parameters
78
+ # example_proxy::
79
+ # The same instance of Spec::Example::ExampleProxy that was passed
80
+ # to <tt>example_started</tt>
81
+ #
82
+ # counter:: the sequential number of this failure
83
+ #
84
+ # failure:: instance of Spec::Runner::Reporter::Failure
52
85
  def example_failed(example_proxy, counter, failure)
53
86
  end
54
87
 
55
88
  # This method is invoked when an example is not yet implemented (i.e. has not
56
89
  # been provided a block), or when an ExamplePendingError is raised.
57
90
  # +message+ is the message from the ExamplePendingError, if it exists, or the
58
- # default value of "Not Yet Implemented"
59
- # +pending_caller+ is the file and line number of the spec which
60
- # has called the pending method
61
- # +example_proxy+ is the same instance of Spec::Example::ExampleProxy
62
- # that was passed to example_started
63
- def example_pending(example_proxy, message, pending_caller)
91
+ # default value of "Not Yet Implemented". +deprecated_pending_location+ is
92
+ # deprecated - use example_proxy.location instead
93
+ #
94
+ # ==== Parameters
95
+ # example_proxy:: instance of Spec::Example::ExampleProxy
96
+ # message::
97
+ # the message passed to the pending message, or an internal
98
+ # default
99
+ #
100
+ def example_pending(example_proxy, message, deprecated_pending_location=nil)
64
101
  end
65
102
 
66
103
  # This method is invoked after all of the examples have executed. The next method
67
- # to be invoked after this one is #dump_failure (once for each failed example),
104
+ # to be invoked after this one is #dump_failure (once for each failed example)
68
105
  def start_dump
69
106
  end
70
107
 
@@ -72,14 +109,24 @@ module Spec
72
109
  # This method is invoked for each failed example after all examples have run. +counter+ is the sequence number
73
110
  # of the associated example. +failure+ is a Failure object, which contains detailed
74
111
  # information about the failure.
112
+ #
113
+ # ==== Parameters
114
+ # counter:: the sequential number of this failure
115
+ # failure:: instance of Spec::Runner::Reporter::Failure
75
116
  def dump_failure(counter, failure)
76
117
  end
77
118
 
78
119
  # This method is invoked after the dumping of examples and failures.
120
+ #
121
+ # ==== Parameters
122
+ # duration:: the total time for the entire run
123
+ # example_count:: the number of examples run
124
+ # failure_count:: the number of examples that failed
125
+ # pending_count:: the number of examples that are pending
79
126
  def dump_summary(duration, example_count, failure_count, pending_count)
80
127
  end
81
128
 
82
- # This gets invoked after the summary if option is set to do so.
129
+ # This gets invoked after the summary
83
130
  def dump_pending
84
131
  end
85
132
 
@@ -8,23 +8,28 @@ module Spec
8
8
  # non-text based ones too - just ignore the +output+ constructor
9
9
  # argument.
10
10
  class BaseTextFormatter < BaseFormatter
11
- attr_reader :output, :pending_examples
12
- # Creates a new instance that will write to +where+. If +where+ is a
11
+ attr_reader :output, :example_group
12
+ # Creates a new instance that will write to +output+. If +output+ is a
13
13
  # String, output will be written to the File with that name, otherwise
14
- # +where+ is exected to be an IO (or an object that responds to #puts and #write).
15
- def initialize(options, where)
16
- super
17
- if where.is_a?(String)
18
- FileUtils.mkdir_p(File.dirname(where))
19
- @output = File.open(where, 'w')
14
+ # +output+ is exected to be an IO (or an object that responds to #puts
15
+ # and #write).
16
+ def initialize(options, output)
17
+ @options = options
18
+ if String === output
19
+ FileUtils.mkdir_p(File.dirname(output))
20
+ @output = File.open(output, 'w')
20
21
  else
21
- @output = where
22
+ @output = output
22
23
  end
23
24
  @pending_examples = []
24
25
  end
26
+
27
+ def example_group_started(example_group_proxy)
28
+ @example_group = example_group_proxy
29
+ end
25
30
 
26
- def example_pending(example, message, pending_caller)
27
- @pending_examples << ["#{@example_group.description} #{example.description}", message, pending_caller]
31
+ def example_pending(example, message, ignore)
32
+ @pending_examples << ["#{@example_group.description} #{example.description}", message, example.location]
28
33
  end
29
34
 
30
35
  def dump_failure(counter, failure)
@@ -40,12 +45,7 @@ module Spec
40
45
  end
41
46
 
42
47
  def colourise(message, failure)
43
- Kernel.warn <<-NOTICE
44
- DEPRECATED: BaseTextFormatter#colourise is deprecated and will be
45
- removed from a future version of RSpec.
46
-
47
- Please use colorize_failure instead.
48
- NOTICE
48
+ Spec::deprecate("BaseTextFormatter#colourise", "colorize_failure")
49
49
  colorize_failure(message, failure)
50
50
  end
51
51
 
@@ -126,14 +126,9 @@ NOTICE
126
126
  def red(text); colour(text, "\e[31m"); end
127
127
  def yellow(text); colour(text, "\e[33m"); end
128
128
  def blue(text); colour(text, "\e[34m"); end
129
-
129
+
130
130
  def magenta(text)
131
- Kernel.warn <<-NOTICE
132
- DEPRECATED: BaseTextFormatter#magenta is deprecated and will be
133
- removed from a future version of RSpec.
134
-
135
- Please use red instead (it is red/green/refactor after all).
136
- NOTICE
131
+ Spec::deprecate("BaseTextFormatter#magenta")
137
132
  red(text)
138
133
  end
139
134
  end
@@ -6,7 +6,7 @@ module Spec
6
6
  class FailingExampleGroupsFormatter < BaseTextFormatter
7
7
  def example_failed(example, counter, failure)
8
8
  if @example_group
9
- @output.puts @example_group.filtered_description(/(.*) \(druby.*\)$/)
9
+ @output.puts @example_group.description.gsub(/ \(druby.*\)/,"")
10
10
 
11
11
  @output.flush
12
12
  @example_group = nil
@@ -1,11 +1,13 @@
1
1
  require 'erb'
2
2
  require 'spec/runner/formatter/base_text_formatter'
3
+ require 'spec/runner/formatter/no_op_method_missing'
3
4
 
4
5
  module Spec
5
6
  module Runner
6
7
  module Formatter
7
8
  class HtmlFormatter < BaseTextFormatter
8
9
  include ERB::Util # for the #h method
10
+ include NOOPMethodMissing
9
11
 
10
12
  def initialize(options, output)
11
13
  super
@@ -14,10 +16,6 @@ module Spec
14
16
  @header_red = nil
15
17
  end
16
18
 
17
- def method_missing(sym, *args)
18
- # no-op
19
- end
20
-
21
19
  # The number of the currently running example_group
22
20
  def example_group_number
23
21
  @example_group_number
@@ -36,7 +34,7 @@ module Spec
36
34
  @output.flush
37
35
  end
38
36
 
39
- def add_example_group(example_group)
37
+ def example_group_started(example_group)
40
38
  super
41
39
  @example_group_red = false
42
40
  @example_group_number += 1
@@ -85,7 +83,7 @@ module Spec
85
83
  @output.flush
86
84
  end
87
85
 
88
- def example_pending(example, message, pending_caller)
86
+ def example_pending(example, message, deprecated_pending_location=nil)
89
87
  @output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
90
88
  @output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{example_group_number}');</script>" unless @example_group_red
91
89
  move_progress