mspec 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +22 -0
- data/README +101 -0
- data/Rakefile +44 -0
- data/bin/mkspec +7 -0
- data/bin/mspec +7 -0
- data/bin/mspec-ci +8 -0
- data/bin/mspec-run +8 -0
- data/bin/mspec-tag +8 -0
- data/lib/mspec.rb +6 -0
- data/lib/mspec/commands/mkspec.rb +147 -0
- data/lib/mspec/commands/mspec-ci.rb +71 -0
- data/lib/mspec/commands/mspec-run.rb +80 -0
- data/lib/mspec/commands/mspec-tag.rb +87 -0
- data/lib/mspec/commands/mspec.rb +143 -0
- data/lib/mspec/expectations.rb +2 -0
- data/lib/mspec/expectations/expectations.rb +12 -0
- data/lib/mspec/expectations/should.rb +23 -0
- data/lib/mspec/guards.rb +13 -0
- data/lib/mspec/guards/bug.rb +27 -0
- data/lib/mspec/guards/compliance.rb +18 -0
- data/lib/mspec/guards/conflict.rb +16 -0
- data/lib/mspec/guards/endian.rb +40 -0
- data/lib/mspec/guards/extensions.rb +12 -0
- data/lib/mspec/guards/guard.rb +120 -0
- data/lib/mspec/guards/noncompliance.rb +12 -0
- data/lib/mspec/guards/platform.rb +38 -0
- data/lib/mspec/guards/quarantine.rb +15 -0
- data/lib/mspec/guards/runner.rb +30 -0
- data/lib/mspec/guards/superuser.rb +15 -0
- data/lib/mspec/guards/support.rb +12 -0
- data/lib/mspec/guards/version.rb +40 -0
- data/lib/mspec/helpers.rb +6 -0
- data/lib/mspec/helpers/bignum.rb +5 -0
- data/lib/mspec/helpers/const_lookup.rb +5 -0
- data/lib/mspec/helpers/flunk.rb +5 -0
- data/lib/mspec/helpers/io.rb +13 -0
- data/lib/mspec/helpers/scratch.rb +17 -0
- data/lib/mspec/helpers/tmp.rb +32 -0
- data/lib/mspec/matchers.rb +16 -0
- data/lib/mspec/matchers/base.rb +95 -0
- data/lib/mspec/matchers/be_ancestor_of.rb +24 -0
- data/lib/mspec/matchers/be_close.rb +27 -0
- data/lib/mspec/matchers/be_empty.rb +20 -0
- data/lib/mspec/matchers/be_false.rb +20 -0
- data/lib/mspec/matchers/be_kind_of.rb +24 -0
- data/lib/mspec/matchers/be_nil.rb +20 -0
- data/lib/mspec/matchers/be_true.rb +20 -0
- data/lib/mspec/matchers/complain.rb +56 -0
- data/lib/mspec/matchers/eql.rb +26 -0
- data/lib/mspec/matchers/equal.rb +26 -0
- data/lib/mspec/matchers/equal_utf16.rb +34 -0
- data/lib/mspec/matchers/include.rb +32 -0
- data/lib/mspec/matchers/output.rb +67 -0
- data/lib/mspec/matchers/output_to_fd.rb +71 -0
- data/lib/mspec/matchers/raise_error.rb +48 -0
- data/lib/mspec/mocks.rb +3 -0
- data/lib/mspec/mocks/mock.rb +123 -0
- data/lib/mspec/mocks/object.rb +28 -0
- data/lib/mspec/mocks/proxy.rb +112 -0
- data/lib/mspec/runner.rb +13 -0
- data/lib/mspec/runner/actions.rb +6 -0
- data/lib/mspec/runner/actions/debug.rb +17 -0
- data/lib/mspec/runner/actions/filter.rb +40 -0
- data/lib/mspec/runner/actions/gdb.rb +17 -0
- data/lib/mspec/runner/actions/tag.rb +97 -0
- data/lib/mspec/runner/actions/tally.rb +80 -0
- data/lib/mspec/runner/actions/timer.rb +22 -0
- data/lib/mspec/runner/filters.rb +4 -0
- data/lib/mspec/runner/filters/match.rb +22 -0
- data/lib/mspec/runner/filters/profile.rb +54 -0
- data/lib/mspec/runner/filters/regexp.rb +7 -0
- data/lib/mspec/runner/filters/tag.rb +29 -0
- data/lib/mspec/runner/formatters.rb +7 -0
- data/lib/mspec/runner/formatters/dotted.rb +81 -0
- data/lib/mspec/runner/formatters/html.rb +87 -0
- data/lib/mspec/runner/formatters/specdoc.rb +27 -0
- data/lib/mspec/runner/formatters/spinner.rb +89 -0
- data/lib/mspec/runner/formatters/summary.rb +8 -0
- data/lib/mspec/runner/formatters/unit.rb +25 -0
- data/lib/mspec/runner/formatters/yaml.rb +43 -0
- data/lib/mspec/runner/mspec.rb +232 -0
- data/lib/mspec/runner/object.rb +20 -0
- data/lib/mspec/runner/shared.rb +12 -0
- data/lib/mspec/runner/state.rb +116 -0
- data/lib/mspec/runner/tag.rb +20 -0
- data/lib/mspec/utils/name_map.rb +130 -0
- data/lib/mspec/utils/options.rb +344 -0
- data/lib/mspec/utils/script.rb +77 -0
- data/lib/mspec/version.rb +3 -0
- data/spec/commands/mkspec_spec.rb +321 -0
- data/spec/commands/mspec_ci_spec.rb +139 -0
- data/spec/commands/mspec_run_spec.rb +146 -0
- data/spec/commands/mspec_spec.rb +359 -0
- data/spec/commands/mspec_tag_spec.rb +131 -0
- data/spec/expectations/expectations_spec.rb +16 -0
- data/spec/expectations/should_spec.rb +99 -0
- data/spec/guards/bug_spec.rb +137 -0
- data/spec/guards/compliance_spec.rb +70 -0
- data/spec/guards/conflict_spec.rb +20 -0
- data/spec/guards/endian_spec.rb +42 -0
- data/spec/guards/extensions_spec.rb +36 -0
- data/spec/guards/guard_spec.rb +355 -0
- data/spec/guards/noncompliance_spec.rb +36 -0
- data/spec/guards/platform_spec.rb +84 -0
- data/spec/guards/quarantine_spec.rb +19 -0
- data/spec/guards/runner_spec.rb +75 -0
- data/spec/guards/superuser_spec.rb +22 -0
- data/spec/guards/support_spec.rb +22 -0
- data/spec/guards/version_spec.rb +133 -0
- data/spec/helpers/bignum_spec.rb +11 -0
- data/spec/helpers/const_lookup_spec.rb +19 -0
- data/spec/helpers/flunk_spec.rb +15 -0
- data/spec/helpers/io_spec.rb +34 -0
- data/spec/helpers/scratch_spec.rb +22 -0
- data/spec/helpers/tmp_spec.rb +72 -0
- data/spec/matchers/base_spec.rb +180 -0
- data/spec/matchers/be_ancestor_of_spec.rb +28 -0
- data/spec/matchers/be_close_spec.rb +46 -0
- data/spec/matchers/be_empty_spec.rb +26 -0
- data/spec/matchers/be_false_spec.rb +28 -0
- data/spec/matchers/be_kind_of_spec.rb +29 -0
- data/spec/matchers/be_nil_spec.rb +27 -0
- data/spec/matchers/be_true_spec.rb +28 -0
- data/spec/matchers/complain_spec.rb +52 -0
- data/spec/matchers/eql_spec.rb +33 -0
- data/spec/matchers/equal_spec.rb +33 -0
- data/spec/matchers/equal_utf16_spec.rb +47 -0
- data/spec/matchers/include_spec.rb +37 -0
- data/spec/matchers/output_spec.rb +74 -0
- data/spec/matchers/output_to_fd_spec.rb +33 -0
- data/spec/matchers/raise_error_spec.rb +56 -0
- data/spec/mocks/mock_spec.rb +272 -0
- data/spec/mocks/proxy_spec.rb +259 -0
- data/spec/runner/actions/debug_spec.rb +61 -0
- data/spec/runner/actions/filter_spec.rb +84 -0
- data/spec/runner/actions/gdb_spec.rb +61 -0
- data/spec/runner/actions/tag_spec.rb +253 -0
- data/spec/runner/actions/tally_spec.rb +107 -0
- data/spec/runner/actions/timer_spec.rb +42 -0
- data/spec/runner/filters/a.yaml +4 -0
- data/spec/runner/filters/b.yaml +11 -0
- data/spec/runner/filters/match_spec.rb +44 -0
- data/spec/runner/filters/profile_spec.rb +117 -0
- data/spec/runner/filters/regexp_spec.rb +13 -0
- data/spec/runner/filters/tag_spec.rb +77 -0
- data/spec/runner/formatters/dotted_spec.rb +184 -0
- data/spec/runner/formatters/html_spec.rb +191 -0
- data/spec/runner/formatters/specdoc_spec.rb +57 -0
- data/spec/runner/formatters/spinner_spec.rb +78 -0
- data/spec/runner/formatters/summary_spec.rb +29 -0
- data/spec/runner/formatters/unit_spec.rb +71 -0
- data/spec/runner/formatters/yaml_spec.rb +123 -0
- data/spec/runner/mspec_spec.rb +393 -0
- data/spec/runner/shared_spec.rb +41 -0
- data/spec/runner/state_spec.rb +535 -0
- data/spec/runner/tag_spec.rb +93 -0
- data/spec/runner/tags.txt +3 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/utils/name_map_spec.rb +178 -0
- data/spec/utils/options_spec.rb +862 -0
- data/spec/utils/script_spec.rb +240 -0
- metadata +217 -0
@@ -0,0 +1,191 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'mspec/guards/guard'
|
3
|
+
require 'mspec/runner/formatters/html'
|
4
|
+
require 'mspec/runner/mspec'
|
5
|
+
require 'mspec/runner/state'
|
6
|
+
|
7
|
+
describe HtmlFormatter do
|
8
|
+
before :each do
|
9
|
+
@formatter = HtmlFormatter.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it "responds to #register by registering itself with MSpec for appropriate actions" do
|
13
|
+
MSpec.stub!(:register)
|
14
|
+
MSpec.should_receive(:register).with(:start, @formatter)
|
15
|
+
MSpec.should_receive(:register).with(:enter, @formatter)
|
16
|
+
MSpec.should_receive(:register).with(:leave, @formatter)
|
17
|
+
@formatter.register
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe HtmlFormatter, "#start" do
|
22
|
+
before :each do
|
23
|
+
$stdout = @out = IOStub.new
|
24
|
+
@formatter = HtmlFormatter.new
|
25
|
+
end
|
26
|
+
|
27
|
+
after :each do
|
28
|
+
$stdout = STDOUT
|
29
|
+
end
|
30
|
+
|
31
|
+
it "prints the HTML head" do
|
32
|
+
@formatter.start
|
33
|
+
ruby_name = RUBY_NAME
|
34
|
+
ruby_name.should =~ /^ruby/
|
35
|
+
@out.should ==
|
36
|
+
%[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
37
|
+
"http://www.w3.org/TR/html4/strict.dtd">
|
38
|
+
<html>
|
39
|
+
<head>
|
40
|
+
<title>Spec Output For #{ruby_name} (1.8.6)</title>
|
41
|
+
<style type="text/css">
|
42
|
+
ul {
|
43
|
+
list-style: none;
|
44
|
+
}
|
45
|
+
.fail {
|
46
|
+
color: red;
|
47
|
+
}
|
48
|
+
.pass {
|
49
|
+
color: green;
|
50
|
+
}
|
51
|
+
#details :target {
|
52
|
+
background-color: #ffffe0;
|
53
|
+
}
|
54
|
+
</style>
|
55
|
+
</head>
|
56
|
+
<body>
|
57
|
+
]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe HtmlFormatter, "#enter" do
|
62
|
+
before :each do
|
63
|
+
$stdout = @out = IOStub.new
|
64
|
+
@formatter = HtmlFormatter.new
|
65
|
+
end
|
66
|
+
|
67
|
+
after :each do
|
68
|
+
$stdout = STDOUT
|
69
|
+
end
|
70
|
+
|
71
|
+
it "prints the #describe string" do
|
72
|
+
@formatter.enter "describe"
|
73
|
+
@out.should == "<div><p>describe</p>\n<ul>\n"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe HtmlFormatter, "#leave" do
|
78
|
+
before :each do
|
79
|
+
$stdout = @out = IOStub.new
|
80
|
+
@formatter = HtmlFormatter.new
|
81
|
+
end
|
82
|
+
|
83
|
+
after :each do
|
84
|
+
$stdout = STDOUT
|
85
|
+
end
|
86
|
+
|
87
|
+
it "prints the closing tags for the #describe string" do
|
88
|
+
@formatter.leave
|
89
|
+
@out.should == "</ul>\n</div>\n"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe HtmlFormatter, "#after" do
|
94
|
+
before :each do
|
95
|
+
$stdout = @out = IOStub.new
|
96
|
+
@formatter = HtmlFormatter.new
|
97
|
+
@state = SpecState.new("describe", "it")
|
98
|
+
end
|
99
|
+
|
100
|
+
after :each do
|
101
|
+
$stdout = STDOUT
|
102
|
+
end
|
103
|
+
|
104
|
+
it "prints the #it once when there are no exceptions raised" do
|
105
|
+
@formatter.after @state
|
106
|
+
@out.should == %[<li class="pass">- it</li>\n]
|
107
|
+
end
|
108
|
+
|
109
|
+
it "prints the #it string once for each exception raised" do
|
110
|
+
@formatter.register
|
111
|
+
@state.exceptions << ["msg", ExpectationNotMetError.new("disappointing")]
|
112
|
+
@state.exceptions << ["msg", MSpecExampleError.new("painful")]
|
113
|
+
@formatter.tally.after @state
|
114
|
+
@formatter.after @state
|
115
|
+
@out.should ==
|
116
|
+
%[<li class="fail">- it (<a href="#details-1">FAILED - 1</a>)</li>
|
117
|
+
<li class="fail">- it (<a href="#details-2">ERROR - 2</a>)</li>
|
118
|
+
]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe HtmlFormatter, "#finish" do
|
123
|
+
before :each do
|
124
|
+
@tally = mock("tally", :null_object => true)
|
125
|
+
TallyAction.stub!(:new).and_return(@tally)
|
126
|
+
@timer = mock("timer", :null_object => true)
|
127
|
+
TimerAction.stub!(:new).and_return(@timer)
|
128
|
+
|
129
|
+
$stdout = @out = IOStub.new
|
130
|
+
@state = SpecState.new("describe", "it")
|
131
|
+
MSpec.stub!(:register)
|
132
|
+
@formatter = HtmlFormatter.new
|
133
|
+
@formatter.register
|
134
|
+
@exception = MSpecExampleError.new("broken")
|
135
|
+
@exception.stub!(:backtrace).and_return(["file.rb:1", "file.rb:2"])
|
136
|
+
end
|
137
|
+
|
138
|
+
after :each do
|
139
|
+
$stdout = STDOUT
|
140
|
+
end
|
141
|
+
|
142
|
+
it "prints a failure message for an exception" do
|
143
|
+
@state.exceptions << ["msg", @exception]
|
144
|
+
@formatter.instance_variable_set :@states, [@state]
|
145
|
+
@formatter.finish
|
146
|
+
@out.should =~ %r[<p>describe it ERROR</p>]
|
147
|
+
end
|
148
|
+
|
149
|
+
it "prints a backtrace for an exception" do
|
150
|
+
@formatter.stub!(:backtrace).and_return("path/to/some/file.rb:35:in method")
|
151
|
+
@state.exceptions << ["msg", @exception]
|
152
|
+
@formatter.instance_variable_set :@states, [@state]
|
153
|
+
@formatter.finish
|
154
|
+
@out.should =~ %r[<pre>.*path/to/some/file.rb:35:in method.*</pre>]m
|
155
|
+
end
|
156
|
+
|
157
|
+
it "prints a summary of elapsed time" do
|
158
|
+
@timer.should_receive(:format).and_return("Finished in 2.0 seconds")
|
159
|
+
@formatter.finish
|
160
|
+
@out.should =~ %r[<p>Finished in 2.0 seconds</p>\n]
|
161
|
+
end
|
162
|
+
|
163
|
+
it "prints a tally of counts" do
|
164
|
+
@tally.should_receive(:format).and_return("1 example, 0 failures")
|
165
|
+
@formatter.finish
|
166
|
+
@out.should =~ %r[<p class="pass">1 example, 0 failures</p>]
|
167
|
+
end
|
168
|
+
|
169
|
+
it "prints errors, backtraces, elapsed time, and tallies" do
|
170
|
+
@state.exceptions << ["msg", @exception]
|
171
|
+
@formatter.stub!(:backtrace).and_return("path/to/some/file.rb:35:in method")
|
172
|
+
@timer.should_receive(:format).and_return("Finished in 2.0 seconds")
|
173
|
+
@tally.should_receive(:format).and_return("1 example, 1 failures")
|
174
|
+
@formatter.instance_variable_set :@states, [@state]
|
175
|
+
@formatter.finish
|
176
|
+
@out.should ==
|
177
|
+
%[<hr>
|
178
|
+
<ol id="details">
|
179
|
+
<li id="details-1"><p>describe it ERROR</p>
|
180
|
+
<p>MSpecExampleError: broken</p>
|
181
|
+
<pre>
|
182
|
+
path/to/some/file.rb:35:in method</pre>
|
183
|
+
</li>
|
184
|
+
</ol>
|
185
|
+
<p>Finished in 2.0 seconds</p>
|
186
|
+
<p class="fail">1 example, 1 failures</p>
|
187
|
+
</body>
|
188
|
+
</html>
|
189
|
+
]
|
190
|
+
end
|
191
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'mspec/runner/formatters/specdoc'
|
3
|
+
require 'mspec/runner/state'
|
4
|
+
|
5
|
+
describe SpecdocFormatter do
|
6
|
+
before :each do
|
7
|
+
@formatter = SpecdocFormatter.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it "responds to #register by registering itself with MSpec for appropriate actions" do
|
11
|
+
MSpec.stub!(:register)
|
12
|
+
MSpec.should_receive(:register).with(:enter, @formatter)
|
13
|
+
@formatter.register
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe SpecdocFormatter, "#enter" do
|
18
|
+
before :each do
|
19
|
+
$stdout = @out = IOStub.new
|
20
|
+
@formatter = SpecdocFormatter.new
|
21
|
+
end
|
22
|
+
|
23
|
+
after :each do
|
24
|
+
$stdout = STDOUT
|
25
|
+
end
|
26
|
+
|
27
|
+
it "prints the #describe string" do
|
28
|
+
@formatter.enter("describe")
|
29
|
+
@out.should == "\ndescribe\n"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe SpecdocFormatter, "#after" do
|
34
|
+
before :each do
|
35
|
+
$stdout = @out = IOStub.new
|
36
|
+
@formatter = SpecdocFormatter.new
|
37
|
+
@state = SpecState.new("describe", "it")
|
38
|
+
end
|
39
|
+
|
40
|
+
after :each do
|
41
|
+
$stdout = STDOUT
|
42
|
+
end
|
43
|
+
|
44
|
+
it "prints the #it once when there are no exceptions raised" do
|
45
|
+
@formatter.after @state
|
46
|
+
@out.should == "- it\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "prints the #it string once for each exception raised" do
|
50
|
+
@formatter.register
|
51
|
+
@state.exceptions << ["msg", ExpectationNotMetError.new("disappointing")]
|
52
|
+
@state.exceptions << ["msg", Exception.new("painful")]
|
53
|
+
@formatter.tally.after @state
|
54
|
+
@formatter.after @state
|
55
|
+
@out.should == "- it (FAILED - 1)\n- it (ERROR - 2)\n"
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'mspec/runner/formatters/spinner'
|
3
|
+
require 'mspec/runner/mspec'
|
4
|
+
require 'mspec/runner/state'
|
5
|
+
|
6
|
+
describe SpinnerFormatter, "#initialize" do
|
7
|
+
it "permits zero arguments" do
|
8
|
+
SpinnerFormatter.new
|
9
|
+
end
|
10
|
+
|
11
|
+
it "accepts one argument" do
|
12
|
+
SpinnerFormatter.new nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe SpinnerFormatter, "#register" do
|
17
|
+
before :each do
|
18
|
+
@formatter = SpinnerFormatter.new
|
19
|
+
end
|
20
|
+
|
21
|
+
it "registers self with MSpec for appropriate actions" do
|
22
|
+
MSpec.stub!(:register)
|
23
|
+
MSpec.should_receive(:register).with(:start, @formatter)
|
24
|
+
MSpec.should_receive(:register).with(:load, @formatter)
|
25
|
+
MSpec.should_receive(:register).with(:after, @formatter)
|
26
|
+
MSpec.should_receive(:register).with(:finish, @formatter)
|
27
|
+
@formatter.register
|
28
|
+
end
|
29
|
+
|
30
|
+
it "creates TimerAction and TallyAction" do
|
31
|
+
timer = mock("timer")
|
32
|
+
tally = mock("tally")
|
33
|
+
timer.should_receive(:register)
|
34
|
+
tally.should_receive(:register)
|
35
|
+
tally.should_receive(:counter)
|
36
|
+
TimerAction.should_receive(:new).and_return(timer)
|
37
|
+
TallyAction.should_receive(:new).and_return(tally)
|
38
|
+
@formatter.register
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe SpinnerFormatter, "#print" do
|
43
|
+
after :each do
|
44
|
+
$stdout = STDOUT
|
45
|
+
end
|
46
|
+
|
47
|
+
it "ignores the argument to #initialize and writes to $stdout" do
|
48
|
+
$stdout = IOStub.new
|
49
|
+
formatter = SpinnerFormatter.new "some/file"
|
50
|
+
formatter.print "begonias"
|
51
|
+
$stdout.should == "begonias"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe SpinnerFormatter, "#after" do
|
56
|
+
before :each do
|
57
|
+
$stdout = IOStub.new
|
58
|
+
MSpec.stub!(:retrieve).and_return(["a", "b"])
|
59
|
+
@formatter = SpinnerFormatter.new
|
60
|
+
@formatter.register
|
61
|
+
@state = SpecState.new("describe", "it")
|
62
|
+
end
|
63
|
+
|
64
|
+
after :each do
|
65
|
+
$stdout = STDOUT
|
66
|
+
end
|
67
|
+
|
68
|
+
it "updates the spinner" do
|
69
|
+
@formatter.start
|
70
|
+
@formatter.load
|
71
|
+
@formatter.after @state
|
72
|
+
@formatter.after @state
|
73
|
+
$stdout.should == "\r[/ | ======== 20% | 00:00:00] " \
|
74
|
+
"\e[0;32m 0F \e[0;32m 0E\e[0m" \
|
75
|
+
"\r[- | ======== 20% | 00:00:00] " \
|
76
|
+
"\e[0;32m 0F \e[0;32m 0E\e[0m"
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'mspec/runner/formatters/summary'
|
3
|
+
require 'mspec/runner/state'
|
4
|
+
|
5
|
+
describe SummaryFormatter, "#after" do
|
6
|
+
before :each do
|
7
|
+
$stdout = @out = IOStub.new
|
8
|
+
@formatter = SummaryFormatter.new
|
9
|
+
@state = SpecState.new("describe", "it")
|
10
|
+
end
|
11
|
+
|
12
|
+
after :each do
|
13
|
+
$stdout = STDOUT
|
14
|
+
end
|
15
|
+
|
16
|
+
it "does not print anything" do
|
17
|
+
MSpec.stub!(:register)
|
18
|
+
tally = mock("tally", :null_object => true)
|
19
|
+
tally.stub!(:failures).and_return(1)
|
20
|
+
tally.stub!(:errors).and_return(1)
|
21
|
+
TallyAction.stub!(:new).and_return(tally)
|
22
|
+
|
23
|
+
@formatter.register
|
24
|
+
@state.exceptions << ExpectationNotMetError.new("disappointing")
|
25
|
+
@state.exceptions << Exception.new("painful")
|
26
|
+
@formatter.after(@state)
|
27
|
+
@out.should == ""
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'mspec/runner/formatters/unit'
|
3
|
+
require 'mspec/runner/state'
|
4
|
+
|
5
|
+
describe UnitdiffFormatter, "#finish" do
|
6
|
+
before :each do
|
7
|
+
@tally = mock("tally", :null_object => true)
|
8
|
+
TallyAction.stub!(:new).and_return(@tally)
|
9
|
+
@timer = mock("timer", :null_object => true)
|
10
|
+
TimerAction.stub!(:new).and_return(@timer)
|
11
|
+
|
12
|
+
$stdout = @out = IOStub.new
|
13
|
+
@state = SpecState.new("describe", "it")
|
14
|
+
MSpec.stub!(:register)
|
15
|
+
@formatter = UnitdiffFormatter.new
|
16
|
+
@formatter.register
|
17
|
+
end
|
18
|
+
|
19
|
+
after :each do
|
20
|
+
$stdout = STDOUT
|
21
|
+
end
|
22
|
+
|
23
|
+
it "prints a failure message for an exception" do
|
24
|
+
@state.exceptions << ["msg", Exception.new("broken")]
|
25
|
+
@formatter.after @state
|
26
|
+
@formatter.finish
|
27
|
+
@out.should =~ /^1\)\ndescribe it ERROR$/
|
28
|
+
end
|
29
|
+
|
30
|
+
it "prints a backtrace for an exception" do
|
31
|
+
@formatter.stub!(:backtrace).and_return("path/to/some/file.rb:35:in method")
|
32
|
+
@state.exceptions << ["msg", Exception.new("broken")]
|
33
|
+
@formatter.after @state
|
34
|
+
@formatter.finish
|
35
|
+
@out.should =~ %r[path/to/some/file.rb:35:in method$]
|
36
|
+
end
|
37
|
+
|
38
|
+
it "prints a summary of elapsed time" do
|
39
|
+
@timer.should_receive(:format).and_return("Finished in 2.0 seconds")
|
40
|
+
@formatter.finish
|
41
|
+
@out.should =~ /^Finished in 2.0 seconds$/
|
42
|
+
end
|
43
|
+
|
44
|
+
it "prints a tally of counts" do
|
45
|
+
@tally.should_receive(:format).and_return("1 example, 0 failures")
|
46
|
+
@formatter.finish
|
47
|
+
@out.should =~ /^1 example, 0 failures$/
|
48
|
+
end
|
49
|
+
|
50
|
+
it "prints errors, backtraces, elapsed time, and tallies" do
|
51
|
+
@state.exceptions << ["msg", Exception.new("broken")]
|
52
|
+
@formatter.stub!(:backtrace).and_return("path/to/some/file.rb:35:in method")
|
53
|
+
@timer.should_receive(:format).and_return("Finished in 2.0 seconds")
|
54
|
+
@tally.should_receive(:format).and_return("1 example, 0 failures")
|
55
|
+
@formatter.after @state
|
56
|
+
@formatter.finish
|
57
|
+
@out.should ==
|
58
|
+
%[E
|
59
|
+
|
60
|
+
Finished in 2.0 seconds
|
61
|
+
|
62
|
+
1)
|
63
|
+
describe it ERROR
|
64
|
+
Exception occurred during: msg
|
65
|
+
broken:
|
66
|
+
path/to/some/file.rb:35:in method
|
67
|
+
|
68
|
+
1 example, 0 failures
|
69
|
+
]
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'mspec/runner/formatters/yaml'
|
3
|
+
require 'mspec/runner/state'
|
4
|
+
|
5
|
+
describe YamlFormatter, "#initialize" do
|
6
|
+
it "permits zero arguments" do
|
7
|
+
YamlFormatter.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it "accepts one argument" do
|
11
|
+
YamlFormatter.new nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe YamlFormatter, "#print" do
|
16
|
+
before :each do
|
17
|
+
$stdout = IOStub.new
|
18
|
+
@out = IOStub.new
|
19
|
+
File.stub!(:open).and_return(@out)
|
20
|
+
@formatter = YamlFormatter.new "some/file"
|
21
|
+
end
|
22
|
+
|
23
|
+
after :each do
|
24
|
+
$stdout = STDOUT
|
25
|
+
end
|
26
|
+
|
27
|
+
it "writes to $stdout if #switch has not been called" do
|
28
|
+
@formatter.print "begonias"
|
29
|
+
$stdout.should == "begonias"
|
30
|
+
@out.should == ""
|
31
|
+
end
|
32
|
+
|
33
|
+
it "writes to the file passed to #initialize once #switch has been called" do
|
34
|
+
@formatter.switch
|
35
|
+
@formatter.print "begonias"
|
36
|
+
$stdout.should == ""
|
37
|
+
@out.should == "begonias"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "writes to $stdout once #switch is called if no file was passed to #initialize" do
|
41
|
+
formatter = YamlFormatter.new
|
42
|
+
formatter.switch
|
43
|
+
formatter.print "begonias"
|
44
|
+
$stdout.should == "begonias"
|
45
|
+
@out.should == ""
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe YamlFormatter, "#finish" do
|
50
|
+
before :each do
|
51
|
+
@tally = mock("tally", :null_object => true)
|
52
|
+
@counter = mock("counter", :null_object => true)
|
53
|
+
@tally.stub!(:counter).and_return(@counter)
|
54
|
+
TallyAction.stub!(:new).and_return(@tally)
|
55
|
+
|
56
|
+
@timer = mock("timer", :null_object => true)
|
57
|
+
TimerAction.stub!(:new).and_return(@timer)
|
58
|
+
|
59
|
+
$stdout = IOStub.new
|
60
|
+
@state = SpecState.new("describe", "it")
|
61
|
+
@state.exceptions << ["msg", MSpecExampleError.new("broken")]
|
62
|
+
|
63
|
+
@formatter = YamlFormatter.new
|
64
|
+
@formatter.stub!(:backtrace).and_return("")
|
65
|
+
MSpec.stub!(:register)
|
66
|
+
@formatter.register
|
67
|
+
@formatter.after @state
|
68
|
+
end
|
69
|
+
|
70
|
+
after :each do
|
71
|
+
$stdout = STDOUT
|
72
|
+
end
|
73
|
+
|
74
|
+
it "calls #switch" do
|
75
|
+
@formatter.should_receive(:switch)
|
76
|
+
@formatter.finish
|
77
|
+
end
|
78
|
+
|
79
|
+
it "outputs a failure message and backtrace" do
|
80
|
+
@formatter.should_receive(:backtrace).and_return("path/to/some/file.rb:35:in method")
|
81
|
+
@formatter.finish
|
82
|
+
$stdout.should =~ /describe it ERROR/
|
83
|
+
$stdout.should =~ /MSpecExampleError occurred during: msg/
|
84
|
+
$stdout.should =~ /MSpecExampleError: broken/
|
85
|
+
$stdout.should =~ %r[path/to/some/file.rb:35:in method]
|
86
|
+
end
|
87
|
+
|
88
|
+
it "outputs an elapsed time" do
|
89
|
+
@timer.should_receive(:elapsed).and_return(4.2)
|
90
|
+
@formatter.finish
|
91
|
+
$stdout.should =~ /time: 4.2/
|
92
|
+
end
|
93
|
+
|
94
|
+
it "outputs a file count" do
|
95
|
+
@counter.should_receive(:files).and_return(3)
|
96
|
+
@formatter.finish
|
97
|
+
$stdout.should =~ /files: 3/
|
98
|
+
end
|
99
|
+
|
100
|
+
it "outputs an example count" do
|
101
|
+
@counter.should_receive(:examples).and_return(3)
|
102
|
+
@formatter.finish
|
103
|
+
$stdout.should =~ /examples: 3/
|
104
|
+
end
|
105
|
+
|
106
|
+
it "outputs an expectation count" do
|
107
|
+
@counter.should_receive(:expectations).and_return(9)
|
108
|
+
@formatter.finish
|
109
|
+
$stdout.should =~ /expectations: 9/
|
110
|
+
end
|
111
|
+
|
112
|
+
it "outputs a failure count" do
|
113
|
+
@counter.should_receive(:failures).and_return(2)
|
114
|
+
@formatter.finish
|
115
|
+
$stdout.should =~ /failures: 2/
|
116
|
+
end
|
117
|
+
|
118
|
+
it "outputs an error count" do
|
119
|
+
@counter.should_receive(:errors).and_return(1)
|
120
|
+
@formatter.finish
|
121
|
+
$stdout.should =~ /errors: 1/
|
122
|
+
end
|
123
|
+
end
|