rspec 1.1.11 → 1.1.12

Sign up to get free protection for your applications and to get access to all the features.
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