rspec 1.0.8 → 1.1.0

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 (301) hide show
  1. data/CHANGES +122 -2
  2. data/README +10 -9
  3. data/Rakefile +22 -49
  4. data/TODO +2 -0
  5. data/bin/spec +1 -1
  6. data/bin/spec_translator +8 -8
  7. data/examples/{auto_spec_description_example.rb → pure/autogenerated_docstrings_example.rb} +0 -0
  8. data/examples/{before_and_after_example.rb → pure/before_and_after_example.rb} +1 -0
  9. data/examples/{behave_as_example.rb → pure/behave_as_example.rb} +0 -0
  10. data/examples/{custom_expectation_matchers.rb → pure/custom_expectation_matchers.rb} +0 -0
  11. data/examples/{custom_formatter.rb → pure/custom_formatter.rb} +1 -0
  12. data/examples/{dynamic_spec.rb → pure/dynamic_spec.rb} +0 -0
  13. data/examples/{file_accessor.rb → pure/file_accessor.rb} +1 -0
  14. data/examples/{file_accessor_spec.rb → pure/file_accessor_spec.rb} +0 -0
  15. data/examples/{greeter_spec.rb → pure/greeter_spec.rb} +1 -0
  16. data/examples/{helper_method_example.rb → pure/helper_method_example.rb} +0 -0
  17. data/examples/{io_processor.rb → pure/io_processor.rb} +0 -0
  18. data/examples/{io_processor_spec.rb → pure/io_processor_spec.rb} +0 -0
  19. data/examples/{legacy_spec.rb → pure/legacy_spec.rb} +1 -0
  20. data/examples/{mocking_example.rb → pure/mocking_example.rb} +0 -0
  21. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  22. data/examples/pure/nested_classes_example.rb +36 -0
  23. data/examples/{partial_mock_example.rb → pure/partial_mock_example.rb} +0 -0
  24. data/examples/{pending_example.rb → pure/pending_example.rb} +0 -0
  25. data/examples/{predicate_example.rb → pure/predicate_example.rb} +0 -0
  26. data/examples/{priority.txt → pure/priority.txt} +0 -0
  27. data/examples/pure/shared_example_group_example.rb +66 -0
  28. data/examples/pure/shared_stack_examples.rb +38 -0
  29. data/examples/pure/spec_helper.rb +3 -0
  30. data/examples/{stack.rb → pure/stack.rb} +0 -0
  31. data/examples/{stack_spec.rb → pure/stack_spec.rb} +1 -35
  32. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  33. data/examples/{stubbing_example.rb → pure/stubbing_example.rb} +0 -0
  34. data/examples/stories/adder.rb +13 -0
  35. data/examples/stories/addition +34 -0
  36. data/examples/stories/addition.rb +9 -0
  37. data/examples/stories/calculator.rb +65 -0
  38. data/examples/stories/game-of-life/README.txt +21 -0
  39. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  40. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  41. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  42. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  43. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  44. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  45. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  46. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  47. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  48. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  49. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  50. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  51. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  52. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  53. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  54. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  55. data/examples/stories/game-of-life/life.rb +3 -0
  56. data/examples/stories/game-of-life/life/game.rb +23 -0
  57. data/examples/stories/game-of-life/life/grid.rb +43 -0
  58. data/examples/stories/helper.rb +9 -0
  59. data/examples/stories/steps/addition_steps.rb +18 -0
  60. data/lib/autotest/rspec.rb +1 -2
  61. data/lib/spec.rb +30 -6
  62. data/lib/spec/example.rb +12 -0
  63. data/lib/spec/{dsl → example}/configuration.rb +48 -39
  64. data/lib/spec/{dsl → example}/errors.rb +2 -2
  65. data/lib/spec/example/example_group.rb +16 -0
  66. data/lib/spec/example/example_group_factory.rb +62 -0
  67. data/lib/spec/example/example_group_methods.rb +412 -0
  68. data/lib/spec/example/example_matcher.rb +42 -0
  69. data/lib/spec/example/example_methods.rb +101 -0
  70. data/lib/spec/example/module_reopening_fix.rb +21 -0
  71. data/lib/spec/example/pending.rb +18 -0
  72. data/lib/spec/example/shared_example_group.rb +58 -0
  73. data/lib/spec/expectations/differs/default.rb +15 -10
  74. data/lib/spec/expectations/errors.rb +7 -1
  75. data/lib/spec/expectations/extensions/object.rb +12 -7
  76. data/lib/spec/expectations/handler.rb +13 -4
  77. data/lib/spec/extensions.rb +2 -0
  78. data/lib/spec/extensions/class.rb +24 -0
  79. data/lib/spec/extensions/main.rb +54 -0
  80. data/lib/spec/extensions/object.rb +5 -1
  81. data/lib/spec/interop/test.rb +10 -0
  82. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  83. data/lib/spec/interop/test/unit/testcase.rb +61 -0
  84. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  85. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  86. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +60 -0
  87. data/lib/spec/matchers.rb +11 -15
  88. data/lib/spec/matchers/be.rb +23 -6
  89. data/lib/spec/matchers/change.rb +25 -1
  90. data/lib/spec/matchers/exist.rb +17 -0
  91. data/lib/spec/matchers/operator_matcher.rb +1 -0
  92. data/lib/spec/matchers/simple_matcher.rb +29 -0
  93. data/lib/spec/matchers/throw_symbol.rb +2 -0
  94. data/lib/spec/mocks.rb +5 -2
  95. data/lib/spec/mocks/argument_expectation.rb +1 -1
  96. data/lib/spec/mocks/message_expectation.rb +62 -44
  97. data/lib/spec/mocks/methods.rb +2 -2
  98. data/lib/spec/mocks/mock.rb +24 -3
  99. data/lib/spec/mocks/proxy.rb +26 -23
  100. data/lib/spec/mocks/space.rb +1 -1
  101. data/lib/spec/mocks/spec_methods.rb +20 -12
  102. data/lib/spec/rake/spectask.rb +19 -1
  103. data/lib/spec/rake/verify_rcov.rb +1 -1
  104. data/lib/spec/runner.rb +33 -10
  105. data/lib/spec/runner/backtrace_tweaker.rb +3 -3
  106. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  107. data/lib/spec/runner/command_line.rb +18 -12
  108. data/lib/spec/runner/drb_command_line.rb +4 -5
  109. data/lib/spec/runner/example_group_runner.rb +59 -0
  110. data/lib/spec/runner/formatter/base_formatter.rb +10 -8
  111. data/lib/spec/runner/formatter/base_text_formatter.rb +18 -18
  112. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +31 -0
  113. data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -5
  114. data/lib/spec/runner/formatter/html_formatter.rb +37 -27
  115. data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
  116. data/lib/spec/runner/formatter/progress_bar_formatter.rb +3 -4
  117. data/lib/spec/runner/formatter/specdoc_formatter.rb +27 -13
  118. data/lib/spec/runner/formatter/story/html_formatter.rb +124 -0
  119. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +123 -0
  120. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  121. data/lib/spec/runner/heckle_runner.rb +9 -9
  122. data/lib/spec/runner/option_parser.rb +140 -138
  123. data/lib/spec/runner/options.rb +168 -90
  124. data/lib/spec/runner/reporter.rb +58 -40
  125. data/lib/spec/runner/spec_parser.rb +11 -8
  126. data/lib/spec/story.rb +10 -0
  127. data/lib/spec/story/extensions.rb +1 -0
  128. data/lib/spec/story/extensions/main.rb +86 -0
  129. data/lib/spec/story/given_scenario.rb +14 -0
  130. data/lib/spec/story/runner.rb +58 -0
  131. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  132. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  133. data/lib/spec/story/runner/scenario_runner.rb +46 -0
  134. data/lib/spec/story/runner/story_mediator.rb +123 -0
  135. data/lib/spec/story/runner/story_parser.rb +227 -0
  136. data/lib/spec/story/runner/story_runner.rb +67 -0
  137. data/lib/spec/story/scenario.rb +14 -0
  138. data/lib/spec/story/step.rb +48 -0
  139. data/lib/spec/story/step_group.rb +89 -0
  140. data/lib/spec/story/step_mother.rb +37 -0
  141. data/lib/spec/story/story.rb +42 -0
  142. data/lib/spec/story/world.rb +124 -0
  143. data/lib/spec/version.rb +4 -5
  144. data/plugins/mock_frameworks/rspec.rb +1 -1
  145. data/spec/autotest/rspec_spec.rb +13 -7
  146. data/spec/autotest_helper.rb +4 -3
  147. data/spec/rspec_suite.rb +7 -0
  148. data/spec/ruby_forker.rb +13 -0
  149. data/spec/spec/example/configuration_spec.rb +290 -0
  150. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  151. data/spec/spec/example/example_group_factory_spec.rb +129 -0
  152. data/spec/spec/example/example_group_methods_spec.rb +465 -0
  153. data/spec/spec/example/example_group_spec.rb +711 -0
  154. data/spec/spec/{dsl → example}/example_matcher_spec.rb +23 -18
  155. data/spec/spec/example/example_methods_spec.rb +75 -0
  156. data/spec/spec/example/example_runner_spec.rb +194 -0
  157. data/spec/spec/example/example_spec.rb +53 -0
  158. data/spec/spec/example/nested_example_group_spec.rb +59 -0
  159. data/spec/spec/example/pending_module_spec.rb +31 -0
  160. data/spec/spec/{dsl → example}/predicate_matcher_spec.rb +1 -1
  161. data/spec/spec/example/shared_example_group_spec.rb +265 -0
  162. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  163. data/spec/spec/expectations/differs/default_spec.rb +5 -3
  164. data/spec/spec/expectations/extensions/object_spec.rb +63 -2
  165. data/spec/spec/extensions/main_spec.rb +50 -0
  166. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  167. data/spec/spec/interop/test/unit/testcase_spec.rb +10 -0
  168. data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +20 -0
  169. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  170. data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +34 -0
  171. data/spec/spec/matchers/be_spec.rb +15 -0
  172. data/spec/spec/matchers/change_spec.rb +87 -0
  173. data/spec/spec/matchers/description_generation_spec.rb +31 -37
  174. data/spec/spec/matchers/exist_spec.rb +31 -22
  175. data/spec/spec/matchers/handler_spec.rb +42 -1
  176. data/spec/spec/matchers/have_spec.rb +1 -1
  177. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +1 -1
  178. data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
  179. data/spec/spec/matchers/simple_matcher_spec.rb +31 -0
  180. data/spec/spec/matchers/throw_symbol_spec.rb +4 -1
  181. data/spec/spec/mocks/bug_report_10263.rb +24 -0
  182. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  183. data/spec/spec/mocks/bug_report_8165_spec.rb +2 -2
  184. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +1 -0
  185. data/spec/spec/mocks/mock_spec.rb +200 -102
  186. data/spec/spec/mocks/multiple_return_value_spec.rb +1 -1
  187. data/spec/spec/mocks/options_hash_spec.rb +19 -7
  188. data/spec/spec/mocks/partial_mock_spec.rb +31 -9
  189. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
  190. data/spec/spec/mocks/stub_spec.rb +120 -98
  191. data/spec/spec/package/bin_spec_spec.rb +7 -5
  192. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  193. data/spec/spec/runner/command_line_spec.rb +140 -27
  194. data/spec/spec/runner/drb_command_line_spec.rb +39 -31
  195. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +44 -0
  196. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +16 -11
  197. data/spec/spec/runner/formatter/html_formatter_spec.rb +60 -50
  198. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  199. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +29 -13
  200. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
  201. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  202. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +103 -39
  203. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +56 -0
  204. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +289 -0
  205. data/spec/spec/runner/heckle_runner_spec.rb +29 -14
  206. data/spec/spec/runner/heckler_spec.rb +4 -5
  207. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +5 -5
  208. data/spec/spec/runner/option_parser_spec.rb +86 -58
  209. data/spec/spec/runner/options_spec.rb +239 -120
  210. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  211. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  212. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  213. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +6 -6
  214. data/spec/spec/runner/reporter_spec.rb +147 -163
  215. data/spec/spec/runner/spec_parser_spec.rb +31 -0
  216. data/spec/spec/runner_spec.rb +11 -0
  217. data/spec/spec/spec_classes.rb +12 -5
  218. data/spec/spec/story/builders.rb +46 -0
  219. data/spec/spec/story/extensions/main_spec.rb +161 -0
  220. data/spec/spec/story/extensions_spec.rb +14 -0
  221. data/spec/spec/story/given_scenario_spec.rb +27 -0
  222. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +92 -0
  223. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  224. data/spec/spec/story/runner/scenario_runner_spec.rb +142 -0
  225. data/spec/spec/story/runner/story_mediator_spec.rb +133 -0
  226. data/spec/spec/story/runner/story_parser_spec.rb +384 -0
  227. data/spec/spec/story/runner/story_runner_spec.rb +219 -0
  228. data/spec/spec/story/runner_spec.rb +106 -0
  229. data/spec/spec/story/scenario_spec.rb +20 -0
  230. data/spec/spec/story/step_group_spec.rb +157 -0
  231. data/spec/spec/story/step_mother_spec.rb +72 -0
  232. data/spec/spec/story/step_spec.rb +147 -0
  233. data/spec/spec/story/story_helper.rb +2 -0
  234. data/spec/spec/story/story_spec.rb +86 -0
  235. data/spec/spec/story/world_spec.rb +416 -0
  236. data/spec/spec/translator_spec.rb +2 -1
  237. data/spec/spec_helper.rb +59 -2
  238. data/stories/all.rb +5 -0
  239. data/stories/example_groups/autogenerated_docstrings +26 -0
  240. data/stories/example_groups/example_group_with_should_methods +17 -0
  241. data/stories/example_groups/nested_groups +17 -0
  242. data/stories/example_groups/output +20 -0
  243. data/stories/example_groups/stories.rb +7 -0
  244. data/stories/helper.rb +6 -0
  245. data/stories/interop/examples_and_tests_together +30 -0
  246. data/stories/interop/stories.rb +7 -0
  247. data/stories/interop/test_case_with_should_methods +17 -0
  248. data/stories/pending_stories/README +3 -0
  249. data/stories/resources/helpers/cmdline.rb +9 -0
  250. data/stories/resources/helpers/story_helper.rb +16 -0
  251. data/stories/resources/matchers/smart_match.rb +37 -0
  252. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  253. data/stories/resources/spec/simple_spec.rb +8 -0
  254. data/stories/resources/steps/running_rspec.rb +50 -0
  255. data/stories/resources/test/spec_and_test_together.rb +57 -0
  256. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  257. metadata +232 -106
  258. data/EXAMPLES.rd +0 -111
  259. data/examples/multi_threaded_behaviour_runner.rb +0 -25
  260. data/examples/shared_behaviours_example.rb +0 -39
  261. data/examples/spec_helper.rb +0 -1
  262. data/examples/test_case_adapter_example.rb +0 -26
  263. data/examples/test_case_spec.rb +0 -65
  264. data/lib/spec/dsl.rb +0 -11
  265. data/lib/spec/dsl/behaviour.rb +0 -220
  266. data/lib/spec/dsl/behaviour_callbacks.rb +0 -82
  267. data/lib/spec/dsl/behaviour_eval.rb +0 -231
  268. data/lib/spec/dsl/behaviour_factory.rb +0 -42
  269. data/lib/spec/dsl/composite_proc_builder.rb +0 -33
  270. data/lib/spec/dsl/description.rb +0 -76
  271. data/lib/spec/dsl/example.rb +0 -135
  272. data/lib/spec/dsl/example_matcher.rb +0 -40
  273. data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
  274. data/lib/spec/runner/behaviour_runner.rb +0 -123
  275. data/lib/spec/runner/extensions/kernel.rb +0 -50
  276. data/lib/spec/runner/extensions/object.rb +0 -32
  277. data/lib/spec/runner/formatter.rb +0 -9
  278. data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -29
  279. data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
  280. data/lib/spec/test_case_adapter.rb +0 -10
  281. data/spec/spec/dsl/behaviour_eval_spec.rb +0 -79
  282. data/spec/spec/dsl/behaviour_factory_spec.rb +0 -48
  283. data/spec/spec/dsl/behaviour_spec.rb +0 -661
  284. data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -44
  285. data/spec/spec/dsl/configuration_spec.rb +0 -55
  286. data/spec/spec/dsl/description_spec.rb +0 -89
  287. data/spec/spec/dsl/example_class_spec.rb +0 -24
  288. data/spec/spec/dsl/example_instance_spec.rb +0 -160
  289. data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
  290. data/spec/spec/dsl/shared_behaviour_spec.rb +0 -252
  291. data/spec/spec/runner/behaviour_runner_spec.rb +0 -229
  292. data/spec/spec/runner/context_matching_spec.rb +0 -27
  293. data/spec/spec/runner/extensions/bug_report_10577_spec.rb +0 -35
  294. data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
  295. data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -40
  296. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -20
  297. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
  298. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
  299. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
  300. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
  301. data/spec/spec/runner/object_ext_spec.rb +0 -11
@@ -0,0 +1,31 @@
1
+ module Spec
2
+ module Example
3
+ describe Pending do
4
+
5
+ it 'should raise an ExamplePendingError if no block is supplied' do
6
+ lambda {
7
+ include Pending
8
+ pending "TODO"
9
+ }.should raise_error(ExamplePendingError, /TODO/)
10
+ end
11
+
12
+ it 'should raise an ExamplePendingError if a supplied block fails as expected' do
13
+ lambda {
14
+ include Pending
15
+ pending "TODO" do
16
+ raise "oops"
17
+ end
18
+ }.should raise_error(ExamplePendingError, /TODO/)
19
+ end
20
+
21
+ it 'should raise a PendingExampleFixedError if a supplied block starts working' do
22
+ lambda {
23
+ include Pending
24
+ pending "TODO" do
25
+ # success!
26
+ end
27
+ }.should raise_error(PendingExampleFixedError, /TODO/)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
2
 
3
3
  module Spec
4
- module DSL
4
+ module Example
5
5
  class Fish
6
6
  def can_swim?(distance_in_yards)
7
7
  distance_in_yards < 1000
@@ -0,0 +1,265 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ describe ExampleGroup, "with :shared => true" do
6
+ it_should_behave_like "sandboxed rspec_options"
7
+ attr_reader :formatter, :example_group
8
+ before(:each) do
9
+ @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
10
+ options.formatters << formatter
11
+ @example_group = Class.new(ExampleGroup).describe("example_group")
12
+ class << example_group
13
+ public :include
14
+ end
15
+ end
16
+
17
+ after(:each) do
18
+ @formatter.rspec_verify
19
+ @example_group = nil
20
+ $shared_example_groups.clear unless $shared_example_groups.nil?
21
+ end
22
+
23
+ def make_shared_example_group(name, opts=nil, &block)
24
+ example_group = SharedExampleGroup.new(name, :shared => true, &block)
25
+ SharedExampleGroup.add_shared_example_group(example_group)
26
+ example_group
27
+ end
28
+
29
+ def non_shared_example_group()
30
+ @non_shared_example_group ||= Class.new(ExampleGroup).describe("example_group")
31
+ end
32
+
33
+ it "should accept an optional options hash" do
34
+ lambda { Class.new(ExampleGroup).describe("context") }.should_not raise_error(Exception)
35
+ lambda { Class.new(ExampleGroup).describe("context", :shared => true) }.should_not raise_error(Exception)
36
+ end
37
+
38
+ it "should return all shared example_groups" do
39
+ b1 = make_shared_example_group("b1", :shared => true) {}
40
+ b2 = make_shared_example_group("b2", :shared => true) {}
41
+
42
+ b1.should_not be(nil)
43
+ b2.should_not be(nil)
44
+
45
+ SharedExampleGroup.find_shared_example_group("b1").should equal(b1)
46
+ SharedExampleGroup.find_shared_example_group("b2").should equal(b2)
47
+ end
48
+
49
+ it "should register as shared example_group" do
50
+ example_group = make_shared_example_group("example_group") {}
51
+ SharedExampleGroup.shared_example_groups.should include(example_group)
52
+ end
53
+
54
+ it "should not be shared when not configured as shared" do
55
+ example_group = non_shared_example_group
56
+ SharedExampleGroup.shared_example_groups.should_not include(example_group)
57
+ end
58
+
59
+ it "should complain when adding a second shared example_group with the same description" do
60
+ describe "shared example_group", :shared => true do
61
+ end
62
+ lambda do
63
+ describe "shared example_group", :shared => true do
64
+ end
65
+ end.should raise_error(ArgumentError)
66
+ end
67
+
68
+ it "should NOT complain when adding the same shared example_group instance again" do
69
+ shared_example_group = Class.new(ExampleGroup).describe("shared example_group", :shared => true)
70
+ SharedExampleGroup.add_shared_example_group(shared_example_group)
71
+ SharedExampleGroup.add_shared_example_group(shared_example_group)
72
+ end
73
+
74
+ it "should NOT complain when adding the same shared example_group again (i.e. file gets reloaded)" do
75
+ lambda do
76
+ 2.times do
77
+ describe "shared example_group which gets loaded twice", :shared => true do
78
+ end
79
+ end
80
+ end.should_not raise_error(ArgumentError)
81
+ end
82
+
83
+ it "should NOT complain when adding the same shared example_group in same file with different absolute path" do
84
+ shared_example_group_1 = Class.new(ExampleGroup).describe(
85
+ "shared example_group",
86
+ :shared => true,
87
+ :spec_path => "/my/spec/a/../shared.rb"
88
+ )
89
+ shared_example_group_2 = Class.new(ExampleGroup).describe(
90
+ "shared example_group",
91
+ :shared => true,
92
+ :spec_path => "/my/spec/b/../shared.rb"
93
+ )
94
+
95
+ SharedExampleGroup.add_shared_example_group(shared_example_group_1)
96
+ SharedExampleGroup.add_shared_example_group(shared_example_group_2)
97
+ end
98
+
99
+ it "should complain when adding a different shared example_group with the same name in a different file with the same basename" do
100
+ shared_example_group_1 = Class.new(ExampleGroup).describe(
101
+ "shared example_group",
102
+ :shared => true,
103
+ :spec_path => "/my/spec/a/shared.rb"
104
+ )
105
+ shared_example_group_2 = Class.new(ExampleGroup).describe(
106
+ "shared example_group",
107
+ :shared => true,
108
+ :spec_path => "/my/spec/b/shared.rb"
109
+ )
110
+
111
+ SharedExampleGroup.add_shared_example_group(shared_example_group_1)
112
+ lambda do
113
+ SharedExampleGroup.add_shared_example_group(shared_example_group_2)
114
+ end.should raise_error(ArgumentError, /already exists/)
115
+ end
116
+
117
+ it "should add examples to current example_group using it_should_behave_like" do
118
+ shared_example_group = make_shared_example_group("shared example_group") do
119
+ it("shared example") {}
120
+ it("shared example 2") {}
121
+ end
122
+
123
+ example_group.it("example") {}
124
+ example_group.number_of_examples.should == 1
125
+ example_group.it_should_behave_like("shared example_group")
126
+ example_group.number_of_examples.should == 3
127
+ end
128
+
129
+ it "should add examples to current example_group using include" do
130
+ shared_example_group = describe "all things", :shared => true do
131
+ it "should do stuff" do end
132
+ end
133
+
134
+ example_group = describe "one thing" do
135
+ include shared_example_group
136
+ end
137
+
138
+ example_group.number_of_examples.should == 1
139
+ end
140
+
141
+ it "should add examples to current example_group using it_should_behave_like with a module" do
142
+ AllThings = describe "all things", :shared => true do
143
+ it "should do stuff" do end
144
+ end
145
+
146
+ example_group = describe "one thing" do
147
+ it_should_behave_like AllThings
148
+ end
149
+
150
+ example_group.number_of_examples.should == 1
151
+ end
152
+
153
+ it "should run shared examples" do
154
+ shared_example_ran = false
155
+ shared_example_group = make_shared_example_group("shared example_group") do
156
+ it("shared example") { shared_example_ran = true }
157
+ end
158
+
159
+ example_ran = false
160
+
161
+ example_group.it_should_behave_like("shared example_group")
162
+ example_group.it("example") {example_ran = true}
163
+ example_group.run
164
+ example_ran.should be_true
165
+ shared_example_ran.should be_true
166
+ end
167
+
168
+ it "should run setup and teardown from shared example_group" do
169
+ shared_setup_ran = false
170
+ shared_teardown_ran = false
171
+ shared_example_group = make_shared_example_group("shared example_group") do
172
+ before { shared_setup_ran = true }
173
+ after { shared_teardown_ran = true }
174
+ it("shared example") { shared_example_ran = true }
175
+ end
176
+
177
+ example_ran = false
178
+
179
+ example_group.it_should_behave_like("shared example_group")
180
+ example_group.it("example") {example_ran = true}
181
+ example_group.run
182
+ example_ran.should be_true
183
+ shared_setup_ran.should be_true
184
+ shared_teardown_ran.should be_true
185
+ end
186
+
187
+ it "should run before(:all) and after(:all) only once from shared example_group" do
188
+ shared_before_all_run_count = 0
189
+ shared_after_all_run_count = 0
190
+ shared_example_group = make_shared_example_group("shared example_group") do
191
+ before(:all) { shared_before_all_run_count += 1}
192
+ after(:all) { shared_after_all_run_count += 1}
193
+ it("shared example") { shared_example_ran = true }
194
+ end
195
+
196
+ example_ran = false
197
+
198
+ example_group.it_should_behave_like("shared example_group")
199
+ example_group.it("example") {example_ran = true}
200
+ example_group.run
201
+ example_ran.should be_true
202
+ shared_before_all_run_count.should == 1
203
+ shared_after_all_run_count.should == 1
204
+ end
205
+
206
+ it "should include modules, included into shared example_group, into current example_group" do
207
+ @formatter.should_receive(:add_example_group).with(any_args)
208
+
209
+ shared_example_group = make_shared_example_group("shared example_group") do
210
+ it("shared example") { shared_example_ran = true }
211
+ end
212
+
213
+ mod1_method_called = false
214
+ mod1 = Module.new do
215
+ define_method :mod1_method do
216
+ mod1_method_called = true
217
+ end
218
+ end
219
+
220
+ mod2_method_called = false
221
+ mod2 = Module.new do
222
+ define_method :mod2_method do
223
+ mod2_method_called = true
224
+ end
225
+ end
226
+
227
+ shared_example_group.include mod2
228
+
229
+ example_group.it_should_behave_like("shared example_group")
230
+ example_group.include mod1
231
+
232
+ example_group.it("test") do
233
+ mod1_method
234
+ mod2_method
235
+ end
236
+ example_group.run
237
+ mod1_method_called.should be_true
238
+ mod2_method_called.should be_true
239
+ end
240
+
241
+ it "should make methods defined in the shared example_group available in consuming example_group" do
242
+ shared_example_group = make_shared_example_group("shared example_group xyz") do
243
+ def a_shared_helper_method
244
+ "this got defined in a shared example_group"
245
+ end
246
+ end
247
+ example_group.it_should_behave_like("shared example_group xyz")
248
+ success = false
249
+ example_group.it("should access a_shared_helper_method") do
250
+ a_shared_helper_method
251
+ success = true
252
+ end
253
+ example_group.run
254
+ success.should be_true
255
+ end
256
+
257
+ it "should raise when named shared example_group can not be found" do
258
+ lambda {
259
+ example_group.it_should_behave_like("non-existent shared example group")
260
+ violated
261
+ }.should raise_error("Shared Example Group 'non-existent shared example group' can not be found")
262
+ end
263
+ end
264
+ end
265
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ class GrandParentExampleGroup < Spec::Example::ExampleGroup
6
+ describe "Grandparent ExampleGroup"
7
+ end
8
+
9
+ class ParentExampleGroup < GrandParentExampleGroup
10
+ describe "Parent ExampleGroup"
11
+ it "should bar" do
12
+ end
13
+ end
14
+
15
+ class ChildExampleGroup < ParentExampleGroup
16
+ describe "Child ExampleGroup"
17
+ it "should bam" do
18
+ end
19
+ end
20
+
21
+ describe ChildExampleGroup do
22
+
23
+ end
24
+ end
25
+ end
@@ -1,5 +1,4 @@
1
1
  require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
- require File.dirname(__FILE__) + '/../../../../lib/spec/expectations/differs/default'
3
2
 
4
3
  module Spec
5
4
  module Fixtures
@@ -22,7 +21,8 @@ end
22
21
 
23
22
  describe "Diff" do
24
23
  before(:each) do
25
- @differ = Spec::Expectations::Differs::Default.new
24
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
25
+ @differ = Spec::Expectations::Differs::Default.new(@options)
26
26
  end
27
27
 
28
28
  it "should output unified diff of two strings" do
@@ -79,7 +79,9 @@ end
79
79
 
80
80
  describe "Diff in context format" do
81
81
  before(:each) do
82
- @differ = Spec::Expectations::Differs::Default.new(:context)
82
+ @options = Spec::Runner::Options.new(StringIO.new, StringIO.new)
83
+ @options.diff_format = :context
84
+ @differ = Spec::Expectations::Differs::Default.new(@options)
83
85
  end
84
86
 
85
87
  it "should output unified diff message of two objects" do
@@ -9,8 +9,7 @@ describe Object, "#should" do
9
9
  end
10
10
 
11
11
  it "should accept and interact with a matcher" do
12
- @matcher.should_receive(:matches?).with(@target).and_return(true)
13
-
12
+ @matcher.should_receive(:matches?).with(@target).and_return(true)
14
13
  @target.should @matcher
15
14
  end
16
15
 
@@ -21,6 +20,37 @@ describe Object, "#should" do
21
20
  @target.should @matcher
22
21
  }.should fail_with("the failure message")
23
22
  end
23
+
24
+ it "should raise error if it receives false directly" do
25
+ lambda {
26
+ @target.should false
27
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
28
+ end
29
+
30
+ it "should raise error if it receives false (evaluated)" do
31
+ lambda {
32
+ @target.should eql?("foo")
33
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
34
+ end
35
+
36
+ it "should raise error if it receives true" do
37
+ lambda {
38
+ @target.should true
39
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
40
+ end
41
+
42
+ it "should raise error if it receives nil" do
43
+ lambda {
44
+ @target.should nil
45
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
46
+ end
47
+
48
+ it "should raise error if it receives no argument and it is not used as a left side of an operator" do
49
+ pending "Is it even possible to catch this?"
50
+ lambda {
51
+ @target.should
52
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
53
+ end
24
54
  end
25
55
 
26
56
  describe Object, "#should_not" do
@@ -43,4 +73,35 @@ describe Object, "#should_not" do
43
73
  @target.should_not @matcher
44
74
  }.should fail_with("the negative failure message")
45
75
  end
76
+
77
+ it "should raise error if it receives false directly" do
78
+ lambda {
79
+ @target.should_not false
80
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
81
+ end
82
+
83
+ it "should raise error if it receives false (evaluated)" do
84
+ lambda {
85
+ @target.should_not eql?("foo")
86
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
87
+ end
88
+
89
+ it "should raise error if it receives true" do
90
+ lambda {
91
+ @target.should_not true
92
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
93
+ end
94
+
95
+ it "should raise error if it receives nil" do
96
+ lambda {
97
+ @target.should_not nil
98
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
99
+ end
100
+
101
+ it "should raise error if it receives no argument and it is not used as a left side of an operator" do
102
+ pending "Is it even possible to catch this?"
103
+ lambda {
104
+ @target.should_not
105
+ }.should raise_error(Spec::Expectations::InvalidMatcherError)
106
+ end
46
107
  end
@@ -0,0 +1,50 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Extensions
5
+ describe Main do
6
+ it_should_behave_like "sandboxed rspec_options"
7
+ before(:each) do
8
+ @main = Class.new do; include Main; end
9
+ end
10
+
11
+ after(:each) do
12
+ $rspec_story_steps = @original_rspec_story_steps
13
+ end
14
+
15
+ it "should create an Options object" do
16
+ @main.send(:rspec_options).should be_instance_of(Spec::Runner::Options)
17
+ @main.send(:rspec_options).should === $rspec_options
18
+ end
19
+
20
+ specify {@main.should respond_to(:describe)}
21
+ specify {@main.should respond_to(:context)}
22
+
23
+ it "should raise when no block given to describe" do
24
+ lambda { @main.describe "foo" }.should raise_error(ArgumentError)
25
+ end
26
+
27
+ it "should raise when no description given to describe" do
28
+ lambda { @main.describe do; end }.should raise_error(ArgumentError)
29
+ end
30
+
31
+ it "should registered ExampleGroups by default" do
32
+ example_group = @main.describe("The ExampleGroup") do end
33
+ rspec_options.example_groups.should include(example_group)
34
+ end
35
+
36
+ it "should not run unregistered ExampleGroups" do
37
+ example_group = @main.describe("The ExampleGroup") do
38
+ unregister
39
+ end
40
+
41
+ rspec_options.example_groups.should_not include(example_group)
42
+ end
43
+
44
+ it "should create a shared ExampleGroup with shared_examples_for" do
45
+ group = @main.shared_examples_for "all things" do end
46
+ group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
47
+ end
48
+ end
49
+ end
50
+ end