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.
- data/CHANGES +60 -1
- data/EXAMPLES.rd +38 -19
- data/MIT-LICENSE +1 -1
- data/README +24 -17
- data/RELEASE-PLAN +117 -0
- data/Rakefile +24 -18
- data/TODO.0.8.0 +5 -0
- data/examples/auto_spec_name_generation_example.rb +18 -0
- data/examples/custom_expectation_matchers.rb +53 -0
- data/examples/dynamic_spec.rb +9 -0
- data/examples/io_processor_spec.rb +2 -2
- data/examples/mocking_example.rb +4 -4
- data/examples/partial_mock_example.rb +2 -2
- data/examples/predicate_example.rb +2 -2
- data/examples/stack_spec.rb +32 -36
- data/examples/stubbing_example.rb +19 -19
- data/examples/test_case_spec.rb +6 -6
- data/lib/spec.rb +3 -0
- data/lib/spec/callback.rb +8 -0
- data/lib/spec/callback/extensions/object.rb +4 -0
- data/lib/spec/deprecated.rb +3 -0
- data/lib/spec/expectations.rb +44 -17
- data/lib/spec/expectations/extensions.rb +1 -2
- data/lib/spec/expectations/extensions/object.rb +78 -130
- data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/lib/spec/expectations/handler.rb +47 -0
- data/lib/spec/expectations/should/base.rb +32 -29
- data/lib/spec/expectations/should/change.rb +1 -1
- data/lib/spec/expectations/should/have.rb +9 -17
- data/lib/spec/expectations/should/not.rb +54 -56
- data/lib/spec/expectations/should/should.rb +59 -65
- data/lib/spec/expectations/sugar.rb +27 -4
- data/lib/spec/matchers.rb +160 -0
- data/lib/spec/matchers/be.rb +161 -0
- data/lib/spec/matchers/be_close.rb +37 -0
- data/lib/spec/matchers/change.rb +120 -0
- data/lib/spec/matchers/eql.rb +43 -0
- data/lib/spec/matchers/equal.rb +43 -0
- data/lib/spec/matchers/has.rb +44 -0
- data/lib/spec/matchers/have.rb +140 -0
- data/lib/spec/matchers/include.rb +50 -0
- data/lib/spec/matchers/match.rb +41 -0
- data/lib/spec/matchers/raise_error.rb +100 -0
- data/lib/spec/matchers/respond_to.rb +35 -0
- data/lib/spec/matchers/satisfy.rb +47 -0
- data/lib/spec/matchers/throw_symbol.rb +75 -0
- data/lib/spec/mocks.rb +224 -1
- data/lib/spec/mocks/argument_expectation.rb +16 -2
- data/lib/spec/mocks/error_generator.rb +5 -3
- data/lib/spec/mocks/errors.rb +2 -2
- data/lib/spec/mocks/extensions/object.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +29 -19
- data/lib/spec/mocks/{mock_methods.rb → methods.rb} +5 -5
- data/lib/spec/mocks/mock.rb +2 -2
- data/lib/spec/mocks/mock_handler.rb +81 -68
- data/lib/spec/rake/spectask.rb +7 -12
- data/lib/spec/rake/verify_rcov.rb +1 -1
- data/lib/spec/runner.rb +117 -0
- data/lib/spec/runner/command_line.rb +8 -5
- data/lib/spec/runner/context.rb +13 -37
- data/lib/spec/runner/context_eval.rb +4 -3
- data/lib/spec/runner/context_runner.rb +7 -4
- data/lib/spec/runner/drb_command_line.rb +1 -1
- data/lib/spec/runner/execution_context.rb +3 -11
- data/lib/spec/runner/extensions/kernel.rb +7 -5
- data/lib/spec/runner/extensions/object.rb +4 -1
- data/lib/spec/runner/formatter/base_text_formatter.rb +11 -3
- data/lib/spec/runner/formatter/html_formatter.rb +21 -10
- data/lib/spec/runner/heckle_runner.rb +24 -8
- data/lib/spec/runner/heckle_runner_win.rb +10 -0
- data/lib/spec/runner/option_parser.rb +58 -13
- data/lib/spec/runner/spec_matcher.rb +22 -29
- data/lib/spec/runner/spec_parser.rb +1 -0
- data/lib/spec/runner/specification.rb +36 -22
- data/lib/spec/translator.rb +87 -0
- data/lib/spec/version.rb +16 -7
- data/spec/spec/callback/callback_container_spec.rb +27 -0
- data/spec/spec/callback/module_spec.rb +37 -0
- data/spec/spec/callback/object_spec.rb +90 -0
- data/spec/spec/callback/object_with_class_callback_spec.rb +19 -0
- data/spec/spec/expectations/differs/default_spec.rb +107 -0
- data/spec/spec/expectations/extensions/object_spec.rb +46 -0
- data/spec/spec/expectations/fail_with_spec.rb +71 -0
- data/spec/spec/expectations/should/should_==_spec.rb +19 -0
- data/spec/spec/expectations/should/should_=~_spec.rb +13 -0
- data/spec/spec/expectations/should/should_be_a_kind_of_spec.rb +21 -0
- data/spec/spec/expectations/should/should_be_an_instance_of_spec.rb +30 -0
- data/spec/spec/expectations/should/should_be_arbitrary_predicate_spec.rb +81 -0
- data/spec/spec/expectations/should/should_be_close_spec.rb +18 -0
- data/spec/spec/expectations/should/should_be_comparison_operator_spec.rb +44 -0
- data/spec/spec/expectations/should/should_be_false_spec.rb +39 -0
- data/spec/spec/expectations/should/should_be_spec.rb +11 -0
- data/spec/spec/expectations/should/should_be_true_spec.rb +27 -0
- data/spec/spec/expectations/should/should_change_spec.rb +184 -0
- data/spec/spec/expectations/should/should_eql_spec.rb +11 -0
- data/spec/spec/expectations/should/should_equal_spec.rb +11 -0
- data/spec/spec/expectations/should/should_have_at_least_spec.rb +53 -0
- data/spec/spec/expectations/should/should_have_at_most_spec.rb +45 -0
- data/spec/spec/expectations/should/should_have_key_spec.rb +21 -0
- data/spec/spec/expectations/should/should_have_spec.rb +64 -0
- data/spec/spec/expectations/should/should_include_spec.rb +59 -0
- data/spec/spec/expectations/should/should_match_spec.rb +25 -0
- data/spec/spec/expectations/should/should_not_==_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_be_a_kind_of_spec.rb +21 -0
- data/spec/spec/expectations/should/should_not_be_an_instance_of_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_be_arbitrary_predicate_spec.rb +68 -0
- data/spec/spec/expectations/should/should_not_be_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_change_spec.rb +24 -0
- data/spec/spec/expectations/should/should_not_eql_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_equal_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_have_key_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_include_spec.rb +58 -0
- data/spec/spec/expectations/should/should_not_match_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_raise_spec.rb +75 -0
- data/spec/spec/expectations/should/should_not_respond_to_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_throw_spec.rb +35 -0
- data/spec/spec/expectations/should/should_raise_spec.rb +66 -0
- data/spec/spec/expectations/should/should_respond_to_spec.rb +15 -0
- data/spec/spec/expectations/should/should_satisfy_spec.rb +35 -0
- data/spec/spec/expectations/should/should_throw_spec.rb +27 -0
- data/spec/spec/matchers/be_close_spec.rb +33 -0
- data/spec/spec/matchers/be_spec.rb +182 -0
- data/spec/spec/matchers/change_spec.rb +232 -0
- data/spec/spec/matchers/description_generation_spec.rb +147 -0
- data/spec/spec/matchers/eql_spec.rb +41 -0
- data/spec/spec/matchers/equal_spec.rb +41 -0
- data/spec/spec/matchers/handler_spec.rb +75 -0
- data/spec/spec/matchers/has_spec.rb +37 -0
- data/spec/spec/matchers/have_spec.rb +259 -0
- data/spec/spec/matchers/include_spec.rb +33 -0
- data/spec/spec/matchers/match_spec.rb +37 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +85 -0
- data/spec/spec/matchers/raise_error_spec.rb +147 -0
- data/spec/spec/matchers/respond_to_spec.rb +30 -0
- data/spec/spec/matchers/satisfy_spec.rb +36 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +59 -0
- data/spec/spec/mocks/any_number_of_times_spec.rb +34 -0
- data/spec/spec/mocks/at_least_spec.rb +97 -0
- data/spec/spec/mocks/at_most_spec.rb +97 -0
- data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
- data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
- data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +74 -0
- data/spec/spec/mocks/mock_ordering_spec.rb +80 -0
- data/spec/spec/mocks/mock_spec.rb +407 -0
- data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +40 -0
- data/spec/spec/mocks/once_counts_spec.rb +56 -0
- data/spec/spec/mocks/options_hash_spec.rb +31 -0
- data/spec/spec/mocks/partial_mock_spec.rb +52 -0
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +64 -0
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +92 -0
- data/spec/spec/mocks/precise_counts_spec.rb +56 -0
- data/spec/spec/mocks/record_messages_spec.rb +26 -0
- data/spec/spec/mocks/stub_spec.rb +159 -0
- data/spec/spec/mocks/twice_counts_spec.rb +67 -0
- data/spec/spec/runner/command_line_spec.rb +32 -0
- data/spec/spec/runner/context_matching_spec.rb +28 -0
- data/spec/spec/runner/context_runner_spec.rb +100 -0
- data/spec/spec/runner/context_spec.rb +405 -0
- data/spec/spec/runner/drb_command_line_spec.rb +74 -0
- data/spec/spec/runner/execution_context_spec.rb +52 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +40 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +21 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +36 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +78 -0
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +18 -0
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +41 -0
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +21 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +46 -0
- data/spec/spec/runner/heckle_runner_spec.rb +63 -0
- data/spec/spec/runner/heckler_spec.rb +14 -0
- data/spec/spec/runner/kernel_ext_spec.rb +16 -0
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
- data/spec/spec/runner/object_ext_spec.rb +11 -0
- data/spec/spec/runner/option_parser_spec.rb +269 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +47 -0
- data/spec/spec/runner/reporter_spec.rb +126 -0
- data/spec/spec/runner/spec_matcher_spec.rb +107 -0
- data/spec/spec/runner/spec_name_generation_spec.rb +102 -0
- data/spec/spec/runner/spec_parser_spec.rb +37 -0
- data/spec/spec/runner/specification_class_spec.rb +72 -0
- data/spec/spec/runner/specification_instance_spec.rb +160 -0
- data/spec/spec/runner/specification_should_raise_spec.rb +136 -0
- data/spec/spec/spec_classes.rb +102 -0
- data/spec/spec/translator_spec.rb +79 -0
- data/spec/spec_helper.rb +35 -0
- metadata +141 -9
- data/bin/drbspec +0 -3
- data/lib/spec/expectations/diff.rb +0 -28
- data/lib/spec/expectations/extensions/numeric.rb +0 -19
- data/lib/spec/expectations/extensions/string.rb +0 -22
- data/lib/spec/expectations/message_builder.rb +0 -13
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
unless ['i386-mswin32', 'java'].index(PLATFORM)
|
3
|
+
require 'spec/runner/heckle_runner'
|
4
|
+
|
5
|
+
context "Heckler" do
|
6
|
+
specify "should run context_runner on tests_pass?" do
|
7
|
+
context_runner = mock("context_runner")
|
8
|
+
context_runner.should_receive(:run)
|
9
|
+
heckler = Spec::Runner::Heckler.new('Array', 'push', context_runner)
|
10
|
+
|
11
|
+
heckler.tests_pass?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
context "KernelExt" do
|
6
|
+
specify "should add context method to kernel" do
|
7
|
+
lambda do
|
8
|
+
context "" do
|
9
|
+
|
10
|
+
end
|
11
|
+
end.should_not_raise
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
context "NoisyBacktraceTweaker" do
|
6
|
+
setup do
|
7
|
+
@error = RuntimeError.new
|
8
|
+
@tweaker = NoisyBacktraceTweaker.new
|
9
|
+
end
|
10
|
+
|
11
|
+
specify "should leave anything in lib spec dir" do
|
12
|
+
["expectations", "mocks", "runner", "stubs"].each do |child|
|
13
|
+
@error.set_backtrace(["/lib/spec/#{child}/anything.rb"])
|
14
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
15
|
+
@error.backtrace.should_not_be_empty
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
specify "should leave anything in spec dir" do
|
20
|
+
@error.set_backtrace(["/lib/spec/expectations/anything.rb"])
|
21
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
22
|
+
@error.backtrace.should_not_be_empty
|
23
|
+
end
|
24
|
+
|
25
|
+
specify "should leave bin spec" do
|
26
|
+
@error.set_backtrace(["bin/spec:"])
|
27
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
28
|
+
@error.backtrace.should_not_be_empty
|
29
|
+
end
|
30
|
+
|
31
|
+
specify "should not barf on nil backtrace" do
|
32
|
+
lambda do
|
33
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
34
|
+
end.should_not_raise
|
35
|
+
end
|
36
|
+
|
37
|
+
specify "should clean up double slashes" do
|
38
|
+
@error.set_backtrace(["/a//b/c//d.rb"])
|
39
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
40
|
+
@error.backtrace.should_include "/a/b/c/d.rb"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
context "ObjectExt" do
|
6
|
+
specify "should add copy_instance_variables_from to object" do
|
7
|
+
Object.new.should_respond_to :copy_instance_variables_from
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,269 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "OptionParser" do
|
4
|
+
setup do
|
5
|
+
@out = StringIO.new
|
6
|
+
@err = StringIO.new
|
7
|
+
@parser = Spec::Runner::OptionParser.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse(args)
|
11
|
+
@parser.parse(args, @err, @out, true)
|
12
|
+
end
|
13
|
+
|
14
|
+
specify "should accept dry run option" do
|
15
|
+
options = parse(["--dry-run"])
|
16
|
+
options.dry_run.should_be(true)
|
17
|
+
end
|
18
|
+
|
19
|
+
specify "should eval and use custom formatter when none of the builtins" do
|
20
|
+
options = parse(["--format", "Custom::Formatter"])
|
21
|
+
options.formatter_type.should equal(Custom::Formatter)
|
22
|
+
end
|
23
|
+
|
24
|
+
specify "should not be verbose by default" do
|
25
|
+
options = parse([])
|
26
|
+
options.verbose.should_be(nil)
|
27
|
+
end
|
28
|
+
|
29
|
+
specify "should not use colour by default" do
|
30
|
+
options = parse([])
|
31
|
+
options.colour.should_be(nil)
|
32
|
+
end
|
33
|
+
|
34
|
+
specify "should print help to stdout" do
|
35
|
+
options = parse(["--help"])
|
36
|
+
@out.rewind
|
37
|
+
@out.read.should_match(/Usage: spec \[options\] \(FILE\|DIRECTORY\|GLOB\)\+/n)
|
38
|
+
end
|
39
|
+
|
40
|
+
specify "should print instructions about how to fix bad formatter" do
|
41
|
+
options = parse(["--format", "Custom::BadFormatter"])
|
42
|
+
@err.string.should_match(/Couldn't find formatter class Custom::BadFormatter/n)
|
43
|
+
end
|
44
|
+
|
45
|
+
specify "should print usage to err if no dir specified" do
|
46
|
+
options = parse([])
|
47
|
+
@err.string.should_match(/Usage: spec/)
|
48
|
+
end
|
49
|
+
|
50
|
+
specify "should print version to stdout" do
|
51
|
+
options = parse(["--version"])
|
52
|
+
@out.rewind
|
53
|
+
@out.read.should_match(/RSpec-\d+\.\d+\.\d+ \(r\d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n)
|
54
|
+
end
|
55
|
+
|
56
|
+
specify "should accept -o option" do
|
57
|
+
options = parse(["-o", "#{File.expand_path(File.dirname(__FILE__))}/output_file.txt"])
|
58
|
+
options.out.should_be_an_instance_of File
|
59
|
+
options.out.path.should == "#{File.expand_path(File.dirname(__FILE__))}/output_file.txt"
|
60
|
+
File.delete(options.out.path) rescue nil
|
61
|
+
end
|
62
|
+
|
63
|
+
specify "should require file when require specified" do
|
64
|
+
lambda do
|
65
|
+
parse(["--require", "whatever"])
|
66
|
+
end.should_raise(LoadError)
|
67
|
+
end
|
68
|
+
|
69
|
+
specify "should select dry run for rdoc formatter" do
|
70
|
+
options = parse(["--format", "rdoc"])
|
71
|
+
options.dry_run.should_be(true)
|
72
|
+
end
|
73
|
+
|
74
|
+
specify "should support c option" do
|
75
|
+
options = parse(["-c"])
|
76
|
+
options.colour.should_be(true)
|
77
|
+
end
|
78
|
+
|
79
|
+
specify "should support queens colour option" do
|
80
|
+
options = parse(["--colour"])
|
81
|
+
options.colour.should_be(true)
|
82
|
+
end
|
83
|
+
|
84
|
+
specify "should support us color option" do
|
85
|
+
options = parse(["--color"])
|
86
|
+
options.colour.should_be(true)
|
87
|
+
end
|
88
|
+
|
89
|
+
specify "should support single spec with s option" do
|
90
|
+
options = parse(["-s", "something or other"])
|
91
|
+
options.spec_name.should_eql("something or other")
|
92
|
+
end
|
93
|
+
|
94
|
+
specify "should support single spec with spec option" do
|
95
|
+
options = parse(["--spec", "something or other"])
|
96
|
+
options.spec_name.should_eql("something or other")
|
97
|
+
end
|
98
|
+
|
99
|
+
specify "should use html formatter when format is h" do
|
100
|
+
options = parse(["--format", "h"])
|
101
|
+
options.formatter_type.should equal(Spec::Runner::Formatter::HtmlFormatter)
|
102
|
+
end
|
103
|
+
|
104
|
+
specify "should use html formatter when format is html" do
|
105
|
+
options = parse(["--format", "html"])
|
106
|
+
options.formatter_type.should equal(Spec::Runner::Formatter::HtmlFormatter)
|
107
|
+
end
|
108
|
+
|
109
|
+
specify "should use noisy backtrace tweaker with b option" do
|
110
|
+
options = parse(["-b"])
|
111
|
+
options.backtrace_tweaker.should_be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
|
112
|
+
end
|
113
|
+
|
114
|
+
specify "should use noisy backtrace tweaker with backtrace option" do
|
115
|
+
options = parse(["--backtrace"])
|
116
|
+
options.backtrace_tweaker.should_be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
|
117
|
+
end
|
118
|
+
|
119
|
+
specify "should use quiet backtrace tweaker by default" do
|
120
|
+
options = parse([])
|
121
|
+
options.backtrace_tweaker.should_be_instance_of(Spec::Runner::QuietBacktraceTweaker)
|
122
|
+
end
|
123
|
+
|
124
|
+
specify "should use progress bar formatter by default" do
|
125
|
+
options = parse([])
|
126
|
+
options.formatter_type.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
|
127
|
+
end
|
128
|
+
|
129
|
+
specify "should use rdoc formatter when format is r" do
|
130
|
+
options = parse(["--format", "r"])
|
131
|
+
options.formatter_type.should equal(Spec::Runner::Formatter::RdocFormatter)
|
132
|
+
end
|
133
|
+
|
134
|
+
specify "should use rdoc formatter when format is rdoc" do
|
135
|
+
options = parse(["--format", "rdoc"])
|
136
|
+
options.formatter_type.should equal(Spec::Runner::Formatter::RdocFormatter)
|
137
|
+
end
|
138
|
+
|
139
|
+
specify "should use specdoc formatter when format is s" do
|
140
|
+
options = parse(["--format", "s"])
|
141
|
+
options.formatter_type.should equal(Spec::Runner::Formatter::SpecdocFormatter)
|
142
|
+
end
|
143
|
+
|
144
|
+
specify "should use specdoc formatter when format is specdoc" do
|
145
|
+
options = parse(["--format", "specdoc"])
|
146
|
+
options.formatter_type.should equal(Spec::Runner::Formatter::SpecdocFormatter)
|
147
|
+
end
|
148
|
+
|
149
|
+
specify "should support diff option when format is not specified" do
|
150
|
+
options = parse(["--diff"])
|
151
|
+
options.diff_format.should_be :unified
|
152
|
+
end
|
153
|
+
|
154
|
+
specify "should use unified diff format option when format is unified" do
|
155
|
+
options = parse(["--diff", "unified"])
|
156
|
+
options.diff_format.should_be :unified
|
157
|
+
options.differ_class.should_be Spec::Expectations::Differs::Default
|
158
|
+
end
|
159
|
+
|
160
|
+
specify "should use context diff format option when format is context" do
|
161
|
+
options = parse(["--diff", "context"])
|
162
|
+
options.diff_format.should eql(:context)
|
163
|
+
options.differ_class.should_eql Spec::Expectations::Differs::Default
|
164
|
+
end
|
165
|
+
|
166
|
+
specify "should use custom diff format option when format is a custom format" do
|
167
|
+
options = parse(["--diff", "Custom::Formatter"])
|
168
|
+
options.diff_format.should_be :custom
|
169
|
+
options.differ_class.should_eql Custom::Formatter
|
170
|
+
end
|
171
|
+
|
172
|
+
specify "should print instructions about how to fix bad differ" do
|
173
|
+
options = parse(["--diff", "Custom::BadFormatter"])
|
174
|
+
@err.string.should_match(/Couldn't find differ class Custom::BadFormatter/n)
|
175
|
+
end
|
176
|
+
|
177
|
+
specify "should support --line to identify spec" do
|
178
|
+
spec_parser = mock("spec_parser")
|
179
|
+
@parser.instance_variable_set('@spec_parser', spec_parser)
|
180
|
+
|
181
|
+
file_factory = mock("File")
|
182
|
+
file_factory.should_receive(:file?).and_return(true)
|
183
|
+
file_factory.should_receive(:open).and_return("fake_io")
|
184
|
+
@parser.instance_variable_set('@file_factory', file_factory)
|
185
|
+
|
186
|
+
spec_parser.should_receive(:spec_name_for).with("fake_io", 169).and_return("some spec")
|
187
|
+
|
188
|
+
options = parse(["some file", "--line", "169"])
|
189
|
+
options.spec_name.should_eql("some spec")
|
190
|
+
File.__verify
|
191
|
+
end
|
192
|
+
|
193
|
+
specify "should fail with error message if file is dir along with --line" do
|
194
|
+
spec_parser = mock("spec_parser")
|
195
|
+
@parser.instance_variable_set('@spec_parser', spec_parser)
|
196
|
+
|
197
|
+
file_factory = mock("File")
|
198
|
+
file_factory.should_receive(:file?).and_return(false)
|
199
|
+
file_factory.should_receive(:directory?).and_return(true)
|
200
|
+
@parser.instance_variable_set('@file_factory', file_factory)
|
201
|
+
|
202
|
+
options = parse(["some file", "--line", "169"])
|
203
|
+
@err.string.should_match(/You must specify one file, not a directory when using the --line option/n)
|
204
|
+
end
|
205
|
+
|
206
|
+
specify "should fail with error message if file is dir along with --line" do
|
207
|
+
spec_parser = mock("spec_parser")
|
208
|
+
@parser.instance_variable_set('@spec_parser', spec_parser)
|
209
|
+
|
210
|
+
file_factory = mock("File")
|
211
|
+
file_factory.should_receive(:file?).and_return(false)
|
212
|
+
file_factory.should_receive(:directory?).and_return(false)
|
213
|
+
@parser.instance_variable_set('@file_factory', file_factory)
|
214
|
+
|
215
|
+
options = parse(["some file", "--line", "169"])
|
216
|
+
@err.string.should_match(/some file does not exist/n)
|
217
|
+
end
|
218
|
+
|
219
|
+
specify "should fail with error message if more than one files are specified along with --line" do
|
220
|
+
spec_parser = mock("spec_parser")
|
221
|
+
@parser.instance_variable_set('@spec_parser', spec_parser)
|
222
|
+
|
223
|
+
options = parse(["some file", "some other file", "--line", "169"])
|
224
|
+
@err.string.should_match(/Only one file can be specified when using the --line option/n)
|
225
|
+
end
|
226
|
+
|
227
|
+
specify "should fail with error message if --spec and --line are used simultaneously" do
|
228
|
+
spec_parser = mock("spec_parser")
|
229
|
+
@parser.instance_variable_set('@spec_parser', spec_parser)
|
230
|
+
|
231
|
+
options = parse(["some file", "--spec", "some spec", "--line", "169"])
|
232
|
+
@err.string.should_match(/You cannot use both --line and --spec/n)
|
233
|
+
end
|
234
|
+
|
235
|
+
if(PLATFORM != "i386-mswin32")
|
236
|
+
specify "should heckle when --heckle is specified (and platform is not windows)" do
|
237
|
+
options = parse(["--heckle", "Spec"])
|
238
|
+
options.heckle_runner.should_be_instance_of(Spec::Runner::HeckleRunner)
|
239
|
+
end
|
240
|
+
else
|
241
|
+
specify "should barf when --heckle is specified (and platform is windows)" do
|
242
|
+
lambda do
|
243
|
+
options = parse(["--heckle", "Spec"])
|
244
|
+
end.should_raise(StandardError, "Heckle not supported on Windows")
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
specify "should read options from file when --options is specified" do
|
249
|
+
Spec::Runner::CommandLine.should_receive(:run).with(["--diff", "--colour"], @err, @out, true, true)
|
250
|
+
options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
|
251
|
+
end
|
252
|
+
|
253
|
+
specify "should append options from file when --options is specified" do
|
254
|
+
Spec::Runner::CommandLine.should_receive(:run).with(["some/spec.rb", "--diff", "--colour"], @err, @out, true, true)
|
255
|
+
options = parse(["some/spec.rb", "--options", File.dirname(__FILE__) + "/spec.opts"])
|
256
|
+
end
|
257
|
+
|
258
|
+
specify "should save config to file when --generate-options is specified" do
|
259
|
+
FileUtils.rm 'spec.opts' rescue nil
|
260
|
+
options = parse(["--colour", "--generate-options", "spec.opts", "--diff"])
|
261
|
+
File.open('spec.opts').read.should == "--colour\n--diff\n"
|
262
|
+
FileUtils.rm 'spec.opts' rescue nil
|
263
|
+
end
|
264
|
+
|
265
|
+
specify "should call DrbCommandLine when --drb is specified" do
|
266
|
+
Spec::Runner::DrbCommandLine.should_receive(:run).with(["some/spec.rb", "--diff", "--colour"], @err, @out, true, true)
|
267
|
+
options = parse(["some/spec.rb", "--diff", "--drb", "--colour"])
|
268
|
+
end
|
269
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
context "QuietBacktraceTweaker" do
|
6
|
+
setup do
|
7
|
+
@error = RuntimeError.new
|
8
|
+
@tweaker = QuietBacktraceTweaker.new
|
9
|
+
end
|
10
|
+
|
11
|
+
specify "should not barf on nil backtrace" do
|
12
|
+
lambda do
|
13
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
14
|
+
end.should_not_raise
|
15
|
+
end
|
16
|
+
|
17
|
+
specify "should remove anything from textmate ruby bundle" do
|
18
|
+
@error.set_backtrace(["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"])
|
19
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
20
|
+
@error.backtrace.should_be_empty
|
21
|
+
end
|
22
|
+
|
23
|
+
specify "should remove anything in lib spec dir" do
|
24
|
+
["expectations", "mocks", "runner", "callback"].each do |child|
|
25
|
+
element="/lib/spec/#{child}/anything.rb"
|
26
|
+
@error.set_backtrace([element])
|
27
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
28
|
+
unless (@error.backtrace.empty?)
|
29
|
+
raise("Should have tweaked away '#{element}'")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
specify "should remove bin spec" do
|
35
|
+
@error.set_backtrace(["bin/spec:"])
|
36
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
37
|
+
@error.backtrace.should_be_empty
|
38
|
+
end
|
39
|
+
|
40
|
+
specify "should clean up double slashes" do
|
41
|
+
@error.set_backtrace(["/a//b/c//d.rb"])
|
42
|
+
@tweaker.tweak_backtrace(@error, "spec name")
|
43
|
+
@error.backtrace.should_include "/a/b/c/d.rb"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
context "Reporter" do
|
6
|
+
setup do
|
7
|
+
@io = StringIO.new
|
8
|
+
@backtrace_tweaker = Spec::Mocks::Mock.new("backtrace tweaker", {
|
9
|
+
:auto_verify => false
|
10
|
+
})
|
11
|
+
@formatter = Spec::Mocks::Mock.new("formatter", {
|
12
|
+
:auto_verify => false
|
13
|
+
})
|
14
|
+
@reporter = Reporter.new(@formatter, @backtrace_tweaker)
|
15
|
+
|
16
|
+
end
|
17
|
+
specify "should account for context in stats" do
|
18
|
+
@formatter.should_receive(:add_context).with("context", true)
|
19
|
+
@reporter.add_context("context")
|
20
|
+
|
21
|
+
end
|
22
|
+
specify "should account for spec and error in stats for pass" do
|
23
|
+
@formatter.should_receive(:add_context)
|
24
|
+
@formatter.should_receive(:spec_started).with("spec")
|
25
|
+
@formatter.should_receive(:spec_failed).with("spec", 1, failure)
|
26
|
+
@formatter.should_receive(:start_dump)
|
27
|
+
@formatter.should_receive(:dump_failure).with(1, :anything)
|
28
|
+
@formatter.should_receive(:dump_summary).with(:anything, 1, 1)
|
29
|
+
@backtrace_tweaker.should_receive(:tweak_backtrace)
|
30
|
+
@reporter.add_context("context")
|
31
|
+
@reporter.spec_started("spec")
|
32
|
+
@reporter.spec_finished("spec", RuntimeError.new)
|
33
|
+
@reporter.dump
|
34
|
+
|
35
|
+
end
|
36
|
+
specify "should account for spec in stats for pass" do
|
37
|
+
@formatter.should_receive(:spec_started)
|
38
|
+
@formatter.should_receive(:spec_passed)
|
39
|
+
@formatter.should_receive(:start_dump)
|
40
|
+
@formatter.should_receive(:dump_summary).with(:anything, 1, 0)
|
41
|
+
@reporter.spec_started("spec")
|
42
|
+
@reporter.spec_finished("spec")
|
43
|
+
@reporter.dump
|
44
|
+
|
45
|
+
end
|
46
|
+
specify "should delegate to backtrace tweaker" do
|
47
|
+
@formatter.should_receive(:add_context)
|
48
|
+
@formatter.should_receive(:spec_failed)
|
49
|
+
@backtrace_tweaker.should_receive(:tweak_backtrace)
|
50
|
+
@reporter.add_context("context")
|
51
|
+
@reporter.spec_finished("spec", RuntimeError.new)
|
52
|
+
@backtrace_tweaker.__verify
|
53
|
+
|
54
|
+
end
|
55
|
+
specify "should handle multiple contexts with same name" do
|
56
|
+
@formatter.should_receive(:add_context).exactly(3).times
|
57
|
+
@formatter.should_receive(:spec_started).exactly(3).times
|
58
|
+
@formatter.should_receive(:spec_passed).exactly(3).times
|
59
|
+
@formatter.should_receive(:start_dump)
|
60
|
+
@formatter.should_receive(:dump_summary).with(:anything, 3, 0)
|
61
|
+
@reporter.add_context("context")
|
62
|
+
@reporter.spec_started("spec 1")
|
63
|
+
@reporter.spec_finished("spec 1")
|
64
|
+
@reporter.add_context("context")
|
65
|
+
@reporter.spec_started("spec 2")
|
66
|
+
@reporter.spec_finished("spec 2")
|
67
|
+
@reporter.add_context("context")
|
68
|
+
@reporter.spec_started("spec 3")
|
69
|
+
@reporter.spec_finished("spec 3")
|
70
|
+
@reporter.dump
|
71
|
+
|
72
|
+
end
|
73
|
+
specify "should handle multiple specs same name" do
|
74
|
+
|
75
|
+
error=RuntimeError.new
|
76
|
+
@formatter.should_receive(:add_context).exactly(2).times
|
77
|
+
@formatter.should_receive(:spec_started).with("spec").exactly(4).times
|
78
|
+
@formatter.should_receive(:spec_passed).with("spec").exactly(2).times
|
79
|
+
@formatter.should_receive(:spec_failed).with("spec", 1, failure)
|
80
|
+
@formatter.should_receive(:spec_failed).with("spec", 2, failure)
|
81
|
+
@formatter.should_receive(:dump_failure).exactly(2).times
|
82
|
+
@formatter.should_receive(:start_dump)
|
83
|
+
@formatter.should_receive(:dump_summary).with(:anything, 4, 2)
|
84
|
+
@backtrace_tweaker.should_receive(:tweak_backtrace)
|
85
|
+
@reporter.add_context("context")
|
86
|
+
@reporter.spec_started("spec")
|
87
|
+
@reporter.spec_finished("spec")
|
88
|
+
@reporter.spec_started("spec")
|
89
|
+
@reporter.spec_finished("spec", error)
|
90
|
+
@reporter.add_context("context")
|
91
|
+
@reporter.spec_started("spec")
|
92
|
+
@reporter.spec_finished("spec")
|
93
|
+
@reporter.spec_started("spec")
|
94
|
+
@reporter.spec_finished("spec", error)
|
95
|
+
@reporter.dump
|
96
|
+
|
97
|
+
end
|
98
|
+
specify "should push context to formatter" do
|
99
|
+
@formatter.should_receive(:add_context).never
|
100
|
+
@reporter.add_context("context")
|
101
|
+
|
102
|
+
end
|
103
|
+
specify "should push stats to reporter even with no data" do
|
104
|
+
@formatter.should_receive(:start_dump)
|
105
|
+
@formatter.should_receive(:dump_summary).with(:anything, 0, 0)
|
106
|
+
@reporter.dump
|
107
|
+
|
108
|
+
end
|
109
|
+
specify "should push time to reporter" do
|
110
|
+
@formatter.should_receive(:start).with(5)
|
111
|
+
@formatter.should_receive(:start_dump)
|
112
|
+
@formatter.should_receive(:dump_summary) do |time, a, b|
|
113
|
+
time.to_s.should_match(/[0-9].[0-9|e|-]+/)
|
114
|
+
end
|
115
|
+
@reporter.start(5)
|
116
|
+
@reporter.end
|
117
|
+
@reporter.dump
|
118
|
+
|
119
|
+
end
|
120
|
+
def failure
|
121
|
+
Mocks::DuckTypeArgConstraint.new(:header, :exception)
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|