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,79 @@
1
+ module Spec
2
+ module Runner
3
+ module Formatter
4
+ # Baseclass for formatters that implements all required methods as no-ops.
5
+ class BaseFormatter
6
+ attr_accessor :example_group, :options, :where
7
+ def initialize(options, where)
8
+ @options = options
9
+ @where = where
10
+ end
11
+
12
+ # This method is invoked before any examples are run, right after
13
+ # they have all been collected. This can be useful for special
14
+ # formatters that need to provide progress on feedback (graphical ones)
15
+ #
16
+ # This method will only be invoked once, and the next one to be invoked
17
+ # is #add_example_group
18
+ def start(example_count)
19
+ end
20
+
21
+ # This method is invoked at the beginning of the execution of each example_group.
22
+ # +example_group+ is the example_group.
23
+ #
24
+ # The next method to be invoked after this is #example_failed or #example_finished
25
+ def add_example_group(example_group)
26
+ @example_group = example_group
27
+ end
28
+
29
+ # This method is invoked when an +example+ starts.
30
+ def example_started(example)
31
+ end
32
+
33
+ # This method is invoked when an +example+ passes.
34
+ def example_passed(example)
35
+ end
36
+
37
+ # This method is invoked when an +example+ fails, i.e. an exception occurred
38
+ # inside it (such as a failed should or other exception). +counter+ is the
39
+ # sequence number of the failure (starting at 1) and +failure+ is the associated
40
+ # Failure object.
41
+ def example_failed(example, counter, failure)
42
+ end
43
+
44
+ # This method is invoked when an example is not yet implemented (i.e. has not
45
+ # been provided a block), or when an ExamplePendingError is raised.
46
+ # +message+ is the message from the ExamplePendingError, if it exists, or the
47
+ # default value of "Not Yet Implemented"
48
+ # +pending_caller+ is the file and line number of the spec which
49
+ # has called the pending method
50
+ def example_pending(example, message, pending_caller)
51
+ end
52
+
53
+ # This method is invoked after all of the examples have executed. The next method
54
+ # to be invoked after this one is #dump_failure (once for each failed example),
55
+ def start_dump
56
+ end
57
+
58
+ # Dumps detailed information about an example failure.
59
+ # This method is invoked for each failed example after all examples have run. +counter+ is the sequence number
60
+ # of the associated example. +failure+ is a Failure object, which contains detailed
61
+ # information about the failure.
62
+ def dump_failure(counter, failure)
63
+ end
64
+
65
+ # This method is invoked after the dumping of examples and failures.
66
+ def dump_summary(duration, example_count, failure_count, pending_count)
67
+ end
68
+
69
+ # This gets invoked after the summary if option is set to do so.
70
+ def dump_pending
71
+ end
72
+
73
+ # This method is invoked at the very end. Allows the formatter to clean up, like closing open streams.
74
+ def close
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,126 @@
1
+ require 'spec/runner/formatter/base_formatter'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ # Baseclass for text-based formatters. Can in fact be used for
7
+ # non-text based ones too - just ignore the +output+ constructor
8
+ # argument.
9
+ class BaseTextFormatter < BaseFormatter
10
+ attr_reader :output, :pending_examples
11
+ # Creates a new instance that will write to +where+. If +where+ is a
12
+ # String, output will be written to the File with that name, otherwise
13
+ # +where+ is exected to be an IO (or an object that responds to #puts and #write).
14
+ def initialize(options, where)
15
+ super
16
+ if where.is_a?(String)
17
+ @output = File.open(where, 'w')
18
+ else
19
+ @output = where
20
+ end
21
+ @pending_examples = []
22
+ end
23
+
24
+ def example_pending(example, message, pending_caller)
25
+ @pending_examples << [example.__full_description, message, pending_caller]
26
+ end
27
+
28
+ def dump_failure(counter, failure)
29
+ @output.puts
30
+ @output.puts "#{counter.to_s})"
31
+ @output.puts colourise("#{failure.header}\n#{failure.exception.message}", failure)
32
+ @output.puts format_backtrace(failure.exception.backtrace)
33
+ @output.flush
34
+ end
35
+
36
+ def colourise(s, failure)
37
+ if(failure.expectation_not_met?)
38
+ red(s)
39
+ elsif(failure.pending_fixed?)
40
+ blue(s)
41
+ else
42
+ magenta(s)
43
+ end
44
+ end
45
+
46
+ def dump_summary(duration, example_count, failure_count, pending_count)
47
+ return if dry_run?
48
+ @output.puts
49
+ @output.puts "Finished in #{duration} seconds"
50
+ @output.puts
51
+
52
+ summary = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
53
+ summary << ", #{pending_count} pending" if pending_count > 0
54
+
55
+ if failure_count == 0
56
+ if pending_count > 0
57
+ @output.puts yellow(summary)
58
+ else
59
+ @output.puts green(summary)
60
+ end
61
+ else
62
+ @output.puts red(summary)
63
+ end
64
+ @output.flush
65
+ end
66
+
67
+ def dump_pending
68
+ unless @pending_examples.empty?
69
+ @output.puts
70
+ @output.puts "Pending:"
71
+ @pending_examples.each do |pending_example|
72
+ @output.puts "#{pending_example[0]} (#{pending_example[1]})"
73
+ @output.puts " Called from #{pending_example[2]}"
74
+ end
75
+ end
76
+ @output.flush
77
+ end
78
+
79
+ def close
80
+ if IO === @output && @output != $stdout
81
+ @output.close
82
+ end
83
+ end
84
+
85
+ def format_backtrace(backtrace)
86
+ return "" if backtrace.nil?
87
+ backtrace.map { |line| backtrace_line(line) }.join("\n")
88
+ end
89
+
90
+ protected
91
+
92
+ def colour?
93
+ @options.colour ? true : false
94
+ end
95
+
96
+ def dry_run?
97
+ @options.dry_run ? true : false
98
+ end
99
+
100
+ def backtrace_line(line)
101
+ line.sub(/\A([^:]+:\d+)$/, '\\1:')
102
+ end
103
+
104
+ def colour(text, colour_code)
105
+ return text unless colour? && output_to_tty?
106
+ "#{colour_code}#{text}\e[0m"
107
+ end
108
+
109
+ def output_to_tty?
110
+ begin
111
+ @output.tty? || ENV.has_key?("AUTOTEST")
112
+ rescue NoMethodError
113
+ false
114
+ end
115
+ end
116
+
117
+ def green(text); colour(text, "\e[32m"); end
118
+ def red(text); colour(text, "\e[31m"); end
119
+ def magenta(text); colour(text, "\e[35m"); end
120
+ def yellow(text); colour(text, "\e[33m"); end
121
+ def blue(text); colour(text, "\e[34m"); end
122
+
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec/runner/formatter/base_text_formatter'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ class FailingExampleGroupsFormatter < BaseTextFormatter
7
+ def example_failed(example, counter, failure)
8
+ if @example_group
9
+ description_parts = @example_group.description_parts.collect do |description|
10
+ description =~ /(.*) \(druby.*\)$/ ? $1 : description
11
+ end
12
+ @output.puts ::Spec::Example::ExampleGroupMethods.description_text(*description_parts)
13
+
14
+ @output.flush
15
+ @example_group = nil
16
+ end
17
+ end
18
+
19
+ def dump_failure(counter, failure)
20
+ end
21
+
22
+ def dump_summary(duration, example_count, failure_count, pending_count)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec/runner/formatter/base_text_formatter'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ class FailingExamplesFormatter < BaseTextFormatter
7
+ def example_failed(example, counter, failure)
8
+ @output.puts "#{example_group.description} #{example.description}"
9
+ @output.flush
10
+ end
11
+
12
+ def dump_failure(counter, failure)
13
+ end
14
+
15
+ def dump_summary(duration, example_count, failure_count, pending_count)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,337 @@
1
+ require 'erb'
2
+ require 'spec/runner/formatter/base_text_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ class HtmlFormatter < BaseTextFormatter
8
+ include ERB::Util # for the #h method
9
+
10
+ def initialize(options, output)
11
+ super
12
+ @example_group_number = 0
13
+ @example_number = 0
14
+ end
15
+
16
+ def method_missing(sym, *args)
17
+ # no-op
18
+ end
19
+
20
+ # The number of the currently running example_group
21
+ def example_group_number
22
+ @example_group_number
23
+ end
24
+
25
+ # The number of the currently running example (a global counter)
26
+ def example_number
27
+ @example_number
28
+ end
29
+
30
+ def start(example_count)
31
+ @example_count = example_count
32
+
33
+ @output.puts html_header
34
+ @output.puts report_header
35
+ @output.flush
36
+ end
37
+
38
+ def add_example_group(example_group)
39
+ super
40
+ @example_group_red = false
41
+ @example_group_red = false
42
+ @example_group_number += 1
43
+ unless example_group_number == 1
44
+ @output.puts " </dl>"
45
+ @output.puts "</div>"
46
+ end
47
+ @output.puts "<div class=\"example_group\">"
48
+ @output.puts " <dl>"
49
+ @output.puts " <dt id=\"example_group_#{example_group_number}\">#{h(example_group.description)}</dt>"
50
+ @output.flush
51
+ end
52
+
53
+ def start_dump
54
+ @output.puts " </dl>"
55
+ @output.puts "</div>"
56
+ @output.flush
57
+ end
58
+
59
+ def example_started(example)
60
+ @example_number += 1
61
+ end
62
+
63
+ def example_passed(example)
64
+ move_progress
65
+ @output.puts " <dd class=\"spec passed\"><span class=\"passed_spec_name\">#{h(example.description)}</span></dd>"
66
+ @output.flush
67
+ end
68
+
69
+ def example_failed(example, counter, failure)
70
+ extra = extra_failure_content(failure)
71
+ failure_style = failure.pending_fixed? ? 'pending_fixed' : 'failed'
72
+ @output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
73
+ @header_red = true
74
+ @output.puts " <script type=\"text/javascript\">makeRed('example_group_#{example_group_number}');</script>" unless @example_group_red
75
+ @example_group_red = true
76
+ move_progress
77
+ @output.puts " <dd class=\"spec #{failure_style}\">"
78
+ @output.puts " <span class=\"failed_spec_name\">#{h(example.description)}</span>"
79
+ @output.puts " <div class=\"failure\" id=\"failure_#{counter}\">"
80
+ @output.puts " <div class=\"message\"><pre>#{h(failure.exception.message)}</pre></div>" unless failure.exception.nil?
81
+ @output.puts " <div class=\"backtrace\"><pre>#{format_backtrace(failure.exception.backtrace)}</pre></div>" unless failure.exception.nil?
82
+ @output.puts extra unless extra == ""
83
+ @output.puts " </div>"
84
+ @output.puts " </dd>"
85
+ @output.flush
86
+ end
87
+
88
+ def example_pending(example, message, pending_caller)
89
+ @output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
90
+ @output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{example_group_number}');</script>" unless @example_group_red
91
+ move_progress
92
+ @output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example.description)} (PENDING: #{h(message)})</span></dd>"
93
+ @output.flush
94
+ end
95
+
96
+ # Override this method if you wish to output extra HTML for a failed spec. For example, you
97
+ # could output links to images or other files produced during the specs.
98
+ #
99
+ def extra_failure_content(failure)
100
+ require 'spec/runner/formatter/snippet_extractor'
101
+ @snippet_extractor ||= SnippetExtractor.new
102
+ " <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(failure.exception)}</code></pre>"
103
+ end
104
+
105
+ def move_progress
106
+ @output.puts " <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>"
107
+ @output.flush
108
+ end
109
+
110
+ def percent_done
111
+ result = 100.0
112
+ if @example_count != 0
113
+ result = ((example_number).to_f / @example_count.to_f * 1000).to_i / 10.0
114
+ end
115
+ result
116
+ end
117
+
118
+ def dump_failure(counter, failure)
119
+ end
120
+
121
+ def dump_summary(duration, example_count, failure_count, pending_count)
122
+ if dry_run?
123
+ totals = "This was a dry-run"
124
+ else
125
+ totals = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
126
+ totals << ", #{pending_count} pending" if pending_count > 0
127
+ end
128
+ @output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{duration} seconds</strong>\";</script>"
129
+ @output.puts "<script type=\"text/javascript\">document.getElementById('totals').innerHTML = \"#{totals}\";</script>"
130
+ @output.puts "</div>"
131
+ @output.puts "</div>"
132
+ @output.puts "</body>"
133
+ @output.puts "</html>"
134
+ @output.flush
135
+ end
136
+
137
+ def html_header
138
+ <<-EOF
139
+ <?xml version="1.0" encoding="UTF-8"?>
140
+ <!DOCTYPE html
141
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
142
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
143
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
144
+ <head>
145
+ <title>RSpec results</title>
146
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
147
+ <meta http-equiv="Expires" content="-1" />
148
+ <meta http-equiv="Pragma" content="no-cache" />
149
+ <style type="text/css">
150
+ body {
151
+ margin: 0;
152
+ padding: 0;
153
+ background: #fff;
154
+ font-size: 80%;
155
+ }
156
+ </style>
157
+ </head>
158
+ <body>
159
+ EOF
160
+ end
161
+
162
+ def report_header
163
+ <<-EOF
164
+ <div class="rspec-report">
165
+ <script type="text/javascript">
166
+ // <![CDATA[
167
+ #{global_scripts}
168
+ // ]]>
169
+ </script>
170
+ <style type="text/css">
171
+ #{global_styles}
172
+ </style>
173
+
174
+ <div id="rspec-header">
175
+ <h1>RSpec Results</h1>
176
+
177
+ <div id="summary">
178
+ <p id="totals">&nbsp;</p>
179
+ <p id="duration">&nbsp;</p>
180
+ </div>
181
+ </div>
182
+
183
+ <div class="results">
184
+ EOF
185
+ end
186
+
187
+ def global_scripts
188
+ <<-EOF
189
+ function moveProgressBar(percentDone) {
190
+ document.getElementById("rspec-header").style.width = percentDone +"%";
191
+ }
192
+ function makeRed(element_id) {
193
+ document.getElementById(element_id).style.background = '#C40D0D';
194
+ document.getElementById(element_id).style.color = '#FFFFFF';
195
+ }
196
+
197
+ function makeYellow(element_id) {
198
+ if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
199
+ {
200
+ document.getElementById(element_id).style.background = '#FAF834';
201
+ document.getElementById(element_id).style.color = '#000000';
202
+ }
203
+ else
204
+ {
205
+ document.getElementById(element_id).style.background = '#FAF834';
206
+ document.getElementById(element_id).style.color = '#000000';
207
+ }
208
+ }
209
+ EOF
210
+ end
211
+
212
+ def global_styles
213
+ <<-EOF
214
+ #rspec-header {
215
+ background: #65C400; color: #fff;
216
+ }
217
+
218
+ .rspec-report h1 {
219
+ margin: 0px 10px 0px 10px;
220
+ padding: 10px;
221
+ font-family: "Lucida Grande", Helvetica, sans-serif;
222
+ font-size: 1.8em;
223
+ }
224
+
225
+ #summary {
226
+ margin: 0; padding: 5px 10px;
227
+ font-family: "Lucida Grande", Helvetica, sans-serif;
228
+ text-align: right;
229
+ position: absolute;
230
+ top: 0px;
231
+ right: 0px;
232
+ }
233
+
234
+ #summary p {
235
+ margin: 0 0 0 2px;
236
+ }
237
+
238
+ #summary #totals {
239
+ font-size: 1.2em;
240
+ }
241
+
242
+ .example_group {
243
+ margin: 0 10px 5px;
244
+ background: #fff;
245
+ }
246
+
247
+ dl {
248
+ margin: 0; padding: 0 0 5px;
249
+ font: normal 11px "Lucida Grande", Helvetica, sans-serif;
250
+ }
251
+
252
+ dt {
253
+ padding: 3px;
254
+ background: #65C400;
255
+ color: #fff;
256
+ font-weight: bold;
257
+ }
258
+
259
+ dd {
260
+ margin: 5px 0 5px 5px;
261
+ padding: 3px 3px 3px 18px;
262
+ }
263
+
264
+ dd.spec.passed {
265
+ border-left: 5px solid #65C400;
266
+ border-bottom: 1px solid #65C400;
267
+ background: #DBFFB4; color: #3D7700;
268
+ }
269
+
270
+ dd.spec.failed {
271
+ border-left: 5px solid #C20000;
272
+ border-bottom: 1px solid #C20000;
273
+ color: #C20000; background: #FFFBD3;
274
+ }
275
+
276
+ dd.spec.not_implemented {
277
+ border-left: 5px solid #FAF834;
278
+ border-bottom: 1px solid #FAF834;
279
+ background: #FCFB98; color: #131313;
280
+ }
281
+
282
+ dd.spec.pending_fixed {
283
+ border-left: 5px solid #0000C2;
284
+ border-bottom: 1px solid #0000C2;
285
+ color: #0000C2; background: #D3FBFF;
286
+ }
287
+
288
+ .backtrace {
289
+ color: #000;
290
+ font-size: 12px;
291
+ }
292
+
293
+ a {
294
+ color: #BE5C00;
295
+ }
296
+
297
+ /* Ruby code, style similar to vibrant ink */
298
+ .ruby {
299
+ font-size: 12px;
300
+ font-family: monospace;
301
+ color: white;
302
+ background-color: black;
303
+ padding: 0.1em 0 0.2em 0;
304
+ }
305
+
306
+ .ruby .keyword { color: #FF6600; }
307
+ .ruby .constant { color: #339999; }
308
+ .ruby .attribute { color: white; }
309
+ .ruby .global { color: white; }
310
+ .ruby .module { color: white; }
311
+ .ruby .class { color: white; }
312
+ .ruby .string { color: #66FF00; }
313
+ .ruby .ident { color: white; }
314
+ .ruby .method { color: #FFCC00; }
315
+ .ruby .number { color: white; }
316
+ .ruby .char { color: white; }
317
+ .ruby .comment { color: #9933CC; }
318
+ .ruby .symbol { color: white; }
319
+ .ruby .regex { color: #44B4CC; }
320
+ .ruby .punct { color: white; }
321
+ .ruby .escape { color: white; }
322
+ .ruby .interp { color: white; }
323
+ .ruby .expr { color: white; }
324
+
325
+ .ruby .offending { background-color: gray; }
326
+ .ruby .linenum {
327
+ width: 75px;
328
+ padding: 0.1em 1em 0.2em 0;
329
+ color: #000000;
330
+ background-color: #FFFBD3;
331
+ }
332
+ EOF
333
+ end
334
+ end
335
+ end
336
+ end
337
+ end