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
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper'
2
+ require File.dirname(__FILE__) + '/../../../../ruby_forker'
3
+
4
+ describe "Test::Unit interop", :shared => true do
5
+ include RubyForker
6
+
7
+ def run_script(file_name)
8
+ output = ruby(file_name)
9
+ if !$?.success? || output.include?("FAILED") || output.include?("Error")
10
+ raise output
11
+ end
12
+ output
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/test_unit_spec_helper'
2
+
3
+ describe "Test::Unit::TestCase" do
4
+ it_should_behave_like "Test::Unit interop"
5
+ it "should pass" do
6
+ dir = File.dirname(__FILE__)
7
+ output = run_script("#{dir}/testcase_spec_with_test_unit.rb")
8
+ output.should include("3 examples, 0 failures")
9
+ end
10
+ end
@@ -0,0 +1,20 @@
1
+ require "test/unit"
2
+ require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
3
+
4
+ describe "TestCase#method_name" do
5
+ it "should equal the description of the example" do
6
+ @method_name.should == "should equal the description of the example"
7
+ end
8
+
9
+ def test_this
10
+ true.should be_true
11
+ end
12
+
13
+ def testThis
14
+ true.should be_true
15
+ end
16
+
17
+ def testament
18
+ raise "testament is not a test"
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ require File.dirname(__FILE__) + '/test_unit_spec_helper'
2
+
3
+ describe "TestSuiteAdapter" do
4
+ it_should_behave_like "Test::Unit interop"
5
+ it "should pass" do
6
+ dir = File.dirname(__FILE__)
7
+ run_script "#{dir}/testsuite_adapter_spec_with_test_unit.rb"
8
+ end
9
+ end
@@ -0,0 +1,34 @@
1
+ require "test/unit"
2
+ require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
3
+
4
+ module TestSuiteAdapterSpecHelper
5
+ def create_adapter(group)
6
+ Test::Unit::TestSuiteAdapter.new(group)
7
+ end
8
+ end
9
+
10
+ describe "TestSuiteAdapter#size" do
11
+ include TestSuiteAdapterSpecHelper
12
+ it "should return the number of examples in the example group" do
13
+ group = Class.new(Spec::ExampleGroup) do
14
+ describe("some examples")
15
+ it("bar") {}
16
+ it("baz") {}
17
+ end
18
+ adapter = create_adapter(group)
19
+ adapter.size.should == 2
20
+ end
21
+ end
22
+
23
+ describe "TestSuiteAdapter#delete" do
24
+ include TestSuiteAdapterSpecHelper
25
+ it "should do nothing" do
26
+ group = Class.new(Spec::ExampleGroup) do
27
+ describe("Some Examples")
28
+ it("does something") {}
29
+ end
30
+ adapter = create_adapter(group)
31
+ adapter.delete(adapter.examples.first)
32
+ adapter.should be_empty
33
+ end
34
+ end
@@ -199,6 +199,21 @@ describe "should be ===" do
199
199
  end
200
200
  end
201
201
 
202
+ describe "should be" do
203
+ it "should pass if actual is true or a set value" do
204
+ true.should be
205
+ 1.should be
206
+ end
207
+
208
+ it "should fail if actual is false" do
209
+ lambda {false.should be}.should fail_with("expected if to be satisfied, got false")
210
+ end
211
+
212
+ it "should fail if actual is nil" do
213
+ lambda {nil.should be}.should fail_with("expected if to be satisfied, got nil")
214
+ end
215
+ end
216
+
202
217
  describe "should be(value)" do
203
218
  it "should pass if actual.equal?(value)" do
204
219
  5.should be(5)
@@ -133,6 +133,93 @@ describe "should change{ block }.by(expected)" do
133
133
  end
134
134
  end
135
135
 
136
+ describe "should change(actual, message).by_at_least(expected)" do
137
+ before(:each) do
138
+ @instance = SomethingExpected.new
139
+ @instance.some_value = 5
140
+ end
141
+
142
+ it "should pass when attribute is changed by greater than the expected amount" do
143
+ lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(1)
144
+ end
145
+
146
+ it "should pass when attribute is changed by the expected amount" do
147
+ lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(2)
148
+ end
149
+
150
+ it "should fail when the attribute is changed by less than the expected amount" do
151
+ lambda do
152
+ lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by_at_least(2)
153
+ end.should fail_with("some_value should have been changed by at least 2, but was changed by 1")
154
+ end
155
+
156
+ end
157
+
158
+ describe "should change{ block }.by_at_least(expected)" do
159
+ before(:each) do
160
+ @instance = SomethingExpected.new
161
+ @instance.some_value = 5
162
+ end
163
+
164
+ it "should pass when attribute is changed by greater than expected amount" do
165
+ lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(1)
166
+ end
167
+
168
+ it "should pass when attribute is changed by the expected amount" do
169
+ lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(2)
170
+ end
171
+
172
+ it "should fail when the attribute is changed by less than the unexpected amount" do
173
+ lambda do
174
+ lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by_at_least(2)
175
+ end.should fail_with("result should have been changed by at least 2, but was changed by 1")
176
+ end
177
+ end
178
+
179
+
180
+ describe "should change(actual, message).by_at_most(expected)" do
181
+ before(:each) do
182
+ @instance = SomethingExpected.new
183
+ @instance.some_value = 5
184
+ end
185
+
186
+ it "should pass when attribute is changed by less than the expected amount" do
187
+ lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(3)
188
+ end
189
+
190
+ it "should pass when attribute is changed by the expected amount" do
191
+ lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(2)
192
+ end
193
+
194
+ it "should fail when the attribute is changed by greater than the expected amount" do
195
+ lambda do
196
+ lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(1)
197
+ end.should fail_with("some_value should have been changed by at most 1, but was changed by 2")
198
+ end
199
+
200
+ end
201
+
202
+ describe "should change{ block }.by_at_most(expected)" do
203
+ before(:each) do
204
+ @instance = SomethingExpected.new
205
+ @instance.some_value = 5
206
+ end
207
+
208
+ it "should pass when attribute is changed by less than expected amount" do
209
+ lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(3)
210
+ end
211
+
212
+ it "should pass when attribute is changed by the expected amount" do
213
+ lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(2)
214
+ end
215
+
216
+ it "should fail when the attribute is changed by greater than the unexpected amount" do
217
+ lambda do
218
+ lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(1)
219
+ end.should fail_with("result should have been changed by at most 1, but was changed by 2")
220
+ end
221
+ end
222
+
136
223
  describe "should change(actual, message).from(old)" do
137
224
  before(:each) do
138
225
  @instance = SomethingExpected.new
@@ -1,148 +1,146 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
3
  describe "Matchers should be able to generate their own descriptions" do
4
- before(:each) do
5
- @desc = nil
6
- @callback = lambda { |desc| @desc = desc }
7
- Spec::Matchers.description_generated(@callback)
4
+ after(:each) do
5
+ Spec::Matchers.clear_generated_description
8
6
  end
9
-
7
+
10
8
  it "should == expected" do
11
9
  "this".should == "this"
12
- @desc.should == "should == \"this\""
10
+ Spec::Matchers.generated_description.should == "should == \"this\""
13
11
  end
14
12
 
15
13
  it "should not == expected" do
16
14
  "this".should_not == "that"
17
- @desc.should == "should not == \"that\""
15
+ Spec::Matchers.generated_description.should == "should not == \"that\""
18
16
  end
19
17
 
20
18
  it "should be empty (arbitrary predicate)" do
21
19
  [].should be_empty
22
- @desc.should == "should be empty"
20
+ Spec::Matchers.generated_description.should == "should be empty"
23
21
  end
24
22
 
25
23
  it "should not be empty (arbitrary predicate)" do
26
24
  [1].should_not be_empty
27
- @desc.should == "should not be empty"
25
+ Spec::Matchers.generated_description.should == "should not be empty"
28
26
  end
29
27
 
30
28
  it "should be true" do
31
29
  true.should be_true
32
- @desc.should == "should be true"
30
+ Spec::Matchers.generated_description.should == "should be true"
33
31
  end
34
32
 
35
33
  it "should be false" do
36
34
  false.should be_false
37
- @desc.should == "should be false"
35
+ Spec::Matchers.generated_description.should == "should be false"
38
36
  end
39
37
 
40
38
  it "should be nil" do
41
39
  nil.should be_nil
42
- @desc.should == "should be nil"
40
+ Spec::Matchers.generated_description.should == "should be nil"
43
41
  end
44
42
 
45
43
  it "should be > n" do
46
44
  5.should be > 3
47
- @desc.should == "should be > 3"
45
+ Spec::Matchers.generated_description.should == "should be > 3"
48
46
  end
49
47
 
50
48
  it "should be predicate arg1, arg2 and arg3" do
51
49
  5.0.should be_between(0,10)
52
- @desc.should == "should be between 0 and 10"
50
+ Spec::Matchers.generated_description.should == "should be between 0 and 10"
53
51
  end
54
52
 
55
53
  it "should be_few_words predicate should be transformed to 'be few words'" do
56
54
  5.should be_kind_of(Fixnum)
57
- @desc.should == "should be kind of Fixnum"
55
+ Spec::Matchers.generated_description.should == "should be kind of Fixnum"
58
56
  end
59
57
 
60
58
  it "should preserve a proper prefix for be predicate" do
61
59
  5.should be_a_kind_of(Fixnum)
62
- @desc.should == "should be a kind of Fixnum"
60
+ Spec::Matchers.generated_description.should == "should be a kind of Fixnum"
63
61
  5.should be_an_instance_of(Fixnum)
64
- @desc.should == "should be an instance of Fixnum"
62
+ Spec::Matchers.generated_description.should == "should be an instance of Fixnum"
65
63
  end
66
64
 
67
65
  it "should equal" do
68
66
  expected = "expected"
69
67
  expected.should equal(expected)
70
- @desc.should == "should equal \"expected\""
68
+ Spec::Matchers.generated_description.should == "should equal \"expected\""
71
69
  end
72
70
 
73
71
  it "should_not equal" do
74
72
  5.should_not equal(37)
75
- @desc.should == "should not equal 37"
73
+ Spec::Matchers.generated_description.should == "should not equal 37"
76
74
  end
77
75
 
78
76
  it "should eql" do
79
77
  "string".should eql("string")
80
- @desc.should == "should eql \"string\""
78
+ Spec::Matchers.generated_description.should == "should eql \"string\""
81
79
  end
82
80
 
83
81
  it "should not eql" do
84
82
  "a".should_not eql(:a)
85
- @desc.should == "should not eql :a"
83
+ Spec::Matchers.generated_description.should == "should not eql :a"
86
84
  end
87
85
 
88
86
  it "should have_key" do
89
87
  {:a => "a"}.should have_key(:a)
90
- @desc.should == "should have key :a"
88
+ Spec::Matchers.generated_description.should == "should have key :a"
91
89
  end
92
90
 
93
91
  it "should have n items" do
94
92
  team.should have(3).players
95
- @desc.should == "should have 3 players"
93
+ Spec::Matchers.generated_description.should == "should have 3 players"
96
94
  end
97
95
 
98
96
  it "should have at least n items" do
99
97
  team.should have_at_least(2).players
100
- @desc.should == "should have at least 2 players"
98
+ Spec::Matchers.generated_description.should == "should have at least 2 players"
101
99
  end
102
100
 
103
101
  it "should have at most n items" do
104
102
  team.should have_at_most(4).players
105
- @desc.should == "should have at most 4 players"
103
+ Spec::Matchers.generated_description.should == "should have at most 4 players"
106
104
  end
107
105
 
108
106
  it "should include" do
109
107
  [1,2,3].should include(3)
110
- @desc.should == "should include 3"
108
+ Spec::Matchers.generated_description.should == "should include 3"
111
109
  end
112
110
 
113
111
  it "should match" do
114
112
  "this string".should match(/this string/)
115
- @desc.should == "should match /this string/"
113
+ Spec::Matchers.generated_description.should == "should match /this string/"
116
114
  end
117
115
 
118
116
  it "should raise_error" do
119
117
  lambda { raise }.should raise_error
120
- @desc.should == "should raise Exception"
118
+ Spec::Matchers.generated_description.should == "should raise Exception"
121
119
  end
122
120
 
123
121
  it "should raise_error with type" do
124
122
  lambda { raise }.should raise_error(RuntimeError)
125
- @desc.should == "should raise RuntimeError"
123
+ Spec::Matchers.generated_description.should == "should raise RuntimeError"
126
124
  end
127
125
 
128
126
  it "should raise_error with type and message" do
129
127
  lambda { raise "there was an error" }.should raise_error(RuntimeError, "there was an error")
130
- @desc.should == "should raise RuntimeError with \"there was an error\""
128
+ Spec::Matchers.generated_description.should == "should raise RuntimeError with \"there was an error\""
131
129
  end
132
130
 
133
131
  it "should respond_to" do
134
132
  [].should respond_to(:insert)
135
- @desc.should == "should respond to #insert"
133
+ Spec::Matchers.generated_description.should == "should respond to #insert"
136
134
  end
137
135
 
138
136
  it "should throw symbol" do
139
137
  lambda { throw :what_a_mess }.should throw_symbol
140
- @desc.should == "should throw a Symbol"
138
+ Spec::Matchers.generated_description.should == "should throw a Symbol"
141
139
  end
142
140
 
143
141
  it "should throw symbol (with named symbol)" do
144
142
  lambda { throw :what_a_mess }.should throw_symbol(:what_a_mess)
145
- @desc.should == "should throw :what_a_mess"
143
+ Spec::Matchers.generated_description.should == "should throw :what_a_mess"
146
144
  end
147
145
 
148
146
  def team
@@ -152,8 +150,4 @@ describe "Matchers should be able to generate their own descriptions" do
152
150
  end
153
151
  end.new
154
152
  end
155
-
156
- after(:each) do
157
- Spec::Matchers.unregister_description_generated(@callback)
158
- end
159
153
  end
@@ -1,8 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
- # NOTE - this was initially handled by an explicit matcher, but is now
4
- # handled by a default set of predicate_matchers.
5
-
6
3
  class Substance
7
4
  def initialize exists, description
8
5
  @exists = exists
@@ -16,33 +13,45 @@ class Substance
16
13
  end
17
14
  end
18
15
 
19
- describe "should exist" do
20
- before(:each) do
21
- @real = Substance.new true, 'something real'
22
- @imaginary = Substance.new false, 'something imaginary'
16
+ class SubstanceTester
17
+ include Spec::Matchers
18
+ def initialize substance
19
+ @substance = substance
23
20
  end
24
-
25
- it "should pass if target exists" do
26
- @real.should exist
27
- end
28
-
29
- it "should fail if target does not exist" do
30
- lambda { @imaginary.should exist }.
31
- should fail
21
+ def should_exist
22
+ @substance.should exist
32
23
  end
33
24
  end
34
25
 
35
- describe "should_not exist" do
26
+ describe "should exist," do
27
+
36
28
  before(:each) do
37
29
  @real = Substance.new true, 'something real'
38
30
  @imaginary = Substance.new false, 'something imaginary'
39
31
  end
40
- it "should pass if target doesn't exist" do
41
- @imaginary.should_not exist
32
+
33
+ describe "within an example group" do
34
+
35
+ it "should pass if target exists" do
36
+ @real.should exist
37
+ end
38
+
39
+ it "should fail if target does not exist" do
40
+ lambda { @imaginary.should exist }.should fail
41
+ end
42
+
43
+ it "should pass if target doesn't exist" do
44
+ lambda { @real.should_not exist }.should fail
45
+ end
42
46
  end
43
- it "should fail if target does exist" do
44
- lambda { @real.should_not exist }.
45
- should fail
47
+
48
+ describe "outside of an example group" do
49
+
50
+ it "should pass if target exists" do
51
+ real_tester = SubstanceTester.new @real
52
+ real_tester.should_exist
53
+ end
54
+
46
55
  end
56
+
47
57
  end
48
-