newbamboo-rspec 1.1.12

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 (324) hide show
  1. data/.autotest +4 -0
  2. data/History.txt +1263 -0
  3. data/License.txt +22 -0
  4. data/Manifest.txt +327 -0
  5. data/README.txt +57 -0
  6. data/Rakefile +104 -0
  7. data/TODO.txt +18 -0
  8. data/bin/autospec +4 -0
  9. data/bin/spec +4 -0
  10. data/examples/failing/README.txt +7 -0
  11. data/examples/failing/diffing_spec.rb +36 -0
  12. data/examples/failing/failing_autogenerated_docstrings_example.rb +19 -0
  13. data/examples/failing/failure_in_after.rb +10 -0
  14. data/examples/failing/failure_in_before.rb +10 -0
  15. data/examples/failing/mocking_example.rb +40 -0
  16. data/examples/failing/mocking_with_flexmock.rb +26 -0
  17. data/examples/failing/mocking_with_mocha.rb +25 -0
  18. data/examples/failing/mocking_with_rr.rb +27 -0
  19. data/examples/failing/partial_mock_example.rb +20 -0
  20. data/examples/failing/predicate_example.rb +34 -0
  21. data/examples/failing/raising_example.rb +47 -0
  22. data/examples/failing/spec_helper.rb +3 -0
  23. data/examples/failing/syntax_error_example.rb +7 -0
  24. data/examples/failing/team_spec.rb +44 -0
  25. data/examples/failing/timeout_behaviour.rb +7 -0
  26. data/examples/passing/autogenerated_docstrings_example.rb +25 -0
  27. data/examples/passing/before_and_after_example.rb +40 -0
  28. data/examples/passing/behave_as_example.rb +45 -0
  29. data/examples/passing/custom_expectation_matchers.rb +54 -0
  30. data/examples/passing/custom_formatter.rb +12 -0
  31. data/examples/passing/dynamic_spec.rb +9 -0
  32. data/examples/passing/file_accessor.rb +19 -0
  33. data/examples/passing/file_accessor_spec.rb +38 -0
  34. data/examples/passing/greeter_spec.rb +31 -0
  35. data/examples/passing/helper_method_example.rb +14 -0
  36. data/examples/passing/io_processor.rb +8 -0
  37. data/examples/passing/io_processor_spec.rb +21 -0
  38. data/examples/passing/legacy_spec.rb +11 -0
  39. data/examples/passing/mocking_example.rb +27 -0
  40. data/examples/passing/multi_threaded_example_group_runner.rb +26 -0
  41. data/examples/passing/nested_classes_example.rb +36 -0
  42. data/examples/passing/partial_mock_example.rb +29 -0
  43. data/examples/passing/pending_example.rb +20 -0
  44. data/examples/passing/predicate_example.rb +27 -0
  45. data/examples/passing/priority.txt +1 -0
  46. data/examples/passing/shared_example_group_example.rb +81 -0
  47. data/examples/passing/shared_stack_examples.rb +36 -0
  48. data/examples/passing/simple_matcher_example.rb +31 -0
  49. data/examples/passing/spec_helper.rb +3 -0
  50. data/examples/passing/stack.rb +36 -0
  51. data/examples/passing/stack_spec.rb +64 -0
  52. data/examples/passing/stack_spec_with_nested_example_groups.rb +67 -0
  53. data/examples/passing/stubbing_example.rb +69 -0
  54. data/examples/passing/yielding_example.rb +33 -0
  55. data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +86 -0
  56. data/features/before_and_after_blocks/before_and_after_blocks.feature +168 -0
  57. data/features/example_groups/autogenerated_docstrings.feature +45 -0
  58. data/features/example_groups/example_group_with_should_methods.feature +17 -0
  59. data/features/example_groups/nested_groups.feature +17 -0
  60. data/features/example_groups/output.feature +20 -0
  61. data/features/interop/examples_and_tests_together.feature +31 -0
  62. data/features/interop/test_but_not_test_unit.feature +14 -0
  63. data/features/interop/test_case_with_should_methods.feature +17 -0
  64. data/features/mock_framework_integration/use_flexmock.feature +27 -0
  65. data/features/step_definitions/running_rspec.rb +54 -0
  66. data/features/support/env.rb +26 -0
  67. data/features/support/helpers/cmdline.rb +9 -0
  68. data/features/support/matchers/smart_match.rb +37 -0
  69. data/init.rb +9 -0
  70. data/lib/adapters/mock_frameworks/flexmock.rb +24 -0
  71. data/lib/adapters/mock_frameworks/mocha.rb +20 -0
  72. data/lib/adapters/mock_frameworks/rr.rb +22 -0
  73. data/lib/adapters/mock_frameworks/rspec.rb +20 -0
  74. data/lib/autotest/discover.rb +3 -0
  75. data/lib/autotest/rspec.rb +47 -0
  76. data/lib/spec/dsl/main.rb +87 -0
  77. data/lib/spec/dsl.rb +1 -0
  78. data/lib/spec/example/before_and_after_hooks.rb +99 -0
  79. data/lib/spec/example/errors.rb +30 -0
  80. data/lib/spec/example/example_group.rb +26 -0
  81. data/lib/spec/example/example_group_factory.rb +98 -0
  82. data/lib/spec/example/example_group_methods.rb +376 -0
  83. data/lib/spec/example/example_matcher.rb +44 -0
  84. data/lib/spec/example/example_methods.rb +137 -0
  85. data/lib/spec/example/module_reopening_fix.rb +21 -0
  86. data/lib/spec/example/pending.rb +18 -0
  87. data/lib/spec/example/shared_example_group.rb +59 -0
  88. data/lib/spec/example.rb +187 -0
  89. data/lib/spec/expectations/differs/default.rb +66 -0
  90. data/lib/spec/expectations/errors.rb +12 -0
  91. data/lib/spec/expectations/extensions/object.rb +63 -0
  92. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  93. data/lib/spec/expectations/extensions.rb +2 -0
  94. data/lib/spec/expectations/handler.rb +32 -0
  95. data/lib/spec/expectations.rb +60 -0
  96. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  97. data/lib/spec/interop/test/unit/testcase.rb +73 -0
  98. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  99. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  100. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  101. data/lib/spec/interop/test.rb +12 -0
  102. data/lib/spec/matchers/be.rb +208 -0
  103. data/lib/spec/matchers/be_close.rb +21 -0
  104. data/lib/spec/matchers/change.rb +148 -0
  105. data/lib/spec/matchers/eql.rb +25 -0
  106. data/lib/spec/matchers/equal.rb +25 -0
  107. data/lib/spec/matchers/errors.rb +5 -0
  108. data/lib/spec/matchers/exist.rb +16 -0
  109. data/lib/spec/matchers/generated_descriptions.rb +48 -0
  110. data/lib/spec/matchers/has.rb +15 -0
  111. data/lib/spec/matchers/have.rb +150 -0
  112. data/lib/spec/matchers/include.rb +80 -0
  113. data/lib/spec/matchers/match.rb +22 -0
  114. data/lib/spec/matchers/match_array.rb +79 -0
  115. data/lib/spec/matchers/method_missing.rb +9 -0
  116. data/lib/spec/matchers/operator_matcher.rb +70 -0
  117. data/lib/spec/matchers/raise_error.rb +128 -0
  118. data/lib/spec/matchers/respond_to.rb +71 -0
  119. data/lib/spec/matchers/satisfy.rb +47 -0
  120. data/lib/spec/matchers/simple_matcher.rb +132 -0
  121. data/lib/spec/matchers/throw_symbol.rb +106 -0
  122. data/lib/spec/matchers/wrap_expectation.rb +55 -0
  123. data/lib/spec/matchers.rb +141 -0
  124. data/lib/spec/mocks/argument_expectation.rb +49 -0
  125. data/lib/spec/mocks/argument_matchers.rb +237 -0
  126. data/lib/spec/mocks/error_generator.rb +82 -0
  127. data/lib/spec/mocks/errors.rb +10 -0
  128. data/lib/spec/mocks/extensions/object.rb +3 -0
  129. data/lib/spec/mocks/extensions.rb +1 -0
  130. data/lib/spec/mocks/framework.rb +15 -0
  131. data/lib/spec/mocks/message_expectation.rb +331 -0
  132. data/lib/spec/mocks/methods.rb +51 -0
  133. data/lib/spec/mocks/mock.rb +55 -0
  134. data/lib/spec/mocks/order_group.rb +29 -0
  135. data/lib/spec/mocks/proxy.rb +230 -0
  136. data/lib/spec/mocks/space.rb +28 -0
  137. data/lib/spec/mocks/spec_methods.rb +55 -0
  138. data/lib/spec/mocks.rb +200 -0
  139. data/lib/spec/rake/spectask.rb +225 -0
  140. data/lib/spec/rake/verify_rcov.rb +52 -0
  141. data/lib/spec/ruby.rb +9 -0
  142. data/lib/spec/runner/backtrace_tweaker.rb +58 -0
  143. data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
  144. data/lib/spec/runner/command_line.rb +35 -0
  145. data/lib/spec/runner/configuration.rb +166 -0
  146. data/lib/spec/runner/drb_command_line.rb +20 -0
  147. data/lib/spec/runner/example_group_runner.rb +70 -0
  148. data/lib/spec/runner/formatter/base_formatter.rb +79 -0
  149. data/lib/spec/runner/formatter/base_text_formatter.rb +127 -0
  150. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
  151. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  152. data/lib/spec/runner/formatter/html_formatter.rb +340 -0
  153. data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
  154. data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
  155. data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
  156. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  157. data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
  158. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  159. data/lib/spec/runner/heckle_runner.rb +74 -0
  160. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  161. data/lib/spec/runner/option_parser.rb +204 -0
  162. data/lib/spec/runner/options.rb +320 -0
  163. data/lib/spec/runner/reporter.rb +167 -0
  164. data/lib/spec/runner/spec_parser.rb +73 -0
  165. data/lib/spec/runner.rb +88 -0
  166. data/lib/spec/version.rb +15 -0
  167. data/lib/spec.rb +7 -0
  168. data/resources/rake/examples.rake +7 -0
  169. data/resources/rake/examples_with_rcov.rake +9 -0
  170. data/resources/rake/failing_examples_with_html.rake +9 -0
  171. data/resources/rake/verify_rcov.rake +7 -0
  172. data/resources/spec/example_group_with_should_methods.rb +12 -0
  173. data/resources/spec/simple_spec.rb +8 -0
  174. data/resources/test/spec_and_test_together.rb +57 -0
  175. data/resources/test/spec_including_test_but_not_unit.rb +11 -0
  176. data/resources/test/test_case_with_should_methods.rb +30 -0
  177. data/rspec.gemspec +32 -0
  178. data/spec/README.jruby +15 -0
  179. data/spec/autotest/autotest_helper.rb +6 -0
  180. data/spec/autotest/autotest_matchers.rb +47 -0
  181. data/spec/autotest/discover_spec.rb +8 -0
  182. data/spec/autotest/failed_results_re_spec.rb +24 -0
  183. data/spec/autotest/rspec_spec.rb +114 -0
  184. data/spec/rspec_suite.rb +6 -0
  185. data/spec/ruby_forker.rb +13 -0
  186. data/spec/spec/dsl/main_spec.rb +88 -0
  187. data/spec/spec/example/example_group_class_definition_spec.rb +49 -0
  188. data/spec/spec/example/example_group_factory_spec.rb +224 -0
  189. data/spec/spec/example/example_group_methods_spec.rb +653 -0
  190. data/spec/spec/example/example_group_spec.rb +661 -0
  191. data/spec/spec/example/example_matcher_spec.rb +79 -0
  192. data/spec/spec/example/example_methods_spec.rb +204 -0
  193. data/spec/spec/example/helper_method_spec.rb +24 -0
  194. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  195. data/spec/spec/example/pending_module_spec.rb +139 -0
  196. data/spec/spec/example/predicate_matcher_spec.rb +21 -0
  197. data/spec/spec/example/shared_example_group_spec.rb +257 -0
  198. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  199. data/spec/spec/expectations/differs/default_spec.rb +127 -0
  200. data/spec/spec/expectations/extensions/object_spec.rb +45 -0
  201. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  202. data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
  203. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  204. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  205. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  206. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  207. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  208. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  209. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  210. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  211. data/spec/spec/interop/test/unit/spec_spec.rb +48 -0
  212. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
  213. data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
  214. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  215. data/spec/spec/matchers/be_close_spec.rb +41 -0
  216. data/spec/spec/matchers/be_spec.rb +303 -0
  217. data/spec/spec/matchers/change_spec.rb +329 -0
  218. data/spec/spec/matchers/description_generation_spec.rb +172 -0
  219. data/spec/spec/matchers/eql_spec.rb +29 -0
  220. data/spec/spec/matchers/equal_spec.rb +29 -0
  221. data/spec/spec/matchers/exist_spec.rb +57 -0
  222. data/spec/spec/matchers/handler_spec.rb +111 -0
  223. data/spec/spec/matchers/has_spec.rb +63 -0
  224. data/spec/spec/matchers/have_spec.rb +399 -0
  225. data/spec/spec/matchers/include_spec.rb +88 -0
  226. data/spec/spec/matchers/match_array_spec.rb +83 -0
  227. data/spec/spec/matchers/match_spec.rb +37 -0
  228. data/spec/spec/matchers/matcher_methods_spec.rb +66 -0
  229. data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
  230. data/spec/spec/matchers/raise_error_spec.rb +333 -0
  231. data/spec/spec/matchers/respond_to_spec.rb +116 -0
  232. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  233. data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
  234. data/spec/spec/matchers/throw_symbol_spec.rb +96 -0
  235. data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
  236. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  237. data/spec/spec/mocks/at_least_spec.rb +97 -0
  238. data/spec/spec/mocks/at_most_spec.rb +93 -0
  239. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  240. data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
  241. data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
  242. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  243. data/spec/spec/mocks/bug_report_496.rb +19 -0
  244. data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
  245. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  246. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  247. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  248. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  249. data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
  250. data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
  251. data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
  252. data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
  253. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  254. data/spec/spec/mocks/mock_spec.rb +579 -0
  255. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  256. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  257. data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
  258. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  259. data/spec/spec/mocks/options_hash_spec.rb +35 -0
  260. data/spec/spec/mocks/partial_mock_spec.rb +149 -0
  261. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  262. data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
  263. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  264. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  265. data/spec/spec/mocks/stub_spec.rb +194 -0
  266. data/spec/spec/mocks/stubbed_message_expectations_spec.rb +14 -0
  267. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  268. data/spec/spec/package/bin_spec_spec.rb +22 -0
  269. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  270. data/spec/spec/runner/command_line_spec.rb +141 -0
  271. data/spec/spec/runner/configuration_spec.rb +301 -0
  272. data/spec/spec/runner/drb_command_line_spec.rb +97 -0
  273. data/spec/spec/runner/empty_file.txt +0 -0
  274. data/spec/spec/runner/example_group_runner_spec.rb +33 -0
  275. data/spec/spec/runner/examples.txt +2 -0
  276. data/spec/spec/runner/failed.txt +3 -0
  277. data/spec/spec/runner/formatter/base_formatter_spec.rb +23 -0
  278. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +23 -0
  279. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  280. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  281. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
  282. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
  283. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
  284. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
  285. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +379 -0
  286. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +379 -0
  287. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +379 -0
  288. data/spec/spec/runner/formatter/html_formatter_spec.rb +62 -0
  289. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
  290. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  291. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +145 -0
  292. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  293. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +104 -0
  294. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
  295. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
  296. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +373 -0
  297. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +373 -0
  298. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +373 -0
  299. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  300. data/spec/spec/runner/heckler_spec.rb +20 -0
  301. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  302. data/spec/spec/runner/option_parser_spec.rb +396 -0
  303. data/spec/spec/runner/options_spec.rb +469 -0
  304. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  305. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  306. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  307. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
  308. data/spec/spec/runner/reporter_spec.rb +238 -0
  309. data/spec/spec/runner/resources/a_bar.rb +0 -0
  310. data/spec/spec/runner/resources/a_foo.rb +0 -0
  311. data/spec/spec/runner/resources/a_spec.rb +1 -0
  312. data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
  313. data/spec/spec/runner/resources/utf8_encoded.rb +7 -0
  314. data/spec/spec/runner/spec.opts +2 -0
  315. data/spec/spec/runner/spec_drb.opts +1 -0
  316. data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
  317. data/spec/spec/runner/spec_parser_spec.rb +91 -0
  318. data/spec/spec/runner/spec_spaced.opts +2 -0
  319. data/spec/spec/runner_spec.rb +11 -0
  320. data/spec/spec/spec_classes.rb +133 -0
  321. data/spec/spec/spec_spec.rb +21 -0
  322. data/spec/spec.opts +6 -0
  323. data/spec/spec_helper.rb +107 -0
  324. metadata +388 -0
@@ -0,0 +1,396 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+ require File.dirname(__FILE__) + '/resources/custom_example_group_runner'
3
+
4
+ describe "OptionParser" do
5
+ before(:each) do
6
+ @out = StringIO.new
7
+ @err = StringIO.new
8
+ @parser = Spec::Runner::OptionParser.new(@err, @out)
9
+ end
10
+
11
+ def parse(args)
12
+ @parser.parse(args)
13
+ @parser.options
14
+ end
15
+
16
+ it "should leave the submitted argv alone" do
17
+ args = ["--pattern", "foo"]
18
+ @parser.order!(args)
19
+ args.should == ["--pattern", "foo"]
20
+ end
21
+
22
+ it "should accept files to include" do
23
+ options = parse(["--pattern", "foo"])
24
+ options.filename_pattern.should == "foo"
25
+ end
26
+
27
+ it "should accept dry run option" do
28
+ options = parse(["--dry-run"])
29
+ options.dry_run.should be_true
30
+ end
31
+
32
+ it "should eval and use custom formatter when none of the builtins" do
33
+ options = parse(["--format", "Custom::Formatter"])
34
+ options.formatters[0].class.should be(Custom::Formatter)
35
+ end
36
+
37
+ it "should support formatters with relative and absolute paths, even on windows" do
38
+ options = parse([
39
+ "--format", "Custom::Formatter:C:\\foo\\bar",
40
+ "--format", "Custom::Formatter:foo/bar",
41
+ "--format", "Custom::Formatter:foo\\bar",
42
+ "--format", "Custom::Formatter:/foo/bar"
43
+ ])
44
+ options.formatters[0].where.should eql("C:\\foo\\bar")
45
+ options.formatters[1].where.should eql("foo/bar")
46
+ options.formatters[2].where.should eql("foo\\bar")
47
+ options.formatters[3].where.should eql("/foo/bar")
48
+ end
49
+
50
+ it "should not be verbose by default" do
51
+ options = parse([])
52
+ options.verbose.should be_nil
53
+ end
54
+
55
+ it "should not use colour by default" do
56
+ options = parse([])
57
+ options.colour.should == false
58
+ end
59
+
60
+ it "should print help to stdout if no args and spec_comand?" do
61
+ Spec::Runner::OptionParser.stub!(:spec_command?).and_return(true)
62
+ options = parse([])
63
+ @out.rewind
64
+ @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
65
+ end
66
+
67
+ it "should not print help to stdout if no args and NOT spec_command?" do
68
+ Spec::Runner::OptionParser.stub!(:spec_command?).and_return(false)
69
+ options = parse([])
70
+ @out.rewind
71
+ @out.read.should == ""
72
+ end
73
+
74
+ it "should print help to stdout" do
75
+ options = parse(["--help"])
76
+ @out.rewind
77
+ @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
78
+ end
79
+
80
+ it "should print instructions about how to require missing formatter" do
81
+ lambda do
82
+ options = parse(["--format", "Custom::MissingFormatter"])
83
+ options.formatters
84
+ end.should raise_error(NameError)
85
+ @err.string.should match(/Couldn't find formatter class Custom::MissingFormatter/n)
86
+ end
87
+
88
+ it "should print version to stdout" do
89
+ options = parse(["--version"])
90
+ @out.rewind
91
+ @out.read.should match(/rspec \d+\.\d+\.\d+/n)
92
+ end
93
+
94
+ it "should require file when require specified" do
95
+ lambda do
96
+ parse(["--require", "whatever"])
97
+ end.should raise_error(LoadError)
98
+ end
99
+
100
+ it "should support c option" do
101
+ options = parse(["-c"])
102
+ options.colour.should be_true
103
+ end
104
+
105
+ it "should support queens colour option" do
106
+ options = parse(["--colour"])
107
+ options.colour.should be_true
108
+ end
109
+
110
+ it "should support us color option" do
111
+ options = parse(["--color"])
112
+ options.colour.should be_true
113
+ end
114
+
115
+ it "should support single example with -e option" do
116
+ options = parse(["-e", "something or other"])
117
+ options.examples.should eql(["something or other"])
118
+ end
119
+
120
+ it "should support single example with -s option (will be removed when autotest supports -e)" do
121
+ options = parse(["-s", "something or other"])
122
+ options.examples.should eql(["something or other"])
123
+ end
124
+
125
+ it "should support single example with --example option" do
126
+ options = parse(["--example", "something or other"])
127
+ options.examples.should eql(["something or other"])
128
+ end
129
+
130
+ it "should read several example names from file if --example is given an existing file name" do
131
+ options = parse(["--example", File.dirname(__FILE__) + '/examples.txt'])
132
+ options.examples.should eql([
133
+ "Sir, if you were my husband, I would poison your drink.",
134
+ "Madam, if you were my wife, I would drink it."])
135
+ end
136
+
137
+ it "should read no examples if given an empty file" do
138
+ options = parse(["--example", File.dirname(__FILE__) + '/empty_file.txt'])
139
+ options.examples.should eql([])
140
+ end
141
+
142
+ it "should use html formatter when format is h" do
143
+ options = parse(["--format", "h"])
144
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
145
+ end
146
+
147
+ it "should use html formatter when format is html" do
148
+ options = parse(["--format", "html"])
149
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
150
+ end
151
+
152
+ it "should use html formatter with explicit output when format is html:test.html" do
153
+ FileUtils.rm 'test.html' if File.exist?('test.html')
154
+ options = parse(["--format", "html:test.html"])
155
+ options.formatters # creates the file
156
+ File.should be_exist('test.html')
157
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
158
+ options.formatters[0].close
159
+ FileUtils.rm 'test.html'
160
+ end
161
+
162
+ it "should use noisy backtrace tweaker with b option" do
163
+ options = parse(["-b"])
164
+ options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
165
+ end
166
+
167
+ it "should use noisy backtrace tweaker with backtrace option" do
168
+ options = parse(["--backtrace"])
169
+ options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
170
+ end
171
+
172
+ it "should use quiet backtrace tweaker by default" do
173
+ options = parse([])
174
+ options.backtrace_tweaker.should be_instance_of(Spec::Runner::QuietBacktraceTweaker)
175
+ end
176
+
177
+ it "should use progress bar formatter by default" do
178
+ options = parse([])
179
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
180
+ end
181
+
182
+ it "should use specdoc formatter when format is s" do
183
+ options = parse(["--format", "s"])
184
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
185
+ end
186
+
187
+ it "should use specdoc formatter when format is specdoc" do
188
+ options = parse(["--format", "specdoc"])
189
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
190
+ end
191
+
192
+ it "should use nested text formatter when format is s" do
193
+ options = parse(["--format", "n"])
194
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
195
+ end
196
+
197
+ it "should use nested text formatter when format is nested" do
198
+ options = parse(["--format", "nested"])
199
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
200
+ end
201
+
202
+ it "should support diff option when format is not specified" do
203
+ options = parse(["--diff"])
204
+ options.diff_format.should == :unified
205
+ end
206
+
207
+ it "should use unified diff format option when format is unified" do
208
+ options = parse(["--diff", "unified"])
209
+ options.diff_format.should == :unified
210
+ options.differ_class.should equal(Spec::Expectations::Differs::Default)
211
+ end
212
+
213
+ it "should use context diff format option when format is context" do
214
+ options = parse(["--diff", "context"])
215
+ options.diff_format.should == :context
216
+ options.differ_class.should == Spec::Expectations::Differs::Default
217
+ end
218
+
219
+ it "should use custom diff format option when format is a custom format" do
220
+ Spec::Expectations.differ.should_not be_instance_of(Custom::Differ)
221
+
222
+ options = parse(["--diff", "Custom::Differ"])
223
+ options.parse_diff "Custom::Differ"
224
+ options.diff_format.should == :custom
225
+ options.differ_class.should == Custom::Differ
226
+ Spec::Expectations.differ.should be_instance_of(Custom::Differ)
227
+ end
228
+
229
+ it "should print instructions about how to fix missing differ" do
230
+ lambda { parse(["--diff", "Custom::MissingFormatter"]) }.should raise_error(NameError)
231
+ @err.string.should match(/Couldn't find differ class Custom::MissingFormatter/n)
232
+ end
233
+
234
+ describe "when attempting a focussed spec" do
235
+ attr_reader :file, :dir
236
+ before(:each) do
237
+ @original_rspec_options = Spec::Runner.options
238
+ @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
239
+ @dir = File.dirname(file)
240
+ end
241
+
242
+ after(:each) do
243
+ Spec::Runner.use @original_rspec_options
244
+ end
245
+
246
+ def parse(args)
247
+ options = super
248
+ Spec::Runner.use options
249
+ options.filename_pattern = "*_fixture.rb"
250
+ options
251
+ end
252
+
253
+ it "should support --line to identify spec" do
254
+ options = parse([file, "--line", "13"])
255
+ options.line_number.should == 13
256
+ options.examples.should be_empty
257
+ options.run_examples
258
+ options.examples.should eql(["d"])
259
+ end
260
+
261
+ it "should fail with error message if file is dir along with --line" do
262
+ options = parse([dir, "--line", "169"])
263
+ options.line_number.should == 169
264
+ options.run_examples
265
+ @err.string.should match(/You must specify one file, not a directory when using the --line option/n)
266
+ end
267
+
268
+ it "should fail with error message if file does not exist along with --line" do
269
+ options = parse(["some file", "--line", "169"])
270
+ proc do
271
+ options.run_examples
272
+ end.should raise_error
273
+ end
274
+
275
+ it "should fail with error message if more than one files are specified along with --line" do
276
+ options = parse([file, file, "--line", "169"])
277
+ options.run_examples
278
+ @err.string.should match(/Only one file can be specified when using the --line option/n)
279
+ end
280
+
281
+ it "should fail with error message if --example and --line are used simultaneously" do
282
+ options = parse([file, "--example", "some example", "--line", "169"])
283
+ options.run_examples
284
+ @err.string.should match(/You cannot use both --line and --example/n)
285
+ end
286
+ end
287
+
288
+ if [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
289
+ it "should barf when --heckle is specified (and platform is windows)" do
290
+ lambda do
291
+ options = parse(["--heckle", "Spec"])
292
+ end.should raise_error(StandardError, "Heckle not supported on Windows")
293
+ end
294
+ else
295
+ it "should heckle when --heckle is specified (and platform is not windows)" do
296
+ options = parse(["--heckle", "Spec"])
297
+ options.heckle_runner.should be_instance_of(Spec::Runner::HeckleRunner)
298
+ end
299
+ end
300
+
301
+ it "should read options from file when --options is specified" do
302
+ options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
303
+ options.diff_format.should_not be_nil
304
+ options.colour.should be_true
305
+ end
306
+
307
+ it "should default the formatter to ProgressBarFormatter when using options file" do
308
+ options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
309
+ options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::ProgressBarFormatter)
310
+ end
311
+
312
+ it "should run parse drb after parsing options" do
313
+ @parser.stub!(:parse_drb)
314
+ @parser.should_receive(:parse_drb).with(["--drb"]).and_return(true)
315
+ options = parse(["--options", File.dirname(__FILE__) + "/spec_drb.opts"])
316
+ end
317
+
318
+ it "should read spaced and multi-line options from file when --options is specified" do
319
+ options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"])
320
+ options.diff_format.should_not be_nil
321
+ options.colour.should be_true
322
+ options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::SpecdocFormatter)
323
+ end
324
+
325
+ it "should save config to file when --generate-options is specified" do
326
+ FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
327
+ options = parse(["--colour", "--generate-options", "test.spec.opts", "--diff"])
328
+ IO.read('test.spec.opts').should == "--colour\n--diff\n"
329
+ FileUtils.rm 'test.spec.opts'
330
+ end
331
+
332
+ it "should save config to file when -G is specified" do
333
+ FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
334
+ options = parse(["--colour", "-G", "test.spec.opts", "--diff"])
335
+ IO.read('test.spec.opts').should == "--colour\n--diff\n"
336
+ FileUtils.rm 'test.spec.opts'
337
+ end
338
+
339
+ it "when --drb is specified, calls DrbCommandLine all of the other ARGV arguments" do
340
+ options = Spec::Runner::OptionParser.parse([
341
+ "some/spec.rb", "--diff", "--colour"
342
+ ], @err, @out)
343
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options|
344
+ options.argv.should == ["some/spec.rb", "--diff", "--colour"]
345
+ end
346
+ parse(["some/spec.rb", "--diff", "--drb", "--colour"])
347
+ end
348
+
349
+ it "should reverse spec order when --reverse is specified" do
350
+ options = parse(["some/spec.rb", "--reverse"])
351
+ end
352
+
353
+ it "should set an mtime comparator when --loadby mtime" do
354
+ options = parse(["--loadby", 'mtime'])
355
+ runner = Spec::Runner::ExampleGroupRunner.new(options)
356
+ Spec::Runner::ExampleGroupRunner.should_receive(:new).
357
+ with(options).
358
+ and_return(runner)
359
+ runner.should_receive(:load_files).with(["most_recent_spec.rb", "command_line_spec.rb"])
360
+
361
+ Dir.chdir(File.dirname(__FILE__)) do
362
+ options.files << 'command_line_spec.rb'
363
+ options.files << 'most_recent_spec.rb'
364
+ FileUtils.touch "most_recent_spec.rb"
365
+ options.run_examples
366
+ FileUtils.rm "most_recent_spec.rb"
367
+ end
368
+ end
369
+
370
+ it "should use the standard runner by default" do
371
+ runner = ::Spec::Runner::ExampleGroupRunner.new(@parser.options)
372
+ ::Spec::Runner::ExampleGroupRunner.should_receive(:new).
373
+ with(@parser.options).
374
+ and_return(runner)
375
+ options = parse([])
376
+ options.run_examples
377
+ end
378
+
379
+ it "should use a custom runner when given" do
380
+ runner = Custom::ExampleGroupRunner.new(@parser.options, nil)
381
+ Custom::ExampleGroupRunner.should_receive(:new).
382
+ with(@parser.options, nil).
383
+ and_return(runner)
384
+ options = parse(["--runner", "Custom::ExampleGroupRunner"])
385
+ options.run_examples
386
+ end
387
+
388
+ it "should use a custom runner with extra options" do
389
+ runner = Custom::ExampleGroupRunner.new(@parser.options, 'something')
390
+ Custom::ExampleGroupRunner.should_receive(:new).
391
+ with(@parser.options, 'something').
392
+ and_return(runner)
393
+ options = parse(["--runner", "Custom::ExampleGroupRunner:something"])
394
+ options.run_examples
395
+ end
396
+ end