newbamboo-rspec 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 (324) hide show
  1. data/.autotest +4 -0
  2. data/History.txt +1263 -0
  3. data/License.txt +22 -0
  4. data/Manifest.txt +327 -0
  5. data/README.txt +57 -0
  6. data/Rakefile +104 -0
  7. data/TODO.txt +18 -0
  8. data/bin/autospec +4 -0
  9. data/bin/spec +4 -0
  10. data/examples/failing/README.txt +7 -0
  11. data/examples/failing/diffing_spec.rb +36 -0
  12. data/examples/failing/failing_autogenerated_docstrings_example.rb +19 -0
  13. data/examples/failing/failure_in_after.rb +10 -0
  14. data/examples/failing/failure_in_before.rb +10 -0
  15. data/examples/failing/mocking_example.rb +40 -0
  16. data/examples/failing/mocking_with_flexmock.rb +26 -0
  17. data/examples/failing/mocking_with_mocha.rb +25 -0
  18. data/examples/failing/mocking_with_rr.rb +27 -0
  19. data/examples/failing/partial_mock_example.rb +20 -0
  20. data/examples/failing/predicate_example.rb +34 -0
  21. data/examples/failing/raising_example.rb +47 -0
  22. data/examples/failing/spec_helper.rb +3 -0
  23. data/examples/failing/syntax_error_example.rb +7 -0
  24. data/examples/failing/team_spec.rb +44 -0
  25. data/examples/failing/timeout_behaviour.rb +7 -0
  26. data/examples/passing/autogenerated_docstrings_example.rb +25 -0
  27. data/examples/passing/before_and_after_example.rb +40 -0
  28. data/examples/passing/behave_as_example.rb +45 -0
  29. data/examples/passing/custom_expectation_matchers.rb +54 -0
  30. data/examples/passing/custom_formatter.rb +12 -0
  31. data/examples/passing/dynamic_spec.rb +9 -0
  32. data/examples/passing/file_accessor.rb +19 -0
  33. data/examples/passing/file_accessor_spec.rb +38 -0
  34. data/examples/passing/greeter_spec.rb +31 -0
  35. data/examples/passing/helper_method_example.rb +14 -0
  36. data/examples/passing/io_processor.rb +8 -0
  37. data/examples/passing/io_processor_spec.rb +21 -0
  38. data/examples/passing/legacy_spec.rb +11 -0
  39. data/examples/passing/mocking_example.rb +27 -0
  40. data/examples/passing/multi_threaded_example_group_runner.rb +26 -0
  41. data/examples/passing/nested_classes_example.rb +36 -0
  42. data/examples/passing/partial_mock_example.rb +29 -0
  43. data/examples/passing/pending_example.rb +20 -0
  44. data/examples/passing/predicate_example.rb +27 -0
  45. data/examples/passing/priority.txt +1 -0
  46. data/examples/passing/shared_example_group_example.rb +81 -0
  47. data/examples/passing/shared_stack_examples.rb +36 -0
  48. data/examples/passing/simple_matcher_example.rb +31 -0
  49. data/examples/passing/spec_helper.rb +3 -0
  50. data/examples/passing/stack.rb +36 -0
  51. data/examples/passing/stack_spec.rb +64 -0
  52. data/examples/passing/stack_spec_with_nested_example_groups.rb +67 -0
  53. data/examples/passing/stubbing_example.rb +69 -0
  54. data/examples/passing/yielding_example.rb +33 -0
  55. data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +86 -0
  56. data/features/before_and_after_blocks/before_and_after_blocks.feature +168 -0
  57. data/features/example_groups/autogenerated_docstrings.feature +45 -0
  58. data/features/example_groups/example_group_with_should_methods.feature +17 -0
  59. data/features/example_groups/nested_groups.feature +17 -0
  60. data/features/example_groups/output.feature +20 -0
  61. data/features/interop/examples_and_tests_together.feature +31 -0
  62. data/features/interop/test_but_not_test_unit.feature +14 -0
  63. data/features/interop/test_case_with_should_methods.feature +17 -0
  64. data/features/mock_framework_integration/use_flexmock.feature +27 -0
  65. data/features/step_definitions/running_rspec.rb +54 -0
  66. data/features/support/env.rb +26 -0
  67. data/features/support/helpers/cmdline.rb +9 -0
  68. data/features/support/matchers/smart_match.rb +37 -0
  69. data/init.rb +9 -0
  70. data/lib/adapters/mock_frameworks/flexmock.rb +24 -0
  71. data/lib/adapters/mock_frameworks/mocha.rb +20 -0
  72. data/lib/adapters/mock_frameworks/rr.rb +22 -0
  73. data/lib/adapters/mock_frameworks/rspec.rb +20 -0
  74. data/lib/autotest/discover.rb +3 -0
  75. data/lib/autotest/rspec.rb +47 -0
  76. data/lib/spec/dsl/main.rb +87 -0
  77. data/lib/spec/dsl.rb +1 -0
  78. data/lib/spec/example/before_and_after_hooks.rb +99 -0
  79. data/lib/spec/example/errors.rb +30 -0
  80. data/lib/spec/example/example_group.rb +26 -0
  81. data/lib/spec/example/example_group_factory.rb +98 -0
  82. data/lib/spec/example/example_group_methods.rb +376 -0
  83. data/lib/spec/example/example_matcher.rb +44 -0
  84. data/lib/spec/example/example_methods.rb +137 -0
  85. data/lib/spec/example/module_reopening_fix.rb +21 -0
  86. data/lib/spec/example/pending.rb +18 -0
  87. data/lib/spec/example/shared_example_group.rb +59 -0
  88. data/lib/spec/example.rb +187 -0
  89. data/lib/spec/expectations/differs/default.rb +66 -0
  90. data/lib/spec/expectations/errors.rb +12 -0
  91. data/lib/spec/expectations/extensions/object.rb +63 -0
  92. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  93. data/lib/spec/expectations/extensions.rb +2 -0
  94. data/lib/spec/expectations/handler.rb +32 -0
  95. data/lib/spec/expectations.rb +60 -0
  96. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  97. data/lib/spec/interop/test/unit/testcase.rb +73 -0
  98. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  99. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  100. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  101. data/lib/spec/interop/test.rb +12 -0
  102. data/lib/spec/matchers/be.rb +208 -0
  103. data/lib/spec/matchers/be_close.rb +21 -0
  104. data/lib/spec/matchers/change.rb +148 -0
  105. data/lib/spec/matchers/eql.rb +25 -0
  106. data/lib/spec/matchers/equal.rb +25 -0
  107. data/lib/spec/matchers/errors.rb +5 -0
  108. data/lib/spec/matchers/exist.rb +16 -0
  109. data/lib/spec/matchers/generated_descriptions.rb +48 -0
  110. data/lib/spec/matchers/has.rb +15 -0
  111. data/lib/spec/matchers/have.rb +150 -0
  112. data/lib/spec/matchers/include.rb +80 -0
  113. data/lib/spec/matchers/match.rb +22 -0
  114. data/lib/spec/matchers/match_array.rb +79 -0
  115. data/lib/spec/matchers/method_missing.rb +9 -0
  116. data/lib/spec/matchers/operator_matcher.rb +70 -0
  117. data/lib/spec/matchers/raise_error.rb +128 -0
  118. data/lib/spec/matchers/respond_to.rb +71 -0
  119. data/lib/spec/matchers/satisfy.rb +47 -0
  120. data/lib/spec/matchers/simple_matcher.rb +132 -0
  121. data/lib/spec/matchers/throw_symbol.rb +106 -0
  122. data/lib/spec/matchers/wrap_expectation.rb +55 -0
  123. data/lib/spec/matchers.rb +141 -0
  124. data/lib/spec/mocks/argument_expectation.rb +49 -0
  125. data/lib/spec/mocks/argument_matchers.rb +237 -0
  126. data/lib/spec/mocks/error_generator.rb +82 -0
  127. data/lib/spec/mocks/errors.rb +10 -0
  128. data/lib/spec/mocks/extensions/object.rb +3 -0
  129. data/lib/spec/mocks/extensions.rb +1 -0
  130. data/lib/spec/mocks/framework.rb +15 -0
  131. data/lib/spec/mocks/message_expectation.rb +331 -0
  132. data/lib/spec/mocks/methods.rb +51 -0
  133. data/lib/spec/mocks/mock.rb +55 -0
  134. data/lib/spec/mocks/order_group.rb +29 -0
  135. data/lib/spec/mocks/proxy.rb +230 -0
  136. data/lib/spec/mocks/space.rb +28 -0
  137. data/lib/spec/mocks/spec_methods.rb +55 -0
  138. data/lib/spec/mocks.rb +200 -0
  139. data/lib/spec/rake/spectask.rb +225 -0
  140. data/lib/spec/rake/verify_rcov.rb +52 -0
  141. data/lib/spec/ruby.rb +9 -0
  142. data/lib/spec/runner/backtrace_tweaker.rb +58 -0
  143. data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
  144. data/lib/spec/runner/command_line.rb +35 -0
  145. data/lib/spec/runner/configuration.rb +166 -0
  146. data/lib/spec/runner/drb_command_line.rb +20 -0
  147. data/lib/spec/runner/example_group_runner.rb +70 -0
  148. data/lib/spec/runner/formatter/base_formatter.rb +79 -0
  149. data/lib/spec/runner/formatter/base_text_formatter.rb +127 -0
  150. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
  151. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  152. data/lib/spec/runner/formatter/html_formatter.rb +340 -0
  153. data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
  154. data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
  155. data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
  156. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  157. data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
  158. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  159. data/lib/spec/runner/heckle_runner.rb +74 -0
  160. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  161. data/lib/spec/runner/option_parser.rb +204 -0
  162. data/lib/spec/runner/options.rb +320 -0
  163. data/lib/spec/runner/reporter.rb +167 -0
  164. data/lib/spec/runner/spec_parser.rb +73 -0
  165. data/lib/spec/runner.rb +88 -0
  166. data/lib/spec/version.rb +15 -0
  167. data/lib/spec.rb +7 -0
  168. data/resources/rake/examples.rake +7 -0
  169. data/resources/rake/examples_with_rcov.rake +9 -0
  170. data/resources/rake/failing_examples_with_html.rake +9 -0
  171. data/resources/rake/verify_rcov.rake +7 -0
  172. data/resources/spec/example_group_with_should_methods.rb +12 -0
  173. data/resources/spec/simple_spec.rb +8 -0
  174. data/resources/test/spec_and_test_together.rb +57 -0
  175. data/resources/test/spec_including_test_but_not_unit.rb +11 -0
  176. data/resources/test/test_case_with_should_methods.rb +30 -0
  177. data/rspec.gemspec +32 -0
  178. data/spec/README.jruby +15 -0
  179. data/spec/autotest/autotest_helper.rb +6 -0
  180. data/spec/autotest/autotest_matchers.rb +47 -0
  181. data/spec/autotest/discover_spec.rb +8 -0
  182. data/spec/autotest/failed_results_re_spec.rb +24 -0
  183. data/spec/autotest/rspec_spec.rb +114 -0
  184. data/spec/rspec_suite.rb +6 -0
  185. data/spec/ruby_forker.rb +13 -0
  186. data/spec/spec/dsl/main_spec.rb +88 -0
  187. data/spec/spec/example/example_group_class_definition_spec.rb +49 -0
  188. data/spec/spec/example/example_group_factory_spec.rb +224 -0
  189. data/spec/spec/example/example_group_methods_spec.rb +653 -0
  190. data/spec/spec/example/example_group_spec.rb +661 -0
  191. data/spec/spec/example/example_matcher_spec.rb +79 -0
  192. data/spec/spec/example/example_methods_spec.rb +204 -0
  193. data/spec/spec/example/helper_method_spec.rb +24 -0
  194. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  195. data/spec/spec/example/pending_module_spec.rb +139 -0
  196. data/spec/spec/example/predicate_matcher_spec.rb +21 -0
  197. data/spec/spec/example/shared_example_group_spec.rb +257 -0
  198. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  199. data/spec/spec/expectations/differs/default_spec.rb +127 -0
  200. data/spec/spec/expectations/extensions/object_spec.rb +45 -0
  201. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  202. data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
  203. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  204. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  205. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  206. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  207. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  208. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  209. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  210. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  211. data/spec/spec/interop/test/unit/spec_spec.rb +48 -0
  212. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
  213. data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
  214. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  215. data/spec/spec/matchers/be_close_spec.rb +41 -0
  216. data/spec/spec/matchers/be_spec.rb +303 -0
  217. data/spec/spec/matchers/change_spec.rb +329 -0
  218. data/spec/spec/matchers/description_generation_spec.rb +172 -0
  219. data/spec/spec/matchers/eql_spec.rb +29 -0
  220. data/spec/spec/matchers/equal_spec.rb +29 -0
  221. data/spec/spec/matchers/exist_spec.rb +57 -0
  222. data/spec/spec/matchers/handler_spec.rb +111 -0
  223. data/spec/spec/matchers/has_spec.rb +63 -0
  224. data/spec/spec/matchers/have_spec.rb +399 -0
  225. data/spec/spec/matchers/include_spec.rb +88 -0
  226. data/spec/spec/matchers/match_array_spec.rb +83 -0
  227. data/spec/spec/matchers/match_spec.rb +37 -0
  228. data/spec/spec/matchers/matcher_methods_spec.rb +66 -0
  229. data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
  230. data/spec/spec/matchers/raise_error_spec.rb +333 -0
  231. data/spec/spec/matchers/respond_to_spec.rb +116 -0
  232. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  233. data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
  234. data/spec/spec/matchers/throw_symbol_spec.rb +96 -0
  235. data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
  236. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  237. data/spec/spec/mocks/at_least_spec.rb +97 -0
  238. data/spec/spec/mocks/at_most_spec.rb +93 -0
  239. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  240. data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
  241. data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
  242. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  243. data/spec/spec/mocks/bug_report_496.rb +19 -0
  244. data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
  245. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  246. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  247. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  248. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  249. data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
  250. data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
  251. data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
  252. data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
  253. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  254. data/spec/spec/mocks/mock_spec.rb +579 -0
  255. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  256. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  257. data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
  258. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  259. data/spec/spec/mocks/options_hash_spec.rb +35 -0
  260. data/spec/spec/mocks/partial_mock_spec.rb +149 -0
  261. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  262. data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
  263. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  264. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  265. data/spec/spec/mocks/stub_spec.rb +194 -0
  266. data/spec/spec/mocks/stubbed_message_expectations_spec.rb +14 -0
  267. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  268. data/spec/spec/package/bin_spec_spec.rb +22 -0
  269. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  270. data/spec/spec/runner/command_line_spec.rb +141 -0
  271. data/spec/spec/runner/configuration_spec.rb +301 -0
  272. data/spec/spec/runner/drb_command_line_spec.rb +97 -0
  273. data/spec/spec/runner/empty_file.txt +0 -0
  274. data/spec/spec/runner/example_group_runner_spec.rb +33 -0
  275. data/spec/spec/runner/examples.txt +2 -0
  276. data/spec/spec/runner/failed.txt +3 -0
  277. data/spec/spec/runner/formatter/base_formatter_spec.rb +23 -0
  278. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +23 -0
  279. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  280. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  281. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
  282. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
  283. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
  284. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
  285. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +379 -0
  286. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +379 -0
  287. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +379 -0
  288. data/spec/spec/runner/formatter/html_formatter_spec.rb +62 -0
  289. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
  290. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  291. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +145 -0
  292. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  293. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +104 -0
  294. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
  295. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
  296. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +373 -0
  297. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +373 -0
  298. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +373 -0
  299. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  300. data/spec/spec/runner/heckler_spec.rb +20 -0
  301. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  302. data/spec/spec/runner/option_parser_spec.rb +396 -0
  303. data/spec/spec/runner/options_spec.rb +469 -0
  304. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  305. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  306. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  307. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
  308. data/spec/spec/runner/reporter_spec.rb +238 -0
  309. data/spec/spec/runner/resources/a_bar.rb +0 -0
  310. data/spec/spec/runner/resources/a_foo.rb +0 -0
  311. data/spec/spec/runner/resources/a_spec.rb +1 -0
  312. data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
  313. data/spec/spec/runner/resources/utf8_encoded.rb +7 -0
  314. data/spec/spec/runner/spec.opts +2 -0
  315. data/spec/spec/runner/spec_drb.opts +1 -0
  316. data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
  317. data/spec/spec/runner/spec_parser_spec.rb +91 -0
  318. data/spec/spec/runner/spec_spaced.opts +2 -0
  319. data/spec/spec/runner_spec.rb +11 -0
  320. data/spec/spec/spec_classes.rb +133 -0
  321. data/spec/spec/spec_spec.rb +21 -0
  322. data/spec/spec.opts +6 -0
  323. data/spec/spec_helper.rb +107 -0
  324. metadata +388 -0
@@ -0,0 +1,79 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Example
5
+ describe ExampleMatcher, "#matches?" do
6
+ def match_description(description)
7
+ simple_matcher do |actual, matcher|
8
+ matcher.failure_message = "expected matcher.matches?(#{description.inspect}) to return true, got false"
9
+ matcher.negative_failure_message = "expected matcher.matches?(#{description.inspect}) to return false, got true"
10
+ actual.matches?(description)
11
+ end
12
+ end
13
+
14
+ it "should match correct example_group and example" do
15
+ matcher = ExampleMatcher.new("example_group", "example")
16
+ matcher.should match_description("example_group example")
17
+ end
18
+
19
+ it "should not match wrong example" do
20
+ matcher = ExampleMatcher.new("example_group", "other example")
21
+ matcher.should_not match_description("example_group example")
22
+ end
23
+
24
+ it "should not match wrong example_group" do
25
+ matcher = ExampleMatcher.new("other example_group", "example")
26
+ matcher.should_not match_description("example_group example")
27
+ end
28
+
29
+ it "should match example only" do
30
+ matcher = ExampleMatcher.new("example_group", "example")
31
+ matcher.should match_description("example")
32
+ end
33
+
34
+ it "should match example_group only" do
35
+ matcher = ExampleMatcher.new("example_group", "example")
36
+ matcher.should match_description("example_group")
37
+ end
38
+
39
+ it "should match example_group ending with before(:all)" do
40
+ matcher = ExampleMatcher.new("example_group", "example")
41
+ matcher.should match_description("example_group before(:all)")
42
+ end
43
+
44
+ it "should escape regexp chars" do
45
+ matcher = ExampleMatcher.new("(con|text)", "[example]")
46
+ matcher.should_not match_description("con p")
47
+ end
48
+
49
+ it "should match when example_group is modularized" do
50
+ matcher = ExampleMatcher.new("MyModule::MyClass", "example")
51
+ matcher.should match_description("MyClass example")
52
+ end
53
+ end
54
+
55
+ describe ExampleMatcher, "#matches? normal case" do
56
+ it "matches when passed in example matches" do
57
+ matcher = ExampleMatcher.new("Foo", "bar")
58
+ matcher.matches?(["no match", "Foo bar"]).should == true
59
+ end
60
+
61
+ it "does not match when no passed in examples match" do
62
+ matcher = ExampleMatcher.new("Foo", "bar")
63
+ matcher.matches?(["no match1", "no match2"]).should == false
64
+ end
65
+ end
66
+
67
+ describe ExampleMatcher, "#matches? where description has '::' in it" do
68
+ it "matches when passed in example matches" do
69
+ matcher = ExampleMatcher.new("Foo::Bar", "baz")
70
+ matcher.matches?(["no match", "Foo::Bar baz"]).should == true
71
+ end
72
+
73
+ it "does not match when no passed in examples match" do
74
+ matcher = ExampleMatcher.new("Foo::Bar", "baz")
75
+ matcher.matches?(["no match1", "no match2"]).should == false
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,204 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ describe ExampleMethods do
6
+ module ModuleThatIsReopened; end
7
+
8
+ module ExampleMethods
9
+ include ModuleThatIsReopened
10
+ end
11
+
12
+ module ModuleThatIsReopened
13
+ def module_that_is_reopened_method; end
14
+ end
15
+
16
+ describe "with an included module that is reopened" do
17
+ it "should have repoened methods" do
18
+ method(:module_that_is_reopened_method).should_not be_nil
19
+ end
20
+ end
21
+
22
+ describe "eval_block" do
23
+ before(:each) do
24
+ @example_group = ExampleGroup.dup
25
+ end
26
+
27
+ describe "with a given description" do
28
+ it "should provide the given description" do
29
+ @example = @example_group.it("given description") { 2.should == 2 }
30
+ @example.eval_block
31
+ @example.description.should == "given description"
32
+ end
33
+ end
34
+
35
+ describe "with no given description" do
36
+ it "should provide the generated description" do
37
+ @example = @example_group.it { 2.should == 2 }
38
+ @example.eval_block
39
+ @example.description.should == "should == 2"
40
+ end
41
+ end
42
+
43
+ describe "with no implementation" do
44
+ it "should raise an NotYetImplementedError" do
45
+ lambda {
46
+ @example = @example_group.it
47
+ @example.eval_block
48
+ }.should raise_error(Spec::Example::NotYetImplementedError, "Not Yet Implemented")
49
+ end
50
+
51
+ def extract_error(&blk)
52
+ begin
53
+ blk.call
54
+ rescue Exception => e
55
+ return e
56
+ end
57
+
58
+ nil
59
+ end
60
+
61
+ it "should use the proper file and line number for the NotYetImplementedError" do
62
+ file = __FILE__
63
+ line_number = __LINE__ + 3
64
+
65
+ error = extract_error do
66
+ @example = @example_group.example
67
+ @example.eval_block
68
+ end
69
+
70
+ error.pending_caller.should =~ /#{file}:#{line_number}/
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "#backtrace" do
76
+ it "returns the backtrace from where the example was defined" do
77
+ example = ExampleGroup.dup.new "name"
78
+ example.backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
79
+ end
80
+ end
81
+
82
+ describe "#implementation_backtrace (deprecated)" do
83
+ before(:each) do
84
+ Kernel.stub!(:warn)
85
+ end
86
+
87
+ it "sends a deprecation warning" do
88
+ Kernel.should_receive(:warn).with(/#implementation_backtrace.*deprecated.*#backtrace instead/m)
89
+ example = ExampleGroup.dup.new "name"
90
+ example.implementation_backtrace
91
+ end
92
+
93
+ it "returns the backtrace from where the example was defined" do
94
+ example = ExampleGroup.dup.new "name"
95
+ example.implementation_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
96
+ end
97
+ end
98
+
99
+ describe "#full_description" do
100
+ it "should return the full description of the ExampleGroup and Example" do
101
+ example_group = Class.new(ExampleGroupDouble).describe("An ExampleGroup")
102
+ example = example_group.new "should do something"
103
+ example.full_description.should == "An ExampleGroup should do something"
104
+ end
105
+ end
106
+
107
+ describe "#subject" do
108
+ before(:each) do
109
+ @example_group = ExampleGroupDouble
110
+ end
111
+
112
+ it "should return an instance of the described class" do
113
+ group = Class.new(ExampleGroupDouble).describe(Array)
114
+ example = group.new
115
+ example.subject.should == []
116
+ end
117
+
118
+ it "should return nil for a module (as opposed to a class)" do
119
+ group = Class.new(ExampleGroupDouble).describe(Enumerable)
120
+ example = group.new
121
+ example.subject.should be_nil
122
+ end
123
+
124
+ it "should return nil for a string" do
125
+ group = Class.new(ExampleGroupDouble).describe('foo')
126
+ example = group.new
127
+ example.subject.should be_nil
128
+ end
129
+ end
130
+
131
+ class Thing
132
+ attr_reader :arg
133
+ def initialize(arg=nil)
134
+ @arg = arg || :default
135
+ end
136
+ def ==(other)
137
+ @arg == other.arg
138
+ end
139
+ def eql?(other)
140
+ @arg == other.arg
141
+ end
142
+ end
143
+
144
+ describe "#should" do
145
+ before(:each) do
146
+ @example_group = Class.new(ExampleGroupDouble)
147
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
148
+ end
149
+
150
+ context "in an ExampleGroup with an implicit subject" do
151
+ it "delegates matcher to the implied subject" do
152
+ @example_group.describe(Thing)
153
+ @example_group.example { should == Thing.new(:default) }
154
+ @example_group.example { should eql(Thing.new(:default)) }
155
+ @example_group.run(@options).should be_true
156
+ end
157
+ end
158
+
159
+ context "in an ExampleGroup using an explicit subject" do
160
+ it "delegates matcher to the declared subject" do
161
+ @example_group.describe(Thing)
162
+ @example_group.subject { Thing.new(:other) }
163
+ @example_group.example { should == Thing.new(:other) }
164
+ @example_group.example { should eql(Thing.new(:other)) }
165
+ @example_group.run(@options).should be_true
166
+ end
167
+ end
168
+ end
169
+
170
+ describe "#should_not" do
171
+ before(:each) do
172
+ @example_group = ExampleGroup.dup
173
+ end
174
+
175
+ context "in an ExampleGroup with an implicit subject" do
176
+ it "delegates matcher to the implied subject" do
177
+ @example_group.describe(Thing)
178
+ @example_group.example { should_not == Thing.new(:other) }
179
+ @example_group.example { should_not eql(Thing.new(:other)) }
180
+ @example_group.run(::Spec::Runner::Options.new(StringIO.new, StringIO.new)).should be_true
181
+ end
182
+ end
183
+
184
+ context "in an ExampleGroup using an explicit subject" do
185
+ it "delegates matcher to the declared subject" do
186
+ @example_group.describe(Thing)
187
+ @example_group.subject { Thing.new(:other) }
188
+ @example_group.example { should_not == Thing.new(:default) }
189
+ @example_group.example { should_not eql(Thing.new(:default)) }
190
+ @example_group.run(::Spec::Runner::Options.new(StringIO.new, StringIO.new)).should be_true
191
+ end
192
+ end
193
+ end
194
+ end
195
+
196
+ describe "#options" do
197
+ it "should expose the options hash" do
198
+ example = ExampleGroup.dup.new "name", :this => 'that' do; end
199
+ example.options[:this].should == 'that'
200
+ end
201
+ end
202
+
203
+ end
204
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ # This was added to prove that http://rspec.lighthouseapp.com/projects/5645/tickets/211
4
+ # was fixed in ruby 1.9.1
5
+
6
+ module HelperMethodExample
7
+ describe "a helper method" do
8
+ def helper_method
9
+ "received call"
10
+ end
11
+
12
+ it "is available to examples in the same group" do
13
+ helper_method.should == "received call"
14
+ end
15
+
16
+ describe "from a nested group" do
17
+ it "is available to examples in a nested group" do
18
+ helper_method.should == "received call"
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+
@@ -0,0 +1,71 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ describe 'Nested Example Groups' do
6
+ parent = self
7
+
8
+ def count
9
+ @count ||= 0
10
+ @count = @count + 1
11
+ @count
12
+ end
13
+
14
+ before(:all) do
15
+ count.should == 1
16
+ end
17
+
18
+ before(:all) do
19
+ count.should == 2
20
+ end
21
+
22
+ before(:each) do
23
+ count.should == 3
24
+ end
25
+
26
+ before(:each) do
27
+ count.should == 4
28
+ end
29
+
30
+ it "should run before(:all), before(:each), example, after(:each), after(:all) in order" do
31
+ count.should == 5
32
+ end
33
+
34
+ after(:each) do
35
+ count.should == 7
36
+ end
37
+
38
+ after(:each) do
39
+ count.should == 6
40
+ end
41
+
42
+ after(:all) do
43
+ count.should == 9
44
+ end
45
+
46
+ after(:all) do
47
+ count.should == 8
48
+ end
49
+
50
+ describe 'nested example group' do
51
+ self.superclass.should == parent
52
+
53
+ it "should run all before and after callbacks" do
54
+ count.should == 5
55
+ end
56
+ end
57
+ end
58
+
59
+ describe "Nested Example Groups" do
60
+ describe "description options", :other_options => "other options" do
61
+ it "should have a spec_path" do
62
+ self.class.description_options[:spec_path].should match(/#{__FILE__}/)
63
+ end
64
+
65
+ it "should pass other options" do
66
+ self.class.description_options[:other_options].should == "other options"
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,139 @@
1
+ module Spec
2
+ module Example
3
+ describe Pending do
4
+
5
+ it 'should raise an ExamplePendingError if no block is supplied' do
6
+ lambda {
7
+ pending "TODO"
8
+ }.should raise_error(ExamplePendingError, /TODO/)
9
+ end
10
+
11
+ it 'should raise an ExamplePendingError if a supplied block fails as expected' do
12
+ lambda {
13
+ pending "TODO" do
14
+ raise "oops"
15
+ end
16
+ }.should raise_error(ExamplePendingError, /TODO/)
17
+ end
18
+
19
+ it 'should raise an ExamplePendingError if a supplied block fails as expected with a mock' do
20
+ lambda {
21
+ pending "TODO" do
22
+ m = mock('thing')
23
+ m.should_receive(:foo)
24
+ m.rspec_verify
25
+ end
26
+ }.should raise_error(ExamplePendingError, /TODO/)
27
+ end
28
+
29
+ it 'should raise a PendingExampleFixedError if a supplied block starts working' do
30
+ lambda {
31
+ pending "TODO" do
32
+ # success!
33
+ end
34
+ }.should raise_error(PendingExampleFixedError, /TODO/)
35
+ end
36
+
37
+ it "should have the correct file and line number for pending given with a block which fails" do
38
+ file = __FILE__
39
+ line_number = __LINE__ + 2
40
+ begin
41
+ pending do
42
+ raise
43
+ end
44
+ rescue => error
45
+ error.pending_caller.should == "#{file}:#{line_number}"
46
+ end
47
+ end
48
+
49
+ it "should have the correct file and line number for pending given with no block" do
50
+ file = __FILE__
51
+ line_number = __LINE__ + 2
52
+ begin
53
+ pending("TODO")
54
+ rescue => error
55
+ error.pending_caller.should == "#{file}:#{line_number}"
56
+ end
57
+ end
58
+ end
59
+
60
+ describe ExamplePendingError do
61
+ it "should have the caller (from two calls from initialization)" do
62
+ two_calls_ago = caller[0]
63
+ ExamplePendingError.new("a message").pending_caller.should == two_calls_ago
64
+ end
65
+
66
+ it "should keep the trace information from initialization" do
67
+ two_calls_ago = caller[0]
68
+ obj = ExamplePendingError.new("a message")
69
+ obj.pending_caller
70
+ def another_caller(obj)
71
+ obj.pending_caller
72
+ end
73
+
74
+ another_caller(obj).should == two_calls_ago
75
+ end
76
+
77
+ it "should have the message provided" do
78
+ ExamplePendingError.new("a message").message.should == "a message"
79
+ end
80
+
81
+ it "should use a 'ExamplePendingError' as it's default message" do
82
+ ExamplePendingError.new.message.should == "Spec::Example::ExamplePendingError"
83
+ end
84
+ end
85
+
86
+ describe NotYetImplementedError do
87
+ def rspec_root
88
+ File.expand_path(__FILE__.gsub("/spec/spec/example/pending_module_spec.rb", "/lib"))
89
+ end
90
+
91
+ it "should have the root rspec path" do
92
+ NotYetImplementedError::RSPEC_ROOT_LIB.should == rspec_root
93
+ end
94
+
95
+ it "should always have the error 'Not Yet Implemented'" do
96
+ NotYetImplementedError.new([]).message.should == "Not Yet Implemented"
97
+ end
98
+
99
+ describe "pending_caller" do
100
+ it "should select an element out of the backtrace" do
101
+ error = NotYetImplementedError.new(["foo/bar.rb:18"])
102
+
103
+ error.pending_caller.should == "foo/bar.rb:18"
104
+ end
105
+
106
+ it "should actually report the element from the backtrace" do
107
+ error = NotYetImplementedError.new(["bar.rb:18"])
108
+
109
+ error.pending_caller.should == "bar.rb:18"
110
+ end
111
+
112
+ it "should not use an element with the rspec root path" do
113
+ error = NotYetImplementedError.new(["#{rspec_root}:8"])
114
+
115
+ error.pending_caller.should be_nil
116
+ end
117
+
118
+ it "should select the first line in the backtrace which isn't in the rspec root" do
119
+ error = NotYetImplementedError.new([
120
+ "#{rspec_root}/foo.rb:2",
121
+ "#{rspec_root}/foo/bar.rb:18",
122
+ "path1.rb:22",
123
+ "path2.rb:33"
124
+ ])
125
+
126
+ error.pending_caller.should == "path1.rb:22"
127
+ end
128
+
129
+ it "should cache the caller" do
130
+ backtrace = mock('backtrace')
131
+ backtrace.should_receive(:detect).once
132
+
133
+ error = NotYetImplementedError.new(backtrace)
134
+ error.pending_caller.should == error.pending_caller
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ class Fish
6
+ def can_swim?(distance_in_yards)
7
+ distance_in_yards < 1000
8
+ end
9
+ end
10
+
11
+ describe "predicate_matcher[method_on_object] = matcher_method" do
12
+ predicate_matchers[:swim] = :can_swim?
13
+ it "should match matcher_method if method_on_object returns true" do
14
+ swim(100).matches?(Fish.new).should be_true
15
+ end
16
+ it "should not match matcher_method if method_on_object returns false" do
17
+ swim(10000).matches?(Fish.new).should be_false
18
+ end
19
+ end
20
+ end
21
+ end