rspec 1.1.11 → 1.1.12

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 (269) hide show
  1. data/.autotest +4 -0
  2. data/History.txt +55 -0
  3. data/Manifest.txt +102 -122
  4. data/README.txt +30 -12
  5. data/Rakefile +10 -10
  6. data/TODO.txt +10 -2
  7. data/{failing_examples → examples/failing}/README.txt +0 -0
  8. data/{failing_examples → examples/failing}/diffing_spec.rb +0 -0
  9. data/{failing_examples → examples/failing}/failing_autogenerated_docstrings_example.rb +0 -0
  10. data/{failing_examples/failure_in_teardown.rb → examples/failing/failure_in_after.rb} +1 -1
  11. data/{failing_examples/failure_in_setup.rb → examples/failing/failure_in_before.rb} +1 -1
  12. data/{failing_examples → examples/failing}/mocking_example.rb +0 -0
  13. data/{failing_examples → examples/failing}/mocking_with_flexmock.rb +0 -0
  14. data/{failing_examples → examples/failing}/mocking_with_mocha.rb +0 -0
  15. data/{failing_examples → examples/failing}/mocking_with_rr.rb +0 -0
  16. data/{failing_examples → examples/failing}/partial_mock_example.rb +0 -0
  17. data/{failing_examples → examples/failing}/predicate_example.rb +5 -0
  18. data/{failing_examples → examples/failing}/raising_example.rb +0 -0
  19. data/{failing_examples → examples/failing}/spec_helper.rb +1 -1
  20. data/{failing_examples → examples/failing}/syntax_error_example.rb +0 -0
  21. data/{failing_examples → examples/failing}/team_spec.rb +0 -0
  22. data/{failing_examples → examples/failing}/timeout_behaviour.rb +0 -0
  23. data/examples/{pure → passing}/autogenerated_docstrings_example.rb +6 -0
  24. data/examples/{pure → passing}/before_and_after_example.rb +0 -0
  25. data/examples/{pure → passing}/behave_as_example.rb +0 -0
  26. data/examples/{pure → passing}/custom_expectation_matchers.rb +0 -0
  27. data/examples/{pure → passing}/custom_formatter.rb +1 -1
  28. data/examples/{pure → passing}/dynamic_spec.rb +2 -2
  29. data/examples/{pure → passing}/file_accessor.rb +0 -0
  30. data/examples/{pure → passing}/file_accessor_spec.rb +0 -0
  31. data/examples/{pure → passing}/greeter_spec.rb +0 -0
  32. data/examples/{pure → passing}/helper_method_example.rb +0 -0
  33. data/examples/{pure → passing}/io_processor.rb +0 -0
  34. data/examples/{pure → passing}/io_processor_spec.rb +0 -0
  35. data/examples/{pure → passing}/legacy_spec.rb +0 -0
  36. data/examples/{pure → passing}/mocking_example.rb +0 -0
  37. data/examples/{pure/multi_threaded_behaviour_runner.rb → passing/multi_threaded_example_group_runner.rb} +1 -3
  38. data/examples/{pure → passing}/nested_classes_example.rb +0 -0
  39. data/examples/{pure → passing}/partial_mock_example.rb +0 -0
  40. data/examples/{pure → passing}/pending_example.rb +0 -0
  41. data/examples/{pure → passing}/predicate_example.rb +0 -0
  42. data/examples/{pure → passing}/priority.txt +0 -0
  43. data/examples/{pure → passing}/shared_example_group_example.rb +0 -0
  44. data/examples/{pure → passing}/shared_stack_examples.rb +1 -3
  45. data/examples/passing/simple_matcher_example.rb +31 -0
  46. data/examples/{pure → passing}/spec_helper.rb +0 -0
  47. data/examples/{pure → passing}/stack.rb +0 -0
  48. data/examples/{pure → passing}/stack_spec.rb +3 -2
  49. data/examples/{pure → passing}/stack_spec_with_nested_example_groups.rb +0 -0
  50. data/examples/{pure → passing}/stubbing_example.rb +0 -0
  51. data/examples/{pure → passing}/yielding_example.rb +0 -0
  52. data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +86 -0
  53. data/features/before_and_after_blocks/before_and_after_blocks.feature +168 -0
  54. data/{stories/example_groups/autogenerated_docstrings → features/example_groups/autogenerated_docstrings.feature} +5 -5
  55. data/{stories/example_groups/example_group_with_should_methods → features/example_groups/example_group_with_should_methods.feature} +3 -3
  56. data/{stories/example_groups/nested_groups → features/example_groups/nested_groups.feature} +4 -4
  57. data/{stories/example_groups/output → features/example_groups/output.feature} +3 -8
  58. data/{stories/interop/examples_and_tests_together → features/interop/examples_and_tests_together.feature} +5 -4
  59. data/features/interop/test_but_not_test_unit.feature +14 -0
  60. data/{stories/interop/test_case_with_should_methods → features/interop/test_case_with_should_methods.feature} +2 -2
  61. data/{stories/mock_framework_integration/use_flexmock.story → features/mock_framework_integration/use_flexmock.feature} +1 -1
  62. data/features/step_definitions/running_rspec.rb +54 -0
  63. data/features/support/env.rb +26 -0
  64. data/{stories/resources → features/support}/helpers/cmdline.rb +0 -0
  65. data/{stories/resources → features/support}/helpers/story_helper.rb +1 -1
  66. data/{stories/resources → features/support}/matchers/smart_match.rb +0 -0
  67. data/{plugins → lib/adapters}/mock_frameworks/flexmock.rb +1 -1
  68. data/{plugins → lib/adapters}/mock_frameworks/mocha.rb +1 -1
  69. data/{plugins → lib/adapters}/mock_frameworks/rr.rb +1 -1
  70. data/{plugins → lib/adapters}/mock_frameworks/rspec.rb +2 -2
  71. data/lib/autotest/rspec.rb +4 -3
  72. data/lib/spec.rb +2 -27
  73. data/lib/spec/dsl.rb +1 -0
  74. data/lib/spec/{extensions → dsl}/main.rb +10 -10
  75. data/lib/spec/example.rb +175 -1
  76. data/lib/spec/example/before_and_after_hooks.rb +30 -24
  77. data/lib/spec/example/example_group.rb +1 -0
  78. data/lib/spec/example/example_group_factory.rb +26 -9
  79. data/lib/spec/example/example_group_methods.rb +138 -113
  80. data/lib/spec/example/example_methods.rb +88 -25
  81. data/lib/spec/example/shared_example_group.rb +28 -21
  82. data/lib/spec/expectations.rb +22 -18
  83. data/lib/spec/expectations/handler.rb +16 -36
  84. data/lib/spec/interop/test/unit/testcase.rb +19 -17
  85. data/lib/spec/interop/test/unit/testresult.rb +1 -1
  86. data/lib/spec/interop/test/unit/testsuite_adapter.rb +1 -1
  87. data/lib/spec/matchers.rb +7 -28
  88. data/lib/spec/matchers/be.rb +103 -116
  89. data/lib/spec/matchers/be_close.rb +6 -22
  90. data/lib/spec/matchers/eql.rb +7 -25
  91. data/lib/spec/matchers/equal.rb +7 -25
  92. data/lib/spec/matchers/errors.rb +5 -0
  93. data/lib/spec/matchers/exist.rb +8 -14
  94. data/lib/spec/matchers/generated_descriptions.rb +48 -0
  95. data/lib/spec/matchers/has.rb +12 -28
  96. data/lib/spec/matchers/include.rb +12 -9
  97. data/lib/spec/matchers/match.rb +8 -27
  98. data/lib/spec/matchers/match_array.rb +79 -0
  99. data/lib/spec/matchers/method_missing.rb +9 -0
  100. data/lib/spec/matchers/operator_matcher.rb +39 -48
  101. data/lib/spec/matchers/raise_error.rb +4 -8
  102. data/lib/spec/matchers/respond_to.rb +33 -8
  103. data/lib/spec/matchers/throw_symbol.rb +49 -17
  104. data/lib/spec/matchers/wrap_expectation.rb +55 -0
  105. data/lib/spec/mocks/argument_constraints.rb +77 -5
  106. data/lib/spec/mocks/message_expectation.rb +7 -7
  107. data/lib/spec/mocks/proxy.rb +14 -12
  108. data/lib/spec/rake/spectask.rb +4 -6
  109. data/lib/spec/ruby.rb +9 -0
  110. data/lib/spec/runner.rb +37 -162
  111. data/lib/spec/runner/backtrace_tweaker.rb +5 -3
  112. data/lib/spec/runner/class_and_arguments_parser.rb +7 -9
  113. data/lib/spec/runner/command_line.rb +6 -8
  114. data/lib/spec/{example → runner}/configuration.rb +46 -47
  115. data/lib/spec/runner/example_group_runner.rb +15 -4
  116. data/lib/spec/runner/formatter/base_text_formatter.rb +4 -3
  117. data/lib/spec/runner/formatter/html_formatter.rb +14 -11
  118. data/lib/spec/runner/formatter/nested_text_formatter.rb +2 -2
  119. data/lib/spec/runner/heckle_runner.rb +58 -56
  120. data/lib/spec/runner/option_parser.rb +8 -4
  121. data/lib/spec/runner/options.rb +29 -14
  122. data/lib/spec/runner/reporter.rb +1 -1
  123. data/lib/spec/runner/spec_parser.rb +11 -9
  124. data/lib/spec/story/runner.rb +40 -42
  125. data/lib/spec/story/runner/story_runner.rb +10 -6
  126. data/lib/spec/story/world.rb +66 -70
  127. data/lib/spec/version.rb +4 -2
  128. data/{rake_tasks → resources/rake}/examples.rake +0 -0
  129. data/{rake_tasks → resources/rake}/examples_with_rcov.rake +0 -0
  130. data/{rake_tasks → resources/rake}/failing_examples_with_html.rake +0 -0
  131. data/{rake_tasks → resources/rake}/verify_rcov.rake +0 -0
  132. data/{stories/resources → resources}/spec/example_group_with_should_methods.rb +1 -1
  133. data/{stories/resources → resources}/spec/simple_spec.rb +1 -1
  134. data/resources/spec/spec_with_flexmock.rb +19 -0
  135. data/{stories/resources → resources}/test/spec_and_test_together.rb +1 -1
  136. data/resources/test/spec_including_test_but_not_unit.rb +11 -0
  137. data/{stories/resources → resources}/test/test_case_with_should_methods.rb +2 -2
  138. data/rspec.gemspec +16 -6
  139. data/spec/autotest/autotest_helper.rb +2 -2
  140. data/spec/autotest/discover_spec.rb +4 -15
  141. data/spec/autotest/failed_results_re_spec.rb +24 -0
  142. data/spec/autotest/rspec_spec.rb +2 -38
  143. data/spec/spec/dsl/main_spec.rb +88 -0
  144. data/spec/spec/example/example_group_class_definition_spec.rb +6 -2
  145. data/spec/spec/example/example_group_factory_spec.rb +50 -10
  146. data/spec/spec/example/example_group_methods_spec.rb +210 -160
  147. data/spec/spec/example/example_group_spec.rb +44 -52
  148. data/spec/spec/example/example_matcher_spec.rb +6 -23
  149. data/spec/spec/example/example_methods_spec.rb +176 -54
  150. data/spec/spec/example/helper_method_spec.rb +24 -0
  151. data/spec/spec/example/pending_module_spec.rb +2 -8
  152. data/spec/spec/example/shared_example_group_spec.rb +56 -80
  153. data/spec/spec/expectations/extensions/object_spec.rb +0 -50
  154. data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
  155. data/spec/spec/interop/test/unit/spec_spec.rb +1 -5
  156. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +4 -0
  157. data/spec/spec/matchers/be_close_spec.rb +12 -10
  158. data/spec/spec/matchers/be_spec.rb +62 -7
  159. data/spec/spec/matchers/description_generation_spec.rb +19 -0
  160. data/spec/spec/matchers/eql_spec.rb +7 -6
  161. data/spec/spec/matchers/equal_spec.rb +7 -6
  162. data/spec/spec/matchers/handler_spec.rb +4 -43
  163. data/spec/spec/matchers/has_spec.rb +1 -1
  164. data/spec/spec/matchers/have_spec.rb +23 -18
  165. data/spec/spec/matchers/include_spec.rb +24 -0
  166. data/spec/spec/matchers/match_array_spec.rb +83 -0
  167. data/spec/spec/matchers/matcher_methods_spec.rb +1 -13
  168. data/spec/spec/matchers/raise_error_spec.rb +18 -0
  169. data/spec/spec/matchers/respond_to_spec.rb +71 -9
  170. data/spec/spec/matchers/throw_symbol_spec.rb +85 -43
  171. data/spec/spec/mocks/bug_report_11545_spec.rb +4 -5
  172. data/spec/spec/mocks/bug_report_496.rb +11 -9
  173. data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
  174. data/spec/spec/mocks/hash_including_matcher_spec.rb +39 -2
  175. data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
  176. data/spec/spec/mocks/mock_spec.rb +5 -6
  177. data/spec/spec/mocks/nil_expectation_warning_spec.rb +2 -2
  178. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +18 -3
  179. data/spec/spec/mocks/stub_spec.rb +6 -0
  180. data/spec/spec/mocks/stubbed_message_expectations_spec.rb +14 -0
  181. data/spec/spec/runner/command_line_spec.rb +4 -4
  182. data/spec/spec/runner/configuration_spec.rb +301 -0
  183. data/spec/spec/runner/drb_command_line_spec.rb +4 -4
  184. data/spec/spec/runner/example_group_runner_spec.rb +33 -0
  185. data/spec/spec/runner/formatter/base_formatter_spec.rb +13 -102
  186. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +23 -0
  187. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +5 -5
  188. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +3 -3
  189. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +6 -6
  190. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +9 -9
  191. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +6 -6
  192. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +10 -10
  193. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +39 -30
  194. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +379 -0
  195. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +379 -0
  196. data/spec/spec/runner/formatter/html_formatter_spec.rb +14 -13
  197. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +5 -5
  198. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +7 -17
  199. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +18 -17
  200. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +5 -5
  201. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +6 -6
  202. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +33 -30
  203. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +373 -0
  204. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +373 -0
  205. data/spec/spec/runner/heckler_spec.rb +16 -9
  206. data/spec/spec/runner/option_parser_spec.rb +3 -18
  207. data/spec/spec/runner/options_spec.rb +27 -8
  208. data/spec/spec/runner/reporter_spec.rb +5 -5
  209. data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
  210. data/spec/spec/runner/resources/utf8_encoded.rb +7 -0
  211. data/spec/spec/runner/spec_parser_spec.rb +85 -79
  212. data/spec/spec/spec_spec.rb +21 -0
  213. data/spec/spec_helper.rb +9 -1
  214. data/story_server/prototype/javascripts/prototype.js +1 -1
  215. metadata +119 -131
  216. data/examples/stories/adder.rb +0 -13
  217. data/examples/stories/addition +0 -34
  218. data/examples/stories/addition.rb +0 -9
  219. data/examples/stories/calculator.rb +0 -65
  220. data/examples/stories/game-of-life/.loadpath +0 -5
  221. data/examples/stories/game-of-life/README.txt +0 -21
  222. data/examples/stories/game-of-life/behaviour/everything.rb +0 -6
  223. data/examples/stories/game-of-life/behaviour/examples/examples.rb +0 -3
  224. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +0 -35
  225. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +0 -66
  226. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +0 -21
  227. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +0 -21
  228. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +0 -42
  229. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +0 -42
  230. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +0 -17
  231. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +0 -53
  232. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +0 -52
  233. data/examples/stories/game-of-life/behaviour/stories/helper.rb +0 -6
  234. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +0 -26
  235. data/examples/stories/game-of-life/behaviour/stories/steps.rb +0 -5
  236. data/examples/stories/game-of-life/behaviour/stories/stories.rb +0 -3
  237. data/examples/stories/game-of-life/behaviour/stories/stories.txt +0 -22
  238. data/examples/stories/game-of-life/life.rb +0 -3
  239. data/examples/stories/game-of-life/life/game.rb +0 -23
  240. data/examples/stories/game-of-life/life/grid.rb +0 -43
  241. data/examples/stories/helper.rb +0 -9
  242. data/examples/stories/steps/addition_steps.rb +0 -18
  243. data/lib/spec/adapters.rb +0 -1
  244. data/lib/spec/adapters/ruby_engine.rb +0 -26
  245. data/lib/spec/adapters/ruby_engine/mri.rb +0 -8
  246. data/lib/spec/adapters/ruby_engine/rubinius.rb +0 -8
  247. data/lib/spec/extensions.rb +0 -4
  248. data/lib/spec/extensions/class.rb +0 -24
  249. data/lib/spec/extensions/metaclass.rb +0 -7
  250. data/lib/spec/extensions/object.rb +0 -6
  251. data/spec/spec/adapters/ruby_engine_spec.rb +0 -16
  252. data/spec/spec/example/configuration_spec.rb +0 -296
  253. data/spec/spec/example/example_runner_spec.rb +0 -194
  254. data/spec/spec/extensions/main_spec.rb +0 -71
  255. data/stories/all.rb +0 -5
  256. data/stories/configuration/before_blocks.story +0 -21
  257. data/stories/configuration/stories.rb +0 -7
  258. data/stories/example_groups/stories.rb +0 -7
  259. data/stories/helper.rb +0 -6
  260. data/stories/interop/stories.rb +0 -7
  261. data/stories/mock_framework_integration/stories.rb +0 -7
  262. data/stories/pending_stories/README +0 -3
  263. data/stories/resources/spec/before_blocks_example.rb +0 -32
  264. data/stories/resources/spec/spec_with_flexmock.rb +0 -18
  265. data/stories/resources/steps/running_rspec.rb +0 -50
  266. data/stories/resources/stories/failing_story.rb +0 -15
  267. data/stories/stories/multiline_steps.story +0 -23
  268. data/stories/stories/steps/multiline_steps.rb +0 -13
  269. data/stories/stories/stories.rb +0 -6
@@ -5,6 +5,10 @@ describe "should include(expected)" do
5
5
  [1,2,3].should include(3)
6
6
  "abc".should include("a")
7
7
  end
8
+
9
+ it 'should pass if target is a Hash and has the expected as a key' do
10
+ {:key => 'value'}.should include(:key)
11
+ end
8
12
 
9
13
  it "should fail if target does not include expected" do
10
14
  lambda {
@@ -13,6 +17,9 @@ describe "should include(expected)" do
13
17
  lambda {
14
18
  "abc".should include("d")
15
19
  }.should fail_with("expected \"abc\" to include \"d\"")
20
+ lambda {
21
+ {:key => 'value'}.should include(:other)
22
+ }.should fail_with(%Q|expected {:key=>"value"} to include :other|)
16
23
  end
17
24
  end
18
25
 
@@ -20,12 +27,22 @@ describe "should include(with, multiple, args)" do
20
27
  it "should pass if target includes all items" do
21
28
  [1,2,3].should include(1,2,3)
22
29
  end
30
+
31
+ it 'should pass if target is a Hash including all items as keys' do
32
+ {:key => 'value', :other => 'value'}.should include(:key, :other)
33
+ end
23
34
 
24
35
  it "should fail if target does not include any one of the items" do
25
36
  lambda {
26
37
  [1,2,3].should include(1,2,4)
27
38
  }.should fail_with("expected [1, 2, 3] to include 1, 2 and 4")
28
39
  end
40
+
41
+ it 'should pass if target is a Hash missing any item as a key' do
42
+ lambda {
43
+ {:key => 'value'}.should include(:key, :other)
44
+ }.should fail_with(%Q|expected {:key=>"value"} to include :key and :other|)
45
+ end
29
46
  end
30
47
 
31
48
  describe "should_not include(expected)" do
@@ -33,6 +50,10 @@ describe "should_not include(expected)" do
33
50
  [1,2,3].should_not include(4)
34
51
  "abc".should_not include("d")
35
52
  end
53
+
54
+ it 'should pass if target is a Hash and does not have the expected as a key' do
55
+ {:other => 'value'}.should_not include(:key)
56
+ end
36
57
 
37
58
  it "should fail if target includes expected" do
38
59
  lambda {
@@ -41,6 +62,9 @@ describe "should_not include(expected)" do
41
62
  lambda {
42
63
  "abc".should_not include("c")
43
64
  }.should fail_with("expected \"abc\" not to include \"c\"")
65
+ lambda {
66
+ {:key => 'value'}.should_not include(:key)
67
+ }.should fail_with(%Q|expected {:key=>"value"} not to include :key|)
44
68
  end
45
69
  end
46
70
 
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ describe "array.should =~ other_array" do
4
+ it "should pass if target contains all items" do
5
+ [1,2,3].should =~ [1,2,3]
6
+ end
7
+
8
+ it "should pass if target contains all items out of order" do
9
+ [1,3,2].should =~ [1,2,3]
10
+ end
11
+
12
+ it "should fail if target includes extra items" do
13
+ lambda {
14
+ [1,2,3,4].should =~ [1,2,3]
15
+ }.should fail_with(<<-MESSAGE)
16
+ expected collection contained: [1, 2, 3]
17
+ actual collection contained: [1, 2, 3, 4]
18
+ the extra elements were: [4]
19
+ MESSAGE
20
+ end
21
+
22
+ it "should fail if target is missing items" do
23
+ lambda {
24
+ [1,2].should =~ [1,2,3]
25
+ }.should fail_with(<<-MESSAGE)
26
+ expected collection contained: [1, 2, 3]
27
+ actual collection contained: [1, 2]
28
+ the missing elements were: [3]
29
+ MESSAGE
30
+ end
31
+
32
+ it "should fail if target is missing items and has extra items" do
33
+
34
+ lambda {
35
+ [1,2,4].should =~ [1,2,3]
36
+ }.should fail_with(<<-MESSAGE)
37
+ expected collection contained: [1, 2, 3]
38
+ actual collection contained: [1, 2, 4]
39
+ the missing elements were: [3]
40
+ the extra elements were: [4]
41
+ MESSAGE
42
+ end
43
+
44
+ it "should sort items in the error message" do
45
+ lambda {
46
+ [6,2,1,5].should =~ [4,1,2,3]
47
+ }.should fail_with(<<-MESSAGE)
48
+ expected collection contained: [1, 2, 3, 4]
49
+ actual collection contained: [1, 2, 5, 6]
50
+ the missing elements were: [3, 4]
51
+ the extra elements were: [5, 6]
52
+ MESSAGE
53
+ end
54
+
55
+ it "should accurately report extra elements when there are duplicates" do
56
+ lambda {
57
+ [1,1,1,5].should =~ [1,5]
58
+ }.should fail_with(<<-MESSAGE)
59
+ expected collection contained: [1, 5]
60
+ actual collection contained: [1, 1, 1, 5]
61
+ the extra elements were: [1, 1]
62
+ MESSAGE
63
+ end
64
+
65
+ it "should accurately report missing elements when there are duplicates" do
66
+ lambda {
67
+ [1,5].should =~ [1,1,5]
68
+ }.should fail_with(<<-MESSAGE)
69
+ expected collection contained: [1, 1, 5]
70
+ actual collection contained: [1, 5]
71
+ the missing elements were: [1]
72
+ MESSAGE
73
+ end
74
+
75
+ end
76
+
77
+ describe "should_not =~ [:with, :multiple, :args]" do
78
+ it "should not be supported" do
79
+ lambda {
80
+ [1,2,3].should_not =~ [1,2,3]
81
+ }.should fail_with(/Matcher does not support should_not/)
82
+ end
83
+ end
@@ -16,18 +16,9 @@ This module should provide the following methods, each of which returns a Matche
16
16
  it "be_arbitrary_predicate" do
17
17
  be_arbitrary_predicate.should be_an_instance_of(Be)
18
18
  end
19
- it "be_close" do
20
- be_close(1,2).should be_an_instance_of(BeClose)
21
- end
22
19
  it "change" do
23
20
  change("target", :message).should be_an_instance_of(Change)
24
21
  end
25
- it "eql" do
26
- eql(:expected).should be_an_instance_of(Eql)
27
- end
28
- it "equal" do
29
- equal(:expected).should be_an_instance_of(Equal)
30
- end
31
22
  it "have" do
32
23
  have(0).should be_an_instance_of(Have)
33
24
  end
@@ -43,9 +34,6 @@ This module should provide the following methods, each of which returns a Matche
43
34
  it "include" do
44
35
  include(:value).should be_an_instance_of(Include)
45
36
  end
46
- it "match" do
47
- match(:value).should be_an_instance_of(Match)
48
- end
49
37
  it "raise_error" do
50
38
  raise_error.should be_an_instance_of(RaiseError)
51
39
  raise_error(NoMethodError).should be_an_instance_of(RaiseError)
@@ -70,7 +58,7 @@ This module should provide the following methods, each of which returns a Matche
70
58
  end
71
59
 
72
60
  it "should convert have_xyz to Has(:have_xyz)" do
73
- Has.should_receive(:new).with(:have_whatever)
61
+ self.should_receive(:has).with(:have_whatever)
74
62
  have_whatever
75
63
  end
76
64
  end
@@ -12,6 +12,24 @@ describe "should raise_error" do
12
12
  end
13
13
  end
14
14
 
15
+ describe "should raise_error {|err| ... }" do
16
+ it "passes if there is an error" do
17
+ ran = false
18
+ lambda { non_existent_method }.should raise_error {|e|
19
+ ran = true
20
+ }
21
+ ran.should be_true
22
+ end
23
+
24
+ it "passes the error to the block" do
25
+ error = nil
26
+ lambda { non_existent_method }.should raise_error {|e|
27
+ error = e
28
+ }
29
+ error.should be_an_instance_of(NameError)
30
+ end
31
+ end
32
+
15
33
  describe "should_not raise_error" do
16
34
  it "should pass if nothing is raised" do
17
35
  lambda {}.should_not raise_error
@@ -2,50 +2,112 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
3
  describe "should respond_to(:sym)" do
4
4
 
5
- it "should pass if target responds to :sym" do
5
+ it "passes if target responds to :sym" do
6
6
  Object.new.should respond_to(:methods)
7
7
  end
8
8
 
9
- it "should fail target does not respond to :sym" do
9
+ it "fails if target does not respond to :sym" do
10
10
  lambda {
11
11
  "this string".should respond_to(:some_method)
12
- }.should fail_with("expected \"this string\" to respond to :some_method")
12
+ }.should fail_with(%q|expected "this string" to respond to :some_method|)
13
13
  end
14
14
 
15
15
  end
16
16
 
17
+ describe "should respond_to(:sym).with(1).argument" do
18
+ it "passes if target responds to :sym with 1 arg" do
19
+ obj = Object.new
20
+ def obj.foo(arg); end
21
+ obj.should respond_to(:foo).with(1).argument
22
+ end
23
+
24
+ it "fails if target does not respond to :sym" do
25
+ obj = Object.new
26
+ lambda {
27
+ obj.should respond_to(:some_method).with(1).argument
28
+ }.should fail_with(/expected .* to respond to :some_method/)
29
+ end
30
+
31
+ it "fails if :sym expects 0 args" do
32
+ obj = Object.new
33
+ def obj.foo; end
34
+ lambda {
35
+ obj.should respond_to(:foo).with(1).argument
36
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 1 argument/)
37
+ end
38
+
39
+ it "fails if :sym expects 2 args" do
40
+ obj = Object.new
41
+ def obj.foo(arg, arg2); end
42
+ lambda {
43
+ obj.should respond_to(:foo).with(1).argument
44
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 1 argument/)
45
+ end
46
+ end
47
+
17
48
  describe "should respond_to(message1, message2)" do
18
49
 
19
- it "should pass if target responds to both messages" do
50
+ it "passes if target responds to both messages" do
20
51
  Object.new.should respond_to('methods', 'inspect')
21
52
  end
22
53
 
23
- it "should fail target does not respond to first message" do
54
+ it "fails if target does not respond to first message" do
24
55
  lambda {
25
56
  Object.new.should respond_to('method_one', 'inspect')
26
57
  }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
27
58
  end
28
59
 
29
- it "should fail target does not respond to second message" do
60
+ it "fails if target does not respond to second message" do
30
61
  lambda {
31
62
  Object.new.should respond_to('inspect', 'method_one')
32
63
  }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
33
64
  end
34
65
 
35
- it "should fail target does not respond to either message" do
66
+ it "fails if target does not respond to either message" do
36
67
  lambda {
37
68
  Object.new.should respond_to('method_one', 'method_two')
38
69
  }.should fail_with(/expected #<Object:.*> to respond to "method_one", "method_two"/)
39
70
  end
40
71
  end
41
72
 
73
+ describe "should respond_to(:sym).with(2).arguments" do
74
+ it "passes if target responds to :sym with 2 args" do
75
+ obj = Object.new
76
+ def obj.foo(a1, a2); end
77
+ obj.should respond_to(:foo).with(2).arguments
78
+ end
79
+
80
+ it "fails if target does not respond to :sym" do
81
+ obj = Object.new
82
+ lambda {
83
+ obj.should respond_to(:some_method).with(2).arguments
84
+ }.should fail_with(/expected .* to respond to :some_method/)
85
+ end
86
+
87
+ it "fails if :sym expects 0 args" do
88
+ obj = Object.new
89
+ def obj.foo; end
90
+ lambda {
91
+ obj.should respond_to(:foo).with(2).arguments
92
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 2 arguments/)
93
+ end
94
+
95
+ it "fails if :sym expects 2 args" do
96
+ obj = Object.new
97
+ def obj.foo(arg); end
98
+ lambda {
99
+ obj.should respond_to(:foo).with(2).arguments
100
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 2 arguments/)
101
+ end
102
+ end
103
+
42
104
  describe "should_not respond_to(:sym)" do
43
105
 
44
- it "should pass if target does not respond to :sym" do
106
+ it "passes if target does not respond to :sym" do
45
107
  Object.new.should_not respond_to(:some_method)
46
108
  end
47
109
 
48
- it "should fail target responds to :sym" do
110
+ it "fails if target responds to :sym" do
49
111
  lambda {
50
112
  Object.new.should_not respond_to(:methods)
51
113
  }.should fail_with(/expected #<Object:.*> not to respond to :methods/)
@@ -2,52 +2,94 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
3
  module Spec
4
4
  module Matchers
5
- describe ThrowSymbol, "(constructed with no Symbol)" do
6
- before(:each) { @matcher = ThrowSymbol.new }
7
-
8
- it "should match if any Symbol is thrown" do
9
- @matcher.matches?(lambda{ throw :sym }).should be_true
10
- end
11
- it "should not match if no Symbol is thrown" do
12
- @matcher.matches?(lambda{ }).should be_false
13
- end
14
- it "should provide a failure message" do
15
- @matcher.matches?(lambda{})
16
- @matcher.failure_message.should == "expected a Symbol but nothing was thrown"
17
- end
18
- it "should provide a negative failure message" do
19
- @matcher.matches?(lambda{ throw :sym})
20
- @matcher.negative_failure_message.should == "expected no Symbol, got :sym"
21
- end
22
- end
23
-
24
- describe ThrowSymbol, "(constructed with a Symbol)" do
25
- before(:each) { @matcher = ThrowSymbol.new(:sym) }
5
+ describe ThrowSymbol do
6
+ describe "with no args" do
7
+ before(:each) { @matcher = ThrowSymbol.new }
26
8
 
27
- it "should match if correct Symbol is thrown" do
28
- @matcher.matches?(lambda{ throw :sym }).should be_true
9
+ it "should match if any Symbol is thrown" do
10
+ @matcher.matches?(lambda{ throw :sym }).should be_true
11
+ end
12
+ it "should match if any Symbol is thrown with an arg" do
13
+ @matcher.matches?(lambda{ throw :sym, "argument" }).should be_true
14
+ end
15
+ it "should not match if no Symbol is thrown" do
16
+ @matcher.matches?(lambda{ }).should be_false
17
+ end
18
+ it "should provide a failure message" do
19
+ @matcher.matches?(lambda{})
20
+ @matcher.failure_message.should == "expected a Symbol but nothing was thrown"
21
+ end
22
+ it "should provide a negative failure message" do
23
+ @matcher.matches?(lambda{ throw :sym})
24
+ @matcher.negative_failure_message.should == "expected no Symbol, got :sym"
25
+ end
29
26
  end
30
- it "should not match if no Symbol is thrown" do
31
- @matcher.matches?(lambda{ }).should be_false
32
- end
33
- it "should not match if correct Symbol is thrown" do
34
- @matcher.matches?(lambda{ throw :other_sym }).should be_false
35
- @matcher.failure_message.should == "expected :sym, got :other_sym"
36
- end
37
- it "should provide a failure message when no Symbol is thrown" do
38
- @matcher.matches?(lambda{})
39
- @matcher.failure_message.should == "expected :sym but nothing was thrown"
40
- end
41
- it "should provide a failure message when wrong Symbol is thrown" do
42
- @matcher.matches?(lambda{ throw :other_sym })
43
- @matcher.failure_message.should == "expected :sym, got :other_sym"
44
- end
45
- it "should provide a negative failure message" do
46
- @matcher.matches?(lambda{ throw :sym })
47
- @matcher.negative_failure_message.should == "expected :sym not to be thrown"
27
+
28
+ describe "with a symbol" do
29
+ before(:each) { @matcher = ThrowSymbol.new(:sym) }
30
+
31
+ it "should match if correct Symbol is thrown" do
32
+ @matcher.matches?(lambda{ throw :sym }).should be_true
33
+ end
34
+ it "should match if correct Symbol is thrown with an arg" do
35
+ @matcher.matches?(lambda{ throw :sym, "argument" }).should be_true
36
+ end
37
+ it "should not match if no Symbol is thrown" do
38
+ @matcher.matches?(lambda{ }).should be_false
39
+ end
40
+ it "should not match if correct Symbol is thrown" do
41
+ @matcher.matches?(lambda{ throw :other_sym }).should be_false
42
+ end
43
+ it "should provide a failure message when no Symbol is thrown" do
44
+ @matcher.matches?(lambda{})
45
+ @matcher.failure_message.should == "expected :sym but nothing was thrown"
46
+ end
47
+ it "should provide a failure message when wrong Symbol is thrown" do
48
+ @matcher.matches?(lambda{ throw :other_sym })
49
+ @matcher.failure_message.should == "expected :sym, got :other_sym"
50
+ end
51
+ it "should provide a negative failure message" do
52
+ @matcher.matches?(lambda{ throw :sym })
53
+ @matcher.negative_failure_message.should == "expected :sym not to be thrown"
54
+ end
55
+ it "should only match NameErrors raised by uncaught throws" do
56
+ @matcher.matches?(lambda{ sym }).should be_false
57
+ end
48
58
  end
49
- it "should only match NameErrors raised by uncaught throws" do
50
- @matcher.matches?(lambda{ sym }).should be_false
59
+
60
+ describe "with a symbol and an arg" do
61
+ before(:each) { @matcher = ThrowSymbol.new(:sym, "a") }
62
+
63
+ it "should match if correct Symbol and args are thrown" do
64
+ @matcher.matches?(lambda{ throw :sym, "a" }).should be_true
65
+ end
66
+ it "should not match if nothing is thrown" do
67
+ @matcher.matches?(lambda{ }).should be_false
68
+ end
69
+ it "should not match if other Symbol is thrown" do
70
+ @matcher.matches?(lambda{ throw :other_sym, "a" }).should be_false
71
+ end
72
+ it "should not match if no arg is thrown" do
73
+ @matcher.matches?(lambda{ throw :sym }).should be_false
74
+ end
75
+ it "should not match if wrong arg is thrown" do
76
+ @matcher.matches?(lambda{ throw :sym, "b" }).should be_false
77
+ end
78
+ it "should provide a failure message when no Symbol is thrown" do
79
+ @matcher.matches?(lambda{})
80
+ @matcher.failure_message.should == %q[expected :sym with "a" but nothing was thrown]
81
+ end
82
+ it "should provide a failure message when wrong Symbol is thrown" do
83
+ @matcher.matches?(lambda{ throw :other_sym })
84
+ @matcher.failure_message.should == %q[expected :sym with "a", got :other_sym]
85
+ end
86
+ it "should provide a negative failure message" do
87
+ @matcher.matches?(lambda{ throw :sym })
88
+ @matcher.negative_failure_message.should == %q[expected :sym with "a" not to be thrown]
89
+ end
90
+ it "should only match NameErrors raised by uncaught throws" do
91
+ @matcher.matches?(lambda{ sym }).should be_false
92
+ end
51
93
  end
52
94
  end
53
95
  end