rspec 1.1.11 → 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 (269) hide show
  1. data/.autotest +4 -0
  2. data/History.txt +55 -0
  3. data/Manifest.txt +102 -122
  4. data/README.txt +30 -12
  5. data/Rakefile +10 -10
  6. data/TODO.txt +10 -2
  7. data/{failing_examples → examples/failing}/README.txt +0 -0
  8. data/{failing_examples → examples/failing}/diffing_spec.rb +0 -0
  9. data/{failing_examples → examples/failing}/failing_autogenerated_docstrings_example.rb +0 -0
  10. data/{failing_examples/failure_in_teardown.rb → examples/failing/failure_in_after.rb} +1 -1
  11. data/{failing_examples/failure_in_setup.rb → examples/failing/failure_in_before.rb} +1 -1
  12. data/{failing_examples → examples/failing}/mocking_example.rb +0 -0
  13. data/{failing_examples → examples/failing}/mocking_with_flexmock.rb +0 -0
  14. data/{failing_examples → examples/failing}/mocking_with_mocha.rb +0 -0
  15. data/{failing_examples → examples/failing}/mocking_with_rr.rb +0 -0
  16. data/{failing_examples → examples/failing}/partial_mock_example.rb +0 -0
  17. data/{failing_examples → examples/failing}/predicate_example.rb +5 -0
  18. data/{failing_examples → examples/failing}/raising_example.rb +0 -0
  19. data/{failing_examples → examples/failing}/spec_helper.rb +1 -1
  20. data/{failing_examples → examples/failing}/syntax_error_example.rb +0 -0
  21. data/{failing_examples → examples/failing}/team_spec.rb +0 -0
  22. data/{failing_examples → examples/failing}/timeout_behaviour.rb +0 -0
  23. data/examples/{pure → passing}/autogenerated_docstrings_example.rb +6 -0
  24. data/examples/{pure → passing}/before_and_after_example.rb +0 -0
  25. data/examples/{pure → passing}/behave_as_example.rb +0 -0
  26. data/examples/{pure → passing}/custom_expectation_matchers.rb +0 -0
  27. data/examples/{pure → passing}/custom_formatter.rb +1 -1
  28. data/examples/{pure → passing}/dynamic_spec.rb +2 -2
  29. data/examples/{pure → passing}/file_accessor.rb +0 -0
  30. data/examples/{pure → passing}/file_accessor_spec.rb +0 -0
  31. data/examples/{pure → passing}/greeter_spec.rb +0 -0
  32. data/examples/{pure → passing}/helper_method_example.rb +0 -0
  33. data/examples/{pure → passing}/io_processor.rb +0 -0
  34. data/examples/{pure → passing}/io_processor_spec.rb +0 -0
  35. data/examples/{pure → passing}/legacy_spec.rb +0 -0
  36. data/examples/{pure → passing}/mocking_example.rb +0 -0
  37. data/examples/{pure/multi_threaded_behaviour_runner.rb → passing/multi_threaded_example_group_runner.rb} +1 -3
  38. data/examples/{pure → passing}/nested_classes_example.rb +0 -0
  39. data/examples/{pure → passing}/partial_mock_example.rb +0 -0
  40. data/examples/{pure → passing}/pending_example.rb +0 -0
  41. data/examples/{pure → passing}/predicate_example.rb +0 -0
  42. data/examples/{pure → passing}/priority.txt +0 -0
  43. data/examples/{pure → passing}/shared_example_group_example.rb +0 -0
  44. data/examples/{pure → passing}/shared_stack_examples.rb +1 -3
  45. data/examples/passing/simple_matcher_example.rb +31 -0
  46. data/examples/{pure → passing}/spec_helper.rb +0 -0
  47. data/examples/{pure → passing}/stack.rb +0 -0
  48. data/examples/{pure → passing}/stack_spec.rb +3 -2
  49. data/examples/{pure → passing}/stack_spec_with_nested_example_groups.rb +0 -0
  50. data/examples/{pure → passing}/stubbing_example.rb +0 -0
  51. data/examples/{pure → passing}/yielding_example.rb +0 -0
  52. data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +86 -0
  53. data/features/before_and_after_blocks/before_and_after_blocks.feature +168 -0
  54. data/{stories/example_groups/autogenerated_docstrings → features/example_groups/autogenerated_docstrings.feature} +5 -5
  55. data/{stories/example_groups/example_group_with_should_methods → features/example_groups/example_group_with_should_methods.feature} +3 -3
  56. data/{stories/example_groups/nested_groups → features/example_groups/nested_groups.feature} +4 -4
  57. data/{stories/example_groups/output → features/example_groups/output.feature} +3 -8
  58. data/{stories/interop/examples_and_tests_together → features/interop/examples_and_tests_together.feature} +5 -4
  59. data/features/interop/test_but_not_test_unit.feature +14 -0
  60. data/{stories/interop/test_case_with_should_methods → features/interop/test_case_with_should_methods.feature} +2 -2
  61. data/{stories/mock_framework_integration/use_flexmock.story → features/mock_framework_integration/use_flexmock.feature} +1 -1
  62. data/features/step_definitions/running_rspec.rb +54 -0
  63. data/features/support/env.rb +26 -0
  64. data/{stories/resources → features/support}/helpers/cmdline.rb +0 -0
  65. data/{stories/resources → features/support}/helpers/story_helper.rb +1 -1
  66. data/{stories/resources → features/support}/matchers/smart_match.rb +0 -0
  67. data/{plugins → lib/adapters}/mock_frameworks/flexmock.rb +1 -1
  68. data/{plugins → lib/adapters}/mock_frameworks/mocha.rb +1 -1
  69. data/{plugins → lib/adapters}/mock_frameworks/rr.rb +1 -1
  70. data/{plugins → lib/adapters}/mock_frameworks/rspec.rb +2 -2
  71. data/lib/autotest/rspec.rb +4 -3
  72. data/lib/spec.rb +2 -27
  73. data/lib/spec/dsl.rb +1 -0
  74. data/lib/spec/{extensions → dsl}/main.rb +10 -10
  75. data/lib/spec/example.rb +175 -1
  76. data/lib/spec/example/before_and_after_hooks.rb +30 -24
  77. data/lib/spec/example/example_group.rb +1 -0
  78. data/lib/spec/example/example_group_factory.rb +26 -9
  79. data/lib/spec/example/example_group_methods.rb +138 -113
  80. data/lib/spec/example/example_methods.rb +88 -25
  81. data/lib/spec/example/shared_example_group.rb +28 -21
  82. data/lib/spec/expectations.rb +22 -18
  83. data/lib/spec/expectations/handler.rb +16 -36
  84. data/lib/spec/interop/test/unit/testcase.rb +19 -17
  85. data/lib/spec/interop/test/unit/testresult.rb +1 -1
  86. data/lib/spec/interop/test/unit/testsuite_adapter.rb +1 -1
  87. data/lib/spec/matchers.rb +7 -28
  88. data/lib/spec/matchers/be.rb +103 -116
  89. data/lib/spec/matchers/be_close.rb +6 -22
  90. data/lib/spec/matchers/eql.rb +7 -25
  91. data/lib/spec/matchers/equal.rb +7 -25
  92. data/lib/spec/matchers/errors.rb +5 -0
  93. data/lib/spec/matchers/exist.rb +8 -14
  94. data/lib/spec/matchers/generated_descriptions.rb +48 -0
  95. data/lib/spec/matchers/has.rb +12 -28
  96. data/lib/spec/matchers/include.rb +12 -9
  97. data/lib/spec/matchers/match.rb +8 -27
  98. data/lib/spec/matchers/match_array.rb +79 -0
  99. data/lib/spec/matchers/method_missing.rb +9 -0
  100. data/lib/spec/matchers/operator_matcher.rb +39 -48
  101. data/lib/spec/matchers/raise_error.rb +4 -8
  102. data/lib/spec/matchers/respond_to.rb +33 -8
  103. data/lib/spec/matchers/throw_symbol.rb +49 -17
  104. data/lib/spec/matchers/wrap_expectation.rb +55 -0
  105. data/lib/spec/mocks/argument_constraints.rb +77 -5
  106. data/lib/spec/mocks/message_expectation.rb +7 -7
  107. data/lib/spec/mocks/proxy.rb +14 -12
  108. data/lib/spec/rake/spectask.rb +4 -6
  109. data/lib/spec/ruby.rb +9 -0
  110. data/lib/spec/runner.rb +37 -162
  111. data/lib/spec/runner/backtrace_tweaker.rb +5 -3
  112. data/lib/spec/runner/class_and_arguments_parser.rb +7 -9
  113. data/lib/spec/runner/command_line.rb +6 -8
  114. data/lib/spec/{example → runner}/configuration.rb +46 -47
  115. data/lib/spec/runner/example_group_runner.rb +15 -4
  116. data/lib/spec/runner/formatter/base_text_formatter.rb +4 -3
  117. data/lib/spec/runner/formatter/html_formatter.rb +14 -11
  118. data/lib/spec/runner/formatter/nested_text_formatter.rb +2 -2
  119. data/lib/spec/runner/heckle_runner.rb +58 -56
  120. data/lib/spec/runner/option_parser.rb +8 -4
  121. data/lib/spec/runner/options.rb +29 -14
  122. data/lib/spec/runner/reporter.rb +1 -1
  123. data/lib/spec/runner/spec_parser.rb +11 -9
  124. data/lib/spec/story/runner.rb +40 -42
  125. data/lib/spec/story/runner/story_runner.rb +10 -6
  126. data/lib/spec/story/world.rb +66 -70
  127. data/lib/spec/version.rb +4 -2
  128. data/{rake_tasks → resources/rake}/examples.rake +0 -0
  129. data/{rake_tasks → resources/rake}/examples_with_rcov.rake +0 -0
  130. data/{rake_tasks → resources/rake}/failing_examples_with_html.rake +0 -0
  131. data/{rake_tasks → resources/rake}/verify_rcov.rake +0 -0
  132. data/{stories/resources → resources}/spec/example_group_with_should_methods.rb +1 -1
  133. data/{stories/resources → resources}/spec/simple_spec.rb +1 -1
  134. data/resources/spec/spec_with_flexmock.rb +19 -0
  135. data/{stories/resources → resources}/test/spec_and_test_together.rb +1 -1
  136. data/resources/test/spec_including_test_but_not_unit.rb +11 -0
  137. data/{stories/resources → resources}/test/test_case_with_should_methods.rb +2 -2
  138. data/rspec.gemspec +16 -6
  139. data/spec/autotest/autotest_helper.rb +2 -2
  140. data/spec/autotest/discover_spec.rb +4 -15
  141. data/spec/autotest/failed_results_re_spec.rb +24 -0
  142. data/spec/autotest/rspec_spec.rb +2 -38
  143. data/spec/spec/dsl/main_spec.rb +88 -0
  144. data/spec/spec/example/example_group_class_definition_spec.rb +6 -2
  145. data/spec/spec/example/example_group_factory_spec.rb +50 -10
  146. data/spec/spec/example/example_group_methods_spec.rb +210 -160
  147. data/spec/spec/example/example_group_spec.rb +44 -52
  148. data/spec/spec/example/example_matcher_spec.rb +6 -23
  149. data/spec/spec/example/example_methods_spec.rb +176 -54
  150. data/spec/spec/example/helper_method_spec.rb +24 -0
  151. data/spec/spec/example/pending_module_spec.rb +2 -8
  152. data/spec/spec/example/shared_example_group_spec.rb +56 -80
  153. data/spec/spec/expectations/extensions/object_spec.rb +0 -50
  154. data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
  155. data/spec/spec/interop/test/unit/spec_spec.rb +1 -5
  156. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +4 -0
  157. data/spec/spec/matchers/be_close_spec.rb +12 -10
  158. data/spec/spec/matchers/be_spec.rb +62 -7
  159. data/spec/spec/matchers/description_generation_spec.rb +19 -0
  160. data/spec/spec/matchers/eql_spec.rb +7 -6
  161. data/spec/spec/matchers/equal_spec.rb +7 -6
  162. data/spec/spec/matchers/handler_spec.rb +4 -43
  163. data/spec/spec/matchers/has_spec.rb +1 -1
  164. data/spec/spec/matchers/have_spec.rb +23 -18
  165. data/spec/spec/matchers/include_spec.rb +24 -0
  166. data/spec/spec/matchers/match_array_spec.rb +83 -0
  167. data/spec/spec/matchers/matcher_methods_spec.rb +1 -13
  168. data/spec/spec/matchers/raise_error_spec.rb +18 -0
  169. data/spec/spec/matchers/respond_to_spec.rb +71 -9
  170. data/spec/spec/matchers/throw_symbol_spec.rb +85 -43
  171. data/spec/spec/mocks/bug_report_11545_spec.rb +4 -5
  172. data/spec/spec/mocks/bug_report_496.rb +11 -9
  173. data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
  174. data/spec/spec/mocks/hash_including_matcher_spec.rb +39 -2
  175. data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
  176. data/spec/spec/mocks/mock_spec.rb +5 -6
  177. data/spec/spec/mocks/nil_expectation_warning_spec.rb +2 -2
  178. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +18 -3
  179. data/spec/spec/mocks/stub_spec.rb +6 -0
  180. data/spec/spec/mocks/stubbed_message_expectations_spec.rb +14 -0
  181. data/spec/spec/runner/command_line_spec.rb +4 -4
  182. data/spec/spec/runner/configuration_spec.rb +301 -0
  183. data/spec/spec/runner/drb_command_line_spec.rb +4 -4
  184. data/spec/spec/runner/example_group_runner_spec.rb +33 -0
  185. data/spec/spec/runner/formatter/base_formatter_spec.rb +13 -102
  186. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +23 -0
  187. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +5 -5
  188. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +3 -3
  189. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +6 -6
  190. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +9 -9
  191. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +6 -6
  192. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +10 -10
  193. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +39 -30
  194. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +379 -0
  195. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +379 -0
  196. data/spec/spec/runner/formatter/html_formatter_spec.rb +14 -13
  197. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +5 -5
  198. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +7 -17
  199. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +18 -17
  200. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +5 -5
  201. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +6 -6
  202. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +33 -30
  203. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +373 -0
  204. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +373 -0
  205. data/spec/spec/runner/heckler_spec.rb +16 -9
  206. data/spec/spec/runner/option_parser_spec.rb +3 -18
  207. data/spec/spec/runner/options_spec.rb +27 -8
  208. data/spec/spec/runner/reporter_spec.rb +5 -5
  209. data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
  210. data/spec/spec/runner/resources/utf8_encoded.rb +7 -0
  211. data/spec/spec/runner/spec_parser_spec.rb +85 -79
  212. data/spec/spec/spec_spec.rb +21 -0
  213. data/spec/spec_helper.rb +9 -1
  214. data/story_server/prototype/javascripts/prototype.js +1 -1
  215. metadata +119 -131
  216. data/examples/stories/adder.rb +0 -13
  217. data/examples/stories/addition +0 -34
  218. data/examples/stories/addition.rb +0 -9
  219. data/examples/stories/calculator.rb +0 -65
  220. data/examples/stories/game-of-life/.loadpath +0 -5
  221. data/examples/stories/game-of-life/README.txt +0 -21
  222. data/examples/stories/game-of-life/behaviour/everything.rb +0 -6
  223. data/examples/stories/game-of-life/behaviour/examples/examples.rb +0 -3
  224. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +0 -35
  225. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +0 -66
  226. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +0 -21
  227. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +0 -21
  228. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +0 -42
  229. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +0 -42
  230. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +0 -17
  231. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +0 -53
  232. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +0 -52
  233. data/examples/stories/game-of-life/behaviour/stories/helper.rb +0 -6
  234. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +0 -26
  235. data/examples/stories/game-of-life/behaviour/stories/steps.rb +0 -5
  236. data/examples/stories/game-of-life/behaviour/stories/stories.rb +0 -3
  237. data/examples/stories/game-of-life/behaviour/stories/stories.txt +0 -22
  238. data/examples/stories/game-of-life/life.rb +0 -3
  239. data/examples/stories/game-of-life/life/game.rb +0 -23
  240. data/examples/stories/game-of-life/life/grid.rb +0 -43
  241. data/examples/stories/helper.rb +0 -9
  242. data/examples/stories/steps/addition_steps.rb +0 -18
  243. data/lib/spec/adapters.rb +0 -1
  244. data/lib/spec/adapters/ruby_engine.rb +0 -26
  245. data/lib/spec/adapters/ruby_engine/mri.rb +0 -8
  246. data/lib/spec/adapters/ruby_engine/rubinius.rb +0 -8
  247. data/lib/spec/extensions.rb +0 -4
  248. data/lib/spec/extensions/class.rb +0 -24
  249. data/lib/spec/extensions/metaclass.rb +0 -7
  250. data/lib/spec/extensions/object.rb +0 -6
  251. data/spec/spec/adapters/ruby_engine_spec.rb +0 -16
  252. data/spec/spec/example/configuration_spec.rb +0 -296
  253. data/spec/spec/example/example_runner_spec.rb +0 -194
  254. data/spec/spec/extensions/main_spec.rb +0 -71
  255. data/stories/all.rb +0 -5
  256. data/stories/configuration/before_blocks.story +0 -21
  257. data/stories/configuration/stories.rb +0 -7
  258. data/stories/example_groups/stories.rb +0 -7
  259. data/stories/helper.rb +0 -6
  260. data/stories/interop/stories.rb +0 -7
  261. data/stories/mock_framework_integration/stories.rb +0 -7
  262. data/stories/pending_stories/README +0 -3
  263. data/stories/resources/spec/before_blocks_example.rb +0 -32
  264. data/stories/resources/spec/spec_with_flexmock.rb +0 -18
  265. data/stories/resources/steps/running_rspec.rb +0 -50
  266. data/stories/resources/stories/failing_story.rb +0 -15
  267. data/stories/stories/multiline_steps.story +0 -23
  268. data/stories/stories/steps/multiline_steps.rb +0 -13
  269. data/stories/stories/stories.rb +0 -6
@@ -16,12 +16,8 @@ module Spec
16
16
  describe("ExampleGroup")
17
17
  it "does nothing"
18
18
  end
19
- class << example_group
20
- public :include
21
- end
22
- @result = nil
23
19
  end
24
-
20
+
25
21
  after(:each) do
26
22
  ExampleGroup.reset
27
23
  end
@@ -29,95 +25,88 @@ module Spec
29
25
  ["describe","context"].each do |method|
30
26
  describe "##{method}" do
31
27
  describe "when creating an ExampleGroup" do
32
- attr_reader :child_example_group
33
- before do
34
- @child_example_group = @example_group.send method, "Another ExampleGroup" do
35
- it "should pass" do
36
- true.should be_true
37
- end
28
+ before(:each) do
29
+ @parent_example_group = Class.new(ExampleGroup) do
30
+ example "first example" do; end
31
+ end
32
+ @child_example_group = @parent_example_group.__send__ method, "Child" do
33
+ example "second example" do; end
38
34
  end
39
35
  end
40
36
 
41
37
  it "should create a subclass of the ExampleGroup when passed a block" do
42
- child_example_group.superclass.should == @example_group
43
- @options.example_groups.should include(child_example_group)
38
+ @child_example_group.superclass.should == @parent_example_group
39
+ options.example_groups.should include(@child_example_group)
44
40
  end
45
41
 
46
42
  it "should not inherit examples" do
47
- child_example_group.examples.length.should == 1
43
+ @child_example_group.should have(1).examples
44
+ end
45
+
46
+ it "records the spec path" do
47
+ @child_example_group.spec_path.should =~ /#{__FILE__}:#{__LINE__ - 15}/
48
48
  end
49
49
  end
50
50
 
51
51
  describe "when creating a SharedExampleGroup" do
52
- attr_reader :name, :shared_example_group
53
- before do
54
- @name = "A Shared ExampleGroup"
55
- @shared_example_group = @example_group.send method, name, :shared => true do
56
- it "should pass" do
57
- true.should be_true
58
- end
59
- end
52
+ before(:each) do
53
+ @shared_example_group = @example_group.__send__ method, "A Shared ExampleGroup", :shared => true do; end
60
54
  end
61
55
 
62
- after do
63
- SharedExampleGroup.shared_example_groups.delete_if do |registered_shared_example_group|
64
- registered_shared_example_group == shared_example_group
65
- end
56
+ after(:each) do
57
+ SharedExampleGroup.instance_eval{@shared_example_groups}.delete @shared_example_group
66
58
  end
67
59
 
68
60
  it "should create a SharedExampleGroup" do
69
- SharedExampleGroup.find_shared_example_group(name).should == shared_example_group
61
+ @shared_example_group.should_not be_nil
62
+ SharedExampleGroup.find("A Shared ExampleGroup").should == @shared_example_group
70
63
  end
71
64
  end
72
65
 
73
66
  end
74
67
  end
75
-
76
- describe "#it" do
77
- it "should should create an example instance" do
78
- lambda {
79
- @example_group.it("")
80
- }.should change { @example_group.examples.length }.by(1)
68
+
69
+ [:specify, :it].each do |method|
70
+ describe "##{method.to_s}" do
71
+ it "should should create an example" do
72
+ lambda {
73
+ @example_group.__send__(method, "")
74
+ }.should change { @example_group.examples.length }.by(1)
75
+ end
81
76
  end
82
77
  end
78
+
79
+ [:xit, :xspecify].each do |method|
80
+ describe "##{method.to_s}" do
81
+ before(:each) do
82
+ Kernel.stub!(:warn)
83
+ end
83
84
 
84
- describe "#xit and #xspecify" do
85
- before(:each) do
86
- Kernel.stub!(:warn)
87
- end
88
-
89
- it "should NOT create an example instance" do
90
- lambda {
91
- @example_group.xit("")
92
- }.should_not change(@example_group.examples, :length)
93
-
94
- lambda {
95
- @example_group.xspecify("")
96
- }.should_not change(@example_group.examples, :length)
97
- end
85
+ it "should NOT create an example" do
86
+ lambda {
87
+ @example_group.__send__(method,"")
88
+ }.should_not change(@example_group.examples, :length)
89
+ end
98
90
 
99
- it "should warn that it is disabled" do
100
- Kernel.should_receive(:warn).with("Example disabled: foo").twice
101
- @example_group.xit("foo")
102
- @example_group.xspecify("foo")
91
+ it "should warn that the example is disabled" do
92
+ Kernel.should_receive(:warn).with("Example disabled: foo")
93
+ @example_group.__send__(method,"foo")
94
+ end
103
95
  end
104
96
  end
97
+
105
98
 
106
99
  describe "#examples" do
107
100
  it "should have Examples" do
108
101
  example_group = Class.new(ExampleGroup) do
109
- describe('example')
110
- it "should pass" do
111
- 1.should == 1
112
- end
102
+ it "should exist" do; end
113
103
  end
114
104
  example_group.examples.length.should == 1
115
- example_group.examples.first.description.should == "should pass"
105
+ example_group.examples.first.description.should == "should exist"
116
106
  end
117
107
 
118
108
  it "should not include methods that begin with test (only when TU interop is loaded)" do
119
109
  example_group = Class.new(ExampleGroup) do
120
- describe('example')
121
110
  def test_any_args(*args)
122
111
  true.should be_true
123
112
  end
@@ -135,12 +124,11 @@ module Spec
135
124
  end
136
125
  end
137
126
  example_group.examples.length.should == 1
138
- example_group.run.should be_true
127
+ example_group.run(options).should be_true
139
128
  end
140
129
 
141
130
  it "should include methods that begin with should and has an arity of 0 in suite" do
142
131
  example_group = Class.new(ExampleGroup) do
143
- describe('example')
144
132
  def shouldCamelCase
145
133
  true.should be_true
146
134
  end
@@ -160,20 +148,21 @@ module Spec
160
148
  raise "This is not a real example"
161
149
  end
162
150
  end
163
- example_group = example_group.dup
164
- example_group.examples.length.should == 4
165
- descriptions = example_group.examples.collect {|example| example.description}.sort
166
- descriptions.should include("shouldCamelCase")
167
- descriptions.should include("should_any_args")
168
- descriptions.should include("should_something")
169
- descriptions.should include("should_not_something")
170
- descriptions.should_not include("should")
171
- descriptions.should_not include("should_not")
151
+ example_group.should have(4).examples
152
+ descriptions = example_group.examples.collect {|example| example.description.to_s}
153
+ descriptions.should include(
154
+ "shouldCamelCase",
155
+ "should_any_args",
156
+ "should_something",
157
+ "should_not_something")
158
+ descriptions.should_not include(
159
+ "should",
160
+ "should_not"
161
+ )
172
162
  end
173
163
 
174
164
  it "should not include methods that begin with test_ and has an arity > 0 in suite" do
175
165
  example_group = Class.new(ExampleGroup) do
176
- describe('example')
177
166
  def test_invalid(foo)
178
167
  1.should == 1
179
168
  end
@@ -181,12 +170,11 @@ module Spec
181
170
  1.should == 1
182
171
  end
183
172
  end
184
- example_group.examples.length.should == 0
173
+ example_group.should have(:no).examples
185
174
  end
186
175
 
187
176
  it "should not include methods that begin with should_ and has an arity > 0 in suite" do
188
177
  example_group = Class.new(ExampleGroup) do
189
- describe('example')
190
178
  def should_invalid(foo)
191
179
  1.should == 2
192
180
  end
@@ -200,8 +188,8 @@ module Spec
200
188
  1.should == 1
201
189
  end
202
190
  end
203
- example_group.examples.length.should == 1
204
- example_group.run.should be_true
191
+ example_group.should have(1).examples
192
+ example_group.run(options).should be_true
205
193
  end
206
194
 
207
195
  it "should run should_methods" do
@@ -210,8 +198,8 @@ module Spec
210
198
  1.should == 2
211
199
  end
212
200
  end
213
- example_group.examples.length.should == 1
214
- example_group.run.should be_false
201
+ example_group.should have(1).examples
202
+ example_group.run(options).should be_false
215
203
  end
216
204
  end
217
205
 
@@ -223,7 +211,7 @@ module Spec
223
211
  end
224
212
  end
225
213
 
226
- describe "#set_description(String)" do
214
+ describe "given a String" do
227
215
  before(:each) do
228
216
  example_group.set_description("abc")
229
217
  end
@@ -237,7 +225,7 @@ module Spec
237
225
  end
238
226
  end
239
227
 
240
- describe "#set_description(Type)" do
228
+ describe "given a Class" do
241
229
  before(:each) do
242
230
  example_group.set_description(ExampleGroup)
243
231
  end
@@ -251,7 +239,7 @@ module Spec
251
239
  end
252
240
  end
253
241
 
254
- describe "#set_description(String, Type)" do
242
+ describe "given a String and a Class" do
255
243
  before(:each) do
256
244
  example_group.set_description("behaving", ExampleGroup)
257
245
  end
@@ -265,7 +253,7 @@ module Spec
265
253
  end
266
254
  end
267
255
 
268
- describe "#set_description(Type, String not starting with a space)" do
256
+ describe "given a Class and a String (starting with an alpha char)" do
269
257
  before(:each) do
270
258
  example_group.set_description(ExampleGroup, "behaving")
271
259
  end
@@ -275,7 +263,7 @@ module Spec
275
263
  end
276
264
  end
277
265
 
278
- describe "#set_description(Type, String starting with .)" do
266
+ describe "given a Class and a String (starting with a '.')" do
279
267
  before(:each) do
280
268
  example_group.set_description(ExampleGroup, ".behaving")
281
269
  end
@@ -285,27 +273,27 @@ module Spec
285
273
  end
286
274
  end
287
275
 
288
- describe "#set_description(Type, String containing .)" do
276
+ describe "#set_description(Class, String starting with #)" do
289
277
  before(:each) do
290
- example_group.set_description(ExampleGroup, "calling a.b")
278
+ example_group.set_description(ExampleGroup, "#behaving")
291
279
  end
292
280
 
293
- specify ".description should return the Type then space then String" do
294
- example_group.description.should == "Spec::Example::ExampleGroup calling a.b"
281
+ specify "should return the Class then String" do
282
+ example_group.description.should == "Spec::Example::ExampleGroup#behaving"
295
283
  end
296
284
  end
297
285
 
298
- describe "#set_description(Type, String starting with .)" do
286
+ describe "#set_description(Class, String containing .)" do
299
287
  before(:each) do
300
- example_group.set_description(ExampleGroup, ".behaving")
288
+ example_group.set_description(ExampleGroup, "calling a.b")
301
289
  end
302
290
 
303
- specify "should return the Type then String" do
304
- example_group.description.should == "Spec::Example::ExampleGroup.behaving"
291
+ specify ".description should return the Type then space then String" do
292
+ example_group.description.should == "Spec::Example::ExampleGroup calling a.b"
305
293
  end
306
294
  end
307
295
 
308
- describe "#set_description(Type, String containing .)" do
296
+ describe "#set_description(Class, String containing #)" do
309
297
  before(:each) do
310
298
  example_group.set_description(ExampleGroup, "is #1")
311
299
  end
@@ -377,7 +365,11 @@ module Spec
377
365
  end
378
366
 
379
367
  it "should return an Array of the description args from each class in the hierarchy" do
380
- child_example_group = Class.new(example_group)
368
+ parent_example_group = Class.new(ExampleGroup) do
369
+ describe("Parent")
370
+ end
371
+
372
+ child_example_group = Class.new(parent_example_group)
381
373
  child_example_group.describe("Child", ExampleGroup)
382
374
  child_example_group.description.should_not be_empty
383
375
 
@@ -386,7 +378,7 @@ module Spec
386
378
  grand_child_example_group.description.should_not be_empty
387
379
 
388
380
  grand_child_example_group.description_parts.should == [
389
- "ExampleGroup",
381
+ "Parent",
390
382
  "Child",
391
383
  Spec::Example::ExampleGroup,
392
384
  "GrandChild",
@@ -417,64 +409,49 @@ module Spec
417
409
  describe "#remove_after" do
418
410
  it "should unregister a given after(:each) block" do
419
411
  after_all_ran = false
420
- @example_group.it("example") {}
421
412
  proc = Proc.new { after_all_ran = true }
422
- ExampleGroup.after(:each, &proc)
423
- @example_group.run
413
+
414
+ example_group = Class.new(ExampleGroup) do
415
+ specify("example") {}
416
+ after(:each, &proc)
417
+ end
418
+
419
+ example_group.run(options)
424
420
  after_all_ran.should be_true
425
421
 
426
422
  after_all_ran = false
427
- ExampleGroup.remove_after(:each, &proc)
428
- @example_group.run
423
+ example_group.remove_after(:each, &proc)
424
+ example_group.run(options)
429
425
  after_all_ran.should be_false
430
426
  end
431
427
  end
432
428
 
433
429
  describe "#include" do
434
430
  it "should have accessible class methods from included module" do
435
- mod1_method_called = false
436
- mod1 = Module.new do
437
- extend Spec::MetaClass
431
+ mod_method_called = false
432
+ mod = Module.new do
438
433
  class_methods = Module.new do
439
- define_method :mod1_method do
440
- mod1_method_called = true
434
+ define_method :mod_method do
435
+ mod_method_called = true
441
436
  end
442
437
  end
443
438
 
444
- metaclass.class_eval do
439
+ self.class.class_eval do
445
440
  define_method(:included) do |receiver|
446
441
  receiver.extend class_methods
447
442
  end
448
443
  end
449
444
  end
450
445
 
451
- mod2_method_called = false
452
- mod2 = Module.new do
453
- extend Spec::MetaClass
454
- class_methods = Module.new do
455
- define_method :mod2_method do
456
- mod2_method_called = true
457
- end
458
- end
459
-
460
- metaclass.class_eval do
461
- define_method(:included) do |receiver|
462
- receiver.extend class_methods
463
- end
464
- end
465
- end
446
+ @example_group.__send__ :include, mod
466
447
 
467
- @example_group.include mod1, mod2
468
-
469
- @example_group.mod1_method
470
- @example_group.mod2_method
471
- mod1_method_called.should be_true
472
- mod2_method_called.should be_true
448
+ @example_group.mod_method
449
+ mod_method_called.should be_true
473
450
  end
474
451
  end
475
452
 
476
453
  describe "#number_of_examples" do
477
- it "should count number of specs" do
454
+ it "should count number of examples" do
478
455
  proc do
479
456
  @example_group.it("one") {}
480
457
  @example_group.it("two") {}
@@ -487,58 +464,54 @@ module Spec
487
464
  describe "#class_eval" do
488
465
  it "should allow constants to be defined" do
489
466
  example_group = Class.new(ExampleGroup) do
490
- describe('example')
491
467
  FOO = 1
492
468
  it "should reference FOO" do
493
469
  FOO.should == 1
494
470
  end
495
471
  end
496
- example_group.run
472
+ success = example_group.run(options)
473
+ success.should be_true
497
474
  Object.const_defined?(:FOO).should == false
498
475
  end
499
476
  end
500
477
 
501
478
  describe '#register' do
479
+ after(:each) do
480
+ Spec::Runner.options.remove_example_group example_group
481
+ end
502
482
  it "should add ExampleGroup to set of ExampleGroups to be run" do
503
- options.example_groups.delete(example_group)
504
- options.example_groups.should_not include(example_group)
505
-
506
- example_group.register {}
483
+ Spec::Runner.options.add_example_group example_group
507
484
  options.example_groups.should include(example_group)
508
485
  end
509
486
  end
510
487
 
511
488
  describe '#unregister' do
512
- before do
513
- options.example_groups.should include(example_group)
489
+ before(:each) do
490
+ Spec::Runner.options.add_example_group example_group
514
491
  end
515
-
516
492
  it "should remove ExampleGroup from set of ExampleGroups to be run" do
517
- example_group.unregister
493
+ Spec::Runner.options.remove_example_group example_group
518
494
  options.example_groups.should_not include(example_group)
519
495
  end
520
496
  end
521
-
522
- describe "#registration_backtrace" do
523
- it "returns the backtrace of where the ExampleGroup was registered" do
524
- example_group = Class.new(ExampleGroup)
525
- example_group.registration_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
526
- end
527
- end
528
497
 
529
498
  describe "#run" do
530
- it "should add_example_group if there are any examples to run" do
531
- example_group = Class.new(ExampleGroup) do
532
- it "should do something" do end
499
+ describe "given an example group with at least one example" do
500
+ it "should call add_example_group" do
501
+ example_group = Class.new(ExampleGroup) do
502
+ example("anything") {}
503
+ end
504
+ reporter.should_receive(:add_example_group)
505
+ example_group.run(options)
533
506
  end
534
- reporter.should_receive(:add_example_group)
535
- example_group.run
536
507
  end
537
508
 
538
- it "should NOT add_example_group if there are no examples to run" do
539
- example_group = Class.new(ExampleGroup) do end
540
- reporter.should_not_receive(:add_example_group)
541
- example_group.run
509
+ describe "given an example group with no examples" do
510
+ it "should NOT call add_example_group" do
511
+ example_group = Class.new(ExampleGroup) do end
512
+ reporter.should_not_receive(:add_example_group)
513
+ example_group.run(options)
514
+ end
542
515
  end
543
516
  end
544
517
 
@@ -546,13 +519,11 @@ module Spec
546
519
  it "should call new and matches? on the class used for matching examples" do
547
520
  example_group = Class.new(ExampleGroup) do
548
521
  it "should do something" do end
549
- class << self
550
- def specified_examples
551
- ["something"]
552
- end
553
- def to_s
554
- "TestMatcher"
555
- end
522
+ def self.specified_examples
523
+ ["something"]
524
+ end
525
+ def self.to_s
526
+ "TestMatcher"
556
527
  end
557
528
  end
558
529
 
@@ -560,12 +531,12 @@ module Spec
560
531
  matcher.should_receive(:matches?).with(["something"]).any_number_of_times
561
532
 
562
533
  matcher_class = Class.new
563
- matcher_class.should_receive(:new).with("TestMatcher", "should do something").twice.and_return(matcher)
534
+ matcher_class.should_receive(:new).with("TestMatcher", "should do something").and_return(matcher)
564
535
 
565
536
  begin
566
537
  ExampleGroupMethods.matcher_class = matcher_class
567
538
 
568
- example_group.run
539
+ example_group.run(options)
569
540
  ensure
570
541
  ExampleGroupMethods.matcher_class = ExampleMatcher
571
542
  end
@@ -578,7 +549,86 @@ module Spec
578
549
  group.options[:this].should == 'hash'
579
550
  end
580
551
  end
552
+
553
+ describe "#backtrace" do
554
+ it "returns the backtrace from where the example group was defined" do
555
+ example_group = Class.new(ExampleGroup).describe("foo") do
556
+ example "bar" do; end
557
+ end
558
+ example_group.backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-3}")
559
+ end
560
+ end
561
+
562
+ describe "#example_group_backtrace (deprecated)" do
563
+ before(:each) do
564
+ Kernel.stub!(:warn)
565
+ end
566
+ it "sends a deprecation warning" do
567
+ example_group = Class.new(ExampleGroup) {}
568
+ Kernel.should_receive(:warn).with(/#example_group_backtrace.*deprecated.*#backtrace instead/m)
569
+ example_group.example_group_backtrace
570
+ end
571
+
572
+ it "returns the backtrace from where the example group was defined" do
573
+ example_group = Class.new(ExampleGroup).describe("foo") do
574
+ example "bar" do; end
575
+ end
576
+ example_group.example_group_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-3}")
577
+ end
578
+ end
579
+
580
+ describe "#before" do
581
+ it "stores before(:each) blocks" do
582
+ example_group = Class.new(ExampleGroup) {}
583
+ block = lambda {}
584
+ example_group.before(:each, &block)
585
+ example_group.before_each_parts.should include(block)
586
+ end
587
+
588
+ it "stores before(:all) blocks" do
589
+ example_group = Class.new(ExampleGroup) {}
590
+ block = lambda {}
591
+ example_group.before(:all, &block)
592
+ example_group.before_all_parts.should include(block)
593
+ end
594
+
595
+ it "stores before(:suite) blocks" do
596
+ example_group = Class.new(ExampleGroup) {}
597
+ parts = []
598
+ ExampleGroupMethods.stub!(:before_suite_parts).and_return(parts)
599
+ block = lambda {}
600
+ example_group.before(:suite, &block)
601
+ example_group.before_suite_parts.should include(block)
602
+ end
603
+ end
604
+
605
+
606
+ describe "#after" do
607
+ it "stores after(:each) blocks" do
608
+ example_group = Class.new(ExampleGroup) {}
609
+ block = lambda {}
610
+ example_group.after(:each, &block)
611
+ example_group.after_each_parts.should include(block)
612
+ end
613
+
614
+ it "stores after(:all) blocks" do
615
+ example_group = Class.new(ExampleGroup) {}
616
+ block = lambda {}
617
+ example_group.after(:all, &block)
618
+ example_group.after_all_parts.should include(block)
619
+ end
620
+
621
+ it "stores after(:suite) blocks" do
622
+ example_group = Class.new(ExampleGroup) {}
623
+ parts = []
624
+ ExampleGroupMethods.stub!(:after_suite_parts).and_return(parts)
625
+ block = lambda {}
626
+ example_group.after(:suite, &block)
627
+ example_group.after_suite_parts.should include(block)
628
+ end
629
+ end
630
+
581
631
  end
582
632
  end
583
633
  end
584
- end
634
+ end