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,87 @@
1
+ module Spec
2
+ module DSL
3
+ module Main
4
+ # Creates and returns a class that includes the ExampleGroupMethods
5
+ # module. Which ExampleGroup type is created depends on the directory of the file
6
+ # calling this method. For example, Spec::Rails will use different
7
+ # classes for specs living in <tt>spec/models</tt>,
8
+ # <tt>spec/helpers</tt>, <tt>spec/views</tt> and
9
+ # <tt>spec/controllers</tt>.
10
+ #
11
+ # It is also possible to override autodiscovery of the example group
12
+ # type with an options Hash as the last argument:
13
+ #
14
+ # describe "name", :type => :something_special do ...
15
+ #
16
+ # The reason for using different behaviour classes is to have different
17
+ # matcher methods available from within the <tt>describe</tt> block.
18
+ #
19
+ # See Spec::Example::ExampleGroupFactory#register for details about how to
20
+ # register special implementations.
21
+ #
22
+ def describe(*args, &block)
23
+ Spec::Example::add_spec_path_to(args)
24
+ Spec::Example::ExampleGroupFactory.assign_scope(self, args)
25
+ Spec::Example::ExampleGroupFactory.create_example_group(*args, &block)
26
+ end
27
+ alias :context :describe
28
+
29
+ # Creates an example group that can be shared by other example groups
30
+ #
31
+ # == Examples
32
+ #
33
+ # share_examples_for "All Editions" do
34
+ # it "all editions behaviour" ...
35
+ # end
36
+ #
37
+ # describe SmallEdition do
38
+ # it_should_behave_like "All Editions"
39
+ #
40
+ # it "should do small edition stuff" do
41
+ # ...
42
+ # end
43
+ # end
44
+ def share_examples_for(*args, &block)
45
+ Spec::Example::add_spec_path_to(args)
46
+ Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block)
47
+ end
48
+ alias :shared_examples_for :share_examples_for
49
+
50
+ # Creates a Shared Example Group and assigns it to a constant
51
+ #
52
+ # share_as :AllEditions do
53
+ # it "should do all editions stuff" ...
54
+ # end
55
+ #
56
+ # describe SmallEdition do
57
+ # it_should_behave_like AllEditions
58
+ #
59
+ # it "should do small edition stuff" do
60
+ # ...
61
+ # end
62
+ # end
63
+ #
64
+ # And, for those of you who prefer to use something more like Ruby, you
65
+ # can just include the module directly
66
+ #
67
+ # describe SmallEdition do
68
+ # include AllEditions
69
+ #
70
+ # it "should do small edition stuff" do
71
+ # ...
72
+ # end
73
+ # end
74
+ def share_as(name, &block)
75
+ begin
76
+ args = [name]
77
+ Spec::Example::add_spec_path_to(args)
78
+ Object.const_set(name, Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block))
79
+ rescue NameError => e
80
+ raise NameError.new(e.message + "\nThe first argument to share_as must be a legal name for a constant\n")
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ include Spec::DSL::Main
data/lib/spec/dsl.rb ADDED
@@ -0,0 +1 @@
1
+ require 'spec/dsl/main'
@@ -0,0 +1,99 @@
1
+ module Spec
2
+ module Example
3
+ module BeforeAndAfterHooks
4
+ class << self
5
+ def before_suite_parts
6
+ @before_suite_parts ||= []
7
+ end
8
+
9
+ def after_suite_parts
10
+ @after_suite_parts ||= []
11
+ end
12
+ end
13
+
14
+ # Registers a block to be executed before each example.
15
+ # This method prepends +block+ to existing before blocks.
16
+ def prepend_before(*args, &block)
17
+ before_parts(*args).unshift(block)
18
+ end
19
+
20
+ # Registers a block to be executed before each example.
21
+ # This method appends +block+ to existing before blocks.
22
+ def append_before(*args, &block)
23
+ before_parts(*args) << block
24
+ end
25
+ alias_method :before, :append_before
26
+
27
+ # Registers a block to be executed after each example.
28
+ # This method prepends +block+ to existing after blocks.
29
+ def prepend_after(*args, &block)
30
+ after_parts(*args).unshift(block)
31
+ end
32
+ alias_method :after, :prepend_after
33
+
34
+ # Registers a block to be executed after each example.
35
+ # This method appends +block+ to existing after blocks.
36
+ def append_after(*args, &block)
37
+ after_parts(*args) << block
38
+ end
39
+
40
+ # TODO - deprecate this unless there is a reason why it exists
41
+ def remove_after(scope, &block) # :nodoc:
42
+ after_each_parts.delete(block)
43
+ end
44
+
45
+ # Deprecated. Use before(:each)
46
+ def setup(&block)
47
+ before(:each, &block)
48
+ end
49
+
50
+ # Deprecated. Use after(:each)
51
+ def teardown(&block)
52
+ after(:each, &block)
53
+ end
54
+
55
+ def before_all_parts # :nodoc:
56
+ @before_all_parts ||= []
57
+ end
58
+
59
+ def after_all_parts # :nodoc:
60
+ @after_all_parts ||= []
61
+ end
62
+
63
+ def before_each_parts # :nodoc:
64
+ @before_each_parts ||= []
65
+ end
66
+
67
+ def after_each_parts # :nodoc:
68
+ @after_each_parts ||= []
69
+ end
70
+
71
+ def before_suite_parts
72
+ BeforeAndAfterHooks.before_suite_parts
73
+ end
74
+
75
+ def after_suite_parts
76
+ BeforeAndAfterHooks.after_suite_parts
77
+ end
78
+
79
+ private
80
+
81
+ def before_parts(*args)
82
+ case Spec::Example.scope_from(*args)
83
+ when :each; before_each_parts
84
+ when :all; before_all_parts
85
+ when :suite; before_suite_parts
86
+ end
87
+ end
88
+
89
+ def after_parts(*args)
90
+ case Spec::Example.scope_from(*args)
91
+ when :each; after_each_parts
92
+ when :all; after_all_parts
93
+ when :suite; after_suite_parts
94
+ end
95
+ end
96
+
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,30 @@
1
+ module Spec
2
+ module Example
3
+ class ExamplePendingError < StandardError
4
+ attr_reader :pending_caller
5
+
6
+ def initialize(message=nil)
7
+ super
8
+ @pending_caller = caller[2]
9
+ end
10
+ end
11
+
12
+ class NotYetImplementedError < ExamplePendingError
13
+ MESSAGE = "Not Yet Implemented"
14
+ RSPEC_ROOT_LIB = File.expand_path(File.dirname(__FILE__) + "/../..")
15
+
16
+ def initialize(backtrace)
17
+ super(MESSAGE)
18
+ @pending_caller = pending_caller_from(backtrace)
19
+ end
20
+
21
+ private
22
+
23
+ def pending_caller_from(backtrace)
24
+ backtrace.detect {|line| !line.include?(RSPEC_ROOT_LIB) }
25
+ end
26
+ end
27
+
28
+ class PendingExampleFixedError < StandardError; end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ module Spec
2
+ module Example
3
+ # Base class for customized example groups. Use this if you
4
+ # want to make a custom example group.
5
+ class ExampleGroup
6
+ extend Spec::Example::ExampleGroupMethods
7
+ include Spec::Example::ExampleMethods
8
+
9
+ def initialize(defined_description=nil, options={}, &implementation)
10
+ @_options = options
11
+ @_defined_description = defined_description
12
+ @_implementation = implementation || pending_implementation
13
+ @_backtrace = caller
14
+ end
15
+
16
+ private
17
+
18
+ def pending_implementation
19
+ error = NotYetImplementedError.new(caller)
20
+ lambda { raise(error) }
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ Spec::ExampleGroup = Spec::Example::ExampleGroup
@@ -0,0 +1,98 @@
1
+ module Spec
2
+ module Example
3
+ class ExampleGroupFactory
4
+ module ClassMethods
5
+ def reset
6
+ @example_group_types = nil
7
+ default(ExampleGroup)
8
+ end
9
+
10
+ def registered_or_ancestor_of_registered?(example_group_classes) # :nodoc:
11
+ example_group_classes.each do |example_group_class|
12
+ return false unless registered_types.any? do |registered_type|
13
+ registered_type.ancestors.include? example_group_class
14
+ end
15
+ end
16
+ return true
17
+ end
18
+
19
+ # Registers an example group class +klass+ with the symbol +type+. For
20
+ # example:
21
+ #
22
+ # Spec::Example::ExampleGroupFactory.register(:farm, FarmExampleGroup)
23
+ #
24
+ # With that you can append a hash with :type => :farm to the describe
25
+ # method and it will load an instance of FarmExampleGroup.
26
+ #
27
+ # describe Pig, :type => :farm do
28
+ # ...
29
+ #
30
+ # If you don't use the hash explicitly, <tt>describe</tt> will
31
+ # implicitly use an instance of FarmExampleGroup for any file loaded
32
+ # from the <tt>./spec/farm</tt> directory.
33
+ def register(key, example_group_class)
34
+ @example_group_types[key.to_sym] = example_group_class
35
+ end
36
+
37
+ # Sets the default ExampleGroup class
38
+ def default(example_group_class)
39
+ old = @example_group_types
40
+ @example_group_types = Hash.new(example_group_class)
41
+ @example_group_types.merge!(old) if old
42
+ end
43
+
44
+ def get(key=nil)
45
+ if @example_group_types.values.include?(key)
46
+ key
47
+ else
48
+ @example_group_types[key]
49
+ end
50
+ end
51
+
52
+ def create_example_group(*args, &block)
53
+ raise ArgumentError if args.empty?
54
+ raise ArgumentError unless block
55
+ Spec::Example::add_spec_path_to(args)
56
+ superclass = determine_superclass(args.last)
57
+ superclass.describe(*args, &block)
58
+ end
59
+
60
+ def create_shared_example_group(*args, &block)
61
+ Spec::Example::add_spec_path_to(args)
62
+ SharedExampleGroup.register(*args, &block)
63
+ end
64
+
65
+ def include_constants_in(context, &block)
66
+ if (Spec::Ruby.version.to_f >= 1.9 && Module === context && !(Class === context))
67
+ return lambda {include context;instance_eval(&block)}
68
+ end
69
+ block
70
+ end
71
+
72
+ def assign_scope(scope, args)
73
+ args.last[:scope] = scope
74
+ end
75
+
76
+ protected
77
+
78
+ def determine_superclass(opts)
79
+ key = if opts[:type]
80
+ opts[:type]
81
+ elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.sort_by{|k| k.to_s.length}.reverse.join('|')})/
82
+ $2 == '' ? nil : $2.to_sym
83
+ end
84
+ get(key)
85
+ end
86
+
87
+ private
88
+
89
+ def registered_types
90
+ @example_group_types.values
91
+ end
92
+
93
+ end
94
+ extend ClassMethods
95
+ self.reset
96
+ end
97
+ end
98
+ end