dchelimsky-rspec 1.1.10

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 (404) hide show
  1. data/History.txt +1192 -0
  2. data/License.txt +22 -0
  3. data/Manifest.txt +403 -0
  4. data/README.txt +39 -0
  5. data/Rakefile +90 -0
  6. data/TODO.txt +10 -0
  7. data/bin/autospec +4 -0
  8. data/bin/spec +4 -0
  9. data/examples/pure/autogenerated_docstrings_example.rb +19 -0
  10. data/examples/pure/before_and_after_example.rb +40 -0
  11. data/examples/pure/behave_as_example.rb +45 -0
  12. data/examples/pure/custom_expectation_matchers.rb +54 -0
  13. data/examples/pure/custom_formatter.rb +12 -0
  14. data/examples/pure/dynamic_spec.rb +9 -0
  15. data/examples/pure/file_accessor.rb +19 -0
  16. data/examples/pure/file_accessor_spec.rb +38 -0
  17. data/examples/pure/greeter_spec.rb +31 -0
  18. data/examples/pure/helper_method_example.rb +14 -0
  19. data/examples/pure/io_processor.rb +8 -0
  20. data/examples/pure/io_processor_spec.rb +21 -0
  21. data/examples/pure/legacy_spec.rb +11 -0
  22. data/examples/pure/mocking_example.rb +27 -0
  23. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  24. data/examples/pure/nested_classes_example.rb +36 -0
  25. data/examples/pure/partial_mock_example.rb +29 -0
  26. data/examples/pure/pending_example.rb +20 -0
  27. data/examples/pure/predicate_example.rb +27 -0
  28. data/examples/pure/priority.txt +1 -0
  29. data/examples/pure/shared_example_group_example.rb +81 -0
  30. data/examples/pure/shared_stack_examples.rb +38 -0
  31. data/examples/pure/spec_helper.rb +3 -0
  32. data/examples/pure/stack.rb +36 -0
  33. data/examples/pure/stack_spec.rb +63 -0
  34. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  35. data/examples/pure/stubbing_example.rb +69 -0
  36. data/examples/pure/yielding_example.rb +33 -0
  37. data/examples/stories/adder.rb +13 -0
  38. data/examples/stories/addition +34 -0
  39. data/examples/stories/addition.rb +9 -0
  40. data/examples/stories/calculator.rb +65 -0
  41. data/examples/stories/game-of-life/.loadpath +5 -0
  42. data/examples/stories/game-of-life/README.txt +21 -0
  43. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  44. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  45. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  46. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  47. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  48. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  49. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  50. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  51. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  52. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  53. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  54. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  55. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  56. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  57. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  58. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  59. data/examples/stories/game-of-life/life/game.rb +23 -0
  60. data/examples/stories/game-of-life/life/grid.rb +43 -0
  61. data/examples/stories/game-of-life/life.rb +3 -0
  62. data/examples/stories/helper.rb +9 -0
  63. data/examples/stories/steps/addition_steps.rb +18 -0
  64. data/failing_examples/README.txt +7 -0
  65. data/failing_examples/diffing_spec.rb +36 -0
  66. data/failing_examples/failing_autogenerated_docstrings_example.rb +19 -0
  67. data/failing_examples/failure_in_setup.rb +10 -0
  68. data/failing_examples/failure_in_teardown.rb +10 -0
  69. data/failing_examples/mocking_example.rb +40 -0
  70. data/failing_examples/mocking_with_flexmock.rb +26 -0
  71. data/failing_examples/mocking_with_mocha.rb +25 -0
  72. data/failing_examples/mocking_with_rr.rb +27 -0
  73. data/failing_examples/partial_mock_example.rb +20 -0
  74. data/failing_examples/predicate_example.rb +29 -0
  75. data/failing_examples/raising_example.rb +47 -0
  76. data/failing_examples/spec_helper.rb +3 -0
  77. data/failing_examples/syntax_error_example.rb +7 -0
  78. data/failing_examples/team_spec.rb +44 -0
  79. data/failing_examples/timeout_behaviour.rb +7 -0
  80. data/init.rb +9 -0
  81. data/lib/autotest/discover.rb +3 -0
  82. data/lib/autotest/rspec.rb +46 -0
  83. data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
  84. data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
  85. data/lib/spec/adapters/ruby_engine.rb +26 -0
  86. data/lib/spec/adapters.rb +1 -0
  87. data/lib/spec/example/before_and_after_hooks.rb +93 -0
  88. data/lib/spec/example/configuration.rb +167 -0
  89. data/lib/spec/example/errors.rb +30 -0
  90. data/lib/spec/example/example_group.rb +25 -0
  91. data/lib/spec/example/example_group_factory.rb +81 -0
  92. data/lib/spec/example/example_group_methods.rb +368 -0
  93. data/lib/spec/example/example_matcher.rb +44 -0
  94. data/lib/spec/example/example_methods.rb +105 -0
  95. data/lib/spec/example/module_reopening_fix.rb +21 -0
  96. data/lib/spec/example/pending.rb +18 -0
  97. data/lib/spec/example/shared_example_group.rb +52 -0
  98. data/lib/spec/example.rb +12 -0
  99. data/lib/spec/expectations/differs/default.rb +66 -0
  100. data/lib/spec/expectations/errors.rb +12 -0
  101. data/lib/spec/expectations/extensions/object.rb +63 -0
  102. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  103. data/lib/spec/expectations/extensions.rb +2 -0
  104. data/lib/spec/expectations/handler.rb +52 -0
  105. data/lib/spec/expectations.rb +56 -0
  106. data/lib/spec/extensions/class.rb +24 -0
  107. data/lib/spec/extensions/main.rb +87 -0
  108. data/lib/spec/extensions/metaclass.rb +7 -0
  109. data/lib/spec/extensions/object.rb +6 -0
  110. data/lib/spec/extensions.rb +4 -0
  111. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  112. data/lib/spec/interop/test/unit/testcase.rb +71 -0
  113. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  114. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  115. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  116. data/lib/spec/interop/test.rb +12 -0
  117. data/lib/spec/matchers/be.rb +221 -0
  118. data/lib/spec/matchers/be_close.rb +37 -0
  119. data/lib/spec/matchers/change.rb +148 -0
  120. data/lib/spec/matchers/eql.rb +43 -0
  121. data/lib/spec/matchers/equal.rb +43 -0
  122. data/lib/spec/matchers/exist.rb +22 -0
  123. data/lib/spec/matchers/has.rb +34 -0
  124. data/lib/spec/matchers/have.rb +150 -0
  125. data/lib/spec/matchers/include.rb +77 -0
  126. data/lib/spec/matchers/match.rb +41 -0
  127. data/lib/spec/matchers/operator_matcher.rb +79 -0
  128. data/lib/spec/matchers/raise_error.rb +132 -0
  129. data/lib/spec/matchers/respond_to.rb +46 -0
  130. data/lib/spec/matchers/satisfy.rb +47 -0
  131. data/lib/spec/matchers/simple_matcher.rb +132 -0
  132. data/lib/spec/matchers/throw_symbol.rb +74 -0
  133. data/lib/spec/matchers.rb +162 -0
  134. data/lib/spec/mocks/argument_constraints.rb +165 -0
  135. data/lib/spec/mocks/argument_expectation.rb +49 -0
  136. data/lib/spec/mocks/error_generator.rb +84 -0
  137. data/lib/spec/mocks/errors.rb +10 -0
  138. data/lib/spec/mocks/extensions/object.rb +3 -0
  139. data/lib/spec/mocks/extensions.rb +1 -0
  140. data/lib/spec/mocks/framework.rb +15 -0
  141. data/lib/spec/mocks/message_expectation.rb +331 -0
  142. data/lib/spec/mocks/methods.rb +51 -0
  143. data/lib/spec/mocks/mock.rb +56 -0
  144. data/lib/spec/mocks/order_group.rb +29 -0
  145. data/lib/spec/mocks/proxy.rb +224 -0
  146. data/lib/spec/mocks/space.rb +28 -0
  147. data/lib/spec/mocks/spec_methods.rb +46 -0
  148. data/lib/spec/mocks.rb +200 -0
  149. data/lib/spec/rake/spectask.rb +227 -0
  150. data/lib/spec/rake/verify_rcov.rb +52 -0
  151. data/lib/spec/runner/backtrace_tweaker.rb +56 -0
  152. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  153. data/lib/spec/runner/command_line.rb +17 -0
  154. data/lib/spec/runner/drb_command_line.rb +20 -0
  155. data/lib/spec/runner/example_group_runner.rb +59 -0
  156. data/lib/spec/runner/formatter/base_formatter.rb +79 -0
  157. data/lib/spec/runner/formatter/base_text_formatter.rb +126 -0
  158. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
  159. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  160. data/lib/spec/runner/formatter/html_formatter.rb +337 -0
  161. data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
  162. data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
  163. data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
  164. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  165. data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
  166. data/lib/spec/runner/formatter/story/html_formatter.rb +174 -0
  167. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +194 -0
  168. data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +42 -0
  169. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  170. data/lib/spec/runner/heckle_runner.rb +72 -0
  171. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  172. data/lib/spec/runner/option_parser.rb +205 -0
  173. data/lib/spec/runner/options.rb +320 -0
  174. data/lib/spec/runner/reporter.rb +167 -0
  175. data/lib/spec/runner/spec_parser.rb +71 -0
  176. data/lib/spec/runner.rb +213 -0
  177. data/lib/spec/story/extensions/main.rb +86 -0
  178. data/lib/spec/story/extensions/regexp.rb +9 -0
  179. data/lib/spec/story/extensions/string.rb +9 -0
  180. data/lib/spec/story/extensions.rb +3 -0
  181. data/lib/spec/story/given_scenario.rb +14 -0
  182. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  183. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  184. data/lib/spec/story/runner/scenario_runner.rb +54 -0
  185. data/lib/spec/story/runner/story_mediator.rb +137 -0
  186. data/lib/spec/story/runner/story_parser.rb +247 -0
  187. data/lib/spec/story/runner/story_runner.rb +70 -0
  188. data/lib/spec/story/runner.rb +59 -0
  189. data/lib/spec/story/scenario.rb +14 -0
  190. data/lib/spec/story/step.rb +70 -0
  191. data/lib/spec/story/step_group.rb +89 -0
  192. data/lib/spec/story/step_mother.rb +38 -0
  193. data/lib/spec/story/story.rb +39 -0
  194. data/lib/spec/story/world.rb +128 -0
  195. data/lib/spec/story.rb +10 -0
  196. data/lib/spec/version.rb +13 -0
  197. data/lib/spec.rb +32 -0
  198. data/plugins/mock_frameworks/flexmock.rb +23 -0
  199. data/plugins/mock_frameworks/mocha.rb +19 -0
  200. data/plugins/mock_frameworks/rr.rb +21 -0
  201. data/plugins/mock_frameworks/rspec.rb +20 -0
  202. data/rake_tasks/examples.rake +7 -0
  203. data/rake_tasks/examples_with_rcov.rake +9 -0
  204. data/rake_tasks/failing_examples_with_html.rake +9 -0
  205. data/rake_tasks/verify_rcov.rake +7 -0
  206. data/rspec.gemspec +42 -0
  207. data/spec/README.jruby +15 -0
  208. data/spec/autotest/autotest_helper.rb +6 -0
  209. data/spec/autotest/autotest_matchers.rb +47 -0
  210. data/spec/autotest/discover_spec.rb +19 -0
  211. data/spec/autotest/rspec_spec.rb +150 -0
  212. data/spec/rspec_suite.rb +6 -0
  213. data/spec/ruby_forker.rb +13 -0
  214. data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
  215. data/spec/spec/example/configuration_spec.rb +296 -0
  216. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  217. data/spec/spec/example/example_group_factory_spec.rb +165 -0
  218. data/spec/spec/example/example_group_methods_spec.rb +584 -0
  219. data/spec/spec/example/example_group_spec.rb +683 -0
  220. data/spec/spec/example/example_matcher_spec.rb +96 -0
  221. data/spec/spec/example/example_methods_spec.rb +169 -0
  222. data/spec/spec/example/example_runner_spec.rb +194 -0
  223. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  224. data/spec/spec/example/pending_module_spec.rb +145 -0
  225. data/spec/spec/example/predicate_matcher_spec.rb +21 -0
  226. data/spec/spec/example/shared_example_group_spec.rb +281 -0
  227. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  228. data/spec/spec/expectations/differs/default_spec.rb +127 -0
  229. data/spec/spec/expectations/extensions/object_spec.rb +95 -0
  230. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  231. data/spec/spec/extensions/main_spec.rb +71 -0
  232. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  233. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  234. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  235. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  236. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  237. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  238. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  239. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  240. data/spec/spec/interop/test/unit/spec_spec.rb +52 -0
  241. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  242. data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
  243. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  244. data/spec/spec/matchers/be_close_spec.rb +39 -0
  245. data/spec/spec/matchers/be_spec.rb +248 -0
  246. data/spec/spec/matchers/change_spec.rb +329 -0
  247. data/spec/spec/matchers/description_generation_spec.rb +153 -0
  248. data/spec/spec/matchers/eql_spec.rb +28 -0
  249. data/spec/spec/matchers/equal_spec.rb +28 -0
  250. data/spec/spec/matchers/exist_spec.rb +57 -0
  251. data/spec/spec/matchers/handler_spec.rb +150 -0
  252. data/spec/spec/matchers/has_spec.rb +63 -0
  253. data/spec/spec/matchers/have_spec.rb +394 -0
  254. data/spec/spec/matchers/include_spec.rb +64 -0
  255. data/spec/spec/matchers/match_spec.rb +37 -0
  256. data/spec/spec/matchers/matcher_methods_spec.rb +78 -0
  257. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +24 -0
  258. data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
  259. data/spec/spec/matchers/raise_error_spec.rb +315 -0
  260. data/spec/spec/matchers/respond_to_spec.rb +54 -0
  261. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  262. data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
  263. data/spec/spec/matchers/throw_symbol_spec.rb +54 -0
  264. data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
  265. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  266. data/spec/spec/mocks/at_least_spec.rb +97 -0
  267. data/spec/spec/mocks/at_most_spec.rb +93 -0
  268. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  269. data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
  270. data/spec/spec/mocks/bug_report_11545_spec.rb +33 -0
  271. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  272. data/spec/spec/mocks/bug_report_496.rb +17 -0
  273. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  274. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  275. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  276. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  277. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +95 -0
  278. data/spec/spec/mocks/hash_including_matcher_spec.rb +53 -0
  279. data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
  280. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  281. data/spec/spec/mocks/mock_spec.rb +555 -0
  282. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  283. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  284. data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
  285. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  286. data/spec/spec/mocks/options_hash_spec.rb +35 -0
  287. data/spec/spec/mocks/partial_mock_spec.rb +149 -0
  288. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  289. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +130 -0
  290. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  291. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  292. data/spec/spec/mocks/stub_spec.rb +188 -0
  293. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  294. data/spec/spec/package/bin_spec_spec.rb +22 -0
  295. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  296. data/spec/spec/runner/command_line_spec.rb +141 -0
  297. data/spec/spec/runner/drb_command_line_spec.rb +97 -0
  298. data/spec/spec/runner/empty_file.txt +0 -0
  299. data/spec/spec/runner/examples.txt +2 -0
  300. data/spec/spec/runner/failed.txt +3 -0
  301. data/spec/spec/runner/formatter/base_formatter_spec.rb +112 -0
  302. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  303. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  304. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
  305. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
  306. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
  307. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
  308. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +370 -0
  309. data/spec/spec/runner/formatter/html_formatter_spec.rb +61 -0
  310. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
  311. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  312. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +155 -0
  313. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  314. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  315. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
  316. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +135 -0
  317. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +600 -0
  318. data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +82 -0
  319. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
  320. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +370 -0
  321. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  322. data/spec/spec/runner/heckler_spec.rb +13 -0
  323. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  324. data/spec/spec/runner/option_parser_spec.rb +421 -0
  325. data/spec/spec/runner/options_spec.rb +450 -0
  326. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  327. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  328. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  329. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
  330. data/spec/spec/runner/reporter_spec.rb +238 -0
  331. data/spec/spec/runner/resources/a_bar.rb +0 -0
  332. data/spec/spec/runner/resources/a_foo.rb +0 -0
  333. data/spec/spec/runner/resources/a_spec.rb +1 -0
  334. data/spec/spec/runner/spec.opts +2 -0
  335. data/spec/spec/runner/spec_drb.opts +1 -0
  336. data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
  337. data/spec/spec/runner/spec_parser_spec.rb +85 -0
  338. data/spec/spec/runner/spec_spaced.opts +2 -0
  339. data/spec/spec/runner_spec.rb +11 -0
  340. data/spec/spec/spec_classes.rb +133 -0
  341. data/spec/spec/story/builders.rb +46 -0
  342. data/spec/spec/story/extensions/main_spec.rb +161 -0
  343. data/spec/spec/story/extensions_spec.rb +14 -0
  344. data/spec/spec/story/given_scenario_spec.rb +27 -0
  345. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +90 -0
  346. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  347. data/spec/spec/story/runner/scenario_runner_spec.rb +214 -0
  348. data/spec/spec/story/runner/story_mediator_spec.rb +143 -0
  349. data/spec/spec/story/runner/story_parser_spec.rb +401 -0
  350. data/spec/spec/story/runner/story_runner_spec.rb +294 -0
  351. data/spec/spec/story/runner_spec.rb +93 -0
  352. data/spec/spec/story/scenario_spec.rb +18 -0
  353. data/spec/spec/story/step_group_spec.rb +157 -0
  354. data/spec/spec/story/step_mother_spec.rb +84 -0
  355. data/spec/spec/story/step_spec.rb +272 -0
  356. data/spec/spec/story/story_helper.rb +2 -0
  357. data/spec/spec/story/story_spec.rb +84 -0
  358. data/spec/spec/story/world_spec.rb +423 -0
  359. data/spec/spec.opts +6 -0
  360. data/spec/spec_helper.rb +77 -0
  361. data/stories/all.rb +5 -0
  362. data/stories/configuration/before_blocks.story +21 -0
  363. data/stories/configuration/stories.rb +7 -0
  364. data/stories/example_groups/autogenerated_docstrings +45 -0
  365. data/stories/example_groups/example_group_with_should_methods +17 -0
  366. data/stories/example_groups/nested_groups +17 -0
  367. data/stories/example_groups/output +25 -0
  368. data/stories/example_groups/stories.rb +7 -0
  369. data/stories/helper.rb +6 -0
  370. data/stories/interop/examples_and_tests_together +30 -0
  371. data/stories/interop/stories.rb +7 -0
  372. data/stories/interop/test_case_with_should_methods +17 -0
  373. data/stories/mock_framework_integration/stories.rb +7 -0
  374. data/stories/mock_framework_integration/use_flexmock.story +9 -0
  375. data/stories/pending_stories/README +3 -0
  376. data/stories/resources/helpers/cmdline.rb +9 -0
  377. data/stories/resources/helpers/story_helper.rb +16 -0
  378. data/stories/resources/matchers/smart_match.rb +37 -0
  379. data/stories/resources/spec/before_blocks_example.rb +32 -0
  380. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  381. data/stories/resources/spec/simple_spec.rb +8 -0
  382. data/stories/resources/spec/spec_with_flexmock.rb +18 -0
  383. data/stories/resources/steps/running_rspec.rb +50 -0
  384. data/stories/resources/stories/failing_story.rb +15 -0
  385. data/stories/resources/test/spec_and_test_together.rb +57 -0
  386. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  387. data/stories/stories/multiline_steps.story +23 -0
  388. data/stories/stories/steps/multiline_steps.rb +13 -0
  389. data/stories/stories/stories.rb +6 -0
  390. data/story_server/prototype/javascripts/builder.js +136 -0
  391. data/story_server/prototype/javascripts/controls.js +972 -0
  392. data/story_server/prototype/javascripts/dragdrop.js +976 -0
  393. data/story_server/prototype/javascripts/effects.js +1117 -0
  394. data/story_server/prototype/javascripts/prototype.js +4140 -0
  395. data/story_server/prototype/javascripts/rspec.js +149 -0
  396. data/story_server/prototype/javascripts/scriptaculous.js +58 -0
  397. data/story_server/prototype/javascripts/slider.js +276 -0
  398. data/story_server/prototype/javascripts/sound.js +55 -0
  399. data/story_server/prototype/javascripts/unittest.js +568 -0
  400. data/story_server/prototype/lib/server.rb +24 -0
  401. data/story_server/prototype/stories.html +176 -0
  402. data/story_server/prototype/stylesheets/rspec.css +136 -0
  403. data/story_server/prototype/stylesheets/test.css +90 -0
  404. metadata +495 -0
@@ -0,0 +1,683 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ class ExampleModuleScopingSpec < ExampleGroup
6
+ describe ExampleGroup, "via a class definition"
7
+
8
+ module Foo
9
+ module Bar
10
+ def self.loaded?
11
+ true
12
+ end
13
+ end
14
+ end
15
+ include Foo
16
+
17
+ it "should understand module scoping" do
18
+ Bar.should be_loaded
19
+ end
20
+
21
+ @@foo = 1
22
+
23
+ it "should allow class variables to be defined" do
24
+ @@foo.should == 1
25
+ end
26
+ end
27
+
28
+ class ExampleClassVariablePollutionSpec < ExampleGroup
29
+ describe ExampleGroup, "via a class definition without a class variable"
30
+
31
+ it "should not retain class variables from other Example classes" do
32
+ proc do
33
+ @@foo
34
+ end.should raise_error
35
+ end
36
+ end
37
+
38
+ describe ExampleGroup, "#pending" do
39
+ it "should raise a Pending error when its block fails" do
40
+ block_ran = false
41
+ lambda {
42
+ pending("something") do
43
+ block_ran = true
44
+ raise "something wrong with my example"
45
+ end
46
+ }.should raise_error(Spec::Example::ExamplePendingError, "something")
47
+ block_ran.should == true
48
+ end
49
+
50
+ it "should raise Spec::Example::PendingExampleFixedError when its block does not fail" do
51
+ block_ran = false
52
+ lambda {
53
+ pending("something") do
54
+ block_ran = true
55
+ end
56
+ }.should raise_error(Spec::Example::PendingExampleFixedError, "Expected pending 'something' to fail. No Error was raised.")
57
+ block_ran.should == true
58
+ end
59
+ end
60
+
61
+ describe ExampleGroup, "#run with failure in example", :shared => true do
62
+ it "should add an example failure to the TestResult" do
63
+ example_group.run.should be_false
64
+ end
65
+ end
66
+
67
+ describe ExampleGroup, "#run" do
68
+ with_sandboxed_options do
69
+ attr_reader :example_group, :formatter, :reporter
70
+ before :each do
71
+ method_with_three_args = lambda { |arg1, arg2, arg3| }
72
+ @formatter = mock("formatter", :null_object => true, :example_pending => method_with_three_args)
73
+ options.formatters << formatter
74
+ options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
75
+ @reporter = FakeReporter.new(options)
76
+ options.reporter = reporter
77
+ @example_group = Class.new(ExampleGroup) do
78
+ describe("example")
79
+ it "does nothing" do
80
+ end
81
+ end
82
+ class << example_group
83
+ public :include
84
+ end
85
+ end
86
+
87
+ after :each do
88
+ ExampleGroup.reset
89
+ end
90
+
91
+ it "should not run when there are no examples" do
92
+ example_group = Class.new(ExampleGroup) do
93
+ describe("Foobar")
94
+ end
95
+ example_group.examples.should be_empty
96
+
97
+ reporter = mock("Reporter")
98
+ reporter.should_not_receive(:add_example_group)
99
+ example_group.run
100
+ end
101
+
102
+ describe "when before_each fails" do
103
+ before(:each) do
104
+ $example_ran = $after_each_ran = false
105
+ @example_group = describe("Foobar") do
106
+ before(:each) {raise}
107
+ it "should not be run" do
108
+ $example_ran = true
109
+ end
110
+ after(:each) do
111
+ $after_each_ran = true
112
+ end
113
+ end
114
+ end
115
+
116
+ it "should not run example block" do
117
+ example_group.run
118
+ $example_ran.should be_false
119
+ end
120
+
121
+ it "should run after_each" do
122
+ example_group.run
123
+ $after_each_ran.should be_true
124
+ end
125
+
126
+ it "should report failure location when in before_each" do
127
+ reporter.should_receive(:example_finished) do |example_group, error|
128
+ error.message.should eql("in before_each")
129
+ end
130
+ example_group.run
131
+ end
132
+ end
133
+
134
+ describe ExampleGroup, "#run on dry run" do
135
+ before do
136
+ @options.dry_run = true
137
+ end
138
+
139
+ it "should not run before(:all) or after(:all)" do
140
+ before_all_ran = false
141
+ after_all_ran = false
142
+ ExampleGroup.before(:all) { before_all_ran = true }
143
+ ExampleGroup.after(:all) { after_all_ran = true }
144
+ example_group.it("should") {}
145
+ example_group.run
146
+ before_all_ran.should be_false
147
+ after_all_ran.should be_false
148
+ end
149
+
150
+ it "should not run example" do
151
+ example_ran = false
152
+ example_group.it("should") {example_ran = true}
153
+ example_group.run
154
+ example_ran.should be_false
155
+ end
156
+ end
157
+
158
+ describe ExampleGroup, "#run with specified examples" do
159
+ attr_reader :examples_that_were_run
160
+ before do
161
+ @examples_that_were_run = []
162
+ end
163
+
164
+ describe "when specified_examples matches entire ExampleGroup" do
165
+ before do
166
+ examples_that_were_run = @examples_that_were_run
167
+ @example_group = Class.new(ExampleGroup) do
168
+ describe("the ExampleGroup")
169
+ it("should be run") do
170
+ examples_that_were_run << 'should be run'
171
+ end
172
+
173
+ it("should also be run") do
174
+ examples_that_were_run << 'should also be run'
175
+ end
176
+ end
177
+ options.examples = ["the ExampleGroup"]
178
+ end
179
+
180
+ it "should not run the Examples in the ExampleGroup" do
181
+ example_group.run
182
+ examples_that_were_run.should == ['should be run', 'should also be run']
183
+ end
184
+ end
185
+
186
+ describe ExampleGroup, "#run when specified_examples matches only Example description" do
187
+ before do
188
+ examples_that_were_run = @examples_that_were_run
189
+ @example_group = Class.new(ExampleGroup) do
190
+ describe("example")
191
+ it("should be run") do
192
+ examples_that_were_run << 'should be run'
193
+ end
194
+ end
195
+ options.examples = ["should be run"]
196
+ end
197
+
198
+ it "should not run the example" do
199
+ example_group.run
200
+ examples_that_were_run.should == ['should be run']
201
+ end
202
+ end
203
+
204
+ describe ExampleGroup, "#run when specified_examples does not match an Example description" do
205
+ before do
206
+ examples_that_were_run = @examples_that_were_run
207
+ @example_group = Class.new(ExampleGroup) do
208
+ describe("example")
209
+ it("should be something else") do
210
+ examples_that_were_run << 'should be something else'
211
+ end
212
+ end
213
+ options.examples = ["does not match anything"]
214
+ end
215
+
216
+ it "should not run the example" do
217
+ example_group.run
218
+ examples_that_were_run.should == []
219
+ end
220
+ end
221
+
222
+ describe ExampleGroup, "#run when specified_examples matches an Example description" do
223
+ before do
224
+ examples_that_were_run = @examples_that_were_run
225
+ @example_group = Class.new(ExampleGroup) do
226
+ describe("example")
227
+ it("should be run") do
228
+ examples_that_were_run << 'should be run'
229
+ end
230
+ it("should not be run") do
231
+ examples_that_were_run << 'should not be run'
232
+ end
233
+ end
234
+ options.examples = ["should be run"]
235
+ end
236
+
237
+ it "should run only the example, when there is only one" do
238
+ example_group.run
239
+ examples_that_were_run.should == ["should be run"]
240
+ end
241
+
242
+ it "should run only the one example" do
243
+ example_group.run
244
+ examples_that_were_run.should == ["should be run"] end
245
+ end
246
+ end
247
+
248
+ describe ExampleGroup, "#run with success" do
249
+ before do
250
+ @special_example_group = Class.new(ExampleGroup)
251
+ ExampleGroupFactory.register(:special, @special_example_group)
252
+ @not_special_example_group = Class.new(ExampleGroup)
253
+ ExampleGroupFactory.register(:not_special, @not_special_example_group)
254
+ end
255
+
256
+ after do
257
+ ExampleGroupFactory.reset
258
+ end
259
+
260
+ it "should send reporter add_example_group" do
261
+ example_group.run
262
+ reporter.example_groups.should == [example_group]
263
+ end
264
+
265
+ it "should run example on run" do
266
+ example_ran = false
267
+ example_group.it("should") {example_ran = true}
268
+ example_group.run
269
+ example_ran.should be_true
270
+ end
271
+
272
+ it "should run before(:all) block only once" do
273
+ before_all_run_count_run_count = 0
274
+ example_group.before(:all) {before_all_run_count_run_count += 1}
275
+ example_group.it("test") {true}
276
+ example_group.it("test2") {true}
277
+ example_group.run
278
+ before_all_run_count_run_count.should == 1
279
+ end
280
+
281
+ it "should run after(:all) block only once" do
282
+ after_all_run_count = 0
283
+ example_group.after(:all) {after_all_run_count += 1}
284
+ example_group.it("test") {true}
285
+ example_group.it("test2") {true}
286
+ example_group.run
287
+ after_all_run_count.should == 1
288
+ @reporter.rspec_verify
289
+ end
290
+
291
+ it "after(:all) should have access to all instance variables defined in before(:all)" do
292
+ context_instance_value_in = "Hello there"
293
+ context_instance_value_out = ""
294
+ example_group.before(:all) { @instance_var = context_instance_value_in }
295
+ example_group.after(:all) { context_instance_value_out = @instance_var }
296
+ example_group.it("test") {true}
297
+ example_group.run
298
+ context_instance_value_in.should == context_instance_value_out
299
+ end
300
+
301
+ it "should copy instance variables from before(:all)'s execution context into spec's execution context" do
302
+ context_instance_value_in = "Hello there"
303
+ context_instance_value_out = ""
304
+ example_group.before(:all) { @instance_var = context_instance_value_in }
305
+ example_group.it("test") {context_instance_value_out = @instance_var}
306
+ example_group.run
307
+ context_instance_value_in.should == context_instance_value_out
308
+ end
309
+
310
+ it "should not add global before callbacks for untargetted example_group" do
311
+ fiddle = []
312
+
313
+ ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
314
+ ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
315
+ @special_example_group.before(:each) { fiddle << "Example.before(:each, :type => :special)" }
316
+ @special_example_group.prepend_before(:each) { fiddle << "Example.prepend_before(:each, :type => :special)" }
317
+ @special_example_group.before(:all) { fiddle << "Example.before(:all, :type => :special)" }
318
+ @special_example_group.prepend_before(:all) { fiddle << "Example.prepend_before(:all, :type => :special)" }
319
+
320
+ example_group = Class.new(ExampleGroup) do
321
+ describe("I'm not special", :type => :not_special)
322
+ it "does nothing"
323
+ end
324
+ example_group.run
325
+ fiddle.should == [
326
+ 'Example.prepend_before(:all)',
327
+ 'Example.before(:all)',
328
+ ]
329
+ end
330
+
331
+ it "should add global before callbacks for targetted example_groups" do
332
+ fiddle = []
333
+
334
+ ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
335
+ ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
336
+ @special_example_group.before(:each) { fiddle << "special.before(:each, :type => :special)" }
337
+ @special_example_group.prepend_before(:each) { fiddle << "special.prepend_before(:each, :type => :special)" }
338
+ @special_example_group.before(:all) { fiddle << "special.before(:all, :type => :special)" }
339
+ @special_example_group.prepend_before(:all) { fiddle << "special.prepend_before(:all, :type => :special)" }
340
+ @special_example_group.append_before(:each) { fiddle << "special.append_before(:each, :type => :special)" }
341
+
342
+ example_group = Class.new(@special_example_group).describe("I'm a special example_group") {}
343
+ example_group.it("test") {true}
344
+ example_group.run
345
+ fiddle.should == [
346
+ 'Example.prepend_before(:all)',
347
+ 'Example.before(:all)',
348
+ 'special.prepend_before(:all, :type => :special)',
349
+ 'special.before(:all, :type => :special)',
350
+ 'special.prepend_before(:each, :type => :special)',
351
+ 'special.before(:each, :type => :special)',
352
+ 'special.append_before(:each, :type => :special)',
353
+ ]
354
+ end
355
+
356
+ it "should order before callbacks from global to local" do
357
+ fiddle = []
358
+ ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
359
+ ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
360
+ example_group.prepend_before(:all) { fiddle << "prepend_before(:all)" }
361
+ example_group.before(:all) { fiddle << "before(:all)" }
362
+ example_group.prepend_before(:each) { fiddle << "prepend_before(:each)" }
363
+ example_group.before(:each) { fiddle << "before(:each)" }
364
+ example_group.run
365
+ fiddle.should == [
366
+ 'Example.prepend_before(:all)',
367
+ 'Example.before(:all)',
368
+ 'prepend_before(:all)',
369
+ 'before(:all)',
370
+ 'prepend_before(:each)',
371
+ 'before(:each)'
372
+ ]
373
+ end
374
+
375
+ it "should order after callbacks from local to global" do
376
+ fiddle = []
377
+ example_group.after(:each) { fiddle << "after(:each)" }
378
+ example_group.append_after(:each) { fiddle << "append_after(:each)" }
379
+ example_group.after(:all) { fiddle << "after(:all)" }
380
+ example_group.append_after(:all) { fiddle << "append_after(:all)" }
381
+ ExampleGroup.after(:all) { fiddle << "Example.after(:all)" }
382
+ ExampleGroup.append_after(:all) { fiddle << "Example.append_after(:all)" }
383
+ example_group.run
384
+ fiddle.should == [
385
+ 'after(:each)',
386
+ 'append_after(:each)',
387
+ 'after(:all)',
388
+ 'append_after(:all)',
389
+ 'Example.after(:all)',
390
+ 'Example.append_after(:all)'
391
+ ]
392
+ end
393
+
394
+ it "should have accessible instance methods from included module" do
395
+ mod1_method_called = false
396
+ mod1 = Module.new do
397
+ define_method :mod1_method do
398
+ mod1_method_called = true
399
+ end
400
+ end
401
+
402
+ mod2_method_called = false
403
+ mod2 = Module.new do
404
+ define_method :mod2_method do
405
+ mod2_method_called = true
406
+ end
407
+ end
408
+
409
+ example_group.include mod1, mod2
410
+
411
+ example_group.it("test") do
412
+ mod1_method
413
+ mod2_method
414
+ end
415
+ example_group.run
416
+ mod1_method_called.should be_true
417
+ mod2_method_called.should be_true
418
+ end
419
+
420
+ it "should include targetted modules included using configuration" do
421
+ mod1 = Module.new
422
+ mod2 = Module.new
423
+ mod3 = Module.new
424
+ Spec::Runner.configuration.include(mod1, mod2)
425
+ Spec::Runner.configuration.include(mod3, :type => :not_special)
426
+
427
+ example_group = Class.new(@special_example_group).describe("I'm special", :type => :special) do
428
+ it "does nothing"
429
+ end
430
+ example_group.run
431
+
432
+ example_group.included_modules.should include(mod1)
433
+ example_group.included_modules.should include(mod2)
434
+ example_group.included_modules.should_not include(mod3)
435
+ end
436
+
437
+ it "should include any predicate_matchers included using configuration" do
438
+ $included_predicate_matcher_found = false
439
+ Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something?
440
+ example_group = Class.new(ExampleGroup) do
441
+ describe('example')
442
+ it "should respond to do_something" do
443
+ $included_predicate_matcher_found = respond_to?(:do_something)
444
+ end
445
+ end
446
+ example_group.run
447
+ $included_predicate_matcher_found.should be(true)
448
+ end
449
+
450
+ it "should use a mock framework set up in config" do
451
+ mod = Module.new do
452
+ class << self
453
+ def included(mod)
454
+ $included_module = mod
455
+ end
456
+ end
457
+
458
+ def teardown_mocks_for_rspec
459
+ $torn_down = true
460
+ end
461
+ end
462
+
463
+ begin
464
+ $included_module = nil
465
+ $torn_down = true
466
+ Spec::Runner.configuration.mock_with mod
467
+
468
+ example_group = Class.new(ExampleGroup) do
469
+ describe('example')
470
+ it "does nothing"
471
+ end
472
+ example_group.run
473
+
474
+ $included_module.should_not be_nil
475
+ $torn_down.should == true
476
+ ensure
477
+ Spec::Runner.configuration.mock_with :rspec
478
+ end
479
+ end
480
+ end
481
+
482
+ describe ExampleGroup, "#run with pending example that has a failing assertion" do
483
+ before do
484
+ example_group.it("should be pending") do
485
+ pending("Example fails") {false.should be_true}
486
+ end
487
+ end
488
+
489
+ it "should send example_pending to formatter" do
490
+ @formatter.should_receive(:example_pending).with("example", "should be pending", "Example fails")
491
+ example_group.run
492
+ end
493
+ end
494
+
495
+ describe ExampleGroup, "#run with pending example that does not have a failing assertion" do
496
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
497
+
498
+ before do
499
+ example_group.it("should be pending") do
500
+ pending("Example passes") {true.should be_true}
501
+ end
502
+ end
503
+
504
+ it "should send example_pending to formatter" do
505
+ @formatter.should_receive(:example_pending).with("example", "should be pending", "Example passes")
506
+ example_group.run
507
+ end
508
+ end
509
+
510
+ describe ExampleGroup, "#run when before(:all) fails" do
511
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
512
+
513
+ before do
514
+ ExampleGroup.before(:all) { raise NonStandardError, "before(:all) failure" }
515
+ end
516
+
517
+ it "should not run any example" do
518
+ spec_ran = false
519
+ example_group.it("test") {spec_ran = true}
520
+ example_group.run
521
+ spec_ran.should be_false
522
+ end
523
+
524
+ it "should run ExampleGroup after(:all)" do
525
+ after_all_ran = false
526
+ ExampleGroup.after(:all) { after_all_ran = true }
527
+ example_group.run
528
+ after_all_ran.should be_true
529
+ end
530
+
531
+ it "should run example_group after(:all)" do
532
+ after_all_ran = false
533
+ example_group.after(:all) { after_all_ran = true }
534
+ example_group.run
535
+ after_all_ran.should be_true
536
+ end
537
+
538
+ it "should supply before(:all) as description" do
539
+ @reporter.should_receive(:failure) do |example, error|
540
+ example.description.should eql("before(:all)")
541
+ error.message.should eql("before(:all) failure")
542
+ end
543
+
544
+ example_group.it("test") {true}
545
+ example_group.run
546
+ end
547
+ end
548
+
549
+ describe ExampleGroup, "#run when before(:each) fails" do
550
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
551
+
552
+ before do
553
+ ExampleGroup.before(:each) { raise NonStandardError }
554
+ end
555
+
556
+ it "should run after(:all)" do
557
+ after_all_ran = false
558
+ ExampleGroup.after(:all) { after_all_ran = true }
559
+ example_group.run
560
+ after_all_ran.should be_true
561
+ end
562
+ end
563
+
564
+ describe ExampleGroup, "#run when any example fails" do
565
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
566
+
567
+ before do
568
+ example_group.it("should") { raise NonStandardError }
569
+ end
570
+
571
+ it "should run after(:all)" do
572
+ after_all_ran = false
573
+ ExampleGroup.after(:all) { after_all_ran = true }
574
+ example_group.run
575
+ after_all_ran.should be_true
576
+ end
577
+ end
578
+
579
+ describe ExampleGroup, "#run when first after(:each) block fails" do
580
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
581
+
582
+ before do
583
+ class << example_group
584
+ attr_accessor :first_after_ran, :second_after_ran
585
+ end
586
+ example_group.first_after_ran = false
587
+ example_group.second_after_ran = false
588
+
589
+ example_group.after(:each) do
590
+ self.class.second_after_ran = true
591
+ end
592
+ example_group.after(:each) do
593
+ self.class.first_after_ran = true
594
+ raise "first"
595
+ end
596
+ end
597
+
598
+ it "should run second after(:each) block" do
599
+ reporter.should_receive(:example_finished) do |example, error|
600
+ example.should equal(example)
601
+ error.message.should eql("first")
602
+ end
603
+ example_group.run
604
+ example_group.first_after_ran.should be_true
605
+ example_group.second_after_ran.should be_true
606
+ end
607
+ end
608
+
609
+ describe ExampleGroup, "#run when first before(:each) block fails" do
610
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
611
+
612
+ before do
613
+ class << example_group
614
+ attr_accessor :first_before_ran, :second_before_ran
615
+ end
616
+ example_group.first_before_ran = false
617
+ example_group.second_before_ran = false
618
+
619
+ example_group.before(:each) do
620
+ self.class.first_before_ran = true
621
+ raise "first"
622
+ end
623
+ example_group.before(:each) do
624
+ self.class.second_before_ran = true
625
+ end
626
+ end
627
+
628
+ it "should not run second before(:each)" do
629
+ reporter.should_receive(:example_finished) do |name, error|
630
+ error.message.should eql("first")
631
+ end
632
+ example_group.run
633
+ example_group.first_before_ran.should be_true
634
+ example_group.second_before_ran.should be_false
635
+ end
636
+ end
637
+
638
+ describe ExampleGroup, "#run when failure in after(:all)" do
639
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
640
+
641
+ before do
642
+ ExampleGroup.after(:all) { raise NonStandardError, "in after(:all)" }
643
+ end
644
+
645
+ it "should return false" do
646
+ example_group.run.should be_false
647
+ end
648
+ end
649
+ end
650
+ end
651
+
652
+ class ExampleSubclass < ExampleGroup
653
+ end
654
+
655
+ describe ExampleGroup, "subclasses" do
656
+ after do
657
+ ExampleGroupFactory.reset
658
+ end
659
+
660
+ it "should have access to the described_type" do
661
+ example_group = Class.new(ExampleSubclass) do
662
+ describe(Array)
663
+ end
664
+ example_group.send(:described_type).should == Array
665
+ end
666
+
667
+ it "should concat descriptions when nested" do
668
+ example_group = Class.new(ExampleSubclass) do
669
+ describe(Array)
670
+ $nested_group = describe("when empty") do
671
+ end
672
+ end
673
+ $nested_group.description.to_s.should == "Array when empty"
674
+ end
675
+ end
676
+
677
+ describe String do
678
+ it "should not be included in examples because it is not a module" do
679
+ lambda{self.map}.should raise_error(NoMethodError, /undefined method `map' for/)
680
+ end
681
+ end
682
+ end
683
+ end