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
@@ -3,6 +3,10 @@ require File.dirname(__FILE__) + '/../../../../ruby_forker'
3
3
 
4
4
  module TestUnitSpecHelper
5
5
  include RubyForker
6
+
7
+ def resources
8
+ File.dirname(__FILE__) + "/resources"
9
+ end
6
10
 
7
11
  def run_script(file_name)
8
12
  output = ruby(file_name)
@@ -1,38 +1,40 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
  module Spec
3
3
  module Matchers
4
- describe BeClose do
4
+ describe "be_close" do
5
5
  it "should match when value == target" do
6
- BeClose.new(5.0, 0.5).matches?(5.0).should be_true
6
+ be_close(5.0, 0.5).matches?(5.0).should be_true
7
7
  end
8
8
  it "should match when value < (target + delta)" do
9
- BeClose.new(5.0, 0.5).matches?(5.49).should be_true
9
+ be_close(5.0, 0.5).matches?(5.49).should be_true
10
10
  end
11
11
  it "should match when value > (target - delta)" do
12
- BeClose.new(5.0, 0.5).matches?(4.51).should be_true
12
+ be_close(5.0, 0.5).matches?(4.51).should be_true
13
13
  end
14
14
  it "should not match when value == (target - delta)" do
15
- BeClose.new(5.0, 0.5).matches?(4.5).should be_false
15
+ be_close(5.0, 0.5).matches?(4.5).should be_false
16
16
  end
17
17
  it "should not match when value < (target - delta)" do
18
- BeClose.new(5.0, 0.5).matches?(4.49).should be_false
18
+ be_close(5.0, 0.5).matches?(4.49).should be_false
19
19
  end
20
20
  it "should not match when value == (target + delta)" do
21
- BeClose.new(5.0, 0.5).matches?(5.5).should be_false
21
+ be_close(5.0, 0.5).matches?(5.5).should be_false
22
22
  end
23
23
  it "should not match when value > (target + delta)" do
24
- BeClose.new(5.0, 0.5).matches?(5.51).should be_false
24
+ be_close(5.0, 0.5).matches?(5.51).should be_false
25
25
  end
26
26
  it "should provide a useful failure message" do
27
27
  #given
28
- matcher = BeClose.new(5.0, 0.5)
28
+ matcher = be_close(5.0, 0.5)
29
29
  #when
30
30
  matcher.matches?(5.51)
31
31
  #then
32
32
  matcher.failure_message.should == "expected 5.0 +/- (< 0.5), got 5.51"
33
33
  end
34
34
  it "should describe itself" do
35
- BeClose.new(5.0, 0.5).description.should == "be close to 5.0 (within +- 0.5)"
35
+ matcher = be_close(5.0, 0.5)
36
+ matcher.matches?(5.1)
37
+ matcher.description.should == "be close to 5.0 (within +- 0.5)"
36
38
  end
37
39
  end
38
40
  end
@@ -7,7 +7,7 @@ describe "should be_predicate" do
7
7
  end
8
8
 
9
9
  it "should pass when actual returns true for :predicates? (present tense)" do
10
- actual = stub("actual", :exists? => true)
10
+ actual = stub("actual", :exists? => true, :exist? => true)
11
11
  actual.should be_exist
12
12
  end
13
13
 
@@ -21,7 +21,23 @@ describe "should be_predicate" do
21
21
  it "should fail when actual does not respond to :predicate?" do
22
22
  lambda {
23
23
  Object.new.should be_happy
24
- }.should raise_error(NameError)
24
+ }.should raise_error(NameError, /happy\?/)
25
+ end
26
+
27
+ it "should fail on error other than NameError" do
28
+ actual = stub("actual")
29
+ actual.should_receive(:foo?).and_raise("aaaah")
30
+ lambda {
31
+ actual.should be_foo
32
+ }.should raise_error(/aaaah/)
33
+ end
34
+
35
+ it "should fail on error other than NameError (with the present tense predicate)" do
36
+ actual = Object.new
37
+ actual.should_receive(:foos?).and_raise("aaaah")
38
+ lambda {
39
+ actual.should be_foo
40
+ }.should raise_error(/aaaah/)
25
41
  end
26
42
  end
27
43
 
@@ -121,7 +137,7 @@ describe "should be_nil" do
121
137
  it "should fail when actual is not nil" do
122
138
  lambda {
123
139
  :not_nil.should be_nil
124
- }.should fail_with("expected nil, got :not_nil")
140
+ }.should fail_with("expected nil? to return true, got false")
125
141
  end
126
142
  end
127
143
 
@@ -133,7 +149,7 @@ describe "should_not be_nil" do
133
149
  it "should fail when actual is nil" do
134
150
  lambda {
135
151
  nil.should_not be_nil
136
- }.should fail_with("expected not nil, got nil")
152
+ }.should fail_with("expected nil? to return false, got true")
137
153
  end
138
154
  end
139
155
 
@@ -195,7 +211,15 @@ describe "should be ===" do
195
211
  end
196
212
 
197
213
  it "should fail when === operator returns false" do
198
- lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === "not a hash", got Hash])
214
+ lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === not a hash, got Hash])
215
+ end
216
+ end
217
+
218
+ describe "should_not with operators" do
219
+ it "should coach user to stop using operators with should_not" do
220
+ lambda {
221
+ 5.should_not be < 6
222
+ }.should raise_error(/not only FAILED,\nit reads really poorly./m)
199
223
  end
200
224
  end
201
225
 
@@ -206,11 +230,11 @@ describe "should be" do
206
230
  end
207
231
 
208
232
  it "should fail if actual is false" do
209
- lambda {false.should be}.should fail_with("expected if to be satisfied, got false")
233
+ lambda {false.should be}.should fail_with("expected true, got false")
210
234
  end
211
235
 
212
236
  it "should fail if actual is nil" do
213
- lambda {nil.should be}.should fail_with("expected if to be satisfied, got nil")
237
+ lambda {nil.should be}.should fail_with("expected true, got nil")
214
238
  end
215
239
  end
216
240
 
@@ -223,6 +247,15 @@ describe "should be(value)" do
223
247
  end
224
248
  end
225
249
 
250
+ describe "'should be' with operator" do
251
+ it "should include 'be' in the description" do
252
+ (be > 6).description.should =~ /be > 6/
253
+ (be >= 6).description.should =~ /be >= 6/
254
+ (be <= 6).description.should =~ /be <= 6/
255
+ (be < 6).description.should =~ /be < 6/
256
+ end
257
+ end
258
+
226
259
 
227
260
  describe "arbitrary predicate with DelegateClass" do
228
261
  it "should access methods defined in the delegating class (LH[#48])" do
@@ -246,3 +279,25 @@ describe "arbitrary predicate with DelegateClass" do
246
279
  delegate.should be_large
247
280
  end
248
281
  end
282
+
283
+ describe "be_a, be_an" do
284
+ it "should pass when class matches" do
285
+ "foobar".should be_a(String)
286
+ [1,2,3].should be_an(Array)
287
+ end
288
+
289
+ it "should fail when class does not match" do
290
+ "foobar".should_not be_a(Hash)
291
+ [1,2,3].should_not be_an(Integer)
292
+ end
293
+ end
294
+
295
+ describe "be_an_instance_of" do
296
+ it "passes when direct class matches" do
297
+ 5.should be_an_instance_of(Fixnum)
298
+ end
299
+
300
+ it "fails when class is higher up hierarchy" do
301
+ 5.should_not be_an_instance_of(Numeric)
302
+ end
303
+ end
@@ -107,6 +107,11 @@ describe "Matchers should be able to generate their own descriptions" do
107
107
  [1,2,3].should include(3)
108
108
  Spec::Matchers.generated_description.should == "should include 3"
109
109
  end
110
+
111
+ it "array.should =~ [1,2,3]" do
112
+ [1,2,3].should =~ [1,2,3]
113
+ Spec::Matchers.generated_description.should == "should contain exactly 1, 2 and 3"
114
+ end
110
115
 
111
116
  it "should match" do
112
117
  "this string".should match(/this string/)
@@ -151,3 +156,17 @@ describe "Matchers should be able to generate their own descriptions" do
151
156
  end.new
152
157
  end
153
158
  end
159
+
160
+ describe "a Matcher with no description" do
161
+ def matcher
162
+ Class.new do
163
+ def matches?(ignore); true; end
164
+ def failure_message; ""; end
165
+ end.new
166
+ end
167
+
168
+ it "should provide a helpful message when used in a string-less example block" do
169
+ 5.should matcher
170
+ Spec::Matchers.generated_description.should =~ /When you call.*description method/m
171
+ end
172
+ end
@@ -2,24 +2,25 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
3
  module Spec
4
4
  module Matchers
5
- describe Eql do
5
+ describe "eql" do
6
6
  it "should match when actual.eql?(expected)" do
7
- Eql.new(1).matches?(1).should be_true
7
+ eql(1).matches?(1).should be_true
8
8
  end
9
9
  it "should not match when !actual.eql?(expected)" do
10
- Eql.new(1).matches?(2).should be_false
10
+ eql(1).matches?(2).should be_false
11
11
  end
12
12
  it "should describe itself" do
13
- matcher = Eql.new(1)
13
+ matcher = eql(1)
14
+ matcher.matches?(1)
14
15
  matcher.description.should == "eql 1"
15
16
  end
16
17
  it "should provide message, expected and actual on #failure_message" do
17
- matcher = Eql.new("1")
18
+ matcher = eql("1")
18
19
  matcher.matches?(1)
19
20
  matcher.failure_message.should == ["expected \"1\", got 1 (using .eql?)", "1", 1]
20
21
  end
21
22
  it "should provide message, expected and actual on #negative_failure_message" do
22
- matcher = Eql.new(1)
23
+ matcher = eql(1)
23
24
  matcher.matches?(1)
24
25
  matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .eql?)", 1, 1]
25
26
  end
@@ -2,24 +2,25 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
3
  module Spec
4
4
  module Matchers
5
- describe Equal do
5
+ describe "equal" do
6
6
  it "should match when actual.equal?(expected)" do
7
- Equal.new(1).matches?(1).should be_true
7
+ equal(1).matches?(1).should be_true
8
8
  end
9
9
  it "should not match when !actual.equal?(expected)" do
10
- Equal.new("1").matches?("1").should be_false
10
+ equal("1").matches?("1").should be_false
11
11
  end
12
12
  it "should describe itself" do
13
- matcher = Equal.new(1)
13
+ matcher = equal(1)
14
+ matcher.matches?(1)
14
15
  matcher.description.should == "equal 1"
15
16
  end
16
17
  it "should provide message, expected and actual on #failure_message" do
17
- matcher = Equal.new("1")
18
+ matcher = equal("1")
18
19
  matcher.matches?(1)
19
20
  matcher.failure_message.should == ["expected \"1\", got 1 (using .equal?)", "1", 1]
20
21
  end
21
22
  it "should provide message, expected and actual on #negative_failure_message" do
22
- matcher = Equal.new(1)
23
+ matcher = equal(1)
23
24
  matcher.matches?(1)
24
25
  matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .equal?)", 1, 1]
25
26
  end
@@ -54,66 +54,34 @@ module Spec
54
54
  matcher = mock("matcher")
55
55
  actual = Object.new
56
56
  matcher.should_receive(:matches?).with(actual).and_return(true)
57
- ExpectationMatcherHandler.handle_matcher(actual, matcher)
57
+ Spec::Expectations::ExpectationMatcherHandler.handle_matcher(actual, matcher)
58
58
  end
59
59
 
60
- it "should explain when the matcher parameter is not a matcher" do
61
- begin
62
- nonmatcher = mock("nonmatcher")
63
- actual = Object.new
64
- ExpectationMatcherHandler.handle_matcher(actual, nonmatcher)
65
- rescue Spec::Expectations::InvalidMatcherError => e
66
- end
67
-
68
- e.message.should =~ /^Expected a matcher, got /
69
- end
70
-
71
60
  it "should return the match value" do
72
61
  matcher = mock("matcher")
73
62
  actual = Object.new
74
63
  matcher.should_receive(:matches?).with(actual).and_return(:this_value)
75
- ExpectationMatcherHandler.handle_matcher(actual, matcher).should == :this_value
64
+ Spec::Expectations::ExpectationMatcherHandler.handle_matcher(actual, matcher).should == :this_value
76
65
  end
77
66
  end
78
67
  end
79
68
 
80
69
  describe NegativeExpectationMatcherHandler do
81
70
  describe "#handle_matcher" do
82
- it "should explain when matcher does not support should_not" do
83
- matcher = mock("matcher")
84
- matcher.stub!(:matches?)
85
- actual = Object.new
86
- lambda {
87
- NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
88
- }.should fail_with(/Matcher does not support should_not.\n/)
89
- end
90
-
91
71
  it "should ask the matcher if it matches" do
92
72
  matcher = mock("matcher")
93
73
  actual = Object.new
94
74
  matcher.stub!(:negative_failure_message)
95
75
  matcher.should_receive(:matches?).with(actual).and_return(false)
96
- NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
76
+ Spec::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
97
77
  end
98
78
 
99
- it "should explain when the matcher parameter is not a matcher" do
100
- begin
101
- nonmatcher = mock("nonmatcher")
102
- actual = Object.new
103
- NegativeExpectationMatcherHandler.handle_matcher(actual, nonmatcher)
104
- rescue Spec::Expectations::InvalidMatcherError => e
105
- end
106
-
107
- e.message.should =~ /^Expected a matcher, got /
108
- end
109
-
110
-
111
79
  it "should return the match value" do
112
80
  matcher = mock("matcher")
113
81
  actual = Object.new
114
82
  matcher.should_receive(:matches?).with(actual).and_return(false)
115
83
  matcher.stub!(:negative_failure_message).and_return("ignore")
116
- NegativeExpectationMatcherHandler.handle_matcher(actual, matcher).should be_false
84
+ Spec::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, matcher).should be_false
117
85
  end
118
86
  end
119
87
  end
@@ -138,13 +106,6 @@ module Spec
138
106
  5.should arbitrary_matcher(:expected => 4).with(5) { 3 }
139
107
  end
140
108
 
141
- it "should explain when matcher does not support should_not" do
142
- lambda {
143
- 5.should_not positive_only_matcher(:expected => 5)
144
- }.should fail_with(/Matcher does not support should_not.\n/)
145
- end
146
-
147
-
148
109
  end
149
110
  end
150
111
  end
@@ -52,7 +52,7 @@ describe "should_not have_sym(*args)" do
52
52
  end
53
53
  end
54
54
 
55
- describe Spec::Matchers::Has do
55
+ describe "has" do
56
56
  it "should work when the target implements #send" do
57
57
  o = {:a => "A"}
58
58
  def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
2
 
3
- module HaveSpecHelper
3
+ share_as :HaveSpecHelper do
4
4
  def create_collection_owner_with(n)
5
5
  owner = Spec::Expectations::Helper::CollectionOwner.new
6
6
  (1..n).each do |n|
@@ -9,8 +9,21 @@ module HaveSpecHelper
9
9
  end
10
10
  owner
11
11
  end
12
+ before(:each) do
13
+ unless defined?(::ActiveSupport::Inflector)
14
+ @active_support_was_not_defined
15
+ module ::ActiveSupport
16
+ class Inflector
17
+ def self.pluralize(string)
18
+ string.to_s + 's'
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
12
24
  end
13
25
 
26
+
14
27
  describe "should have(n).items" do
15
28
  include HaveSpecHelper
16
29
 
@@ -50,19 +63,6 @@ end
50
63
  describe 'should have(1).item when ActiveSupport::Inflector is defined' do
51
64
  include HaveSpecHelper
52
65
 
53
- before(:each) do
54
- unless defined?(ActiveSupport::Inflector)
55
- @active_support_was_not_defined
56
- module ActiveSupport
57
- class Inflector
58
- def self.pluralize(string)
59
- string.to_s + 's'
60
- end
61
- end
62
- end
63
- end
64
- end
65
-
66
66
  it 'should pluralize the collection name' do
67
67
  owner = create_collection_owner_with(1)
68
68
  owner.should have(1).item
@@ -70,7 +70,7 @@ describe 'should have(1).item when ActiveSupport::Inflector is defined' do
70
70
 
71
71
  after(:each) do
72
72
  if @active_support_was_not_defined
73
- Object.send :remove_const, :ActiveSupport
73
+ Object.__send__ :remove_const, :ActiveSupport
74
74
  end
75
75
  end
76
76
  end
@@ -96,7 +96,7 @@ describe 'should have(1).item when Inflector is defined' do
96
96
 
97
97
  after(:each) do
98
98
  if @inflector_was_not_defined
99
- Object.send :remove_const, :Inflector
99
+ Object.__send__ :remove_const, :Inflector
100
100
  end
101
101
  end
102
102
  end
@@ -327,7 +327,7 @@ end
327
327
 
328
328
  describe Spec::Matchers::Have, "for a collection owner that implements #send" do
329
329
  include HaveSpecHelper
330
-
330
+
331
331
  before(:each) do
332
332
  @collection = Object.new
333
333
  def @collection.floozles; [1,2] end
@@ -357,7 +357,12 @@ module Spec
357
357
  module Matchers
358
358
  describe Have do
359
359
  it "should have method_missing as private" do
360
- Have.private_instance_methods.should include("method_missing")
360
+ with_ruby '1.8' do
361
+ Have.private_instance_methods.should include("method_missing")
362
+ end
363
+ with_ruby '1.9' do
364
+ Have.private_instance_methods.should include(:method_missing)
365
+ end
361
366
  end
362
367
 
363
368
  describe "respond_to?" do