rspec 1.0.8 → 1.1.0

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 (301) hide show
  1. data/CHANGES +122 -2
  2. data/README +10 -9
  3. data/Rakefile +22 -49
  4. data/TODO +2 -0
  5. data/bin/spec +1 -1
  6. data/bin/spec_translator +8 -8
  7. data/examples/{auto_spec_description_example.rb → pure/autogenerated_docstrings_example.rb} +0 -0
  8. data/examples/{before_and_after_example.rb → pure/before_and_after_example.rb} +1 -0
  9. data/examples/{behave_as_example.rb → pure/behave_as_example.rb} +0 -0
  10. data/examples/{custom_expectation_matchers.rb → pure/custom_expectation_matchers.rb} +0 -0
  11. data/examples/{custom_formatter.rb → pure/custom_formatter.rb} +1 -0
  12. data/examples/{dynamic_spec.rb → pure/dynamic_spec.rb} +0 -0
  13. data/examples/{file_accessor.rb → pure/file_accessor.rb} +1 -0
  14. data/examples/{file_accessor_spec.rb → pure/file_accessor_spec.rb} +0 -0
  15. data/examples/{greeter_spec.rb → pure/greeter_spec.rb} +1 -0
  16. data/examples/{helper_method_example.rb → pure/helper_method_example.rb} +0 -0
  17. data/examples/{io_processor.rb → pure/io_processor.rb} +0 -0
  18. data/examples/{io_processor_spec.rb → pure/io_processor_spec.rb} +0 -0
  19. data/examples/{legacy_spec.rb → pure/legacy_spec.rb} +1 -0
  20. data/examples/{mocking_example.rb → pure/mocking_example.rb} +0 -0
  21. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  22. data/examples/pure/nested_classes_example.rb +36 -0
  23. data/examples/{partial_mock_example.rb → pure/partial_mock_example.rb} +0 -0
  24. data/examples/{pending_example.rb → pure/pending_example.rb} +0 -0
  25. data/examples/{predicate_example.rb → pure/predicate_example.rb} +0 -0
  26. data/examples/{priority.txt → pure/priority.txt} +0 -0
  27. data/examples/pure/shared_example_group_example.rb +66 -0
  28. data/examples/pure/shared_stack_examples.rb +38 -0
  29. data/examples/pure/spec_helper.rb +3 -0
  30. data/examples/{stack.rb → pure/stack.rb} +0 -0
  31. data/examples/{stack_spec.rb → pure/stack_spec.rb} +1 -35
  32. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  33. data/examples/{stubbing_example.rb → pure/stubbing_example.rb} +0 -0
  34. data/examples/stories/adder.rb +13 -0
  35. data/examples/stories/addition +34 -0
  36. data/examples/stories/addition.rb +9 -0
  37. data/examples/stories/calculator.rb +65 -0
  38. data/examples/stories/game-of-life/README.txt +21 -0
  39. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  40. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  41. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  42. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  43. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  44. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  45. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  46. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  47. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  48. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  49. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  50. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  51. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  52. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  53. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  54. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  55. data/examples/stories/game-of-life/life.rb +3 -0
  56. data/examples/stories/game-of-life/life/game.rb +23 -0
  57. data/examples/stories/game-of-life/life/grid.rb +43 -0
  58. data/examples/stories/helper.rb +9 -0
  59. data/examples/stories/steps/addition_steps.rb +18 -0
  60. data/lib/autotest/rspec.rb +1 -2
  61. data/lib/spec.rb +30 -6
  62. data/lib/spec/example.rb +12 -0
  63. data/lib/spec/{dsl → example}/configuration.rb +48 -39
  64. data/lib/spec/{dsl → example}/errors.rb +2 -2
  65. data/lib/spec/example/example_group.rb +16 -0
  66. data/lib/spec/example/example_group_factory.rb +62 -0
  67. data/lib/spec/example/example_group_methods.rb +412 -0
  68. data/lib/spec/example/example_matcher.rb +42 -0
  69. data/lib/spec/example/example_methods.rb +101 -0
  70. data/lib/spec/example/module_reopening_fix.rb +21 -0
  71. data/lib/spec/example/pending.rb +18 -0
  72. data/lib/spec/example/shared_example_group.rb +58 -0
  73. data/lib/spec/expectations/differs/default.rb +15 -10
  74. data/lib/spec/expectations/errors.rb +7 -1
  75. data/lib/spec/expectations/extensions/object.rb +12 -7
  76. data/lib/spec/expectations/handler.rb +13 -4
  77. data/lib/spec/extensions.rb +2 -0
  78. data/lib/spec/extensions/class.rb +24 -0
  79. data/lib/spec/extensions/main.rb +54 -0
  80. data/lib/spec/extensions/object.rb +5 -1
  81. data/lib/spec/interop/test.rb +10 -0
  82. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  83. data/lib/spec/interop/test/unit/testcase.rb +61 -0
  84. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  85. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  86. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +60 -0
  87. data/lib/spec/matchers.rb +11 -15
  88. data/lib/spec/matchers/be.rb +23 -6
  89. data/lib/spec/matchers/change.rb +25 -1
  90. data/lib/spec/matchers/exist.rb +17 -0
  91. data/lib/spec/matchers/operator_matcher.rb +1 -0
  92. data/lib/spec/matchers/simple_matcher.rb +29 -0
  93. data/lib/spec/matchers/throw_symbol.rb +2 -0
  94. data/lib/spec/mocks.rb +5 -2
  95. data/lib/spec/mocks/argument_expectation.rb +1 -1
  96. data/lib/spec/mocks/message_expectation.rb +62 -44
  97. data/lib/spec/mocks/methods.rb +2 -2
  98. data/lib/spec/mocks/mock.rb +24 -3
  99. data/lib/spec/mocks/proxy.rb +26 -23
  100. data/lib/spec/mocks/space.rb +1 -1
  101. data/lib/spec/mocks/spec_methods.rb +20 -12
  102. data/lib/spec/rake/spectask.rb +19 -1
  103. data/lib/spec/rake/verify_rcov.rb +1 -1
  104. data/lib/spec/runner.rb +33 -10
  105. data/lib/spec/runner/backtrace_tweaker.rb +3 -3
  106. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  107. data/lib/spec/runner/command_line.rb +18 -12
  108. data/lib/spec/runner/drb_command_line.rb +4 -5
  109. data/lib/spec/runner/example_group_runner.rb +59 -0
  110. data/lib/spec/runner/formatter/base_formatter.rb +10 -8
  111. data/lib/spec/runner/formatter/base_text_formatter.rb +18 -18
  112. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +31 -0
  113. data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -5
  114. data/lib/spec/runner/formatter/html_formatter.rb +37 -27
  115. data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
  116. data/lib/spec/runner/formatter/progress_bar_formatter.rb +3 -4
  117. data/lib/spec/runner/formatter/specdoc_formatter.rb +27 -13
  118. data/lib/spec/runner/formatter/story/html_formatter.rb +124 -0
  119. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +123 -0
  120. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  121. data/lib/spec/runner/heckle_runner.rb +9 -9
  122. data/lib/spec/runner/option_parser.rb +140 -138
  123. data/lib/spec/runner/options.rb +168 -90
  124. data/lib/spec/runner/reporter.rb +58 -40
  125. data/lib/spec/runner/spec_parser.rb +11 -8
  126. data/lib/spec/story.rb +10 -0
  127. data/lib/spec/story/extensions.rb +1 -0
  128. data/lib/spec/story/extensions/main.rb +86 -0
  129. data/lib/spec/story/given_scenario.rb +14 -0
  130. data/lib/spec/story/runner.rb +58 -0
  131. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  132. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  133. data/lib/spec/story/runner/scenario_runner.rb +46 -0
  134. data/lib/spec/story/runner/story_mediator.rb +123 -0
  135. data/lib/spec/story/runner/story_parser.rb +227 -0
  136. data/lib/spec/story/runner/story_runner.rb +67 -0
  137. data/lib/spec/story/scenario.rb +14 -0
  138. data/lib/spec/story/step.rb +48 -0
  139. data/lib/spec/story/step_group.rb +89 -0
  140. data/lib/spec/story/step_mother.rb +37 -0
  141. data/lib/spec/story/story.rb +42 -0
  142. data/lib/spec/story/world.rb +124 -0
  143. data/lib/spec/version.rb +4 -5
  144. data/plugins/mock_frameworks/rspec.rb +1 -1
  145. data/spec/autotest/rspec_spec.rb +13 -7
  146. data/spec/autotest_helper.rb +4 -3
  147. data/spec/rspec_suite.rb +7 -0
  148. data/spec/ruby_forker.rb +13 -0
  149. data/spec/spec/example/configuration_spec.rb +290 -0
  150. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  151. data/spec/spec/example/example_group_factory_spec.rb +129 -0
  152. data/spec/spec/example/example_group_methods_spec.rb +465 -0
  153. data/spec/spec/example/example_group_spec.rb +711 -0
  154. data/spec/spec/{dsl → example}/example_matcher_spec.rb +23 -18
  155. data/spec/spec/example/example_methods_spec.rb +75 -0
  156. data/spec/spec/example/example_runner_spec.rb +194 -0
  157. data/spec/spec/example/example_spec.rb +53 -0
  158. data/spec/spec/example/nested_example_group_spec.rb +59 -0
  159. data/spec/spec/example/pending_module_spec.rb +31 -0
  160. data/spec/spec/{dsl → example}/predicate_matcher_spec.rb +1 -1
  161. data/spec/spec/example/shared_example_group_spec.rb +265 -0
  162. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  163. data/spec/spec/expectations/differs/default_spec.rb +5 -3
  164. data/spec/spec/expectations/extensions/object_spec.rb +63 -2
  165. data/spec/spec/extensions/main_spec.rb +50 -0
  166. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  167. data/spec/spec/interop/test/unit/testcase_spec.rb +10 -0
  168. data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +20 -0
  169. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  170. data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +34 -0
  171. data/spec/spec/matchers/be_spec.rb +15 -0
  172. data/spec/spec/matchers/change_spec.rb +87 -0
  173. data/spec/spec/matchers/description_generation_spec.rb +31 -37
  174. data/spec/spec/matchers/exist_spec.rb +31 -22
  175. data/spec/spec/matchers/handler_spec.rb +42 -1
  176. data/spec/spec/matchers/have_spec.rb +1 -1
  177. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +1 -1
  178. data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
  179. data/spec/spec/matchers/simple_matcher_spec.rb +31 -0
  180. data/spec/spec/matchers/throw_symbol_spec.rb +4 -1
  181. data/spec/spec/mocks/bug_report_10263.rb +24 -0
  182. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  183. data/spec/spec/mocks/bug_report_8165_spec.rb +2 -2
  184. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +1 -0
  185. data/spec/spec/mocks/mock_spec.rb +200 -102
  186. data/spec/spec/mocks/multiple_return_value_spec.rb +1 -1
  187. data/spec/spec/mocks/options_hash_spec.rb +19 -7
  188. data/spec/spec/mocks/partial_mock_spec.rb +31 -9
  189. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
  190. data/spec/spec/mocks/stub_spec.rb +120 -98
  191. data/spec/spec/package/bin_spec_spec.rb +7 -5
  192. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  193. data/spec/spec/runner/command_line_spec.rb +140 -27
  194. data/spec/spec/runner/drb_command_line_spec.rb +39 -31
  195. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +44 -0
  196. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +16 -11
  197. data/spec/spec/runner/formatter/html_formatter_spec.rb +60 -50
  198. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  199. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +29 -13
  200. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
  201. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  202. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +103 -39
  203. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +56 -0
  204. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +289 -0
  205. data/spec/spec/runner/heckle_runner_spec.rb +29 -14
  206. data/spec/spec/runner/heckler_spec.rb +4 -5
  207. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +5 -5
  208. data/spec/spec/runner/option_parser_spec.rb +86 -58
  209. data/spec/spec/runner/options_spec.rb +239 -120
  210. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  211. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  212. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  213. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +6 -6
  214. data/spec/spec/runner/reporter_spec.rb +147 -163
  215. data/spec/spec/runner/spec_parser_spec.rb +31 -0
  216. data/spec/spec/runner_spec.rb +11 -0
  217. data/spec/spec/spec_classes.rb +12 -5
  218. data/spec/spec/story/builders.rb +46 -0
  219. data/spec/spec/story/extensions/main_spec.rb +161 -0
  220. data/spec/spec/story/extensions_spec.rb +14 -0
  221. data/spec/spec/story/given_scenario_spec.rb +27 -0
  222. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +92 -0
  223. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  224. data/spec/spec/story/runner/scenario_runner_spec.rb +142 -0
  225. data/spec/spec/story/runner/story_mediator_spec.rb +133 -0
  226. data/spec/spec/story/runner/story_parser_spec.rb +384 -0
  227. data/spec/spec/story/runner/story_runner_spec.rb +219 -0
  228. data/spec/spec/story/runner_spec.rb +106 -0
  229. data/spec/spec/story/scenario_spec.rb +20 -0
  230. data/spec/spec/story/step_group_spec.rb +157 -0
  231. data/spec/spec/story/step_mother_spec.rb +72 -0
  232. data/spec/spec/story/step_spec.rb +147 -0
  233. data/spec/spec/story/story_helper.rb +2 -0
  234. data/spec/spec/story/story_spec.rb +86 -0
  235. data/spec/spec/story/world_spec.rb +416 -0
  236. data/spec/spec/translator_spec.rb +2 -1
  237. data/spec/spec_helper.rb +59 -2
  238. data/stories/all.rb +5 -0
  239. data/stories/example_groups/autogenerated_docstrings +26 -0
  240. data/stories/example_groups/example_group_with_should_methods +17 -0
  241. data/stories/example_groups/nested_groups +17 -0
  242. data/stories/example_groups/output +20 -0
  243. data/stories/example_groups/stories.rb +7 -0
  244. data/stories/helper.rb +6 -0
  245. data/stories/interop/examples_and_tests_together +30 -0
  246. data/stories/interop/stories.rb +7 -0
  247. data/stories/interop/test_case_with_should_methods +17 -0
  248. data/stories/pending_stories/README +3 -0
  249. data/stories/resources/helpers/cmdline.rb +9 -0
  250. data/stories/resources/helpers/story_helper.rb +16 -0
  251. data/stories/resources/matchers/smart_match.rb +37 -0
  252. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  253. data/stories/resources/spec/simple_spec.rb +8 -0
  254. data/stories/resources/steps/running_rspec.rb +50 -0
  255. data/stories/resources/test/spec_and_test_together.rb +57 -0
  256. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  257. metadata +232 -106
  258. data/EXAMPLES.rd +0 -111
  259. data/examples/multi_threaded_behaviour_runner.rb +0 -25
  260. data/examples/shared_behaviours_example.rb +0 -39
  261. data/examples/spec_helper.rb +0 -1
  262. data/examples/test_case_adapter_example.rb +0 -26
  263. data/examples/test_case_spec.rb +0 -65
  264. data/lib/spec/dsl.rb +0 -11
  265. data/lib/spec/dsl/behaviour.rb +0 -220
  266. data/lib/spec/dsl/behaviour_callbacks.rb +0 -82
  267. data/lib/spec/dsl/behaviour_eval.rb +0 -231
  268. data/lib/spec/dsl/behaviour_factory.rb +0 -42
  269. data/lib/spec/dsl/composite_proc_builder.rb +0 -33
  270. data/lib/spec/dsl/description.rb +0 -76
  271. data/lib/spec/dsl/example.rb +0 -135
  272. data/lib/spec/dsl/example_matcher.rb +0 -40
  273. data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
  274. data/lib/spec/runner/behaviour_runner.rb +0 -123
  275. data/lib/spec/runner/extensions/kernel.rb +0 -50
  276. data/lib/spec/runner/extensions/object.rb +0 -32
  277. data/lib/spec/runner/formatter.rb +0 -9
  278. data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -29
  279. data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
  280. data/lib/spec/test_case_adapter.rb +0 -10
  281. data/spec/spec/dsl/behaviour_eval_spec.rb +0 -79
  282. data/spec/spec/dsl/behaviour_factory_spec.rb +0 -48
  283. data/spec/spec/dsl/behaviour_spec.rb +0 -661
  284. data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -44
  285. data/spec/spec/dsl/configuration_spec.rb +0 -55
  286. data/spec/spec/dsl/description_spec.rb +0 -89
  287. data/spec/spec/dsl/example_class_spec.rb +0 -24
  288. data/spec/spec/dsl/example_instance_spec.rb +0 -160
  289. data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
  290. data/spec/spec/dsl/shared_behaviour_spec.rb +0 -252
  291. data/spec/spec/runner/behaviour_runner_spec.rb +0 -229
  292. data/spec/spec/runner/context_matching_spec.rb +0 -27
  293. data/spec/spec/runner/extensions/bug_report_10577_spec.rb +0 -35
  294. data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
  295. data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -40
  296. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -20
  297. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
  298. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
  299. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
  300. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
  301. data/spec/spec/runner/object_ext_spec.rb +0 -11
@@ -67,7 +67,7 @@ module Spec
67
67
  describe "a Mock expectation with multiple return values specifying at_least less than the number of values" do
68
68
  before(:each) do
69
69
  @mock = Mock.new("mock")
70
- @mock.should_receive(:message).at_least(:twice).with(:no_args).and_return(11, 22)
70
+ @mock.should_receive(:message).at_least(:twice).with(no_args).and_return(11, 22)
71
71
  end
72
72
 
73
73
  it "should use last return value for subsequent calls" do
@@ -3,30 +3,42 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
3
3
  module Spec
4
4
  module Mocks
5
5
  describe "calling :should_receive with an options hash" do
6
+ it_should_behave_like "sandboxed rspec_options"
7
+ attr_reader :reporter, :example_group
8
+ before do
9
+ @reporter = ::Spec::Runner::Reporter.new(options)
10
+ @example_group = Class.new(::Spec::Example::ExampleGroup) do
11
+ plugin_mock_framework
12
+ describe("Some Examples")
13
+ end
14
+ reporter.add_example_group example_group
15
+ end
16
+
6
17
  it "should report the file and line submitted with :expected_from" do
7
- spec = Spec::DSL::Example.new "spec" do
18
+ example_definition = example_group.it "spec" do
8
19
  mock = Spec::Mocks::Mock.new("a mock")
9
20
  mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37")
10
21
  mock.rspec_verify
11
22
  end
12
- reporter = mock("reporter", :null_object => true)
23
+ example = example_group.new(example_definition)
24
+
13
25
  reporter.should_receive(:example_finished) do |spec, error|
14
26
  error.backtrace.detect {|line| line =~ /\/path\/to\/blah.ext:37/}.should_not be_nil
15
27
  end
16
- spec.run(reporter, nil, nil, nil, Object.new)
28
+ example.execute(options, {})
17
29
  end
18
30
 
19
31
  it "should use the message supplied with :message" do
20
- spec = Spec::DSL::Example.new "spec" do
32
+ example_definition = @example_group.it "spec" do
21
33
  mock = Spec::Mocks::Mock.new("a mock")
22
34
  mock.should_receive(:message, :message => "recebi nada")
23
35
  mock.rspec_verify
24
36
  end
25
- reporter = mock("reporter", :null_object => true)
26
- reporter.should_receive(:example_finished) do |spec, error|
37
+ example = @example_group.new(example_definition)
38
+ @reporter.should_receive(:example_finished) do |spec, error|
27
39
  error.message.should == "recebi nada"
28
40
  end
29
- spec.run(reporter, nil, nil, nil, Object.new)
41
+ example.execute(@options, {})
30
42
  end
31
43
  end
32
44
  end
@@ -6,14 +6,14 @@ module Spec
6
6
  before(:each) do
7
7
  @object = Object.new
8
8
  end
9
-
9
+
10
10
  it "should name the class in the failure message" do
11
11
  @object.should_receive(:foo)
12
12
  lambda do
13
13
  @object.rspec_verify
14
14
  end.should raise_error(Spec::Mocks::MockExpectationError, /Object/)
15
15
  end
16
-
16
+
17
17
  it "should not conflict with @options in the object" do
18
18
  @object.instance_eval { @options = Object.new }
19
19
  @object.should_receive(:blah)
@@ -27,39 +27,39 @@ module Spec
27
27
  @object.rspec_verify
28
28
  end.should raise_error(Spec::Mocks::MockExpectationError)
29
29
  end
30
-
30
+
31
31
  it "should_not_receive should return a negative message expectation" do
32
32
  @object.should_not_receive(:foobar).should be_kind_of(NegativeMessageExpectation)
33
33
  end
34
-
34
+
35
35
  it "should_receive should mock out the method" do
36
36
  @object.should_receive(:foobar).with(:test_param).and_return(1)
37
37
  @object.foobar(:test_param).should equal(1)
38
38
  end
39
-
39
+
40
40
  it "should_receive should handle a hash" do
41
41
  @object.should_receive(:foobar).with(:key => "value").and_return(1)
42
42
  @object.foobar(:key => "value").should equal(1)
43
43
  end
44
-
44
+
45
45
  it "should_receive should handle an inner hash" do
46
46
  hash = {:a => {:key => "value"}}
47
47
  @object.should_receive(:foobar).with(:key => "value").and_return(1)
48
48
  @object.foobar(hash[:a]).should equal(1)
49
49
  end
50
-
50
+
51
51
  it "should_receive should return a message expectation" do
52
52
  @object.should_receive(:foobar).should be_kind_of(MessageExpectation)
53
53
  @object.foobar
54
54
  end
55
-
55
+
56
56
  it "should_receive should verify method was called" do
57
57
  @object.should_receive(:foobar).with(:test_param).and_return(1)
58
58
  lambda do
59
59
  @object.rspec_verify
60
60
  end.should raise_error(Spec::Mocks::MockExpectationError)
61
61
  end
62
-
62
+
63
63
  it "should_receive should also take a String argument" do
64
64
  @object.should_receive('foobar')
65
65
  @object.foobar
@@ -80,5 +80,27 @@ module Spec
80
80
  end.should raise_error(Spec::Mocks::MockExpectationError, /NilClass.*expected :foobar with/)
81
81
  end
82
82
  end
83
+
84
+ describe "Partially mocking an object that defines ==, after another mock has been defined" do
85
+ before(:each) do
86
+ stub("existing mock", :foo => :foo)
87
+ end
88
+
89
+ class PartiallyMockedEquals
90
+ attr_reader :val
91
+ def initialize(val)
92
+ @val = val
93
+ end
94
+
95
+ def ==(other)
96
+ @val == other.val
97
+ end
98
+ end
99
+
100
+ it "should not raise an error when stubbing the object" do
101
+ o = PartiallyMockedEquals.new :foo
102
+ lambda { o.stub!(:bar) }.should_not raise_error(NoMethodError)
103
+ end
104
+ end
83
105
  end
84
106
  end
@@ -5,6 +5,7 @@ module Spec
5
5
  describe "mock argument constraints", :shared => true do
6
6
  before(:each) do
7
7
  @mock = Mock.new("test mock")
8
+ Kernel.stub!(:warn)
8
9
  end
9
10
 
10
11
  after(:each) do
@@ -49,6 +50,11 @@ module Spec
49
50
  @mock.should_receive(:random_call).with(:any_args)
50
51
  @mock.random_call("a string")
51
52
  end
53
+
54
+ it "should match no args against no_args" do
55
+ @mock.should_receive(:random_call).with(:no_args)
56
+ @mock.random_call
57
+ end
52
58
  end
53
59
 
54
60
  describe Methods, "handling argument constraints" do
@@ -13,112 +13,74 @@ module Spec
13
13
  :original_value
14
14
  end
15
15
  end
16
- @obj = @class.new
16
+ @instance = @class.new
17
17
  end
18
18
 
19
- it "should allow for a mock expectation to temporarily replace a method stub on a mock" do
20
- mock = Spec::Mocks::Mock.new("a mock")
21
- mock.stub!(:msg).and_return(:stub_value)
22
- mock.should_receive(:msg).with(:arg).and_return(:mock_value)
23
- mock.msg(:arg).should equal(:mock_value)
24
- mock.msg.should equal(:stub_value)
25
- mock.msg.should equal(:stub_value)
26
- mock.rspec_verify
27
- end
28
-
29
- it "should allow for a mock expectation to temporarily replace a method stub on a non-mock" do
30
- @obj.stub!(:msg).and_return(:stub_value)
31
- @obj.should_receive(:msg).with(:arg).and_return(:mock_value)
32
- @obj.msg(:arg).should equal(:mock_value)
33
- @obj.msg.should equal(:stub_value)
34
- @obj.msg.should equal(:stub_value)
35
- @obj.rspec_verify
19
+ it "should return expected value when expected message is received" do
20
+ @instance.stub!(:msg).and_return(:return_value)
21
+ @instance.msg.should equal(:return_value)
22
+ @instance.rspec_verify
36
23
  end
37
24
 
38
- it "should ignore when expected message is not received" do
39
- @obj.stub!(:msg)
25
+ it "should ignore when expected message is received" do
26
+ @instance.stub!(:msg)
27
+ @instance.msg
40
28
  lambda do
41
- @obj.rspec_verify
29
+ @instance.rspec_verify
42
30
  end.should_not raise_error
43
31
  end
44
-
45
- it "should clear itself on rspec_verify" do
46
- @obj.stub!(:this_should_go).and_return(:blah)
47
- @obj.this_should_go.should == :blah
48
- @obj.rspec_verify
49
- lambda do
50
- @obj.this_should_go
51
- end.should raise_error
52
- end
53
-
54
- it "should ignore when expected message is received" do
55
- @obj.stub!(:msg)
56
- @obj.msg
57
- @obj.rspec_verify
58
- end
59
32
 
60
33
  it "should ignore when message is received with args" do
61
- @obj.stub!(:msg)
62
- @obj.msg(:an_arg)
63
- @obj.rspec_verify
34
+ @instance.stub!(:msg)
35
+ @instance.msg(:an_arg)
36
+ lambda do
37
+ @instance.rspec_verify
38
+ end.should_not raise_error
64
39
  end
65
40
 
66
- it "should not support with" do
41
+ it "should ignore when expected message is not received" do
42
+ @instance.stub!(:msg)
67
43
  lambda do
68
- Spec::Mocks::Mock.new("a mock").stub!(:msg).with(:arg)
69
- end.should raise_error(NoMethodError)
44
+ @instance.rspec_verify
45
+ end.should_not raise_error
70
46
  end
71
47
 
72
- it "should return expected value when expected message is received" do
73
- @obj.stub!(:msg).and_return(:return_value)
74
- @obj.msg.should equal(:return_value)
75
- @obj.rspec_verify
48
+ it "should clear itself when verified" do
49
+ @instance.stub!(:this_should_go).and_return(:blah)
50
+ @instance.this_should_go.should == :blah
51
+ @instance.rspec_verify
52
+ lambda do
53
+ @instance.this_should_go
54
+ end.should raise_error(NameError)
76
55
  end
77
56
 
78
57
  it "should return values in order to consecutive calls" do
79
58
  return_values = ["1",2,Object.new]
80
- @obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
81
- @obj.msg.should == return_values[0]
82
- @obj.msg.should == return_values[1]
83
- @obj.msg.should == return_values[2]
59
+ @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
60
+ @instance.msg.should == return_values[0]
61
+ @instance.msg.should == return_values[1]
62
+ @instance.msg.should == return_values[2]
84
63
  end
85
64
 
86
65
  it "should keep returning last value in consecutive calls" do
87
66
  return_values = ["1",2,Object.new]
88
- @obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
89
- @obj.msg.should == return_values[0]
90
- @obj.msg.should == return_values[1]
91
- @obj.msg.should == return_values[2]
92
- @obj.msg.should == return_values[2]
93
- @obj.msg.should == return_values[2]
94
- end
95
-
96
- it "should revert to original instance method if existed" do
97
- @obj.existing_instance_method.should equal(:original_value)
98
- @obj.stub!(:existing_instance_method).and_return(:mock_value)
99
- @obj.existing_instance_method.should equal(:mock_value)
100
- @obj.rspec_verify
101
- # TODO JRUBY: This causes JRuby to fail with:
102
- # NativeException in 'Stub should revert to original instance method if existed'
103
- # java.lang.ArrayIndexOutOfBoundsException: 0
104
- # org.jruby.internal.runtime.methods.IterateCallable.internalCall(IterateCallable.java:63)
105
- # org.jruby.internal.runtime.methods.AbstractCallable.call(AbstractCallable.java:64)
106
- # org.jruby.runtime.ThreadContext.yieldInternal(ThreadContext.java:574)
107
- # org.jruby.runtime.ThreadContext.yieldSpecificBlock(ThreadContext.java:549)
108
- # org.jruby.runtime.Block.call(Block.java:158)
109
- # org.jruby.RubyProc.call(RubyProc.java:118)
110
- # org.jruby.internal.runtime.methods.ProcMethod.internalCall(ProcMethod.java:69)
111
- # org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:58)
112
- # org.jruby.RubyObject.callMethod(RubyObject.java:379)
113
- # org.jruby.RubyObject.callMethod(RubyObject.java:331)
114
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:472)
115
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:462)
116
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:390)
117
- # org.jruby.evaluator.EvaluationState.eval(EvaluationState.java:133)
118
- @obj.existing_instance_method.should equal(:original_value)
67
+ @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
68
+ @instance.msg.should == return_values[0]
69
+ @instance.msg.should == return_values[1]
70
+ @instance.msg.should == return_values[2]
71
+ @instance.msg.should == return_values[2]
72
+ @instance.msg.should == return_values[2]
73
+ end
74
+
75
+ it "should revert to original instance method if there is one" do
76
+ @instance.existing_instance_method.should equal(:original_value)
77
+ @instance.stub!(:existing_instance_method).and_return(:mock_value)
78
+ @instance.existing_instance_method.should equal(:mock_value)
79
+ @instance.rspec_verify
80
+ @instance.existing_instance_method.should equal(:original_value)
119
81
  end
120
82
 
121
- it "should revert to original class method if existed" do
83
+ it "should revert to original class method if there is one" do
122
84
  @class.existing_class_method.should equal(:original_value)
123
85
  @class.stub!(:existing_class_method).and_return(:mock_value)
124
86
  @class.existing_class_method.should equal(:mock_value)
@@ -126,34 +88,94 @@ module Spec
126
88
  @class.existing_class_method.should equal(:original_value)
127
89
  end
128
90
 
129
- it "should clear itself on rspec_verify" do
130
- @obj.stub!(:this_should_go).and_return(:blah)
131
- @obj.this_should_go.should == :blah
132
- @obj.rspec_verify
133
- lambda do
134
- @obj.this_should_go
135
- end.should raise_error
91
+ it "should yield a specified object" do
92
+ @instance.stub!(:method_that_yields).and_yield(:yielded_obj)
93
+ current_value = :value_before
94
+ @instance.method_that_yields {|val| current_value = val}
95
+ current_value.should == :yielded_obj
96
+ @instance.rspec_verify
97
+ end
98
+
99
+ it "should yield multiple times with multiple calls to and_yield" do
100
+ @instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value).
101
+ and_yield(:another_value)
102
+ current_value = []
103
+ @instance.method_that_yields_multiple_times {|val| current_value << val}
104
+ current_value.should == [:yielded_value, :another_value]
105
+ @instance.rspec_verify
136
106
  end
137
107
 
138
- it "should support yielding" do
139
- @obj.stub!(:method_that_yields).and_yield(:yielded_value)
140
- current_value = :value_before
141
- @obj.method_that_yields {|val| current_value = val}
142
- current_value.should == :yielded_value
143
- @obj.rspec_verify
108
+ it "should yield a specified object and return another specified object" do
109
+ yielded_obj = mock("my mock")
110
+ yielded_obj.should_receive(:foo).with(:bar)
111
+ @instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz)
112
+ @instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz
144
113
  end
145
114
 
146
115
  it "should throw when told to" do
147
- @mock.stub!(:something).and_throw(:blech)
116
+ @mock.stub!(:something).and_throw(:up)
148
117
  lambda do
149
118
  @mock.something
150
- end.should throw_symbol(:blech)
119
+ end.should throw_symbol(:up)
151
120
  end
152
121
 
153
- it "should support overriding w/ a new stub" do
122
+ it "should override a pre-existing stub" do
154
123
  @stub.stub!(:existing_instance_method).and_return(:updated_stub_value)
155
124
  @stub.existing_instance_method.should == :updated_stub_value
156
125
  end
126
+
127
+ it "should limit " do
128
+ @stub.stub!(:foo).with("bar")
129
+ @stub.should_receive(:foo).with("baz")
130
+ @stub.foo("bar")
131
+ @stub.foo("baz")
132
+ end
133
+ end
134
+
135
+ describe "A method stub with args" do
136
+ before(:each) do
137
+ @stub = Object.new
138
+ @stub.stub!(:foo).with("bar")
139
+ end
140
+
141
+ it "should not complain if not called" do
142
+ end
143
+
144
+ it "should not complain if called with arg" do
145
+ @stub.foo("bar")
146
+ end
147
+
148
+ it "should complain if called with no arg" do
149
+ lambda do
150
+ @stub.foo
151
+ end.should raise_error
152
+ end
153
+
154
+ it "should complain if called with other arg" do
155
+ lambda do
156
+ @stub.foo("other")
157
+ end.should raise_error
158
+ end
159
+
160
+ it "should not complain if also mocked w/ different args" do
161
+ @stub.should_receive(:foo).with("baz")
162
+ @stub.foo("bar")
163
+ @stub.foo("baz")
164
+ end
165
+
166
+ it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do
167
+ @stub.should_receive(:foo).with("baz")
168
+ @stub.foo("bar")
169
+ @stub.foo("baz")
170
+ lambda do
171
+ @stub.foo("other")
172
+ end.should raise_error
173
+ end
174
+
175
+ it "should support options" do
176
+ @stub.stub!(:foo, :expected_from => "bar")
177
+ end
157
178
  end
179
+
158
180
  end
159
181
  end
@@ -1,12 +1,14 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require File.dirname(__FILE__) + '/../../ruby_forker'
2
3
 
3
4
  describe "The bin/spec script" do
5
+ include RubyForker
6
+
4
7
  it "should have no warnings" do
8
+ pending "Hangs on JRuby" if PLATFORM =~ /java/
5
9
  spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec"
6
- output = nil
7
- IO.popen("ruby -w #{spec_path} --help 2>&1") do |io|
8
- output = io.read
9
- end
10
+
11
+ output = ruby "-w #{spec_path} --help 2>&1"
10
12
  output.should_not =~ /warning/n
11
13
  end
12
14
  end