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
@@ -3,4 +3,8 @@ class Object
3
3
  options = Hash === args.last ? args.pop : {}
4
4
  return args, options
5
5
  end
6
- end
6
+
7
+ def metaclass
8
+ class << self; self; end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'test/unit'
2
+ require 'test/unit/testresult'
3
+
4
+ require 'spec/interop/test/unit/testcase'
5
+ require 'spec/interop/test/unit/testsuite_adapter'
6
+ require 'spec/interop/test/unit/autorunner'
7
+ require 'spec/interop/test/unit/testresult'
8
+ require 'spec/interop/test/unit/ui/console/testrunner'
9
+
10
+ Spec::Example::ExampleGroupFactory.default(Test::Unit::TestCase)
@@ -0,0 +1,6 @@
1
+ class Test::Unit::AutoRunner
2
+ remove_method :process_args
3
+ def process_args(argv)
4
+ true
5
+ end
6
+ end
@@ -0,0 +1,61 @@
1
+ require 'test/unit/testcase'
2
+
3
+ module Test
4
+ module Unit
5
+ # This extension of the standard Test::Unit::TestCase makes RSpec
6
+ # available from within, so that you can do things like:
7
+ #
8
+ # require 'test/unit'
9
+ # require 'spec'
10
+ #
11
+ # class MyTest < Test::Unit::TestCase
12
+ # it "should work with Test::Unit assertions" do
13
+ # assert_equal 4, 2+1
14
+ # end
15
+ #
16
+ # def test_should_work_with_rspec_expectations
17
+ # (3+1).should == 5
18
+ # end
19
+ # end
20
+ #
21
+ # See also Spec::Example::ExampleGroup
22
+ class TestCase
23
+ extend Spec::Example::ExampleGroupMethods
24
+ include Spec::Example::ExampleMethods
25
+
26
+ before(:each) {setup}
27
+ after(:each) {teardown}
28
+
29
+ class << self
30
+ def suite
31
+ Test::Unit::TestSuiteAdapter.new(self)
32
+ end
33
+
34
+ def example_method?(method_name)
35
+ should_method?(method_name) || test_method?(method_name)
36
+ end
37
+
38
+ def test_method?(method_name)
39
+ method_name =~ /^test[_A-Z]./ && (
40
+ instance_method(method_name).arity == 0 ||
41
+ instance_method(method_name).arity == -1
42
+ )
43
+ end
44
+ end
45
+
46
+ def initialize(defined_description, &implementation)
47
+ @_defined_description = defined_description
48
+ @_implementation = implementation
49
+
50
+ @_result = ::Test::Unit::TestResult.new
51
+ # @method_name is important to set here because it "complies" with Test::Unit's interface.
52
+ # Some Test::Unit extensions depend on @method_name being present.
53
+ @method_name = @_defined_description
54
+ end
55
+
56
+ def run(ignore_this_argument=nil)
57
+ super()
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,6 @@
1
+ class Test::Unit::TestResult
2
+ alias_method :tu_passed?, :passed?
3
+ def passed?
4
+ return tu_passed? & ::Spec.run
5
+ end
6
+ end
@@ -0,0 +1,34 @@
1
+ module Test
2
+ module Unit
3
+ class TestSuiteAdapter < TestSuite
4
+ attr_reader :example_group, :examples
5
+ alias_method :tests, :examples
6
+ def initialize(example_group)
7
+ @example_group = example_group
8
+ @examples = example_group.examples
9
+ end
10
+
11
+ def name
12
+ example_group.description
13
+ end
14
+
15
+ def run(*args)
16
+ return true unless args.empty?
17
+ example_group.run
18
+ end
19
+
20
+ def size
21
+ example_group.number_of_examples
22
+ end
23
+
24
+ def delete(example)
25
+ examples.delete example
26
+ end
27
+
28
+ def empty?
29
+ examples.empty?
30
+ end
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,60 @@
1
+ require 'test/unit/ui/console/testrunner'
2
+
3
+ module Test
4
+ module Unit
5
+ module UI
6
+ module Console
7
+ class TestRunner
8
+
9
+ alias_method :started_without_rspec, :started
10
+ def started_with_rspec(result)
11
+ @result = result
12
+ @need_to_output_started = true
13
+ end
14
+ alias_method :started, :started_with_rspec
15
+
16
+ alias_method :test_started_without_rspec, :test_started
17
+ def test_started_with_rspec(name)
18
+ if @need_to_output_started
19
+ if @rspec_io
20
+ @rspec_io.rewind
21
+ output(@rspec_io.read)
22
+ end
23
+ output("Started")
24
+ @need_to_output_started = false
25
+ end
26
+ test_started_without_rspec(name)
27
+ end
28
+ alias_method :test_started, :test_started_with_rspec
29
+
30
+ alias_method :test_finished_without_rspec, :test_finished
31
+ def test_finished_with_rspec(name)
32
+ test_finished_without_rspec(name)
33
+ @ran_test = true
34
+ end
35
+ alias_method :test_finished, :test_finished_with_rspec
36
+
37
+ alias_method :finished_without_rspec, :finished
38
+ def finished_with_rspec(elapsed_time)
39
+ if @ran_test
40
+ finished_without_rspec(elapsed_time)
41
+ end
42
+ end
43
+ alias_method :finished, :finished_with_rspec
44
+
45
+ alias_method :setup_mediator_without_rspec, :setup_mediator
46
+ def setup_mediator_with_rspec
47
+ orig_io = @io
48
+ @io = StringIO.new
49
+ setup_mediator_without_rspec
50
+ ensure
51
+ @rspec_io = @io
52
+ @io = orig_io
53
+ end
54
+ alias_method :setup_mediator, :setup_mediator_with_rspec
55
+
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,8 +1,10 @@
1
+ require 'spec/matchers/simple_matcher'
1
2
  require 'spec/matchers/be'
2
3
  require 'spec/matchers/be_close'
3
4
  require 'spec/matchers/change'
4
5
  require 'spec/matchers/eql'
5
6
  require 'spec/matchers/equal'
7
+ require 'spec/matchers/exist'
6
8
  require 'spec/matchers/has'
7
9
  require 'spec/matchers/have'
8
10
  require 'spec/matchers/include'
@@ -132,27 +134,21 @@ module Spec
132
134
  #
133
135
  module Matchers
134
136
  module ModuleMethods
135
- def description_generated(callback)
136
- description_generated_callbacks << callback
137
- end
138
-
139
- def unregister_description_generated(callback)
140
- description_generated_callbacks.delete(callback)
141
- end
137
+ attr_accessor :generated_description
142
138
 
143
- def generated_description=(name)
144
- description_generated_callbacks.each do |callback|
145
- callback.call(name)
146
- end
139
+ def clear_generated_description
140
+ self.generated_description = nil
147
141
  end
148
142
 
149
- private
150
- def description_generated_callbacks
151
- @description_generated_callbacks ||= []
143
+ def capture_generated_description
144
+ yield
145
+ description = generated_description
146
+ clear_generated_description
147
+ description
152
148
  end
153
149
  end
154
150
  extend ModuleMethods
155
-
151
+
156
152
  def method_missing(sym, *args, &block) # :nodoc:
157
153
  return Matchers::Be.new(sym, *args) if sym.starts_with?("be_")
158
154
  return Matchers::Has.new(sym, *args) if sym.starts_with?("have_")
@@ -3,14 +3,17 @@ module Spec
3
3
 
4
4
  class Be #:nodoc:
5
5
  def initialize(*args)
6
- @expected = parse_expected(args.shift)
6
+ if args.empty?
7
+ @expected = :satisfy_if
8
+ else
9
+ @expected = parse_expected(args.shift)
10
+ end
7
11
  @args = args
8
12
  @comparison = ""
9
13
  end
10
14
 
11
15
  def matches?(actual)
12
16
  @actual = actual
13
- return true if match_or_compare unless handling_predicate?
14
17
  if handling_predicate?
15
18
  begin
16
19
  return @result = actual.__send__(predicate, *@args)
@@ -28,8 +31,9 @@ module Spec
28
31
  rescue
29
32
  raise predicate_error
30
33
  end
34
+ else
35
+ return match_or_compare
31
36
  end
32
- return false
33
37
  end
34
38
 
35
39
  def failure_message
@@ -43,6 +47,7 @@ module Spec
43
47
  end
44
48
 
45
49
  def expected
50
+ return "if to be satisfied" if @expected == :satisfy_if
46
51
  return true if @expected == :true
47
52
  return false if @expected == :false
48
53
  return "nil" if @expected == :nil
@@ -50,6 +55,7 @@ module Spec
50
55
  end
51
56
 
52
57
  def match_or_compare
58
+ return @actual ? true : false if @expected == :satisfy_if
53
59
  return @actual == true if @expected == :true
54
60
  return @actual == false if @expected == :false
55
61
  return @actual.nil? if @expected == :nil
@@ -63,6 +69,7 @@ module Spec
63
69
  end
64
70
 
65
71
  def ==(expected)
72
+ @prefix = "be "
66
73
  @double_equal = true
67
74
  @comparison = "== "
68
75
  @expected = expected
@@ -70,6 +77,7 @@ module Spec
70
77
  end
71
78
 
72
79
  def ===(expected)
80
+ @prefix = "be "
73
81
  @triple_equal = true
74
82
  @comparison = "=== "
75
83
  @expected = expected
@@ -77,6 +85,7 @@ module Spec
77
85
  end
78
86
 
79
87
  def <(expected)
88
+ @prefix = "be "
80
89
  @less_than = true
81
90
  @comparison = "< "
82
91
  @expected = expected
@@ -84,6 +93,7 @@ module Spec
84
93
  end
85
94
 
86
95
  def <=(expected)
96
+ @prefix = "be "
87
97
  @less_than_or_equal = true
88
98
  @comparison = "<= "
89
99
  @expected = expected
@@ -91,6 +101,7 @@ module Spec
91
101
  end
92
102
 
93
103
  def >=(expected)
104
+ @prefix = "be "
94
105
  @greater_than_or_equal = true
95
106
  @comparison = ">= "
96
107
  @expected = expected
@@ -98,6 +109,7 @@ module Spec
98
109
  end
99
110
 
100
111
  def >(expected)
112
+ @prefix = "be "
101
113
  @greater_than = true
102
114
  @comparison = "> "
103
115
  @expected = expected
@@ -113,10 +125,12 @@ module Spec
113
125
  if Symbol === expected
114
126
  @handling_predicate = true
115
127
  ["be_an_","be_a_","be_"].each do |@prefix|
116
- return "#{expected.to_s.sub(@prefix,"")}".to_sym if expected.starts_with?(@prefix)
128
+ if expected.starts_with?(@prefix)
129
+ return "#{expected.to_s.sub(@prefix,"")}".to_sym
130
+ end
117
131
  end
118
132
  end
119
- @prefix = "be "
133
+ @prefix = ""
120
134
  return expected
121
135
  end
122
136
 
@@ -169,6 +183,7 @@ module Spec
169
183
  end
170
184
 
171
185
  # :call-seq:
186
+ # should be
172
187
  # should be_true
173
188
  # should be_false
174
189
  # should be_nil
@@ -177,7 +192,8 @@ module Spec
177
192
  # should_not be_arbitrary_predicate(*args)
178
193
  #
179
194
  # Given true, false, or nil, will pass if actual is
180
- # true, false or nil (respectively).
195
+ # true, false or nil (respectively). Given no args means
196
+ # the caller should satisfy an if condition (to be or not to be).
181
197
  #
182
198
  # Predicates are any Ruby method that ends in a "?" and returns true or false.
183
199
  # Given be_ followed by arbitrary_predicate (without the "?"), RSpec will match
@@ -189,6 +205,7 @@ module Spec
189
205
  #
190
206
  # == Examples
191
207
  #
208
+ # target.should be
192
209
  # target.should be_true
193
210
  # target.should be_false
194
211
  # target.should be_nil
@@ -21,6 +21,8 @@ EOF
21
21
  return false if @from && (@from != @before)
22
22
  return false if @to && (@to != @after)
23
23
  return (@before + @amount == @after) if @amount
24
+ return ((@after - @before) >= @minimum) if @minimum
25
+ return ((@after - @before) <= @maximum) if @maximum
24
26
  return @before != @after
25
27
  end
26
28
 
@@ -37,6 +39,10 @@ EOF
37
39
  "#{result} should have initially been #{@from.inspect}, but was #{@before.inspect}"
38
40
  elsif @amount
39
41
  "#{result} should have been changed by #{@amount.inspect}, but was changed by #{actual_delta.inspect}"
42
+ elsif @minimum
43
+ "#{result} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}"
44
+ elsif @maximum
45
+ "#{result} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}"
40
46
  else
41
47
  "#{result} should have changed, but is still #{@before.inspect}"
42
48
  end
@@ -59,6 +65,16 @@ EOF
59
65
  self
60
66
  end
61
67
 
68
+ def by_at_least(minimum)
69
+ @minimum = minimum
70
+ self
71
+ end
72
+
73
+ def by_at_most(maximum)
74
+ @maximum = maximum
75
+ self
76
+ end
77
+
62
78
  def to(to)
63
79
  @to = to
64
80
  self
@@ -88,6 +104,14 @@ EOF
88
104
  # team.add_player(player)
89
105
  # }.should change(roster, :count).by(1)
90
106
  #
107
+ # lambda {
108
+ # team.add_player(player)
109
+ # }.should change(roster, :count).by_at_least(1)
110
+ #
111
+ # lambda {
112
+ # team.add_player(player)
113
+ # }.should change(roster, :count).by_at_most(1)
114
+ #
91
115
  # string = "string"
92
116
  # lambda {
93
117
  # string.reverse
@@ -109,7 +133,7 @@ EOF
109
133
  #
110
134
  # == Warning
111
135
  # +should_not+ +change+ only supports the form with no subsequent calls to
112
- # +be+, +to+ or +from+.
136
+ # +by+, +by_at_least+, +by_at_most+, +to+ or +from+.
113
137
  #
114
138
  # blocks passed to +should+ +change+ and +should_not+ +change+
115
139
  # must use the <tt>{}</tt> form (<tt>do/end</tt> is not supported)
@@ -0,0 +1,17 @@
1
+ module Spec
2
+ module Matchers
3
+ class Exist
4
+ def matches? actual
5
+ @actual = actual
6
+ @actual.exist?
7
+ end
8
+ def failure_message
9
+ "expected #{@actual.inspect} to exist, but it doesn't."
10
+ end
11
+ def negative_failure_message
12
+ "expected #{@actual.inspect} to not exist, but it does."
13
+ end
14
+ end
15
+ def exist; Exist.new; end
16
+ end
17
+ end