rspec 0.0.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 (388) hide show
  1. data/.autotest +3 -0
  2. data/.gitignore +7 -0
  3. data/History.txt +1104 -0
  4. data/MIT-LICENSE +20 -0
  5. data/Manifest.txt +387 -0
  6. data/README.txt +36 -0
  7. data/Rakefile +88 -0
  8. data/TODO +1 -0
  9. data/bin/autospec +3 -0
  10. data/bin/spec +4 -0
  11. data/bin/spec_translator +8 -0
  12. data/examples/pure/autogenerated_docstrings_example.rb +19 -0
  13. data/examples/pure/before_and_after_example.rb +40 -0
  14. data/examples/pure/behave_as_example.rb +45 -0
  15. data/examples/pure/custom_expectation_matchers.rb +54 -0
  16. data/examples/pure/custom_formatter.rb +12 -0
  17. data/examples/pure/dynamic_spec.rb +9 -0
  18. data/examples/pure/file_accessor.rb +19 -0
  19. data/examples/pure/file_accessor_spec.rb +38 -0
  20. data/examples/pure/greeter_spec.rb +31 -0
  21. data/examples/pure/helper_method_example.rb +14 -0
  22. data/examples/pure/io_processor.rb +8 -0
  23. data/examples/pure/io_processor_spec.rb +21 -0
  24. data/examples/pure/legacy_spec.rb +11 -0
  25. data/examples/pure/mocking_example.rb +27 -0
  26. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  27. data/examples/pure/nested_classes_example.rb +36 -0
  28. data/examples/pure/partial_mock_example.rb +29 -0
  29. data/examples/pure/pending_example.rb +20 -0
  30. data/examples/pure/predicate_example.rb +27 -0
  31. data/examples/pure/priority.txt +1 -0
  32. data/examples/pure/shared_example_group_example.rb +81 -0
  33. data/examples/pure/shared_stack_examples.rb +38 -0
  34. data/examples/pure/spec_helper.rb +3 -0
  35. data/examples/pure/stack.rb +36 -0
  36. data/examples/pure/stack_spec.rb +63 -0
  37. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  38. data/examples/pure/stubbing_example.rb +69 -0
  39. data/examples/stories/adder.rb +13 -0
  40. data/examples/stories/addition +34 -0
  41. data/examples/stories/addition.rb +9 -0
  42. data/examples/stories/calculator.rb +65 -0
  43. data/examples/stories/game-of-life/.loadpath +5 -0
  44. data/examples/stories/game-of-life/README.txt +21 -0
  45. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  46. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  47. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  48. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  49. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  50. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  51. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  52. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  53. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  54. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  55. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  56. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  57. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  58. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  59. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  60. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  61. data/examples/stories/game-of-life/life.rb +3 -0
  62. data/examples/stories/game-of-life/life/game.rb +23 -0
  63. data/examples/stories/game-of-life/life/grid.rb +43 -0
  64. data/examples/stories/helper.rb +9 -0
  65. data/examples/stories/steps/addition_steps.rb +18 -0
  66. data/failing_examples/README.txt +7 -0
  67. data/failing_examples/diffing_spec.rb +36 -0
  68. data/failing_examples/failing_autogenerated_docstrings_example.rb +19 -0
  69. data/failing_examples/failure_in_setup.rb +10 -0
  70. data/failing_examples/failure_in_teardown.rb +10 -0
  71. data/failing_examples/mocking_example.rb +40 -0
  72. data/failing_examples/mocking_with_flexmock.rb +26 -0
  73. data/failing_examples/mocking_with_mocha.rb +25 -0
  74. data/failing_examples/mocking_with_rr.rb +27 -0
  75. data/failing_examples/partial_mock_example.rb +20 -0
  76. data/failing_examples/predicate_example.rb +29 -0
  77. data/failing_examples/raising_example.rb +47 -0
  78. data/failing_examples/spec_helper.rb +3 -0
  79. data/failing_examples/syntax_error_example.rb +7 -0
  80. data/failing_examples/team_spec.rb +44 -0
  81. data/failing_examples/timeout_behaviour.rb +7 -0
  82. data/init.rb +9 -0
  83. data/lib/autotest/discover.rb +3 -0
  84. data/lib/autotest/rspec.rb +72 -0
  85. data/lib/spec.rb +30 -0
  86. data/lib/spec/adapters.rb +1 -0
  87. data/lib/spec/adapters/ruby_engine.rb +26 -0
  88. data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
  89. data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
  90. data/lib/spec/example.rb +12 -0
  91. data/lib/spec/example/configuration.rb +158 -0
  92. data/lib/spec/example/errors.rb +9 -0
  93. data/lib/spec/example/example_group.rb +17 -0
  94. data/lib/spec/example/example_group_factory.rb +64 -0
  95. data/lib/spec/example/example_group_methods.rb +440 -0
  96. data/lib/spec/example/example_matcher.rb +44 -0
  97. data/lib/spec/example/example_methods.rb +112 -0
  98. data/lib/spec/example/module_inclusion_warnings.rb +38 -0
  99. data/lib/spec/example/module_reopening_fix.rb +21 -0
  100. data/lib/spec/example/pending.rb +18 -0
  101. data/lib/spec/example/shared_example_group.rb +58 -0
  102. data/lib/spec/expectations.rb +56 -0
  103. data/lib/spec/expectations/differs/default.rb +66 -0
  104. data/lib/spec/expectations/errors.rb +12 -0
  105. data/lib/spec/expectations/extensions.rb +2 -0
  106. data/lib/spec/expectations/extensions/object.rb +63 -0
  107. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  108. data/lib/spec/expectations/handler.rb +62 -0
  109. data/lib/spec/extensions.rb +4 -0
  110. data/lib/spec/extensions/class.rb +24 -0
  111. data/lib/spec/extensions/main.rb +102 -0
  112. data/lib/spec/extensions/metaclass.rb +7 -0
  113. data/lib/spec/extensions/object.rb +6 -0
  114. data/lib/spec/interop/test.rb +12 -0
  115. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  116. data/lib/spec/interop/test/unit/testcase.rb +61 -0
  117. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  118. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  119. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  120. data/lib/spec/matchers.rb +156 -0
  121. data/lib/spec/matchers/be.rb +224 -0
  122. data/lib/spec/matchers/be_close.rb +37 -0
  123. data/lib/spec/matchers/change.rb +148 -0
  124. data/lib/spec/matchers/eql.rb +43 -0
  125. data/lib/spec/matchers/equal.rb +43 -0
  126. data/lib/spec/matchers/exist.rb +17 -0
  127. data/lib/spec/matchers/has.rb +34 -0
  128. data/lib/spec/matchers/have.rb +149 -0
  129. data/lib/spec/matchers/include.rb +70 -0
  130. data/lib/spec/matchers/match.rb +41 -0
  131. data/lib/spec/matchers/operator_matcher.rb +73 -0
  132. data/lib/spec/matchers/raise_error.rb +132 -0
  133. data/lib/spec/matchers/respond_to.rb +45 -0
  134. data/lib/spec/matchers/satisfy.rb +47 -0
  135. data/lib/spec/matchers/simple_matcher.rb +132 -0
  136. data/lib/spec/matchers/throw_symbol.rb +74 -0
  137. data/lib/spec/mocks.rb +211 -0
  138. data/lib/spec/mocks/argument_constraint_matchers.rb +31 -0
  139. data/lib/spec/mocks/argument_expectation.rb +216 -0
  140. data/lib/spec/mocks/error_generator.rb +84 -0
  141. data/lib/spec/mocks/errors.rb +10 -0
  142. data/lib/spec/mocks/extensions.rb +1 -0
  143. data/lib/spec/mocks/extensions/object.rb +3 -0
  144. data/lib/spec/mocks/framework.rb +15 -0
  145. data/lib/spec/mocks/message_expectation.rb +290 -0
  146. data/lib/spec/mocks/methods.rb +39 -0
  147. data/lib/spec/mocks/mock.rb +56 -0
  148. data/lib/spec/mocks/order_group.rb +29 -0
  149. data/lib/spec/mocks/proxy.rb +184 -0
  150. data/lib/spec/mocks/space.rb +28 -0
  151. data/lib/spec/mocks/spec_methods.rb +38 -0
  152. data/lib/spec/rake/spectask.rb +227 -0
  153. data/lib/spec/rake/verify_rcov.rb +52 -0
  154. data/lib/spec/runner.rb +201 -0
  155. data/lib/spec/runner/backtrace_tweaker.rb +57 -0
  156. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  157. data/lib/spec/runner/command_line.rb +28 -0
  158. data/lib/spec/runner/drb_command_line.rb +20 -0
  159. data/lib/spec/runner/example_group_runner.rb +59 -0
  160. data/lib/spec/runner/formatter/base_formatter.rb +77 -0
  161. data/lib/spec/runner/formatter/base_text_formatter.rb +130 -0
  162. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
  163. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  164. data/lib/spec/runner/formatter/html_formatter.rb +337 -0
  165. data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
  166. data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
  167. data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
  168. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  169. data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
  170. data/lib/spec/runner/formatter/story/html_formatter.rb +161 -0
  171. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +188 -0
  172. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  173. data/lib/spec/runner/heckle_runner.rb +72 -0
  174. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  175. data/lib/spec/runner/option_parser.rb +203 -0
  176. data/lib/spec/runner/options.rb +309 -0
  177. data/lib/spec/runner/reporter.rb +147 -0
  178. data/lib/spec/runner/spec_parser.rb +71 -0
  179. data/lib/spec/story.rb +10 -0
  180. data/lib/spec/story/extensions.rb +3 -0
  181. data/lib/spec/story/extensions/main.rb +86 -0
  182. data/lib/spec/story/extensions/regexp.rb +9 -0
  183. data/lib/spec/story/extensions/string.rb +9 -0
  184. data/lib/spec/story/given_scenario.rb +14 -0
  185. data/lib/spec/story/runner.rb +60 -0
  186. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  187. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  188. data/lib/spec/story/runner/scenario_runner.rb +54 -0
  189. data/lib/spec/story/runner/story_mediator.rb +137 -0
  190. data/lib/spec/story/runner/story_parser.rb +247 -0
  191. data/lib/spec/story/runner/story_runner.rb +70 -0
  192. data/lib/spec/story/scenario.rb +14 -0
  193. data/lib/spec/story/step.rb +70 -0
  194. data/lib/spec/story/step_group.rb +89 -0
  195. data/lib/spec/story/step_mother.rb +37 -0
  196. data/lib/spec/story/story.rb +39 -0
  197. data/lib/spec/story/world.rb +128 -0
  198. data/lib/spec/translator.rb +114 -0
  199. data/lib/spec/version.rb +13 -0
  200. data/plugins/mock_frameworks/flexmock.rb +23 -0
  201. data/plugins/mock_frameworks/mocha.rb +19 -0
  202. data/plugins/mock_frameworks/rr.rb +21 -0
  203. data/plugins/mock_frameworks/rspec.rb +20 -0
  204. data/rake_tasks/examples.rake +7 -0
  205. data/rake_tasks/examples_with_rcov.rake +9 -0
  206. data/rake_tasks/failing_examples_with_html.rake +9 -0
  207. data/rake_tasks/verify_rcov.rake +7 -0
  208. data/spec/README.jruby +15 -0
  209. data/spec/autotest/discover_spec.rb +19 -0
  210. data/spec/autotest/rspec_spec.rb +206 -0
  211. data/spec/autotest_helper.rb +6 -0
  212. data/spec/autotest_matchers.rb +47 -0
  213. data/spec/rspec_suite.rb +7 -0
  214. data/spec/ruby_forker.rb +13 -0
  215. data/spec/spec.opts +6 -0
  216. data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
  217. data/spec/spec/example/configuration_spec.rb +282 -0
  218. data/spec/spec/example/example_group/described_module_spec.rb +20 -0
  219. data/spec/spec/example/example_group/warning_messages_spec.rb +76 -0
  220. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  221. data/spec/spec/example/example_group_factory_spec.rb +144 -0
  222. data/spec/spec/example/example_group_methods_spec.rb +572 -0
  223. data/spec/spec/example/example_group_spec.rb +723 -0
  224. data/spec/spec/example/example_matcher_spec.rb +96 -0
  225. data/spec/spec/example/example_methods_spec.rb +126 -0
  226. data/spec/spec/example/example_runner_spec.rb +194 -0
  227. data/spec/spec/example/example_spec.rb +53 -0
  228. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  229. data/spec/spec/example/pending_module_spec.rb +42 -0
  230. data/spec/spec/example/predicate_matcher_spec.rb +21 -0
  231. data/spec/spec/example/shared_example_group_spec.rb +265 -0
  232. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  233. data/spec/spec/expectations/differs/default_spec.rb +127 -0
  234. data/spec/spec/expectations/extensions/object_spec.rb +107 -0
  235. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  236. data/spec/spec/extensions/main_spec.rb +76 -0
  237. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  238. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  239. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  240. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  241. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  242. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  243. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  244. data/spec/spec/interop/test/unit/spec_spec.rb +45 -0
  245. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  246. data/spec/spec/interop/test/unit/testcase_spec.rb +45 -0
  247. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  248. data/spec/spec/matchers/be_close_spec.rb +39 -0
  249. data/spec/spec/matchers/be_spec.rb +248 -0
  250. data/spec/spec/matchers/change_spec.rb +317 -0
  251. data/spec/spec/matchers/description_generation_spec.rb +153 -0
  252. data/spec/spec/matchers/eql_spec.rb +28 -0
  253. data/spec/spec/matchers/equal_spec.rb +28 -0
  254. data/spec/spec/matchers/exist_spec.rb +57 -0
  255. data/spec/spec/matchers/handler_spec.rb +150 -0
  256. data/spec/spec/matchers/has_spec.rb +53 -0
  257. data/spec/spec/matchers/have_spec.rb +293 -0
  258. data/spec/spec/matchers/include_spec.rb +45 -0
  259. data/spec/spec/matchers/match_spec.rb +37 -0
  260. data/spec/spec/matchers/matcher_methods_spec.rb +78 -0
  261. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +24 -0
  262. data/spec/spec/matchers/operator_matcher_spec.rb +168 -0
  263. data/spec/spec/matchers/raise_error_spec.rb +315 -0
  264. data/spec/spec/matchers/respond_to_spec.rb +54 -0
  265. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  266. data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
  267. data/spec/spec/matchers/throw_symbol_spec.rb +54 -0
  268. data/spec/spec/mocks/any_number_of_times_spec.rb +29 -0
  269. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  270. data/spec/spec/mocks/at_least_spec.rb +97 -0
  271. data/spec/spec/mocks/at_most_spec.rb +93 -0
  272. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  273. data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
  274. data/spec/spec/mocks/bug_report_11545_spec.rb +33 -0
  275. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  276. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  277. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  278. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  279. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  280. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +130 -0
  281. data/spec/spec/mocks/hash_including_matcher_spec.rb +32 -0
  282. data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
  283. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  284. data/spec/spec/mocks/mock_spec.rb +494 -0
  285. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  286. data/spec/spec/mocks/null_object_mock_spec.rb +40 -0
  287. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  288. data/spec/spec/mocks/options_hash_spec.rb +45 -0
  289. data/spec/spec/mocks/partial_mock_spec.rb +142 -0
  290. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  291. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +175 -0
  292. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  293. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  294. data/spec/spec/mocks/stub_spec.rb +181 -0
  295. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  296. data/spec/spec/package/bin_spec_spec.rb +14 -0
  297. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  298. data/spec/spec/runner/command_line_spec.rb +147 -0
  299. data/spec/spec/runner/drb_command_line_spec.rb +92 -0
  300. data/spec/spec/runner/empty_file.txt +0 -0
  301. data/spec/spec/runner/examples.txt +2 -0
  302. data/spec/spec/runner/execution_context_spec.rb +37 -0
  303. data/spec/spec/runner/failed.txt +3 -0
  304. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  305. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  306. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
  307. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
  308. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
  309. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
  310. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +370 -0
  311. data/spec/spec/runner/formatter/html_formatter_spec.rb +63 -0
  312. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +333 -0
  313. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  314. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +137 -0
  315. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  316. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  317. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +158 -0
  318. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +87 -0
  319. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +548 -0
  320. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
  321. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +370 -0
  322. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  323. data/spec/spec/runner/heckler_spec.rb +13 -0
  324. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  325. data/spec/spec/runner/option_parser_spec.rb +394 -0
  326. data/spec/spec/runner/options_spec.rb +450 -0
  327. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  328. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  329. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  330. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +56 -0
  331. data/spec/spec/runner/reporter_spec.rb +192 -0
  332. data/spec/spec/runner/resources/a_bar.rb +0 -0
  333. data/spec/spec/runner/resources/a_foo.rb +0 -0
  334. data/spec/spec/runner/resources/a_spec.rb +1 -0
  335. data/spec/spec/runner/spec.opts +2 -0
  336. data/spec/spec/runner/spec_drb.opts +1 -0
  337. data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
  338. data/spec/spec/runner/spec_parser_spec.rb +85 -0
  339. data/spec/spec/runner/spec_spaced.opts +2 -0
  340. data/spec/spec/runner_spec.rb +11 -0
  341. data/spec/spec/spec_classes.rb +133 -0
  342. data/spec/spec/story/builders.rb +46 -0
  343. data/spec/spec/story/extensions/main_spec.rb +161 -0
  344. data/spec/spec/story/extensions_spec.rb +14 -0
  345. data/spec/spec/story/given_scenario_spec.rb +27 -0
  346. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +93 -0
  347. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  348. data/spec/spec/story/runner/scenario_runner_spec.rb +214 -0
  349. data/spec/spec/story/runner/story_mediator_spec.rb +143 -0
  350. data/spec/spec/story/runner/story_parser_spec.rb +401 -0
  351. data/spec/spec/story/runner/story_runner_spec.rb +294 -0
  352. data/spec/spec/story/runner_spec.rb +93 -0
  353. data/spec/spec/story/scenario_spec.rb +20 -0
  354. data/spec/spec/story/step_group_spec.rb +157 -0
  355. data/spec/spec/story/step_mother_spec.rb +72 -0
  356. data/spec/spec/story/step_spec.rb +250 -0
  357. data/spec/spec/story/story_helper.rb +2 -0
  358. data/spec/spec/story/story_spec.rb +86 -0
  359. data/spec/spec/story/world_spec.rb +423 -0
  360. data/spec/spec/translator_spec.rb +265 -0
  361. data/spec/spec_helper.rb +103 -0
  362. data/stories/all.rb +5 -0
  363. data/stories/example_groups/autogenerated_docstrings +45 -0
  364. data/stories/example_groups/example_group_with_should_methods +17 -0
  365. data/stories/example_groups/nested_groups +17 -0
  366. data/stories/example_groups/output +25 -0
  367. data/stories/example_groups/stories.rb +7 -0
  368. data/stories/helper.rb +6 -0
  369. data/stories/interop/examples_and_tests_together +30 -0
  370. data/stories/interop/stories.rb +7 -0
  371. data/stories/interop/test_case_with_should_methods +17 -0
  372. data/stories/mock_framework_integration/stories.rb +7 -0
  373. data/stories/mock_framework_integration/use_flexmock.story +9 -0
  374. data/stories/pending_stories/README +3 -0
  375. data/stories/resources/helpers/cmdline.rb +9 -0
  376. data/stories/resources/helpers/story_helper.rb +16 -0
  377. data/stories/resources/matchers/smart_match.rb +37 -0
  378. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  379. data/stories/resources/spec/simple_spec.rb +8 -0
  380. data/stories/resources/spec/spec_with_flexmock.rb +18 -0
  381. data/stories/resources/steps/running_rspec.rb +50 -0
  382. data/stories/resources/stories/failing_story.rb +15 -0
  383. data/stories/resources/test/spec_and_test_together.rb +57 -0
  384. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  385. data/stories/stories/multiline_steps.story +23 -0
  386. data/stories/stories/steps/multiline_steps.rb +13 -0
  387. data/stories/stories/stories.rb +6 -0
  388. metadata +461 -0
@@ -0,0 +1,265 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ require 'spec/translator'
3
+
4
+ describe "Translator" do
5
+ before do
6
+ @t = Spec::Translator.new
7
+ end
8
+
9
+ it "should translate files" do
10
+ from = File.dirname(__FILE__) + '/..'
11
+ to = "#{Dir.tmpdir}/translated_specs"
12
+ @t.translate_dir(from, to)
13
+ end
14
+
15
+ it "should translate context_setup do" do
16
+ @t.translate_line(
17
+ "context_setup do\n"
18
+ ).should eql(
19
+ "before(:all) do\n"
20
+ )
21
+ end
22
+
23
+ it "should translate context_setup {foo}" do
24
+ @t.translate_line(
25
+ "context_setup {foo}\n"
26
+ ).should eql(
27
+ "before(:all) {foo}\n"
28
+ )
29
+ end
30
+
31
+ it "should translate context ' to describe '" do
32
+ @t.translate_line(
33
+ "context 'Translator' do\n"
34
+ ).should eql(
35
+ "describe 'Translator' do\n"
36
+ )
37
+ end
38
+
39
+ it 'should translate context " to describe "' do
40
+ @t.translate_line(
41
+ 'context "Translator"'
42
+ ).should eql(
43
+ 'describe "Translator"'
44
+ )
45
+ end
46
+
47
+ it 'should translate spaces then context " to describe "' do
48
+ @t.translate_line(
49
+ ' context "Translator"'
50
+ ).should eql(
51
+ ' describe "Translator"'
52
+ )
53
+ end
54
+
55
+ it "should not translate context=foo" do
56
+ @t.translate_line(' context=foo').should eql(' context=foo')
57
+ end
58
+
59
+ it "should not translate context = foo" do
60
+ @t.translate_line(' context = foo').should eql(' context = foo')
61
+ end
62
+
63
+ it "should not translate context = foo" do
64
+ @t.translate_line(' context = foo').should eql(' context = foo')
65
+ end
66
+
67
+ it "should translate should_be_close" do
68
+ @t.translate_line('5.0.should_be_close(5.0, 0.5)').should eql('5.0.should be_close(5.0, 0.5)')
69
+ end
70
+
71
+ it "should translate should_not_raise" do
72
+ @t.translate_line('lambda { self.call }.should_not_raise').should eql('lambda { self.call }.should_not raise_error')
73
+ end
74
+
75
+ it "should translate should_throw" do
76
+ @t.translate_line('lambda { self.call }.should_throw').should eql('lambda { self.call }.should throw_symbol')
77
+ end
78
+
79
+ it "should not translate 0.9 should_not" do
80
+ @t.translate_line('@target.should_not @matcher').should eql('@target.should_not @matcher')
81
+ end
82
+
83
+ it "should leave should_not_receive" do
84
+ @t.translate_line('@mock.should_not_receive(:not_expected).with("unexpected text")').should eql('@mock.should_not_receive(:not_expected).with("unexpected text")')
85
+ end
86
+
87
+ it "should leave should_receive" do
88
+ @t.translate_line('@mock.should_receive(:not_expected).with("unexpected text")').should eql('@mock.should_receive(:not_expected).with("unexpected text")')
89
+ end
90
+
91
+ it "should translate multi word predicates" do
92
+ @t.translate_line('foo.should_multi_word_predicate').should eql('foo.should be_multi_word_predicate')
93
+ end
94
+
95
+ it "should translate multi word predicates prefixed with be" do
96
+ @t.translate_line('foo.should_be_multi_word_predicate').should eql('foo.should be_multi_word_predicate')
97
+ end
98
+
99
+ it "should translate be(expected) to equal(expected)" do
100
+ @t.translate_line('foo.should_be :cool').should eql('foo.should equal :cool')
101
+ end
102
+
103
+ it "should translate instance_of" do
104
+ @t.translate_line('5.should_be_an_instance_of(Integer)').should eql('5.should be_an_instance_of(Integer)')
105
+ end
106
+
107
+ it "should translate should_be <" do
108
+ @t.translate_line('3.should_be < 4').should eql('3.should be < 4')
109
+ end
110
+
111
+ it "should translate should_be <=" do
112
+ @t.translate_line('3.should_be <= 4').should eql('3.should be <= 4')
113
+ end
114
+
115
+ it "should translate should_be >=" do
116
+ @t.translate_line('4.should_be >= 3').should eql('4.should be >= 3')
117
+ end
118
+
119
+ it "should translate should_be >" do
120
+ @t.translate_line('4.should_be > 3').should eql('4.should be > 3')
121
+ end
122
+
123
+ it "should translate should_be_happy" do
124
+ @t.translate_line("4.should_be_happy").should eql("4.should be_happy")
125
+ end
126
+
127
+ it "should translate custom method taking regexp with parenthesis" do
128
+ @t.translate_line("@browser.should_contain_text(/Sn.rrunger og annet rusk/)").should eql("@browser.should be_contain_text(/Sn.rrunger og annet rusk/)")
129
+ end
130
+
131
+ it "should translate custom method taking regexp without parenthesis" do
132
+ @t.translate_line("@browser.should_contain_text /Sn.rrunger og annet rusk/\n").should eql("@browser.should be_contain_text(/Sn.rrunger og annet rusk/)\n")
133
+ end
134
+
135
+ it "should translate should_not_be_nil" do
136
+ @t.translate_line("foo.should_not_be_nil\n").should eql("foo.should_not be_nil\n")
137
+ end
138
+
139
+ it "should translate kind of" do
140
+ @t.translate_line('@object.should_be_kind_of(MessageExpectation)').should(
141
+ eql('@object.should be_kind_of(MessageExpectation)'))
142
+ end
143
+
144
+ it "should translate should_be_true" do
145
+ @t.translate_line("foo.should_be_true\n").should eql("foo.should be_true\n")
146
+ end
147
+
148
+ # [#9674] spec_translate incorrectly handling shoud_match, when regexp in a var, in a block
149
+ # http://rubyforge.org/tracker/?func=detail&atid=3149&aid=9674&group_id=797
150
+ it "should translate should_match on a regexp, in a var, in a block" do
151
+ @t.translate_line("collection.each { |c| c.should_match a_regexp_in_a_var }\n").should eql("collection.each { |c| c.should match(a_regexp_in_a_var) }\n")
152
+ @t.translate_line("collection.each{|c| c.should_match a_regexp_in_a_var}\n").should eql("collection.each{|c| c.should match(a_regexp_in_a_var) }\n")
153
+ end
154
+
155
+ # From Rubinius specs
156
+ it "should translate close_to without parens" do
157
+ @t.translate_line("end.should_be_close 3.14159_26535_89793_23846, TOLERANCE\n").should eql("end.should be_close(3.14159_26535_89793_23846, TOLERANCE)\n")
158
+ end
159
+
160
+ # [#9882] 0.9 Beta 1 - translator bugs
161
+ # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
162
+ it "should support symbol arguments" do
163
+ @t.translate_line(
164
+ "lambda { sequence.parse('bar') }.should_throw :ZeroWidthParseSuccess\n"
165
+ ).should eql(
166
+ "lambda { sequence.parse('bar') }.should throw_symbol(:ZeroWidthParseSuccess)\n"
167
+ )
168
+ end
169
+
170
+ # [#9882] 0.9 Beta 1 - translator bugs
171
+ # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
172
+ it "should support instance var arguments" do
173
+ @t.translate_line(
174
+ "a.should_eql @local"
175
+ ).should eql(
176
+ "a.should eql(@local)"
177
+ )
178
+ end
179
+
180
+ # [#9882] 0.9 Beta 1 - translator bugs
181
+ # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
182
+ it "should support lambdas as expecteds" do
183
+ @t.translate_line(
184
+ "@parslet.should_not_eql lambda { nil }.to_parseable"
185
+ ).should eql(
186
+ "@parslet.should_not eql(lambda { nil }.to_parseable)"
187
+ )
188
+ end
189
+
190
+ # [#9882] 0.9 Beta 1 - translator bugs
191
+ # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
192
+ it "should support fully qualified names" do
193
+ @t.translate_line(
194
+ "results.should_be_kind_of SimpleASTLanguage::Identifier"
195
+ ).should eql(
196
+ "results.should be_kind_of(SimpleASTLanguage::Identifier)"
197
+ )
198
+ end
199
+
200
+ # [#9882] 0.9 Beta 1 - translator bugs
201
+ # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
202
+ # it "should leave whitespace between expression and comments" do
203
+ # @t.translate_line(
204
+ # "lambda { @instance.foo = foo }.should_raise NoMethodError # no writer defined"
205
+ # ).should eql(
206
+ # "lambda { @instance.foo = foo }.should raise_error(NoMethodError) # no writer defined"
207
+ # )
208
+ # end
209
+
210
+ it "should translate redirects" do
211
+ @t.translate_line(
212
+ "controller.should_redirect_to 'http://not_existing_domain_for_novalis.test.host/404.html'"
213
+ ).should eql(
214
+ "controller.should redirect_to('http://not_existing_domain_for_novalis.test.host/404.html')"
215
+ )
216
+ end
217
+
218
+ it "should translate :any_args" do
219
+ @t.translate_line(
220
+ "mock.should_receive(:foo).with(:any_args)"
221
+ ).should eql(
222
+ "mock.should_receive(:foo).with(any_args)"
223
+ )
224
+ end
225
+
226
+ it "should translate :anything" do
227
+ @t.translate_line(
228
+ "mock.should_receive(:foo).with(:anything)"
229
+ ).should eql(
230
+ "mock.should_receive(:foo).with(anything)"
231
+ )
232
+ end
233
+
234
+ it "should translate :boolean" do
235
+ @t.translate_line(
236
+ "mock.should_receive(:foo).with(:boolean)"
237
+ ).should eql(
238
+ "mock.should_receive(:foo).with(boolean)"
239
+ )
240
+ end
241
+
242
+ it "should translate :no_args" do
243
+ @t.translate_line(
244
+ "mock.should_receive(:foo).with(:no_args)"
245
+ ).should eql(
246
+ "mock.should_receive(:foo).with(no_args)"
247
+ )
248
+ end
249
+
250
+ it "should translate :numeric" do
251
+ @t.translate_line(
252
+ "mock.should_receive(:foo).with(:numeric)"
253
+ ).should eql(
254
+ "mock.should_receive(:foo).with(an_instance_of(Numeric))"
255
+ )
256
+ end
257
+
258
+ it "should translate :string" do
259
+ @t.translate_line(
260
+ "mock.should_receive(:foo).with(:string)"
261
+ ).should eql(
262
+ "mock.should_receive(:foo).with(an_instance_of(String))"
263
+ )
264
+ end
265
+ end
@@ -0,0 +1,103 @@
1
+ require 'stringio'
2
+
3
+ dir = File.dirname(__FILE__)
4
+ lib_path = File.expand_path("#{dir}/../lib")
5
+ $LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
6
+ $_spec_spec = true # Prevents Kernel.exit in various places
7
+
8
+ require 'spec'
9
+ require 'spec/mocks'
10
+ require 'spec/story'
11
+ spec_classes_path = File.expand_path("#{dir}/../spec/spec/spec_classes")
12
+ require spec_classes_path unless $LOAD_PATH.include?(spec_classes_path)
13
+ require File.dirname(__FILE__) + '/../lib/spec/expectations/differs/default'
14
+
15
+ module Spec
16
+ module Matchers
17
+ def fail
18
+ raise_error(Spec::Expectations::ExpectationNotMetError)
19
+ end
20
+
21
+ def fail_with(message)
22
+ raise_error(Spec::Expectations::ExpectationNotMetError, message)
23
+ end
24
+
25
+ class Pass
26
+ def matches?(proc, &block)
27
+ begin
28
+ proc.call
29
+ true
30
+ rescue Exception => @error
31
+ false
32
+ end
33
+ end
34
+
35
+ def failure_message
36
+ @error.message + "\n" + @error.backtrace.join("\n")
37
+ end
38
+ end
39
+
40
+ def pass
41
+ Pass.new
42
+ end
43
+
44
+ class CorrectlyOrderedMockExpectation
45
+ def initialize(&event)
46
+ @event = event
47
+ end
48
+
49
+ def expect(&expectations)
50
+ expectations.call
51
+ @event.call
52
+ end
53
+ end
54
+
55
+ def during(&block)
56
+ CorrectlyOrderedMockExpectation.new(&block)
57
+ end
58
+ end
59
+ end
60
+
61
+ class NonStandardError < Exception; end
62
+
63
+ module Custom
64
+ class ExampleGroupRunner
65
+ attr_reader :options, :arg
66
+ def initialize(options, arg)
67
+ @options, @arg = options, arg
68
+ end
69
+
70
+ def load_files(files)
71
+ end
72
+
73
+ def run
74
+ end
75
+ end
76
+ end
77
+
78
+ def exception_from(&block)
79
+ exception = nil
80
+ begin
81
+ yield
82
+ rescue StandardError => e
83
+ exception = e
84
+ end
85
+ exception
86
+ end
87
+
88
+ describe "sandboxed rspec_options", :shared => true do
89
+ attr_reader :options
90
+
91
+ before(:all) do
92
+ @original_rspec_options = $rspec_options
93
+ end
94
+
95
+ before(:each) do
96
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
97
+ $rspec_options = options
98
+ end
99
+
100
+ after do
101
+ $rspec_options = @original_rspec_options
102
+ end
103
+ end
@@ -0,0 +1,5 @@
1
+ require File.join(File.dirname(__FILE__), *%w[helper])
2
+
3
+ %w[example_groups interop mock_framework_integration stories].each do |dir|
4
+ require File.join(File.dirname(__FILE__), "#{dir}/stories")
5
+ end
@@ -0,0 +1,45 @@
1
+ Story: autogenerated docstrings
2
+
3
+ As an RSpec user
4
+ I want examples to generate their own names
5
+ So that I can reduce duplication between example names and example code
6
+
7
+ Scenario: run passing examples with ruby
8
+ Given the file ../../examples/pure/autogenerated_docstrings_example.rb
9
+
10
+ When I run it with the ruby interpreter -fs
11
+
12
+ Then the stdout should match /should equal 5/
13
+ And the stdout should match /should be < 5/
14
+ And the stdout should match /should include "a"/
15
+ And the stdout should match /should respond to #size/
16
+
17
+ Scenario: run failing examples with ruby
18
+ Given the file ../../failing_examples/failing_autogenerated_docstrings_example.rb
19
+
20
+ When I run it with the ruby interpreter -fs
21
+
22
+ Then the stdout should match /should equal 2/
23
+ And the stdout should match /should be > 5/
24
+ And the stdout should match /should include "b"/
25
+ And the stdout should match /should not respond to #size/
26
+
27
+ Scenario: run passing examples with spec
28
+ Given the file ../../examples/pure/autogenerated_docstrings_example.rb
29
+
30
+ When I run it with the spec script -fs
31
+
32
+ Then the stdout should match /should equal 5/
33
+ And the stdout should match /should be < 5/
34
+ And the stdout should match /should include "a"/
35
+ And the stdout should match /should respond to #size/
36
+
37
+ Scenario: run failing examples with spec
38
+ Given the file ../../failing_examples/failing_autogenerated_docstrings_example.rb
39
+
40
+ When I run it with the spec script -fs
41
+
42
+ Then the stdout should match /should equal 2/
43
+ And the stdout should match /should be > 5/
44
+ And the stdout should match /should include "b"/
45
+ And the stdout should match /should not respond to #size/
@@ -0,0 +1,17 @@
1
+ Story: Spec::ExampleGroup with should methods
2
+
3
+ As an RSpec adopter accustomed to classes and methods
4
+ I want to use should_* methods in an ExampleGroup
5
+ So that I use RSpec with classes and methods that look more like RSpec examples
6
+
7
+ Scenario: Run with ruby
8
+ Given the file spec/example_group_with_should_methods.rb
9
+ When I run it with the ruby interpreter
10
+ Then the exit code should be 256
11
+ And the stdout should match "2 examples, 1 failure"
12
+
13
+ Scenario: Run with spec
14
+ Given the file spec/example_group_with_should_methods.rb
15
+ When I run it with the spec script
16
+ Then the exit code should be 256
17
+ And the stdout should match "2 examples, 1 failure"
@@ -0,0 +1,17 @@
1
+ Story: Nested example groups
2
+
3
+ As an RSpec user
4
+ I want to nest examples groups
5
+ So that I can better organize my examples
6
+
7
+ Scenario: Run with ruby
8
+ Given the file ../../examples/pure/stack_spec_with_nested_example_groups.rb
9
+ When I run it with the ruby interpreter -fs
10
+ Then the stdout should match /Stack \(empty\)/
11
+ And the stdout should match /Stack \(full\)/
12
+
13
+ Scenario: Run with ruby
14
+ Given the file ../../examples/pure/stack_spec_with_nested_example_groups.rb
15
+ When I run it with the spec script -fs
16
+ Then the stdout should match /Stack \(empty\)/
17
+ And the stdout should match /Stack \(full\)/