mspec 1.0.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/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
|