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,88 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module DSL
5
+ describe Main do
6
+ before(:each) do
7
+ @main = Class.new do; include Spec::DSL::Main; end
8
+ end
9
+
10
+ [:describe, :context].each do |method|
11
+ describe "##{method}" do
12
+ it "should delegate to Spec::Example::ExampleGroupFactory.create_example_group" do
13
+ block = lambda {}
14
+ Spec::Example::ExampleGroupFactory.should_receive(:create_example_group).with(
15
+ "The ExampleGroup", hash_including(:spec_path), &block
16
+ )
17
+ @main.__send__ method, "The ExampleGroup", &block
18
+ end
19
+ end
20
+ end
21
+
22
+ [:share_examples_for, :shared_examples_for].each do |method|
23
+ describe "##{method}" do
24
+ it "should create a shared ExampleGroup" do
25
+ block = lambda {}
26
+ Spec::Example::ExampleGroupFactory.should_receive(:create_shared_example_group).with(
27
+ "shared group", hash_including(:spec_path), &block
28
+ )
29
+ @main.__send__ method, "shared group", &block
30
+ end
31
+ end
32
+ end
33
+
34
+ describe "#describe; with RUBY_VERSION = 1.9" do
35
+ it "includes an enclosing module into the block's scope" do
36
+ Spec::Ruby.stub!(:version).and_return("1.9")
37
+
38
+ module Foo; module Bar; end; end
39
+
40
+ Foo::Bar.should_receive(:included).with do |*args|
41
+ included_by = args.last
42
+ included_by.description.should == "this example group"
43
+ end
44
+
45
+ module Foo
46
+ module Bar
47
+ describe("this example group") do; end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+
54
+ describe "#share_as" do
55
+ def self.next_group_name
56
+ @group_number ||= 0
57
+ @group_number += 1
58
+ "Group#{@group_number}"
59
+ end
60
+
61
+ def group_name
62
+ @group_name ||= self.class.next_group_name
63
+ end
64
+
65
+ it "registers a shared ExampleGroup" do
66
+ block = lambda {}
67
+ Spec::Example::ExampleGroupFactory.should_receive(:create_shared_example_group).with(
68
+ group_name, hash_including(:spec_path), &block
69
+ )
70
+ @main.share_as group_name, &block
71
+ end
72
+
73
+ it "creates a constant that points to a Module" do
74
+ group = @main.share_as group_name do end
75
+ Object.const_get(group_name).should equal(group)
76
+ end
77
+
78
+ it "complains if you pass it a not-constantizable name" do
79
+ lambda do
80
+ @group = @main.share_as "Non Constant" do end
81
+ end.should raise_error(NameError, /The first argument to share_as must be a legal name for a constant/)
82
+ end
83
+
84
+ end
85
+ end
86
+ end
87
+ end
88
+
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ class ExampleGroupSubclass < ExampleGroup
6
+ class << self
7
+ attr_accessor :examples_ran
8
+ end
9
+
10
+ @@class_variable = :class_variable
11
+ CONSTANT = :constant
12
+
13
+ before(:each) do
14
+ @instance_variable = :instance_variable
15
+ end
16
+
17
+ after(:all) do
18
+ self.class.examples_ran = true
19
+ end
20
+
21
+ def a_method
22
+ 22
23
+ end
24
+
25
+ it "can access instance variables defined before(:each)" do
26
+ @instance_variable.should == :instance_variable
27
+ end
28
+
29
+ it "can access class variables" do
30
+ @@class_variable.should == :class_variable
31
+ end
32
+
33
+ it "can access constants" do
34
+ CONSTANT.should == :constant
35
+ end
36
+
37
+ it "can access methods defined in the Example Group" do
38
+ a_method.should == 22
39
+ end
40
+
41
+ end
42
+
43
+ describe ExampleGroupSubclass do
44
+ it "should run" do
45
+ ExampleGroupSubclass.examples_ran.should be_true
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,224 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ module Spec
4
+ module Example
5
+ describe ExampleGroupFactory do
6
+ describe "#get" do
7
+ attr_reader :example_group
8
+ before(:each) do
9
+ @example_group_class = Class.new(ExampleGroupDouble)
10
+ ExampleGroupFactory.register(:registered_type, @example_group_class)
11
+ end
12
+
13
+ after(:each) do
14
+ ExampleGroupFactory.reset
15
+ end
16
+
17
+ it "should return the default ExampleGroup type for nil" do
18
+ ExampleGroupFactory.get(nil).should == ExampleGroup
19
+ end
20
+
21
+ it "should return the default ExampleGroup for an unregistered non-nil value" do
22
+ ExampleGroupFactory.get(:does_not_exist).should == ExampleGroup
23
+ end
24
+
25
+ it "should return custom type if registered" do
26
+ ExampleGroupFactory.get(:registered_type).should == @example_group_class
27
+ end
28
+
29
+ it "should return the actual type when that is what is submitted" do
30
+ ExampleGroupFactory.get(@example_group_class).should == @example_group_class
31
+ end
32
+
33
+ it "should get the custom type after setting the default" do
34
+ @alternate_example_group_class = Class.new(ExampleGroupDouble)
35
+ ExampleGroupFactory.default(@alternate_example_group_class)
36
+ ExampleGroupFactory.get(:registered_type).should == @example_group_class
37
+ end
38
+ end
39
+
40
+ describe "#create_example_group" do
41
+ attr_reader :parent_example_group
42
+ before do
43
+ @parent_example_group = Class.new(ExampleGroupDouble) do
44
+ def initialize(*args, &block)
45
+ ;
46
+ end
47
+ end
48
+ end
49
+
50
+ it "should create a uniquely named class" do
51
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
52
+ example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/
53
+ end
54
+
55
+ it "should create a Spec::Example::Example subclass by default" do
56
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
57
+ example_group.superclass.should == Spec::Example::ExampleGroup
58
+ end
59
+
60
+ it "should raise when no description is given" do
61
+ lambda {
62
+ Spec::Example::ExampleGroupFactory.create_example_group do; end
63
+ }.should raise_error(ArgumentError)
64
+ end
65
+
66
+ it "should raise when no block is given" do
67
+ lambda { Spec::Example::ExampleGroupFactory.create_example_group "foo" }.should raise_error(ArgumentError)
68
+ end
69
+
70
+ it "should run registered ExampleGroups" do
71
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group "The ExampleGroup" do end
72
+ Spec::Runner.options.example_groups.should include(example_group)
73
+ end
74
+
75
+ it "should not run unregistered ExampleGroups" do
76
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group "The ExampleGroup" do Spec::Runner.options.remove_example_group self; end
77
+ Spec::Runner.options.example_groups.should_not include(example_group)
78
+ end
79
+
80
+ describe "with :type => :default" do
81
+ it "should create a Spec::Example::ExampleGroup" do
82
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
83
+ "example_group", :type => :default
84
+ ) {}
85
+ example_group.superclass.should == Spec::Example::ExampleGroup
86
+ end
87
+ end
88
+
89
+ describe "with :type => :something_other_than_default" do
90
+ it "should create the specified type" do
91
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
92
+ non_default_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
93
+ "example_group", :type => :something_other_than_default
94
+ ) {}
95
+ non_default_example_group.superclass.should == parent_example_group
96
+ end
97
+ end
98
+
99
+ it "should create a type indicated by :spec_path" do
100
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
101
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
102
+ "example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb"
103
+ ) {}
104
+ custom_example_group.superclass.should == parent_example_group
105
+ end
106
+
107
+ it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do
108
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
109
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
110
+ "example_group",
111
+ :spec_path => "./spec\\something_other_than_default\\some_spec.rb"
112
+ ) {}
113
+ custom_example_group.superclass.should == parent_example_group
114
+ end
115
+
116
+ it "should create a type indicated by spec_path for a path-like key" do
117
+ Spec::Example::ExampleGroupFactory.register('path/to/custom/', parent_example_group)
118
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
119
+ "example_group", :spec_path => "./spec/path/to/custom/some_spec.rb"
120
+ ) {}
121
+ custom_example_group.superclass.should == parent_example_group
122
+ end
123
+
124
+ it "should use the longest key that matches when creating a type indicated by spec_path" do
125
+ longer = Class.new parent_example_group
126
+ Spec::Example::ExampleGroupFactory.register(:longer, longer)
127
+ long = Class.new parent_example_group
128
+ Spec::Example::ExampleGroupFactory.register(:long, long)
129
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
130
+ "example_group", :spec_path => "./spec/longer/some_spec.rb"
131
+ ) {}
132
+ custom_example_group.superclass.should == longer
133
+ end
134
+
135
+ it "sets the spec_path from the caller" do
136
+ options = {}
137
+ shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group("foo", options) {}
138
+ options[:spec_path].should =~ /#{__FILE__}:#{__LINE__ - 1}/
139
+ end
140
+
141
+ describe "with :shared => true" do
142
+ def shared_example_group
143
+ @shared_example_group ||= Spec::Example::ExampleGroupFactory.create_example_group(
144
+ "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
145
+ ) {}
146
+ end
147
+
148
+ it "should create and register a Spec::Example::SharedExampleGroup" do
149
+ shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
150
+ SharedExampleGroup.should include(shared_example_group)
151
+ end
152
+ end
153
+
154
+ it "should favor the :type over the :spec_path" do
155
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
156
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
157
+ "name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default
158
+ ) {}
159
+ custom_example_group.superclass.should == parent_example_group
160
+ end
161
+
162
+ it "should register ExampleGroup by default" do
163
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
164
+ end
165
+ Spec::Runner.options.example_groups.should include(example_group)
166
+ end
167
+
168
+ it "should enable unregistering of ExampleGroups" do
169
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
170
+ Spec::Runner.options.remove_example_group self
171
+ end
172
+ Spec::Runner.options.example_groups.should_not include(example_group)
173
+ end
174
+
175
+ after(:each) do
176
+ Spec::Example::ExampleGroupFactory.reset
177
+ end
178
+ end
179
+
180
+ describe "#create_shared_example_group" do
181
+ it "registers a new shared example group" do
182
+ shared_example_group = Spec::Example::ExampleGroupFactory.create_shared_example_group("something shared") {}
183
+ shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
184
+ SharedExampleGroup.should include(shared_example_group)
185
+ end
186
+
187
+ it "sets the spec_path from the caller" do
188
+ options = {}
189
+ shared_example_group = Spec::Example::ExampleGroupFactory.create_shared_example_group("foo", options) {}
190
+ options[:spec_path].should =~ /#{__FILE__}:#{__LINE__ - 1}/
191
+ end
192
+ end
193
+
194
+ describe "#registered_or_ancestor_of_registered?" do
195
+ before(:each) do
196
+ @unregistered_parent = Class.new(ExampleGroupDouble)
197
+ @registered_child = Class.new(@unregistered_parent)
198
+ @unregistered_grandchild = Class.new(@registered_child)
199
+ Spec::Example::ExampleGroupFactory.register :registered_child, @registered_child
200
+ end
201
+
202
+ it "should return true for empty list" do
203
+ Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?([]).should be_true
204
+ end
205
+
206
+ it "should return true for a registered example group class" do
207
+ Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?([@registered_child]).should be_true
208
+ end
209
+
210
+ it "should return true for an ancestor of a registered example_group_classes" do
211
+ Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?([@unregistered_parent]).should be_true
212
+ end
213
+
214
+ it "should return false for a subclass of a registered example_group_class" do
215
+ Spec::Example::ExampleGroupFactory.registered_or_ancestor_of_registered?([@unregistered_grandchild]).should be_false
216
+ end
217
+
218
+ after(:each) do
219
+ Spec::Example::ExampleGroupFactory.reset
220
+ end
221
+ end
222
+ end
223
+ end
224
+ end