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,370 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <title>RSpec results</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9
+ <meta http-equiv="Expires" content="-1" />
10
+ <meta http-equiv="Pragma" content="no-cache" />
11
+ <style type="text/css">
12
+ body {
13
+ margin: 0;
14
+ padding: 0;
15
+ background: #fff;
16
+ font-size: 80%;
17
+ }
18
+ </style>
19
+ </head>
20
+ <body>
21
+ <div class="rspec-report">
22
+ <script type="text/javascript">
23
+ // <![CDATA[
24
+ function moveProgressBar(percentDone) {
25
+ document.getElementById("rspec-header").style.width = percentDone +"%";
26
+ }
27
+ function makeRed(element_id) {
28
+ document.getElementById(element_id).style.background = '#C40D0D';
29
+ document.getElementById(element_id).style.color = '#FFFFFF';
30
+ }
31
+
32
+ function makeYellow(element_id) {
33
+ if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
34
+ {
35
+ document.getElementById(element_id).style.background = '#FAF834';
36
+ document.getElementById(element_id).style.color = '#000000';
37
+ }
38
+ else
39
+ {
40
+ document.getElementById(element_id).style.background = '#FAF834';
41
+ document.getElementById(element_id).style.color = '#000000';
42
+ }
43
+ }
44
+
45
+ // ]]>
46
+ </script>
47
+ <style type="text/css">
48
+ #rspec-header {
49
+ background: #65C400; color: #fff;
50
+ }
51
+
52
+ .rspec-report h1 {
53
+ margin: 0px 10px 0px 10px;
54
+ padding: 10px;
55
+ font-family: "Lucida Grande", Helvetica, sans-serif;
56
+ font-size: 1.8em;
57
+ }
58
+
59
+ #summary {
60
+ margin: 0; padding: 5px 10px;
61
+ font-family: "Lucida Grande", Helvetica, sans-serif;
62
+ text-align: right;
63
+ position: absolute;
64
+ top: 0px;
65
+ right: 0px;
66
+ }
67
+
68
+ #summary p {
69
+ margin: 0 0 0 2px;
70
+ }
71
+
72
+ #summary #totals {
73
+ font-size: 1.2em;
74
+ }
75
+
76
+ .example_group {
77
+ margin: 0 10px 5px;
78
+ background: #fff;
79
+ }
80
+
81
+ dl {
82
+ margin: 0; padding: 0 0 5px;
83
+ font: normal 11px "Lucida Grande", Helvetica, sans-serif;
84
+ }
85
+
86
+ dt {
87
+ padding: 3px;
88
+ background: #65C400;
89
+ color: #fff;
90
+ font-weight: bold;
91
+ }
92
+
93
+ dd {
94
+ margin: 5px 0 5px 5px;
95
+ padding: 3px 3px 3px 18px;
96
+ }
97
+
98
+ dd.spec.passed {
99
+ border-left: 5px solid #65C400;
100
+ border-bottom: 1px solid #65C400;
101
+ background: #DBFFB4; color: #3D7700;
102
+ }
103
+
104
+ dd.spec.failed {
105
+ border-left: 5px solid #C20000;
106
+ border-bottom: 1px solid #C20000;
107
+ color: #C20000; background: #FFFBD3;
108
+ }
109
+
110
+ dd.spec.not_implemented {
111
+ border-left: 5px solid #FAF834;
112
+ border-bottom: 1px solid #FAF834;
113
+ background: #FCFB98; color: #131313;
114
+ }
115
+
116
+ dd.spec.pending_fixed {
117
+ border-left: 5px solid #0000C2;
118
+ border-bottom: 1px solid #0000C2;
119
+ color: #0000C2; background: #D3FBFF;
120
+ }
121
+
122
+ .backtrace {
123
+ color: #000;
124
+ font-size: 12px;
125
+ }
126
+
127
+ a {
128
+ color: #BE5C00;
129
+ }
130
+
131
+ /* Ruby code, style similar to vibrant ink */
132
+ .ruby {
133
+ font-size: 12px;
134
+ font-family: monospace;
135
+ color: white;
136
+ background-color: black;
137
+ padding: 0.1em 0 0.2em 0;
138
+ }
139
+
140
+ .ruby .keyword { color: #FF6600; }
141
+ .ruby .constant { color: #339999; }
142
+ .ruby .attribute { color: white; }
143
+ .ruby .global { color: white; }
144
+ .ruby .module { color: white; }
145
+ .ruby .class { color: white; }
146
+ .ruby .string { color: #66FF00; }
147
+ .ruby .ident { color: white; }
148
+ .ruby .method { color: #FFCC00; }
149
+ .ruby .number { color: white; }
150
+ .ruby .char { color: white; }
151
+ .ruby .comment { color: #9933CC; }
152
+ .ruby .symbol { color: white; }
153
+ .ruby .regex { color: #44B4CC; }
154
+ .ruby .punct { color: white; }
155
+ .ruby .escape { color: white; }
156
+ .ruby .interp { color: white; }
157
+ .ruby .expr { color: white; }
158
+
159
+ .ruby .offending { background-color: gray; }
160
+ .ruby .linenum {
161
+ width: 75px;
162
+ padding: 0.1em 1em 0.2em 0;
163
+ color: #000000;
164
+ background-color: #FFFBD3;
165
+ }
166
+
167
+ </style>
168
+
169
+ <div id="rspec-header">
170
+ <h1>RSpec Results</h1>
171
+
172
+ <div id="summary">
173
+ <p id="totals">&nbsp;</p>
174
+ <p id="duration">&nbsp;</p>
175
+ </div>
176
+ </div>
177
+
178
+ <div class="results">
179
+ <div class="example_group">
180
+ <dl>
181
+ <dt id="example_group_1">Mocker</dt>
182
+ <script type="text/javascript">moveProgressBar('5.8');</script>
183
+ <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
184
+ <script type="text/javascript">makeRed('rspec-header');</script>
185
+ <script type="text/javascript">makeRed('example_group_1');</script>
186
+ <script type="text/javascript">moveProgressBar('11.7');</script>
187
+ <dd class="spec failed">
188
+ <span class="failed_spec_name">should fail when expected message not received</span>
189
+ <div class="failure" id="failure_1">
190
+ <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
191
+ <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13:
192
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
193
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
194
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
195
+ <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
196
+ <span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
197
+ <span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
198
+ <span class="linenum">14</span> <span class="keyword">end</span>
199
+ <span class="linenum">15</span> </code></pre>
200
+ </div>
201
+ </dd>
202
+ <script type="text/javascript">moveProgressBar('17.6');</script>
203
+ <dd class="spec failed">
204
+ <span class="failed_spec_name">should fail when messages are received out of order</span>
205
+ <div class="failure" id="failure_2">
206
+ <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
207
+ <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22:
208
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
209
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
210
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
211
+ <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
212
+ <span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
213
+ <span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
214
+ <span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
215
+ <span class="linenum">24</span> <span class="keyword">end</span></code></pre>
216
+ </div>
217
+ </dd>
218
+ <script type="text/javascript">moveProgressBar('23.5');</script>
219
+ <dd class="spec failed">
220
+ <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
221
+ <div class="failure" id="failure_3">
222
+ <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
223
+ <div class="backtrace"><pre>./failing_examples/mocking_example.rb:29:
224
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
225
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
226
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
227
+ <pre class="ruby"><code><span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
228
+ <span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span>
229
+ <span class="offending"><span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
230
+ <span class="linenum">30</span> <span class="keyword">end</span></code></pre>
231
+ </div>
232
+ </dd>
233
+ <script type="text/javascript">moveProgressBar('29.4');</script>
234
+ <dd class="spec pending_fixed">
235
+ <span class="failed_spec_name">has a bug we need to fix</span>
236
+ <div class="failure" id="failure_4">
237
+ <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
238
+ <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33:
239
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
240
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
241
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
242
+ <pre class="ruby"><code><span class="linenum">31</span>
243
+ <span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
244
+ <span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
245
+ <span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
246
+ <span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
247
+ </div>
248
+ </dd>
249
+ </dl>
250
+ </div>
251
+ <div class="example_group">
252
+ <dl>
253
+ <dt id="example_group_2">Running specs with --diff</dt>
254
+ <script type="text/javascript">makeRed('example_group_2');</script>
255
+ <script type="text/javascript">moveProgressBar('35.2');</script>
256
+ <dd class="spec failed">
257
+ <span class="failed_spec_name">should print diff of different strings</span>
258
+ <div class="failure" id="failure_5">
259
+ <div class="message"><pre>expected: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
260
+ got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (using ==)
261
+ Diff:
262
+ @@ -1,4 +1,4 @@
263
+ RSpec is a
264
+ -behaviour driven development
265
+ +behavior driven development
266
+ framework for Ruby
267
+ </pre></div>
268
+ <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13:
269
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
270
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
271
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
272
+ <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
273
+ <span class="linenum">12</span><span class="constant">EOF</span>
274
+ <span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
275
+ <span class="linenum">14</span> <span class="keyword">end</span></code></pre>
276
+ </div>
277
+ </dd>
278
+ <script type="text/javascript">moveProgressBar('41.1');</script>
279
+ <dd class="spec failed">
280
+ <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
281
+ <div class="failure" id="failure_6">
282
+ <div class="message"><pre>expected &lt;Animal
283
+ name=bob,
284
+ species=tortoise
285
+ &gt;
286
+ , got &lt;Animal
287
+ name=bob,
288
+ species=giraffe
289
+ &gt;
290
+ (using .eql?)
291
+ Diff:
292
+ @@ -1,5 +1,5 @@
293
+ &lt;Animal
294
+ name=bob,
295
+ -species=tortoise
296
+ +species=giraffe
297
+ &gt;
298
+ </pre></div>
299
+ <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34:
300
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
301
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
302
+ /Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
303
+ <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</span>
304
+ <span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</span>
305
+ <span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
306
+ <span class="linenum">35</span> <span class="keyword">end</span>
307
+ <span class="linenum">36</span><span class="keyword">end</span></code></pre>
308
+ </div>
309
+ </dd>
310
+ </dl>
311
+ </div>
312
+ <div class="example_group">
313
+ <dl>
314
+ <dt id="example_group_3">A consumer of a stub</dt>
315
+ <script type="text/javascript">moveProgressBar('47.0');</script>
316
+ <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
317
+ </dl>
318
+ </div>
319
+ <div class="example_group">
320
+ <dl>
321
+ <dt id="example_group_4">A stubbed method on a class</dt>
322
+ <script type="text/javascript">moveProgressBar('52.9');</script>
323
+ <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
324
+ <script type="text/javascript">moveProgressBar('58.8');</script>
325
+ <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
326
+ <script type="text/javascript">moveProgressBar('64.7');</script>
327
+ <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
328
+ </dl>
329
+ </div>
330
+ <div class="example_group">
331
+ <dl>
332
+ <dt id="example_group_5">A mock</dt>
333
+ <script type="text/javascript">moveProgressBar('70.5');</script>
334
+ <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
335
+ <script type="text/javascript">moveProgressBar('76.4');</script>
336
+ <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
337
+ <script type="text/javascript">moveProgressBar('82.3');</script>
338
+ <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
339
+ </dl>
340
+ </div>
341
+ <div class="example_group">
342
+ <dl>
343
+ <dt id="example_group_6">pending example (using pending method)</dt>
344
+ <script type="text/javascript">makeYellow('example_group_6');</script>
345
+ <script type="text/javascript">moveProgressBar('88.2');</script>
346
+ <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
347
+ </dl>
348
+ </div>
349
+ <div class="example_group">
350
+ <dl>
351
+ <dt id="example_group_7">pending example (with no block)</dt>
352
+ <script type="text/javascript">makeYellow('example_group_7');</script>
353
+ <script type="text/javascript">moveProgressBar('94.1');</script>
354
+ <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: Not Yet Implemented&quot; (PENDING: Not Yet Implemented)</span></dd>
355
+ </dl>
356
+ </div>
357
+ <div class="example_group">
358
+ <dl>
359
+ <dt id="example_group_8">pending example (with block for pending)</dt>
360
+ <script type="text/javascript">makeYellow('example_group_8');</script>
361
+ <script type="text/javascript">moveProgressBar('100.0');</script>
362
+ <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
363
+ </dl>
364
+ </div>
365
+ <script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
366
+ <script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
367
+ </div>
368
+ </div>
369
+ </body>
370
+ </html>
@@ -0,0 +1,61 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require 'hpricot' # Needed to compare generated with wanted HTML
3
+ require 'spec/runner/formatter/html_formatter'
4
+
5
+ module Spec
6
+ module Runner
7
+ module Formatter
8
+ describe HtmlFormatter do
9
+ ['--diff', '--dry-run'].each do |opt|
10
+ def jruby?
11
+ PLATFORM == 'java'
12
+ end
13
+
14
+ it "should produce HTML identical to the one we designed manually with #{opt}" do
15
+ root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
16
+ suffix = jruby? ? '-jruby' : ''
17
+ expected_file = File.dirname(__FILE__) + "/html_formatted-#{::VERSION}#{suffix}.html"
18
+ raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file)
19
+ expected_html = File.read(expected_file)
20
+
21
+ Dir.chdir(root) do
22
+ args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'html', opt]
23
+ err = StringIO.new
24
+ out = StringIO.new
25
+ run_with OptionParser.parse(args, err, out)
26
+
27
+ seconds = /\d+\.\d+ seconds/
28
+ html = out.string.gsub seconds, 'x seconds'
29
+ expected_html.gsub! seconds, 'x seconds'
30
+
31
+ if opt == '--diff'
32
+ # Uncomment this line temporarily in order to overwrite the expected with actual.
33
+ # Use with care!!!
34
+ # File.open(expected_file, 'w') {|io| io.write(html)}
35
+
36
+ doc = Hpricot(html)
37
+ backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
38
+ doc.search("div.backtrace").remove
39
+
40
+ expected_doc = Hpricot(expected_html)
41
+ expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
42
+ expected_doc.search("div.backtrace").remove
43
+
44
+ doc.inner_html.should == expected_doc.inner_html
45
+
46
+ expected_backtraces.each_with_index do |expected_line, i|
47
+ expected_path, expected_line_number, expected_suffix = expected_line.split(':')
48
+ actual_path, actual_line_number, actual_suffix = backtraces[i].split(':')
49
+ File.expand_path(actual_path).should == File.expand_path(expected_path)
50
+ actual_line_number.should == expected_line_number
51
+ end
52
+ else
53
+ html.should =~ /This was a dry-run/m
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,318 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ require 'spec/runner/formatter/nested_text_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ describe NestedTextFormatter do
8
+ with_sandboxed_options do
9
+ attr_reader :io, :options, :formatter, :example_group
10
+ before(:each) do
11
+ @io = StringIO.new
12
+ options.stub!(:dry_run).and_return(false)
13
+ options.stub!(:colour).and_return(false)
14
+ @formatter = NestedTextFormatter.new(options, io)
15
+ @example_group = ::Spec::Example::ExampleGroup.describe("ExampleGroup") do
16
+ specify "example" do
17
+ end
18
+ end
19
+ end
20
+
21
+ describe "where ExampleGroup has no superclasss with a description" do
22
+ before do
23
+ add_example_group
24
+ end
25
+
26
+ def add_example_group
27
+ formatter.add_example_group(example_group)
28
+ end
29
+
30
+ describe "#dump_summary" do
31
+ it "should produce standard summary without pending when pending has a 0 count" do
32
+ formatter.dump_summary(3, 2, 1, 0)
33
+ io.string.should == <<-OUT
34
+ ExampleGroup
35
+
36
+ Finished in 3 seconds
37
+
38
+ 2 examples, 1 failure
39
+ OUT
40
+ end
41
+
42
+ it "should produce standard summary" do
43
+ formatter.dump_summary(3, 2, 1, 4)
44
+ io.string.should == <<-OUT
45
+ ExampleGroup
46
+
47
+ Finished in 3 seconds
48
+
49
+ 2 examples, 1 failure, 4 pending
50
+ OUT
51
+ end
52
+ end
53
+
54
+ describe "#add_example_group" do
55
+ describe "when ExampleGroup has description_args" do
56
+ before do
57
+ example_group.description_args.should_not be_nil
58
+ end
59
+
60
+ describe "when ExampleGroup has no parents with description args" do
61
+ before do
62
+ example_group.superclass.description_args.should be_empty
63
+ end
64
+
65
+ it "should push ExampleGroup name" do
66
+ io.string.should eql("ExampleGroup\n")
67
+ end
68
+ end
69
+
70
+ describe "when ExampleGroup has one parent with description args" do
71
+ attr_reader :child_example_group
72
+ def add_example_group
73
+ example_group.description_args.should_not be_nil
74
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
75
+ end
76
+
77
+ describe "and parent ExampleGroups have not been printed" do
78
+ before do
79
+ formatter.add_example_group(child_example_group)
80
+ end
81
+
82
+ it "should push ExampleGroup name with two spaces of indentation" do
83
+ io.string.should == <<-OUT
84
+ ExampleGroup
85
+ Child ExampleGroup
86
+ OUT
87
+ end
88
+ end
89
+
90
+ describe "and parent ExampleGroups have been printed" do
91
+ before do
92
+ formatter.add_example_group(example_group)
93
+ io.string = ""
94
+ formatter.add_example_group(child_example_group)
95
+ end
96
+
97
+ it "should print only the indented ExampleGroup" do
98
+ io.string.should == <<-OUT
99
+ Child ExampleGroup
100
+ OUT
101
+ end
102
+ end
103
+ end
104
+
105
+ describe "when ExampleGroup has two parents with description args" do
106
+ attr_reader :child_example_group, :grand_child_example_group
107
+ def add_example_group
108
+ example_group.description_args.should_not be_nil
109
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
110
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
111
+ end
112
+
113
+ describe "and parent ExampleGroups have not been printed" do
114
+ before do
115
+ formatter.add_example_group(grand_child_example_group)
116
+ end
117
+
118
+ it "should print the entire nested ExampleGroup heirarchy" do
119
+ io.string.should == <<-OUT
120
+ ExampleGroup
121
+ Child ExampleGroup
122
+ GrandChild ExampleGroup
123
+ OUT
124
+ end
125
+ end
126
+
127
+ describe "and parent ExampleGroups have been printed" do
128
+ before do
129
+ formatter.add_example_group(child_example_group)
130
+ io.string = ""
131
+ formatter.add_example_group(grand_child_example_group)
132
+ end
133
+
134
+ it "should print only the indented ExampleGroup" do
135
+ io.string.should == <<-OUT
136
+ GrandChild ExampleGroup
137
+ OUT
138
+ end
139
+ end
140
+ end
141
+ end
142
+
143
+ describe "when ExampleGroup description_args is nil" do
144
+ attr_reader :child_example_group
145
+
146
+ describe "and parent ExampleGroups have not been printed" do
147
+ def add_example_group
148
+ @child_example_group = Class.new(example_group)
149
+ child_example_group.description_args.should be_empty
150
+ formatter.add_example_group(child_example_group)
151
+ end
152
+
153
+ it "should render only the parent ExampleGroup" do
154
+ io.string.should == <<-OUT
155
+ ExampleGroup
156
+ OUT
157
+ end
158
+ end
159
+
160
+ describe "and parent ExampleGroups have been printed" do
161
+ def add_example_group
162
+ @child_example_group = Class.new(example_group)
163
+ child_example_group.description_args.should be_empty
164
+ formatter.add_example_group(example_group)
165
+ io.string = ""
166
+ formatter.add_example_group(child_example_group)
167
+ end
168
+
169
+ it "should not render anything" do
170
+ io.string.should == ""
171
+ end
172
+ end
173
+ end
174
+
175
+ describe "when ExampleGroup description_args is empty" do
176
+ def add_example_group
177
+ example_group.set_description
178
+ example_group.description_args.should be_empty
179
+ super
180
+ end
181
+
182
+ it "should not render anything" do
183
+ io.string.should == ""
184
+ end
185
+ end
186
+ end
187
+
188
+ describe "#example_failed" do
189
+ describe "where ExampleGroup has no superclasss with a description" do
190
+ describe "when having an error" do
191
+ it "should push failing spec name and failure number" do
192
+ formatter.example_failed(
193
+ example_group.it("spec"),
194
+ 98,
195
+ Reporter::Failure.new("c s", RuntimeError.new)
196
+ )
197
+ io.string.should == <<-OUT
198
+ ExampleGroup
199
+ spec (ERROR - 98)
200
+ OUT
201
+ end
202
+ end
203
+
204
+ describe "when having an expectation failure" do
205
+ it "should push failing spec name and failure number" do
206
+ formatter.example_failed(
207
+ example_group.it("spec"),
208
+ 98,
209
+ Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
210
+ )
211
+ io.string.should == <<-OUT
212
+ ExampleGroup
213
+ spec (FAILED - 98)
214
+ OUT
215
+ end
216
+ end
217
+ end
218
+
219
+ describe "where ExampleGroup has two superclasses with a description" do
220
+ attr_reader :child_example_group, :grand_child_example_group
221
+
222
+ def add_example_group
223
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
224
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
225
+ formatter.add_example_group(grand_child_example_group)
226
+ end
227
+
228
+ describe "when having an error" do
229
+ it "should push failing spec name and failure number" do
230
+ formatter.example_failed(
231
+ grand_child_example_group.it("spec"),
232
+ 98,
233
+ Reporter::Failure.new("c s", RuntimeError.new)
234
+ )
235
+ io.string.should == <<-OUT
236
+ ExampleGroup
237
+ Child ExampleGroup
238
+ GrandChild ExampleGroup
239
+ spec (ERROR - 98)
240
+ OUT
241
+ end
242
+ end
243
+
244
+ describe "when having an expectation" do
245
+ it "should push failing spec name and failure number" do
246
+ formatter.example_failed(
247
+ grand_child_example_group.it("spec"),
248
+ 98,
249
+ Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
250
+ )
251
+ io.string.should == <<-OUT
252
+ ExampleGroup
253
+ Child ExampleGroup
254
+ GrandChild ExampleGroup
255
+ spec (FAILED - 98)
256
+ OUT
257
+ end
258
+ end
259
+ end
260
+ end
261
+
262
+ describe "#start" do
263
+ it "should push nothing on start" do
264
+ formatter.start(5)
265
+ io.string.should == <<-OUT
266
+ ExampleGroup
267
+ OUT
268
+ end
269
+ end
270
+
271
+ describe "#start_dump" do
272
+ it "should push nothing on start dump" do
273
+ formatter.start_dump
274
+ io.string.should == <<-OUT
275
+ ExampleGroup
276
+ OUT
277
+ end
278
+ end
279
+
280
+ describe "#example_passed" do
281
+ it "should push passing spec name" do
282
+ formatter.example_passed(example_group.it("spec"))
283
+ io.string.should == <<-OUT
284
+ ExampleGroup
285
+ spec
286
+ OUT
287
+ end
288
+ end
289
+
290
+ describe "#example_pending" do
291
+ it "should push pending example name and message" do
292
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
293
+ io.string.should == <<-OUT
294
+ ExampleGroup
295
+ example (PENDING: reason)
296
+ OUT
297
+ end
298
+
299
+ it "should dump pending" do
300
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
301
+ io.rewind
302
+ formatter.dump_pending
303
+ io.string.should =~ /Pending\:\nExampleGroup example \(reason\)\n/
304
+ end
305
+ end
306
+
307
+ def have_single_level_example_group_output(expected_output)
308
+ expected = "ExampleGroup\n #{expected_output}"
309
+ ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
310
+ actual == expected
311
+ end
312
+ end
313
+ end
314
+ end
315
+ end
316
+ end
317
+ end
318
+ end