rspec 1.1.11 → 1.1.12

Sign up to get free protection for your applications and to get access to all the features.
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