rspec 0.7.5.1 → 0.8.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 (194) hide show
  1. data/CHANGES +60 -1
  2. data/EXAMPLES.rd +38 -19
  3. data/MIT-LICENSE +1 -1
  4. data/README +24 -17
  5. data/RELEASE-PLAN +117 -0
  6. data/Rakefile +24 -18
  7. data/TODO.0.8.0 +5 -0
  8. data/examples/auto_spec_name_generation_example.rb +18 -0
  9. data/examples/custom_expectation_matchers.rb +53 -0
  10. data/examples/dynamic_spec.rb +9 -0
  11. data/examples/io_processor_spec.rb +2 -2
  12. data/examples/mocking_example.rb +4 -4
  13. data/examples/partial_mock_example.rb +2 -2
  14. data/examples/predicate_example.rb +2 -2
  15. data/examples/stack_spec.rb +32 -36
  16. data/examples/stubbing_example.rb +19 -19
  17. data/examples/test_case_spec.rb +6 -6
  18. data/lib/spec.rb +3 -0
  19. data/lib/spec/callback.rb +8 -0
  20. data/lib/spec/callback/extensions/object.rb +4 -0
  21. data/lib/spec/deprecated.rb +3 -0
  22. data/lib/spec/expectations.rb +44 -17
  23. data/lib/spec/expectations/extensions.rb +1 -2
  24. data/lib/spec/expectations/extensions/object.rb +78 -130
  25. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  26. data/lib/spec/expectations/handler.rb +47 -0
  27. data/lib/spec/expectations/should/base.rb +32 -29
  28. data/lib/spec/expectations/should/change.rb +1 -1
  29. data/lib/spec/expectations/should/have.rb +9 -17
  30. data/lib/spec/expectations/should/not.rb +54 -56
  31. data/lib/spec/expectations/should/should.rb +59 -65
  32. data/lib/spec/expectations/sugar.rb +27 -4
  33. data/lib/spec/matchers.rb +160 -0
  34. data/lib/spec/matchers/be.rb +161 -0
  35. data/lib/spec/matchers/be_close.rb +37 -0
  36. data/lib/spec/matchers/change.rb +120 -0
  37. data/lib/spec/matchers/eql.rb +43 -0
  38. data/lib/spec/matchers/equal.rb +43 -0
  39. data/lib/spec/matchers/has.rb +44 -0
  40. data/lib/spec/matchers/have.rb +140 -0
  41. data/lib/spec/matchers/include.rb +50 -0
  42. data/lib/spec/matchers/match.rb +41 -0
  43. data/lib/spec/matchers/raise_error.rb +100 -0
  44. data/lib/spec/matchers/respond_to.rb +35 -0
  45. data/lib/spec/matchers/satisfy.rb +47 -0
  46. data/lib/spec/matchers/throw_symbol.rb +75 -0
  47. data/lib/spec/mocks.rb +224 -1
  48. data/lib/spec/mocks/argument_expectation.rb +16 -2
  49. data/lib/spec/mocks/error_generator.rb +5 -3
  50. data/lib/spec/mocks/errors.rb +2 -2
  51. data/lib/spec/mocks/extensions/object.rb +1 -1
  52. data/lib/spec/mocks/message_expectation.rb +29 -19
  53. data/lib/spec/mocks/{mock_methods.rb → methods.rb} +5 -5
  54. data/lib/spec/mocks/mock.rb +2 -2
  55. data/lib/spec/mocks/mock_handler.rb +81 -68
  56. data/lib/spec/rake/spectask.rb +7 -12
  57. data/lib/spec/rake/verify_rcov.rb +1 -1
  58. data/lib/spec/runner.rb +117 -0
  59. data/lib/spec/runner/command_line.rb +8 -5
  60. data/lib/spec/runner/context.rb +13 -37
  61. data/lib/spec/runner/context_eval.rb +4 -3
  62. data/lib/spec/runner/context_runner.rb +7 -4
  63. data/lib/spec/runner/drb_command_line.rb +1 -1
  64. data/lib/spec/runner/execution_context.rb +3 -11
  65. data/lib/spec/runner/extensions/kernel.rb +7 -5
  66. data/lib/spec/runner/extensions/object.rb +4 -1
  67. data/lib/spec/runner/formatter/base_text_formatter.rb +11 -3
  68. data/lib/spec/runner/formatter/html_formatter.rb +21 -10
  69. data/lib/spec/runner/heckle_runner.rb +24 -8
  70. data/lib/spec/runner/heckle_runner_win.rb +10 -0
  71. data/lib/spec/runner/option_parser.rb +58 -13
  72. data/lib/spec/runner/spec_matcher.rb +22 -29
  73. data/lib/spec/runner/spec_parser.rb +1 -0
  74. data/lib/spec/runner/specification.rb +36 -22
  75. data/lib/spec/translator.rb +87 -0
  76. data/lib/spec/version.rb +16 -7
  77. data/spec/spec/callback/callback_container_spec.rb +27 -0
  78. data/spec/spec/callback/module_spec.rb +37 -0
  79. data/spec/spec/callback/object_spec.rb +90 -0
  80. data/spec/spec/callback/object_with_class_callback_spec.rb +19 -0
  81. data/spec/spec/expectations/differs/default_spec.rb +107 -0
  82. data/spec/spec/expectations/extensions/object_spec.rb +46 -0
  83. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  84. data/spec/spec/expectations/should/should_==_spec.rb +19 -0
  85. data/spec/spec/expectations/should/should_=~_spec.rb +13 -0
  86. data/spec/spec/expectations/should/should_be_a_kind_of_spec.rb +21 -0
  87. data/spec/spec/expectations/should/should_be_an_instance_of_spec.rb +30 -0
  88. data/spec/spec/expectations/should/should_be_arbitrary_predicate_spec.rb +81 -0
  89. data/spec/spec/expectations/should/should_be_close_spec.rb +18 -0
  90. data/spec/spec/expectations/should/should_be_comparison_operator_spec.rb +44 -0
  91. data/spec/spec/expectations/should/should_be_false_spec.rb +39 -0
  92. data/spec/spec/expectations/should/should_be_spec.rb +11 -0
  93. data/spec/spec/expectations/should/should_be_true_spec.rb +27 -0
  94. data/spec/spec/expectations/should/should_change_spec.rb +184 -0
  95. data/spec/spec/expectations/should/should_eql_spec.rb +11 -0
  96. data/spec/spec/expectations/should/should_equal_spec.rb +11 -0
  97. data/spec/spec/expectations/should/should_have_at_least_spec.rb +53 -0
  98. data/spec/spec/expectations/should/should_have_at_most_spec.rb +45 -0
  99. data/spec/spec/expectations/should/should_have_key_spec.rb +21 -0
  100. data/spec/spec/expectations/should/should_have_spec.rb +64 -0
  101. data/spec/spec/expectations/should/should_include_spec.rb +59 -0
  102. data/spec/spec/expectations/should/should_match_spec.rb +25 -0
  103. data/spec/spec/expectations/should/should_not_==_spec.rb +15 -0
  104. data/spec/spec/expectations/should/should_not_be_a_kind_of_spec.rb +21 -0
  105. data/spec/spec/expectations/should/should_not_be_an_instance_of_spec.rb +11 -0
  106. data/spec/spec/expectations/should/should_not_be_arbitrary_predicate_spec.rb +68 -0
  107. data/spec/spec/expectations/should/should_not_be_spec.rb +11 -0
  108. data/spec/spec/expectations/should/should_not_change_spec.rb +24 -0
  109. data/spec/spec/expectations/should/should_not_eql_spec.rb +11 -0
  110. data/spec/spec/expectations/should/should_not_equal_spec.rb +11 -0
  111. data/spec/spec/expectations/should/should_not_have_key_spec.rb +15 -0
  112. data/spec/spec/expectations/should/should_not_include_spec.rb +58 -0
  113. data/spec/spec/expectations/should/should_not_match_spec.rb +11 -0
  114. data/spec/spec/expectations/should/should_not_raise_spec.rb +75 -0
  115. data/spec/spec/expectations/should/should_not_respond_to_spec.rb +15 -0
  116. data/spec/spec/expectations/should/should_not_throw_spec.rb +35 -0
  117. data/spec/spec/expectations/should/should_raise_spec.rb +66 -0
  118. data/spec/spec/expectations/should/should_respond_to_spec.rb +15 -0
  119. data/spec/spec/expectations/should/should_satisfy_spec.rb +35 -0
  120. data/spec/spec/expectations/should/should_throw_spec.rb +27 -0
  121. data/spec/spec/matchers/be_close_spec.rb +33 -0
  122. data/spec/spec/matchers/be_spec.rb +182 -0
  123. data/spec/spec/matchers/change_spec.rb +232 -0
  124. data/spec/spec/matchers/description_generation_spec.rb +147 -0
  125. data/spec/spec/matchers/eql_spec.rb +41 -0
  126. data/spec/spec/matchers/equal_spec.rb +41 -0
  127. data/spec/spec/matchers/handler_spec.rb +75 -0
  128. data/spec/spec/matchers/has_spec.rb +37 -0
  129. data/spec/spec/matchers/have_spec.rb +259 -0
  130. data/spec/spec/matchers/include_spec.rb +33 -0
  131. data/spec/spec/matchers/match_spec.rb +37 -0
  132. data/spec/spec/matchers/matcher_methods_spec.rb +85 -0
  133. data/spec/spec/matchers/raise_error_spec.rb +147 -0
  134. data/spec/spec/matchers/respond_to_spec.rb +30 -0
  135. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  136. data/spec/spec/matchers/throw_symbol_spec.rb +59 -0
  137. data/spec/spec/mocks/any_number_of_times_spec.rb +34 -0
  138. data/spec/spec/mocks/at_least_spec.rb +97 -0
  139. data/spec/spec/mocks/at_most_spec.rb +97 -0
  140. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  141. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  142. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  143. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  144. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +74 -0
  145. data/spec/spec/mocks/mock_ordering_spec.rb +80 -0
  146. data/spec/spec/mocks/mock_spec.rb +407 -0
  147. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  148. data/spec/spec/mocks/null_object_mock_spec.rb +40 -0
  149. data/spec/spec/mocks/once_counts_spec.rb +56 -0
  150. data/spec/spec/mocks/options_hash_spec.rb +31 -0
  151. data/spec/spec/mocks/partial_mock_spec.rb +52 -0
  152. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +64 -0
  153. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +92 -0
  154. data/spec/spec/mocks/precise_counts_spec.rb +56 -0
  155. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  156. data/spec/spec/mocks/stub_spec.rb +159 -0
  157. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  158. data/spec/spec/runner/command_line_spec.rb +32 -0
  159. data/spec/spec/runner/context_matching_spec.rb +28 -0
  160. data/spec/spec/runner/context_runner_spec.rb +100 -0
  161. data/spec/spec/runner/context_spec.rb +405 -0
  162. data/spec/spec/runner/drb_command_line_spec.rb +74 -0
  163. data/spec/spec/runner/execution_context_spec.rb +52 -0
  164. data/spec/spec/runner/formatter/html_formatter_spec.rb +40 -0
  165. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +21 -0
  166. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +36 -0
  167. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +78 -0
  168. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +18 -0
  169. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +41 -0
  170. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +21 -0
  171. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +46 -0
  172. data/spec/spec/runner/heckle_runner_spec.rb +63 -0
  173. data/spec/spec/runner/heckler_spec.rb +14 -0
  174. data/spec/spec/runner/kernel_ext_spec.rb +16 -0
  175. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  176. data/spec/spec/runner/object_ext_spec.rb +11 -0
  177. data/spec/spec/runner/option_parser_spec.rb +269 -0
  178. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +47 -0
  179. data/spec/spec/runner/reporter_spec.rb +126 -0
  180. data/spec/spec/runner/spec_matcher_spec.rb +107 -0
  181. data/spec/spec/runner/spec_name_generation_spec.rb +102 -0
  182. data/spec/spec/runner/spec_parser_spec.rb +37 -0
  183. data/spec/spec/runner/specification_class_spec.rb +72 -0
  184. data/spec/spec/runner/specification_instance_spec.rb +160 -0
  185. data/spec/spec/runner/specification_should_raise_spec.rb +136 -0
  186. data/spec/spec/spec_classes.rb +102 -0
  187. data/spec/spec/translator_spec.rb +79 -0
  188. data/spec/spec_helper.rb +35 -0
  189. metadata +141 -9
  190. data/bin/drbspec +0 -3
  191. data/lib/spec/expectations/diff.rb +0 -28
  192. data/lib/spec/expectations/extensions/numeric.rb +0 -19
  193. data/lib/spec/expectations/extensions/string.rb +0 -22
  194. data/lib/spec/expectations/message_builder.rb +0 -13
@@ -0,0 +1,74 @@
1
+ require 'stringio'
2
+ require 'rbconfig'
3
+
4
+ context "DrbCommandLine without running local server" do
5
+
6
+ unless Config::CONFIG['ruby_install_name'] == 'jruby'
7
+ specify "should print error when there is no running local server" do
8
+ err = StringIO.new
9
+ out = StringIO.new
10
+ Spec::Runner::DrbCommandLine.run(['--version'], err, out, false)
11
+
12
+ err.rewind
13
+ err.read.should =~ /No server is running/
14
+ end
15
+ end
16
+ end
17
+
18
+ context "DrbCommandLine with local server" do
19
+
20
+ unless Config::CONFIG['ruby_install_name'] == 'jruby'
21
+ context_setup do
22
+ create_dummy_spec_file
23
+ DRb.start_service("druby://localhost:8989", Spec::Runner::CommandLine)
24
+ end
25
+
26
+ context_teardown do
27
+ DRb.stop_service
28
+ File.delete(@dummy_spec_filename)
29
+ end
30
+
31
+ specify "should run against local server" do
32
+ out = run_spec_via_druby(['--version'])
33
+ out.should =~ /RSpec/n
34
+ end
35
+
36
+ specify "should output green colorized text when running with --colour option" do
37
+ out = run_spec_via_druby(["--colour", @dummy_spec_filename])
38
+ out.should =~ /\e\[32m/n
39
+ end
40
+
41
+ specify "should output red colorized text when running with -c option" do
42
+ out = run_spec_via_druby(["-c", @dummy_spec_filename])
43
+ out.should =~ /\e\[31m/n
44
+ end
45
+
46
+ def create_dummy_spec_file
47
+ @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + '/_dummy_spec.rb'
48
+ File.open(@dummy_spec_filename, 'w') do |f|
49
+ f.write %{
50
+ context "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do
51
+ specify "should be output with green bar" do
52
+ true.should be(true)
53
+ end
54
+
55
+ specify "should be output with red bar" do
56
+ violated("I wan to see a red bar!")
57
+ end
58
+ end
59
+ }
60
+ end
61
+ end
62
+
63
+ def run_spec_via_druby(args)
64
+ err, out = StringIO.new, StringIO.new
65
+ out.instance_eval do
66
+ def tty?; true end
67
+ end
68
+ Spec::Runner::DrbCommandLine.run(args, err, out, false, true)
69
+ out.rewind; out.read
70
+ end
71
+ end
72
+
73
+ end
74
+
@@ -0,0 +1,52 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ context "ExecutionContext" do
4
+
5
+ specify "should provide duck type" do
6
+ dt = duck_type(:length)
7
+ dt.should be_an_instance_of(Spec::Mocks::DuckTypeArgConstraint)
8
+ dt.matches?([]).should be_true
9
+ end
10
+
11
+ specify "should violate on :violated" do
12
+ lambda do
13
+ Spec::Runner::ExecutionContext.new(nil).violated
14
+ end.should raise_error(Spec::Expectations::ExpectationNotMetError)
15
+ end
16
+
17
+ specify "should provide mock" do
18
+ mock("thing").should be_an_instance_of(Spec::Mocks::Mock)
19
+ end
20
+
21
+ # TODO - the following two specs don't work when combined:
22
+ # specify "should provide stub" do
23
+ # thing_stub = stub("thing", :a => "A", :b => "B").should be_an_instance_of(Spec::Mocks::Mock)
24
+ # thing_stub.a.should == "A"
25
+ # thing_stub.b.should == "B"
26
+ # end
27
+ #
28
+ # TypeError in 'ExecutionContext should provide stub'
29
+ # ["a?", "as?"] is not a symbol
30
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/expectations/should/should.rb:66:in `send'
31
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/expectations/should/should.rb:66:in `__delegate_method_missing_to_target'
32
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/expectations/should/base.rb:53:in `method_missing'
33
+ # ./spec/spec/runner/execution_context_spec.rb:27:
34
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/runner/specification.rb:55:in `execute_spec'
35
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/runner/specification.rb:30:in `run'
36
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/runner/context.rb:57:in `run'
37
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/runner/context.rb:54:in `run'
38
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/runner/context_runner.rb:23:in `run'
39
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/runner/context_runner.rb:22:in `run'
40
+ # /Users/david/projects/ruby/rspec/trunk/rspec/lib/spec/runner/command_line.rb:27:in `run'
41
+ # bin/spec:4:
42
+ specify "should provide stub" do
43
+ thing_stub = stub("thing", :a => "A", :b => "B").should be_an_instance_of(Spec::Mocks::Mock)
44
+ end
45
+
46
+ specify "should add method stubs to stub" do
47
+ thing_stub = stub("thing", :a => "A", :b => "B")
48
+ thing_stub.a.should == "A"
49
+ thing_stub.b.should == "B"
50
+ end
51
+
52
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ require 'stringio'
3
+
4
+ context "HtmlFormatter" do
5
+ specify "should produce HTML identical to the one we designed manually" do
6
+ root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
7
+ expected_file = File.dirname(__FILE__) + "/html_formatted-#{VERSION}.html"
8
+ expected_html = File.read(expected_file)
9
+ raise "There should be no absolute paths in html_formatted.html!!" if expected_html =~ /\/Users/n
10
+
11
+ ['--diff', '--dry-run'].each do |opt|
12
+ Dir.chdir(root) do
13
+ args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/stubbing_example.rb', '--format', 'html', opt]
14
+ err = StringIO.new
15
+ out = StringIO.new
16
+ Spec::Runner::CommandLine.run(
17
+ args,
18
+ err,
19
+ out,
20
+ false
21
+ )
22
+
23
+ seconds = /\d+\.\d+ seconds/
24
+ html = out.string.gsub seconds, 'x seconds'
25
+ expected_html.gsub! seconds, 'x seconds'
26
+
27
+ if opt == '--diff'
28
+ # Uncomment this line temporarily in order to overwrite the expected with actual.
29
+ # Use with care!!!
30
+ # File.open(expected_file, 'w') {|io| io.write(html)}
31
+
32
+ html.should == expected_html
33
+ else
34
+ html.should =~ /This was a dry-run/m
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ context "ProgressBarFormatterDryRun" do
7
+ setup do
8
+ @io = StringIO.new
9
+ @formatter = ProgressBarFormatter.new(@io, true)
10
+
11
+ end
12
+ specify "should not produce summary on dry run" do
13
+ @formatter.dump_summary(3, 2, 1)
14
+ @io.string.should_eql("")
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ context "ProgressBarFormatter failure dump with NoisyBacktraceTweaker" do
7
+ setup do
8
+ @io = StringIO.new
9
+ @reporter = Reporter.new(ProgressBarFormatter.new(@io), NoisyBacktraceTweaker.new)
10
+ @reporter.add_context("context")
11
+ end
12
+
13
+ specify "should end with line break" do
14
+ error=Spec::Expectations::ExpectationNotMetError.new("message")
15
+ set_backtrace(error)
16
+ @reporter.spec_finished("spec", error, "spec")
17
+ @reporter.dump
18
+ @io.string.should_match(/\n\z/)
19
+ end
20
+
21
+ specify "should include context and spec name in backtrace if error in spec" do
22
+ error=RuntimeError.new("message")
23
+ set_backtrace(error)
24
+ @reporter.spec_finished("spec", error, "spec")
25
+ @reporter.dump
26
+ @io.string.should_match(/RuntimeError in 'context spec'/)
27
+ end
28
+
29
+ def set_backtrace(error)
30
+ error.set_backtrace(["/a/b/c/d/e.rb:34:in `whatever'"])
31
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,78 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ context "ProgressBarFormatter" do
7
+ setup do
8
+ @io = StringIO.new
9
+ @formatter = ProgressBarFormatter.new(@io)
10
+ end
11
+
12
+ specify "should produce line break on start dump" do
13
+ @formatter.start_dump
14
+ @io.string.should_eql("\n")
15
+ end
16
+
17
+ specify "should produce standard summary" do
18
+ @formatter.dump_summary(3, 2, 1)
19
+ @io.string.should_eql("\nFinished in 3 seconds\n\n2 specifications, 1 failure\n")
20
+ end
21
+
22
+ specify "should push F for failing spec" do
23
+ @formatter.spec_failed("spec", 98, Reporter::Failure.new("c", "s", RuntimeError.new))
24
+ @io.string.should_eql("F")
25
+ end
26
+
27
+ specify "should push dot for passing spec" do
28
+ @formatter.spec_passed("spec")
29
+ @io.string.should_eql(".")
30
+ end
31
+
32
+ specify "should push line break for context" do
33
+ @formatter.add_context("context", :ignored)
34
+ @io.string.should_eql("\n")
35
+ end
36
+
37
+ specify "should push nothing on start" do
38
+ @formatter.start(4)
39
+ @io.string.should_eql("")
40
+ end
41
+
42
+ specify "should ensure two ':' in the first backtrace" do
43
+ backtrace = ["/tmp/x.rb:1", "/tmp/x.rb:2", "/tmp/x.rb:3"]
44
+ @formatter.format_backtrace(backtrace).should_eql(<<-EOE.rstrip)
45
+ /tmp/x.rb:1:
46
+ /tmp/x.rb:2:
47
+ /tmp/x.rb:3:
48
+ EOE
49
+
50
+ backtrace = ["/tmp/x.rb:1: message", "/tmp/x.rb:2", "/tmp/x.rb:3"]
51
+ @formatter.format_backtrace(backtrace).should_eql(<<-EOE.rstrip)
52
+ /tmp/x.rb:1: message
53
+ /tmp/x.rb:2:
54
+ /tmp/x.rb:3:
55
+ EOE
56
+ end
57
+ end
58
+
59
+ context "ProgressBarFormatter outputting to custom out" do
60
+ setup do
61
+ @out = mock("out")
62
+ @out.stub!(:puts)
63
+ @formatter = ProgressBarFormatter.new(@out)
64
+ @formatter.class.send :public, :output_to_tty?
65
+ end
66
+
67
+ teardown do
68
+ @formatter.class.send :protected, :output_to_tty?
69
+ end
70
+
71
+ specify "should not throw NoMethodError on output_to_tty?" do
72
+ @out.should_receive(:tty?).and_raise(NoMethodError)
73
+ @formatter.output_to_tty?.should be(false)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ context "RdocFormatterDryRun" do
7
+ setup do
8
+ @io = StringIO.new
9
+ @formatter = RdocFormatter.new(@io, true)
10
+ end
11
+ specify "should not produce summary on dry run" do
12
+ @formatter.dump_summary(3, 2, 1)
13
+ @io.string.should_eql ""
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,41 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ context "RdocFormatter" do
7
+ setup do
8
+ @io = StringIO.new
9
+ @formatter = RdocFormatter.new(@io, true)
10
+
11
+ end
12
+ specify "should produce no summary" do
13
+ @formatter.dump_summary(nil, nil, nil)
14
+ @io.string.should_be_empty
15
+
16
+ end
17
+ specify "should produce nothing on start dump" do
18
+ @formatter.start_dump
19
+ @io.string.should_be_empty
20
+
21
+ end
22
+ specify "should push out context" do
23
+ @formatter.add_context("context", :ignored)
24
+ @io.string.should_eql("# context\n")
25
+
26
+ end
27
+ specify "should push out failed spec" do
28
+ @formatter.spec_failed("spec", 98, nil)
29
+ @io.string.should_eql("# * spec [98 - FAILED]\n")
30
+
31
+ end
32
+ specify "should push out spec" do
33
+ @formatter.spec_passed("spec")
34
+ @io.string.should_eql("# * spec\n")
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ context "SpecdocFormatterDryRun" do
7
+ setup do
8
+ @io = StringIO.new
9
+ @formatter = SpecdocFormatter.new(@io, true)
10
+
11
+ end
12
+ specify "should not produce summary on dry run" do
13
+ @formatter.dump_summary(3, 2, 1)
14
+ @io.string.should_eql("")
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,46 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ context "SpecdocFormatter" do
7
+ setup do
8
+ @io = StringIO.new
9
+ @formatter = SpecdocFormatter.new(@io)
10
+
11
+ end
12
+ specify "should produce standard summary" do
13
+ @formatter.dump_summary(3, 2, 1)
14
+ @io.string.should_eql("\nFinished in 3 seconds\n\n2 specifications, 1 failure\n")
15
+
16
+ end
17
+ specify "should push context name" do
18
+ @formatter.add_context("context", :ignored)
19
+ @io.string.should_eql("\ncontext\n")
20
+
21
+ end
22
+ specify "should push failing spec name and failure number" do
23
+ @formatter.spec_failed("spec", 98, Reporter::Failure.new("c", "s", RuntimeError.new))
24
+ @io.string.should_eql("- spec (ERROR - 98)\n")
25
+
26
+ end
27
+ specify "should push nothing on start" do
28
+ @formatter.start(5)
29
+ @io.string.should_eql("")
30
+
31
+ end
32
+ specify "should push nothing on start dump" do
33
+ @formatter.start_dump
34
+ @io.string.should_eql("")
35
+
36
+ end
37
+ specify "should push passing spec name" do
38
+ @formatter.spec_passed("spec")
39
+ @io.string.should_eql("- spec\n")
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,63 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+ unless ['i386-mswin32', 'java'].index(PLATFORM)
3
+ require 'spec/runner/heckle_runner'
4
+
5
+ module Foo
6
+ class Bar
7
+ def one; end
8
+ def two; end
9
+ end
10
+
11
+ class Zap
12
+ def three; end
13
+ def four; end
14
+ end
15
+ end
16
+
17
+ context "HeckleRunner" do
18
+ setup do
19
+ @heckle = mock("heckle", :null_object => true)
20
+ @context_runner = mock("context_runner")
21
+ @heckle_class = mock("heckle_class")
22
+ end
23
+
24
+ specify "should heckle all methods in all classes in a module" do
25
+ @heckle_class.should_receive(:new).with("Foo::Bar", "one", context_runner).and_return(@heckle)
26
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", context_runner).and_return(@heckle)
27
+ @heckle_class.should_receive(:new).with("Foo::Zap", "three", context_runner).and_return(@heckle)
28
+ @heckle_class.should_receive(:new).with("Foo::Zap", "four", context_runner).and_return(@heckle)
29
+
30
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class)
31
+ heckle_runner.heckle_with(context_runner)
32
+ end
33
+
34
+ specify "should heckle all methods in a class" do
35
+ @heckle_class.should_receive(:new).with("Foo::Bar", "one", context_runner).and_return(@heckle)
36
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", context_runner).and_return(@heckle)
37
+
38
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class)
39
+ heckle_runner.heckle_with(context_runner)
40
+ end
41
+
42
+ specify "should fail heckling when the class is not found" do
43
+ lambda do
44
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bob", @heckle_class)
45
+ heckle_runner.heckle_with(context_runner)
46
+ end.should raise_error(StandardError, "Heckling failed - \"Foo::Bob\" is not a known class or module")
47
+ end
48
+
49
+ specify "should heckle specific method in a class (with #)" do
50
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", context_runner).and_return(@heckle)
51
+
52
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class)
53
+ heckle_runner.heckle_with(context_runner)
54
+ end
55
+
56
+ specify "should heckle specific method in a class (with .)" do
57
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", context_runner).and_return(@heckle)
58
+
59
+ heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class)
60
+ heckle_runner.heckle_with(context_runner)
61
+ end
62
+ end
63
+ end