rspec-instructure 1.3.3

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 (395) hide show
  1. data/.autotest +5 -0
  2. data/.document +7 -0
  3. data/.gitignore +15 -0
  4. data/Gemfile +20 -0
  5. data/History.rdoc +1565 -0
  6. data/License.txt +22 -0
  7. data/README.rdoc +44 -0
  8. data/Rakefile +110 -0
  9. data/Ruby1.9.rdoc +31 -0
  10. data/TODO.txt +17 -0
  11. data/Upgrade.rdoc +260 -0
  12. data/bin/autospec +4 -0
  13. data/bin/spec +5 -0
  14. data/cucumber.yml +5 -0
  15. data/example_spec.rb +4 -0
  16. data/examples/failing/README.txt +11 -0
  17. data/examples/failing/diffing_spec.rb +36 -0
  18. data/examples/failing/failing_implicit_docstrings_example.rb +17 -0
  19. data/examples/failing/failure_in_after.rb +10 -0
  20. data/examples/failing/failure_in_before.rb +10 -0
  21. data/examples/failing/mocking_example.rb +38 -0
  22. data/examples/failing/mocking_with_flexmock.rb +26 -0
  23. data/examples/failing/mocking_with_mocha.rb +25 -0
  24. data/examples/failing/mocking_with_rr.rb +27 -0
  25. data/examples/failing/partial_mock_example.rb +18 -0
  26. data/examples/failing/pending_example.rb +7 -0
  27. data/examples/failing/predicate_example.rb +32 -0
  28. data/examples/failing/raising_example.rb +47 -0
  29. data/examples/failing/syntax_error_example.rb +7 -0
  30. data/examples/failing/team_spec.rb +41 -0
  31. data/examples/failing/timeout_behaviour.rb +5 -0
  32. data/examples/passing/custom_formatter.rb +11 -0
  33. data/examples/passing/custom_matchers.rb +54 -0
  34. data/examples/passing/dynamic_spec.rb +7 -0
  35. data/examples/passing/file_accessor.rb +18 -0
  36. data/examples/passing/file_accessor_spec.rb +37 -0
  37. data/examples/passing/filtered_formatter.rb +17 -0
  38. data/examples/passing/filtered_formatter_example.rb +31 -0
  39. data/examples/passing/greeter_spec.rb +30 -0
  40. data/examples/passing/helper_method_example.rb +12 -0
  41. data/examples/passing/implicit_docstrings_example.rb +16 -0
  42. data/examples/passing/io_processor.rb +8 -0
  43. data/examples/passing/io_processor_spec.rb +20 -0
  44. data/examples/passing/mocking_example.rb +25 -0
  45. data/examples/passing/multi_threaded_example_group_runner.rb +26 -0
  46. data/examples/passing/nested_classes_example.rb +35 -0
  47. data/examples/passing/options_example.rb +29 -0
  48. data/examples/passing/options_formatter.rb +20 -0
  49. data/examples/passing/partial_mock_example.rb +27 -0
  50. data/examples/passing/pending_example.rb +18 -0
  51. data/examples/passing/predicate_example.rb +25 -0
  52. data/examples/passing/shared_example_group_example.rb +43 -0
  53. data/examples/passing/shared_stack_examples.rb +36 -0
  54. data/examples/passing/simple_matcher_example.rb +29 -0
  55. data/examples/passing/stack.rb +36 -0
  56. data/examples/passing/stack_spec.rb +63 -0
  57. data/examples/passing/stack_spec_with_nested_example_groups.rb +66 -0
  58. data/examples/passing/stubbing_example.rb +67 -0
  59. data/examples/passing/yielding_example.rb +31 -0
  60. data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +85 -0
  61. data/features-pending/cli/conditional_exclusion.feature +39 -0
  62. data/features-pending/heckle/heckle.feature +56 -0
  63. data/features/before_and_after_blocks/before_and_after_blocks.feature +167 -0
  64. data/features/command_line/line_number_option.feature +56 -0
  65. data/features/command_line/line_number_option_with_example_with_no_name.feature +22 -0
  66. data/features/example_groups/define_example_attribute.feature +41 -0
  67. data/features/example_groups/example_group_with_should_methods.feature +29 -0
  68. data/features/example_groups/implicit_docstrings.feature +59 -0
  69. data/features/example_groups/nested_groups.feature +32 -0
  70. data/features/expectations/customized_message.feature +54 -0
  71. data/features/expectations/expect_change.feature +65 -0
  72. data/features/expectations/expect_error.feature +44 -0
  73. data/features/extensions/custom_example_group.feature +19 -0
  74. data/features/formatters/custom_formatter.feature +30 -0
  75. data/features/formatters/nested_formatter.feature +32 -0
  76. data/features/interop/cucumber_stubs_dont_leak.feature +11 -0
  77. data/features/interop/examples_and_tests_together.feature +84 -0
  78. data/features/interop/rspec_output.feature +25 -0
  79. data/features/interop/test_but_not_test_unit.feature +26 -0
  80. data/features/interop/test_case_with_should_methods.feature +46 -0
  81. data/features/load_paths/add_lib_to_load_path.feature +20 -0
  82. data/features/load_paths/add_spec_to_load_path.feature +20 -0
  83. data/features/matchers/define_diffable_matcher.feature +26 -0
  84. data/features/matchers/define_matcher.feature +179 -0
  85. data/features/matchers/define_matcher_outside_rspec.feature +37 -0
  86. data/features/matchers/define_matcher_with_fluent_interface.feature +48 -0
  87. data/features/matchers/define_wrapped_matcher.feature +56 -0
  88. data/features/matchers/match_unless_raises.feature +60 -0
  89. data/features/matchers/match_unless_raises_unexpected_error.feature +39 -0
  90. data/features/mock_framework_integration/use_flexmock.feature +27 -0
  91. data/features/mock_framework_integration/use_mocha.feature +27 -0
  92. data/features/mock_framework_integration/use_rr.feature +27 -0
  93. data/features/mocks/block_local_expectations.feature +62 -0
  94. data/features/mocks/mix_stubs_and_mocks.feature +22 -0
  95. data/features/mocks/stub_implementation.feature +26 -0
  96. data/features/pending/pending_examples.feature +81 -0
  97. data/features/runner/specify_line_number.feature +32 -0
  98. data/features/spec_helper/spec_helper.feature +25 -0
  99. data/features/step_definitions/running_rspec_steps.rb +52 -0
  100. data/features/step_definitions/stubbing_steps.rb +16 -0
  101. data/features/subject/explicit_subject.feature +31 -0
  102. data/features/subject/implicit_subject.feature +43 -0
  103. data/features/support/env.rb +83 -0
  104. data/features/support/matchers/smart_match.rb +31 -0
  105. data/init.rb +9 -0
  106. data/lib/autotest/discover.rb +3 -0
  107. data/lib/autotest/rspec.rb +54 -0
  108. data/lib/spec.rb +8 -0
  109. data/lib/spec/adapters/mock_frameworks/flexmock.rb +24 -0
  110. data/lib/spec/adapters/mock_frameworks/mocha.rb +25 -0
  111. data/lib/spec/adapters/mock_frameworks/rr.rb +22 -0
  112. data/lib/spec/adapters/mock_frameworks/rspec.rb +21 -0
  113. data/lib/spec/autorun.rb +3 -0
  114. data/lib/spec/deprecation.rb +41 -0
  115. data/lib/spec/dsl.rb +1 -0
  116. data/lib/spec/dsl/main.rb +93 -0
  117. data/lib/spec/example.rb +164 -0
  118. data/lib/spec/example/args_and_options.rb +27 -0
  119. data/lib/spec/example/before_and_after_hooks.rb +93 -0
  120. data/lib/spec/example/errors.rb +25 -0
  121. data/lib/spec/example/example_group.rb +10 -0
  122. data/lib/spec/example/example_group_factory.rb +82 -0
  123. data/lib/spec/example/example_group_hierarchy.rb +53 -0
  124. data/lib/spec/example/example_group_methods.rb +287 -0
  125. data/lib/spec/example/example_group_proxy.rb +61 -0
  126. data/lib/spec/example/example_matcher.rb +43 -0
  127. data/lib/spec/example/example_methods.rb +152 -0
  128. data/lib/spec/example/example_proxy.rb +41 -0
  129. data/lib/spec/example/module_reopening_fix.rb +43 -0
  130. data/lib/spec/example/pending.rb +18 -0
  131. data/lib/spec/example/predicate_matchers.rb +46 -0
  132. data/lib/spec/example/shared_example_group.rb +59 -0
  133. data/lib/spec/example/subject.rb +114 -0
  134. data/lib/spec/expectations.rb +35 -0
  135. data/lib/spec/expectations/errors.rb +12 -0
  136. data/lib/spec/expectations/extensions.rb +1 -0
  137. data/lib/spec/expectations/extensions/kernel.rb +52 -0
  138. data/lib/spec/expectations/fail_with.rb +45 -0
  139. data/lib/spec/expectations/handler.rb +50 -0
  140. data/lib/spec/extensions/instance_exec.rb +31 -0
  141. data/lib/spec/interop/test.rb +44 -0
  142. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  143. data/lib/spec/interop/test/unit/testcase.rb +56 -0
  144. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  145. data/lib/spec/interop/test/unit/testsuite_adapter.rb +36 -0
  146. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  147. data/lib/spec/matchers.rb +214 -0
  148. data/lib/spec/matchers/be.rb +249 -0
  149. data/lib/spec/matchers/be_close.rb +32 -0
  150. data/lib/spec/matchers/be_instance_of.rb +26 -0
  151. data/lib/spec/matchers/be_kind_of.rb +26 -0
  152. data/lib/spec/matchers/change.rb +151 -0
  153. data/lib/spec/matchers/compatibility.rb +14 -0
  154. data/lib/spec/matchers/dsl.rb +20 -0
  155. data/lib/spec/matchers/eql.rb +42 -0
  156. data/lib/spec/matchers/equal.rb +53 -0
  157. data/lib/spec/matchers/errors.rb +5 -0
  158. data/lib/spec/matchers/exist.rb +16 -0
  159. data/lib/spec/matchers/generated_descriptions.rb +36 -0
  160. data/lib/spec/matchers/has.rb +35 -0
  161. data/lib/spec/matchers/have.rb +152 -0
  162. data/lib/spec/matchers/include.rb +44 -0
  163. data/lib/spec/matchers/match.rb +21 -0
  164. data/lib/spec/matchers/match_array.rb +71 -0
  165. data/lib/spec/matchers/matcher.rb +132 -0
  166. data/lib/spec/matchers/method_missing.rb +9 -0
  167. data/lib/spec/matchers/operator_matcher.rb +83 -0
  168. data/lib/spec/matchers/pretty.rb +37 -0
  169. data/lib/spec/matchers/raise_exception.rb +131 -0
  170. data/lib/spec/matchers/respond_to.rb +71 -0
  171. data/lib/spec/matchers/satisfy.rb +47 -0
  172. data/lib/spec/matchers/simple_matcher.rb +134 -0
  173. data/lib/spec/matchers/throw_symbol.rb +100 -0
  174. data/lib/spec/matchers/wrap_expectation.rb +55 -0
  175. data/lib/spec/mocks.rb +200 -0
  176. data/lib/spec/mocks/argument_expectation.rb +51 -0
  177. data/lib/spec/mocks/argument_matchers.rb +237 -0
  178. data/lib/spec/mocks/error_generator.rb +92 -0
  179. data/lib/spec/mocks/errors.rb +10 -0
  180. data/lib/spec/mocks/example_methods.rb +69 -0
  181. data/lib/spec/mocks/extensions.rb +1 -0
  182. data/lib/spec/mocks/extensions/object.rb +3 -0
  183. data/lib/spec/mocks/framework.rb +15 -0
  184. data/lib/spec/mocks/message_expectation.rb +344 -0
  185. data/lib/spec/mocks/methods.rb +94 -0
  186. data/lib/spec/mocks/mock.rb +71 -0
  187. data/lib/spec/mocks/order_group.rb +29 -0
  188. data/lib/spec/mocks/proxy.rb +254 -0
  189. data/lib/spec/mocks/space.rb +28 -0
  190. data/lib/spec/rake/spectask.rb +230 -0
  191. data/lib/spec/rake/verify_rcov.rb +52 -0
  192. data/lib/spec/ruby.rb +9 -0
  193. data/lib/spec/runner.rb +66 -0
  194. data/lib/spec/runner/backtrace_tweaker.rb +78 -0
  195. data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
  196. data/lib/spec/runner/command_line.rb +15 -0
  197. data/lib/spec/runner/configuration.rb +202 -0
  198. data/lib/spec/runner/differs/default.rb +93 -0
  199. data/lib/spec/runner/differs/load-diff-lcs.rb +12 -0
  200. data/lib/spec/runner/drb_command_line.rb +32 -0
  201. data/lib/spec/runner/example_group_runner.rb +62 -0
  202. data/lib/spec/runner/extensions/kernel.rb +9 -0
  203. data/lib/spec/runner/formatter/base_formatter.rb +139 -0
  204. data/lib/spec/runner/formatter/base_text_formatter.rb +142 -0
  205. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +25 -0
  206. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  207. data/lib/spec/runner/formatter/html_formatter.rb +338 -0
  208. data/lib/spec/runner/formatter/nested_text_formatter.rb +50 -0
  209. data/lib/spec/runner/formatter/no_op_method_missing.rb +21 -0
  210. data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
  211. data/lib/spec/runner/formatter/progress_bar_formatter.rb +33 -0
  212. data/lib/spec/runner/formatter/silent_formatter.rb +10 -0
  213. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  214. data/lib/spec/runner/formatter/specdoc_formatter.rb +33 -0
  215. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  216. data/lib/spec/runner/heckle_runner.rb +77 -0
  217. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  218. data/lib/spec/runner/line_number_query.rb +78 -0
  219. data/lib/spec/runner/option_parser.rb +225 -0
  220. data/lib/spec/runner/options.rb +406 -0
  221. data/lib/spec/runner/reporter.rb +171 -0
  222. data/lib/spec/stubs/cucumber.rb +5 -0
  223. data/lib/spec/test/unit.rb +10 -0
  224. data/lib/spec/version.rb +14 -0
  225. data/resources/helpers/cmdline.rb +8 -0
  226. data/resources/rake/examples.rake +7 -0
  227. data/resources/rake/examples_with_rcov.rake +9 -0
  228. data/resources/rake/failing_examples_with_html.rake +9 -0
  229. data/resources/rake/verify_rcov.rake +7 -0
  230. data/rspec.gemspec +26 -0
  231. data/spec/README.jruby +15 -0
  232. data/spec/autotest/autotest_helper.rb +8 -0
  233. data/spec/autotest/autotest_matchers.rb +38 -0
  234. data/spec/autotest/discover_spec.rb +8 -0
  235. data/spec/autotest/failed_results_re_spec.rb +31 -0
  236. data/spec/autotest/rspec_spec.rb +126 -0
  237. data/spec/ruby_forker.rb +13 -0
  238. data/spec/spec.opts +6 -0
  239. data/spec/spec/dsl/main_spec.rb +103 -0
  240. data/spec/spec/example/example_group_class_definition_spec.rb +51 -0
  241. data/spec/spec/example/example_group_factory_spec.rb +180 -0
  242. data/spec/spec/example/example_group_methods_spec.rb +778 -0
  243. data/spec/spec/example/example_group_proxy_spec.rb +107 -0
  244. data/spec/spec/example/example_group_spec.rb +632 -0
  245. data/spec/spec/example/example_matcher_spec.rb +85 -0
  246. data/spec/spec/example/example_methods_spec.rb +162 -0
  247. data/spec/spec/example/example_proxy_spec.rb +57 -0
  248. data/spec/spec/example/helper_method_spec.rb +24 -0
  249. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  250. data/spec/spec/example/pending_module_spec.rb +58 -0
  251. data/spec/spec/example/predicate_matcher_spec.rb +41 -0
  252. data/spec/spec/example/shared_example_group_spec.rb +257 -0
  253. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  254. data/spec/spec/example/subject_spec.rb +110 -0
  255. data/spec/spec/expectations/differs/default_spec.rb +194 -0
  256. data/spec/spec/expectations/extensions/kernel_spec.rb +45 -0
  257. data/spec/spec/expectations/fail_with_spec.rb +96 -0
  258. data/spec/spec/expectations/handler_spec.rb +206 -0
  259. data/spec/spec/expectations/wrap_expectation_spec.rb +31 -0
  260. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  261. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  262. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  263. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  264. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  265. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  266. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  267. data/spec/spec/interop/test/unit/resources/test_case_with_various_names.rb +22 -0
  268. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  269. data/spec/spec/interop/test/unit/spec_spec.rb +48 -0
  270. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
  271. data/spec/spec/interop/test/unit/testcase_spec.rb +50 -0
  272. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  273. data/spec/spec/matchers/be_close_spec.rb +50 -0
  274. data/spec/spec/matchers/be_instance_of_spec.rb +36 -0
  275. data/spec/spec/matchers/be_kind_of_spec.rb +33 -0
  276. data/spec/spec/matchers/be_spec.rb +460 -0
  277. data/spec/spec/matchers/change_spec.rb +349 -0
  278. data/spec/spec/matchers/compatibility_spec.rb +28 -0
  279. data/spec/spec/matchers/description_generation_spec.rb +160 -0
  280. data/spec/spec/matchers/dsl_spec.rb +34 -0
  281. data/spec/spec/matchers/eql_spec.rb +33 -0
  282. data/spec/spec/matchers/equal_spec.rb +57 -0
  283. data/spec/spec/matchers/exist_spec.rb +65 -0
  284. data/spec/spec/matchers/has_spec.rb +190 -0
  285. data/spec/spec/matchers/have_spec.rb +381 -0
  286. data/spec/spec/matchers/include_spec.rb +88 -0
  287. data/spec/spec/matchers/match_array_spec.rb +115 -0
  288. data/spec/spec/matchers/match_spec.rb +57 -0
  289. data/spec/spec/matchers/matcher_spec.rb +289 -0
  290. data/spec/spec/matchers/matchers_spec.rb +2 -0
  291. data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
  292. data/spec/spec/matchers/pretty_spec.rb +22 -0
  293. data/spec/spec/matchers/raise_exception_spec.rb +345 -0
  294. data/spec/spec/matchers/respond_to_spec.rb +116 -0
  295. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  296. data/spec/spec/matchers/simple_matcher_spec.rb +100 -0
  297. data/spec/spec/matchers/throw_symbol_spec.rb +121 -0
  298. data/spec/spec/mocks/and_yield_spec.rb +117 -0
  299. data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
  300. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  301. data/spec/spec/mocks/argument_matchers_spec.rb +19 -0
  302. data/spec/spec/mocks/at_least_spec.rb +97 -0
  303. data/spec/spec/mocks/at_most_spec.rb +93 -0
  304. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  305. data/spec/spec/mocks/bug_report_10263_spec.rb +27 -0
  306. data/spec/spec/mocks/bug_report_1049_spec.rb +30 -0
  307. data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
  308. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  309. data/spec/spec/mocks/bug_report_496_spec.rb +17 -0
  310. data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
  311. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  312. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  313. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  314. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  315. data/spec/spec/mocks/bug_report_830_spec.rb +21 -0
  316. data/spec/spec/mocks/bug_report_957_spec.rb +22 -0
  317. data/spec/spec/mocks/double_spec.rb +12 -0
  318. data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
  319. data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
  320. data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
  321. data/spec/spec/mocks/mock_ordering_spec.rb +94 -0
  322. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  323. data/spec/spec/mocks/mock_spec.rb +601 -0
  324. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  325. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  326. data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
  327. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  328. data/spec/spec/mocks/options_hash_spec.rb +35 -0
  329. data/spec/spec/mocks/partial_mock_spec.rb +164 -0
  330. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  331. data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
  332. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  333. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  334. data/spec/spec/mocks/stub_chain_spec.rb +42 -0
  335. data/spec/spec/mocks/stub_implementation_spec.rb +31 -0
  336. data/spec/spec/mocks/stub_spec.rb +203 -0
  337. data/spec/spec/mocks/stubbed_message_expectations_spec.rb +26 -0
  338. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  339. data/spec/spec/mocks/unstub_spec.rb +127 -0
  340. data/spec/spec/package/bin_spec_spec.rb +16 -0
  341. data/spec/spec/rake/spectask_spec.rb +150 -0
  342. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  343. data/spec/spec/runner/command_line_spec.rb +162 -0
  344. data/spec/spec/runner/configuration_spec.rb +320 -0
  345. data/spec/spec/runner/drb_command_line_spec.rb +146 -0
  346. data/spec/spec/runner/empty_file.txt +0 -0
  347. data/spec/spec/runner/example_group_runner_spec.rb +26 -0
  348. data/spec/spec/runner/examples.txt +2 -0
  349. data/spec/spec/runner/failed.txt +3 -0
  350. data/spec/spec/runner/formatter/base_formatter_spec.rb +30 -0
  351. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +113 -0
  352. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  353. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  354. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +377 -0
  355. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +377 -0
  356. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +377 -0
  357. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +377 -0
  358. data/spec/spec/runner/formatter/html_formatted-1.9.2.html +377 -0
  359. data/spec/spec/runner/formatter/html_formatter_spec.rb +118 -0
  360. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +329 -0
  361. data/spec/spec/runner/formatter/profile_formatter_spec.rb +70 -0
  362. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +149 -0
  363. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  364. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
  365. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.html +371 -0
  366. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +371 -0
  367. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +371 -0
  368. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +371 -0
  369. data/spec/spec/runner/formatter/text_mate_formatted-1.9.2.html +371 -0
  370. data/spec/spec/runner/formatter/text_mate_formatter_spec.rb +106 -0
  371. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  372. data/spec/spec/runner/heckler_spec.rb +20 -0
  373. data/spec/spec/runner/line_number_query/line_number_query_fixture.rb +70 -0
  374. data/spec/spec/runner/line_number_query_spec.rb +129 -0
  375. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +51 -0
  376. data/spec/spec/runner/option_parser_spec.rb +552 -0
  377. data/spec/spec/runner/options_spec.rb +554 -0
  378. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  379. data/spec/spec/runner/output_one_time_fixture_runner.rb +7 -0
  380. data/spec/spec/runner/output_one_time_spec.rb +15 -0
  381. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +123 -0
  382. data/spec/spec/runner/reporter_spec.rb +244 -0
  383. data/spec/spec/runner/resources/a_bar.rb +0 -0
  384. data/spec/spec/runner/resources/a_foo.rb +0 -0
  385. data/spec/spec/runner/resources/a_spec.rb +1 -0
  386. data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
  387. data/spec/spec/runner/resources/utf8_encoded.rb +8 -0
  388. data/spec/spec/runner/spec.opts +2 -0
  389. data/spec/spec/runner/spec_drb.opts +2 -0
  390. data/spec/spec/runner/spec_spaced.opts +2 -0
  391. data/spec/spec/runner_spec.rb +13 -0
  392. data/spec/spec_helper.rb +113 -0
  393. data/spec/support/macros.rb +29 -0
  394. data/spec/support/spec_classes.rb +133 -0
  395. metadata +727 -0
@@ -0,0 +1,287 @@
1
+ module Spec
2
+ module Example
3
+
4
+ module ExampleGroupMethods
5
+ class << self
6
+ attr_accessor :matcher_class
7
+
8
+ def build_description_from(*args)
9
+ text = args.inject("") do |description, arg|
10
+ description << " " unless (description == "" || arg.to_s =~ /^(\s|\.|#)/)
11
+ description << arg.to_s
12
+ end
13
+ text == "" ? nil : text
14
+ end
15
+ end
16
+
17
+ include Spec::Example::BeforeAndAfterHooks
18
+ include Spec::Example::Subject::ExampleGroupMethods
19
+ include Spec::Example::PredicateMatchers
20
+ include Spec::Example::ArgsAndOptions
21
+
22
+ attr_reader :location
23
+
24
+ def options # :nodoc:
25
+ @options ||= {}
26
+ end
27
+
28
+ def inherited(klass) # :nodoc:
29
+ super
30
+ ExampleGroupFactory.register_example_group(klass)
31
+ end
32
+
33
+ # Makes the describe/it syntax available from a class. For example:
34
+ #
35
+ # class StackSpec < Spec::ExampleGroup
36
+ # describe Stack, "with no elements"
37
+ #
38
+ # before
39
+ # @stack = Stack.new
40
+ # end
41
+ #
42
+ # it "should raise on pop" do
43
+ # lambda{ @stack.pop }.should raise_error
44
+ # end
45
+ # end
46
+ #
47
+ def describe(*args, &example_group_block)
48
+ raise Spec::Example::NoDescriptionError.new("example group", caller(0)[1]) if args.empty?
49
+ if example_group_block
50
+ options = add_options(args)
51
+ set_location(options, caller(0)[1])
52
+ if options[:shared]
53
+ ExampleGroupFactory.create_shared_example_group(*args, &example_group_block)
54
+ else
55
+ subclass(*args, &example_group_block)
56
+ end
57
+ else
58
+ set_description(*args)
59
+ end
60
+ end
61
+ alias :context :describe
62
+
63
+ # Use this to pull in examples from shared example groups.
64
+ def it_should_behave_like(*shared_example_groups)
65
+ shared_example_groups.each do |group|
66
+ include_shared_example_group(group)
67
+ end
68
+ end
69
+
70
+ # Creates an instance of the current example group class and adds it to
71
+ # a collection of examples of the current example group.
72
+ def example(description=nil, options={}, backtrace=nil, &implementation)
73
+ example_proxy = ExampleProxy.new(description, options, backtrace || caller(0)[1])
74
+ example_proxies << example_proxy
75
+ example_implementations[example_proxy] = implementation || pending_implementation
76
+ example_proxy
77
+ end
78
+
79
+ def pending_implementation
80
+ lambda {|*args| raise(Spec::Example::NotYetImplementedError) }
81
+ end
82
+
83
+ alias_method :it, :example
84
+ alias_method :specify, :example
85
+
86
+ # Use this to temporarily disable an example.
87
+ def xexample(description=nil, opts={}, &block)
88
+ Kernel.warn("Example disabled: #{description}")
89
+ end
90
+
91
+ alias_method :xit, :xexample
92
+ alias_method :xspecify, :xexample
93
+
94
+ def run(run_options)
95
+ examples = examples_to_run(run_options)
96
+ notify(run_options.reporter) unless examples.empty?
97
+ return true if examples.empty?
98
+ return dry_run(examples, run_options) if run_options.dry_run?
99
+
100
+ define_methods_from_predicate_matchers
101
+
102
+ success, before_all_instance_variables = run_before_all(run_options)
103
+ success, after_all_instance_variables = run_examples(success, before_all_instance_variables, examples, run_options)
104
+ success = run_after_all(success, after_all_instance_variables, run_options)
105
+ end
106
+
107
+ def set_description(*args)
108
+ @description_args, @options = args_and_options(*args)
109
+ @backtrace = caller(1)
110
+ @location = File.expand_path(options[:location]) if options[:location]
111
+ self
112
+ end
113
+
114
+ def notify(reporter) # :nodoc:
115
+ reporter.example_group_started(ExampleGroupProxy.new(self))
116
+ end
117
+
118
+ def description
119
+ @description ||= ExampleGroupMethods.build_description_from(*description_parts) || to_s
120
+ end
121
+
122
+ def described_type
123
+ @described_type ||= description_parts.reverse.find {|part| part.is_a?(Module)}
124
+ end
125
+
126
+ def described_class
127
+ @described_class ||= Class === described_type ? described_type : nil
128
+ end
129
+
130
+ def description_args
131
+ @description_args ||= []
132
+ end
133
+
134
+ def description_parts #:nodoc:
135
+ @description_parts ||= example_group_hierarchy.inject([]) do |parts, example_group_class|
136
+ [parts << example_group_class.description_args].flatten
137
+ end
138
+ end
139
+
140
+ def example_proxies # :nodoc:
141
+ @example_proxies ||= []
142
+ end
143
+
144
+ def example_implementations # :nodoc:
145
+ @example_implementations ||= {}
146
+ end
147
+
148
+ def examples(run_options=nil) #:nodoc:
149
+ (run_options && run_options.reverse) ? example_proxies.reverse : example_proxies
150
+ end
151
+
152
+ def number_of_examples #:nodoc:
153
+ example_proxies.length
154
+ end
155
+
156
+ def example_group_hierarchy
157
+ @example_group_hierarchy ||= ExampleGroupHierarchy.new(self)
158
+ end
159
+
160
+ def nested_descriptions
161
+ example_group_hierarchy.nested_descriptions
162
+ end
163
+
164
+ def include_constants_in(mod)
165
+ include mod if (Spec::Ruby.version.to_f >= 1.9) & (Module === mod) & !(Class === mod)
166
+ end
167
+
168
+ def let(name, &block)
169
+ define_method name do
170
+ @assignments ||= {}
171
+ @assignments[name] ||= instance_eval(&block)
172
+ end
173
+ end
174
+
175
+ def let!(name, &block)
176
+ let(name, &block)
177
+ before { __send__(name) }
178
+ end
179
+
180
+ private
181
+
182
+ def subclass(*args, &example_group_block)
183
+ @class_count ||= 0
184
+ @class_count += 1
185
+ klass = const_set("Subclass_#{@class_count}", Class.new(self))
186
+ klass.set_description(*args)
187
+ klass.include_constants_in(args.last[:scope])
188
+ klass.module_eval(&example_group_block)
189
+ klass
190
+ end
191
+
192
+ def dry_run(examples, run_options)
193
+ examples.each do |example|
194
+ run_options.reporter.example_started(example)
195
+ run_options.reporter.example_finished(example)
196
+ end
197
+ end
198
+
199
+ def run_before_all(run_options)
200
+ return [true,{}] if example_group_hierarchy.before_all_parts.empty?
201
+ example_proxy = ExampleProxy.new("before(:all)")
202
+ before_all = new(example_proxy)
203
+ begin
204
+ example_group_hierarchy.run_before_all(before_all)
205
+ return [true, before_all.instance_variable_hash]
206
+ rescue Exception => e
207
+ run_options.reporter.example_failed(example_proxy, e)
208
+ return [false, before_all.instance_variable_hash]
209
+ end
210
+ end
211
+
212
+ def run_examples(success, instance_variables, examples, run_options)
213
+ return [success, instance_variables] unless success
214
+
215
+ after_all_instance_variables = instance_variables
216
+
217
+ examples.each do |example|
218
+ example_group_instance = new(example, &example_implementations[example])
219
+ success &= example_group_instance.execute(run_options, instance_variables)
220
+ after_all_instance_variables = example_group_instance.instance_variable_hash
221
+ end
222
+
223
+ return [success, after_all_instance_variables]
224
+ end
225
+
226
+ def run_after_all(success, instance_variables, run_options)
227
+ return success if example_group_hierarchy.after_all_parts.empty?
228
+ example_proxy = ExampleProxy.new("after(:all)")
229
+ after_all = new(example_proxy)
230
+ after_all.set_instance_variables_from_hash(instance_variables)
231
+ example_group_hierarchy.run_after_all(after_all)
232
+ success
233
+ rescue Exception => e
234
+ run_options.reporter.example_failed(example_proxy, e)
235
+ false
236
+ end
237
+
238
+ def examples_to_run(run_options)
239
+ return example_proxies unless examples_were_specified?(run_options)
240
+ if run_options.line_number_requested?
241
+ if location =~ /:#{run_options.example_line}:?/
242
+ example_proxies
243
+ else
244
+ example_proxies.select {|proxy| proxy.location =~ /:#{run_options.example_line}:?/}
245
+ end
246
+ else
247
+ example_proxies.reject do |proxy|
248
+ matcher = ExampleGroupMethods.matcher_class.
249
+ new(description.to_s, proxy.description)
250
+ !matcher.matches?(run_options.examples)
251
+ end
252
+ end
253
+ end
254
+
255
+ def examples_were_specified?(run_options)
256
+ !run_options.examples.empty?
257
+ end
258
+
259
+ def method_added(name) # :nodoc:
260
+ example(name.to_s, {}, caller(0)[1]) {__send__ name.to_s} if example_method?(name.to_s)
261
+ end
262
+
263
+ def example_method?(method_name)
264
+ should_method?(method_name)
265
+ end
266
+
267
+ def should_method?(method_name)
268
+ !(method_name =~ /^should(_not)?$/) &&
269
+ method_name =~ /^should/ &&
270
+ instance_method(method_name).arity < 1
271
+ end
272
+
273
+ def include_shared_example_group(shared_example_group)
274
+ case shared_example_group
275
+ when SharedExampleGroup
276
+ include shared_example_group
277
+ else
278
+ unless example_group = SharedExampleGroup.find(shared_example_group)
279
+ raise RuntimeError.new("Shared Example Group '#{shared_example_group}' can not be found")
280
+ end
281
+ include(example_group)
282
+ end
283
+ end
284
+ end
285
+
286
+ end
287
+ end
@@ -0,0 +1,61 @@
1
+ module Spec
2
+ module Example
3
+ # Lightweight proxy for an example group. This is the object that is passed
4
+ # to Spec::Runner::Formatter::BaseFormatter#example_group_started
5
+ class ExampleGroupProxy
6
+
7
+ def initialize(example_group) # :nodoc:
8
+ @description = example_group.description
9
+ @nested_descriptions = example_group.nested_descriptions
10
+ @examples = example_group.example_proxies
11
+ @location = example_group.location
12
+ @backtrace = example_group.location # deprecated - see the backtrace method below
13
+ @options = example_group.options.dup
14
+ @options.delete(:location)
15
+ @options.delete(:scope)
16
+ end
17
+
18
+ # Optional hash passed to the example group declaration. Note that RSpec uses
19
+ # this hash internally and reserves the keys :location and :scope for its own
20
+ # use (and removes them from this hash)
21
+ attr_reader :options
22
+
23
+ # This is the description passed to the <tt>describe()</tt> method or any
24
+ # of its aliases
25
+ attr_reader :description
26
+
27
+ # Used by Spec::Runner::Formatter::NestedTextFormatter to access the
28
+ # description of each example group in a nested group separately.
29
+ attr_reader :nested_descriptions
30
+
31
+ # A collection of ExampleGroupProxy objects, one for each example
32
+ # declared in this group.
33
+ attr_reader :examples
34
+
35
+ # The file and line number at which the proxied example group
36
+ # was declared. This is extracted from <tt>caller</tt>, and is therefore
37
+ # formatted as an individual line in a backtrace.
38
+ attr_reader :location
39
+
40
+ # Deprecated - use location() instead
41
+ def backtrace
42
+ Spec::deprecate("ExampleGroupProxy#backtrace","ExampleGroupProxy#location")
43
+ @backtrace
44
+ end
45
+
46
+ # Deprecated - just use gsub on the description instead.
47
+ def filtered_description(regexp)
48
+ Spec::deprecate("ExampleGroupProxy#filtered_description","gsub (or similar) to modify ExampleGroupProxy#description")
49
+ ExampleGroupMethods.build_description_from(
50
+ *nested_descriptions.collect do |description|
51
+ description =~ regexp ? description.gsub($1, "") : description
52
+ end
53
+ )
54
+ end
55
+
56
+ def ==(other) # :nodoc:
57
+ other.description == description
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,43 @@
1
+ module Spec
2
+ module Example
3
+ class ExampleMatcher
4
+ def initialize(example_group_description, example_name)
5
+ @example_group_description = example_group_description
6
+ @example_name = example_name
7
+ end
8
+
9
+ def matches?(specified_examples)
10
+ specified_examples.any? do |specified_example|
11
+ matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example)
12
+ end
13
+ end
14
+
15
+ protected
16
+ def matches_literal_example?(specified_example)
17
+ specified_example =~ /(^#{example_group_regex} #{example_regexp}$|^#{example_group_regex}$|^#{example_group_with_before_all_regexp}$|^#{example_regexp}$)/
18
+ end
19
+
20
+ def matches_example_not_considering_modules?(specified_example)
21
+ specified_example =~ /(^#{example_group_regex_not_considering_modules} #{example_regexp}$|^#{example_group_regex_not_considering_modules}$|^#{example_regexp}$)/
22
+ end
23
+
24
+ def example_group_regex
25
+ Regexp.escape(@example_group_description)
26
+ end
27
+
28
+ def example_group_with_before_all_regexp
29
+ Regexp.escape("#{@example_group_description} before(:all)")
30
+ end
31
+
32
+ def example_group_regex_not_considering_modules
33
+ Regexp.escape(@example_group_description.split('::').last)
34
+ end
35
+
36
+ def example_regexp
37
+ Regexp.escape(@example_name) if @example_name
38
+ end
39
+ end
40
+
41
+ ExampleGroupMethods.matcher_class = ExampleMatcher
42
+ end
43
+ end
@@ -0,0 +1,152 @@
1
+ module Spec
2
+ module Example
3
+ module ExampleMethods
4
+
5
+ extend Spec::Example::ModuleReopeningFix
6
+ include Spec::Example::Subject::ExampleMethods
7
+
8
+ def violated(message="")
9
+ raise Spec::Expectations::ExpectationNotMetError.new(message)
10
+ end
11
+
12
+ # Declared description for this example:
13
+ #
14
+ # describe Account do
15
+ # it "should start with a balance of 0" do
16
+ # ...
17
+ #
18
+ # description
19
+ # => "should start with a balance of 0"
20
+ def description
21
+ if description = @_proxy.description || ::Spec::Matchers.generated_description
22
+ description
23
+ else
24
+ Spec.warn Spec::Example::NoDescriptionError.message("example", @_proxy.location)
25
+ end
26
+ end
27
+
28
+ def options # :nodoc:
29
+ @_proxy.options
30
+ end
31
+
32
+ def execute(run_options, instance_variables) # :nodoc:
33
+ run_options.reporter.example_started(@_proxy)
34
+ set_instance_variables_from_hash(instance_variables)
35
+
36
+ execution_error = nil
37
+ Timeout.timeout(run_options.timeout) do
38
+ begin
39
+ before_each_example
40
+ instance_eval(&@_implementation)
41
+ rescue Interrupt
42
+ exit 1
43
+ rescue Exception => e
44
+ execution_error ||= e
45
+ end
46
+ begin
47
+ after_each_example
48
+ rescue Interrupt
49
+ exit 1
50
+ rescue Exception => e
51
+ execution_error ||= e
52
+ end
53
+ end
54
+
55
+ run_options.reporter.example_finished(@_proxy.update(description), execution_error)
56
+ success = execution_error.nil? || ExamplePendingError === execution_error
57
+ end
58
+
59
+ module BlockAliases
60
+ alias_method :to, :should
61
+ alias_method :to_not, :should_not
62
+ end
63
+
64
+ # Extends the submitted block with aliases to and to_not
65
+ # for should and should_not. Allows expectations like this:
66
+ #
67
+ # expect { this_block }.to change{this.expression}.from(old_value).to(new_value)
68
+ # expect { this_block }.to raise_error
69
+ def expect(&block)
70
+ block.extend BlockAliases
71
+ end
72
+
73
+ def eval_each_fail_fast(blocks) # :nodoc:
74
+ blocks.each {|block| instance_eval(&block)}
75
+ end
76
+
77
+ def eval_each_fail_slow(blocks) # :nodoc:
78
+ first_exception = nil
79
+ blocks.each do |block|
80
+ begin
81
+ instance_eval(&block)
82
+ rescue Exception => e
83
+ first_exception ||= e
84
+ end
85
+ end
86
+ raise first_exception if first_exception
87
+ end
88
+
89
+ def instance_variable_hash # :nodoc:
90
+ instance_variables.inject({}) do |variable_hash, variable_name|
91
+ variable_hash[variable_name] = instance_variable_get(variable_name)
92
+ variable_hash
93
+ end
94
+ end
95
+
96
+ def set_instance_variables_from_hash(ivars) # :nodoc:
97
+ ivars.each do |variable_name, value|
98
+ # Ruby 1.9 requires variable.to_s on the next line
99
+ unless ['@_proxy', '@_implementation', '@method_name'].include?(variable_name.to_s)
100
+ instance_variable_set variable_name, value
101
+ end
102
+ end
103
+ end
104
+
105
+ # Run all the before(:each) blocks for this example
106
+ def run_before_each
107
+ example_group_hierarchy.run_before_each(self)
108
+ end
109
+
110
+ # Run all the after(:each) blocks for this example
111
+ def run_after_each
112
+ example_group_hierarchy.run_after_each(self)
113
+ end
114
+
115
+ def initialize(example_proxy, &implementation)
116
+ @_proxy = example_proxy
117
+ @_implementation = implementation
118
+ @_backtrace = caller
119
+ end
120
+
121
+ private
122
+
123
+ include Matchers
124
+ include Pending
125
+
126
+ def before_each_example
127
+ setup_mocks_for_rspec
128
+ run_before_each
129
+ end
130
+
131
+ def after_each_example
132
+ run_after_each
133
+ verify_mocks_for_rspec
134
+ ensure
135
+ teardown_mocks_for_rspec
136
+ end
137
+
138
+ def described_class
139
+ self.class.described_class
140
+ end
141
+
142
+ def description_args
143
+ self.class.description_args
144
+ end
145
+
146
+ def example_group_hierarchy
147
+ self.class.example_group_hierarchy
148
+ end
149
+
150
+ end
151
+ end
152
+ end