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,393 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'mspec/helpers/tmp'
|
3
|
+
require 'mspec/matchers/base'
|
4
|
+
require 'mspec/runner/mspec'
|
5
|
+
|
6
|
+
describe MSpec, ".register_files" do
|
7
|
+
it "records which spec files to run" do
|
8
|
+
MSpec.register_files [:one, :two, :three]
|
9
|
+
MSpec.retrieve(:files).should == [:one, :two, :three]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe MSpec, ".register_mode" do
|
14
|
+
it "sets execution mode flags" do
|
15
|
+
MSpec.register_mode :verify
|
16
|
+
MSpec.retrieve(:mode).should == :verify
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe MSpec, ".register_tags_path" do
|
21
|
+
it "records the path to tag files" do
|
22
|
+
MSpec.register_tags_path "path/to/tags"
|
23
|
+
MSpec.retrieve(:tags_path).should == "path/to/tags"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe MSpec, ".register_exit" do
|
28
|
+
before :each do
|
29
|
+
MSpec.store :exit, 0
|
30
|
+
end
|
31
|
+
|
32
|
+
it "records the exit code" do
|
33
|
+
MSpec.exit_code.should == 0
|
34
|
+
MSpec.register_exit 1
|
35
|
+
MSpec.exit_code.should == 1
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe MSpec, ".exit_code" do
|
40
|
+
it "retrieves the code set with .register_exit" do
|
41
|
+
MSpec.register_exit 99
|
42
|
+
MSpec.exit_code.should == 99
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe MSpec, ".store" do
|
47
|
+
it "records data for MSpec settings" do
|
48
|
+
MSpec.store :anything, :value
|
49
|
+
MSpec.retrieve(:anything).should == :value
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe MSpec, ".retrieve" do
|
54
|
+
it "accesses .store'd data" do
|
55
|
+
MSpec.register :action, :first
|
56
|
+
MSpec.retrieve(:action).should == [:first]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe MSpec, ".randomize" do
|
61
|
+
it "sets the flag to randomize spec execution order" do
|
62
|
+
MSpec.randomize?.should == false
|
63
|
+
MSpec.randomize
|
64
|
+
MSpec.randomize?.should == true
|
65
|
+
MSpec.randomize false
|
66
|
+
MSpec.randomize?.should == false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe MSpec, ".register" do
|
71
|
+
it "is the gateway behind the register(symbol, action) facility" do
|
72
|
+
MSpec.register :bonus, :first
|
73
|
+
MSpec.register :bonus, :second
|
74
|
+
MSpec.register :bonus, :second
|
75
|
+
MSpec.retrieve(:bonus).should == [:first, :second]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe MSpec, ".unregister" do
|
80
|
+
it "is the gateway behind the unregister(symbol, actions) facility" do
|
81
|
+
MSpec.register :unregister, :first
|
82
|
+
MSpec.register :unregister, :second
|
83
|
+
MSpec.unregister :unregister, :second
|
84
|
+
MSpec.retrieve(:unregister).should == [:first]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe MSpec, ".protect" do
|
89
|
+
before :each do
|
90
|
+
@ss = mock('SpecState')
|
91
|
+
@ss.stub!(:exceptions).and_return([])
|
92
|
+
@rs = mock('RunState')
|
93
|
+
@rs.stub!(:state).and_return(@ss)
|
94
|
+
@exception = Exception.new("Sharp!")
|
95
|
+
ScratchPad.record @exception
|
96
|
+
end
|
97
|
+
|
98
|
+
it "rescues any exceptions raised when executing the block argument" do
|
99
|
+
MSpec.stack.push @rs
|
100
|
+
lambda {
|
101
|
+
MSpec.protect("") { raise Exception, "Now you see me..." }
|
102
|
+
}.should_not raise_error
|
103
|
+
end
|
104
|
+
|
105
|
+
it "records the exception in the current.state object's exceptions" do
|
106
|
+
MSpec.stack.push @rs
|
107
|
+
MSpec.protect("testing") { raise ScratchPad.recorded }
|
108
|
+
@ss.exceptions.should == [["testing", ScratchPad.recorded]]
|
109
|
+
end
|
110
|
+
|
111
|
+
it "writes a message to STDERR if current is nil" do
|
112
|
+
STDERR.stub!(:write)
|
113
|
+
STDERR.should_receive(:write).with("\nAn exception occurred in testing:\nException: \"Sharp!\"\n")
|
114
|
+
MSpec.stack.clear
|
115
|
+
MSpec.protect("testing") { raise ScratchPad.recorded }
|
116
|
+
end
|
117
|
+
|
118
|
+
it "writes a message to STDERR if current.state is nil" do
|
119
|
+
STDERR.stub!(:write)
|
120
|
+
STDERR.should_receive(:write).with("\nAn exception occurred in testing:\nException: \"Sharp!\"\n")
|
121
|
+
@rs.stub!(:state).and_return(nil)
|
122
|
+
MSpec.stack.push @rs
|
123
|
+
MSpec.protect("testing") { raise ScratchPad.recorded }
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe MSpec, ".stack" do
|
128
|
+
it "returns an array" do
|
129
|
+
MSpec.stack.should be_kind_of(Array)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe MSpec, ".current" do
|
134
|
+
it "returns the top of the execution stack" do
|
135
|
+
MSpec.stack.clear
|
136
|
+
MSpec.stack.push :a
|
137
|
+
MSpec.stack.push :b
|
138
|
+
MSpec.current.should == :b
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe MSpec, ".actions" do
|
143
|
+
before :each do
|
144
|
+
MSpec.store :start, []
|
145
|
+
ScratchPad.record []
|
146
|
+
start_one = mock("one")
|
147
|
+
start_one.stub!(:start).and_return { ScratchPad << :one }
|
148
|
+
start_two = mock("two")
|
149
|
+
start_two.stub!(:start).and_return { ScratchPad << :two }
|
150
|
+
MSpec.register :start, start_one
|
151
|
+
MSpec.register :start, start_two
|
152
|
+
end
|
153
|
+
|
154
|
+
it "does not attempt to run any actions if none have been registered" do
|
155
|
+
MSpec.store :finish, nil
|
156
|
+
lambda { MSpec.actions :finish }.should_not raise_error
|
157
|
+
end
|
158
|
+
|
159
|
+
it "runs each action registered as a start action" do
|
160
|
+
MSpec.actions :start
|
161
|
+
ScratchPad.recorded.should == [:one, :two]
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe MSpec, ".verify_mode?" do
|
166
|
+
before :each do
|
167
|
+
MSpec.store :mode, nil
|
168
|
+
end
|
169
|
+
|
170
|
+
it "returns true if register_mode(:verify) is called" do
|
171
|
+
MSpec.verify_mode?.should == false
|
172
|
+
MSpec.register_mode :verify
|
173
|
+
MSpec.verify_mode?.should == true
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
describe MSpec, ".report_mode?" do
|
178
|
+
before :each do
|
179
|
+
MSpec.store :mode, nil
|
180
|
+
end
|
181
|
+
|
182
|
+
it "returns true if register_mode(:report) is called" do
|
183
|
+
MSpec.report_mode?.should == false
|
184
|
+
MSpec.register_mode :report
|
185
|
+
MSpec.report_mode?.should == true
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe MSpec, ".describe" do
|
190
|
+
before :each do
|
191
|
+
MSpec.stack.clear
|
192
|
+
end
|
193
|
+
|
194
|
+
it "accepts one argument" do
|
195
|
+
MSpec.describe(Object) { ScratchPad.record MSpec.current }
|
196
|
+
ScratchPad.recorded.should be_kind_of(RunState)
|
197
|
+
end
|
198
|
+
|
199
|
+
it "pushes a new RunState instance on the stack" do
|
200
|
+
MSpec.describe(Object, "msg") { ScratchPad.record MSpec.current }
|
201
|
+
ScratchPad.recorded.should be_kind_of(RunState)
|
202
|
+
end
|
203
|
+
|
204
|
+
it "pops the RunState instance off the stack when finished" do
|
205
|
+
MSpec.describe(Object, "msg") { ScratchPad.record MSpec.current }
|
206
|
+
ScratchPad.recorded.should be_kind_of(RunState)
|
207
|
+
MSpec.stack.should == []
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
describe MSpec, ".process" do
|
212
|
+
before :each do
|
213
|
+
MSpec.stub!(:files)
|
214
|
+
MSpec.store :start, []
|
215
|
+
MSpec.store :finish, []
|
216
|
+
end
|
217
|
+
|
218
|
+
it "calls all start actions" do
|
219
|
+
start = mock("start")
|
220
|
+
start.stub!(:start).and_return { ScratchPad.record :start }
|
221
|
+
MSpec.register :start, start
|
222
|
+
MSpec.process
|
223
|
+
ScratchPad.recorded.should == :start
|
224
|
+
end
|
225
|
+
|
226
|
+
it "calls all finish actions" do
|
227
|
+
finish = mock("finish")
|
228
|
+
finish.stub!(:finish).and_return { ScratchPad.record :finish }
|
229
|
+
MSpec.register :finish, finish
|
230
|
+
MSpec.process
|
231
|
+
ScratchPad.recorded.should == :finish
|
232
|
+
end
|
233
|
+
|
234
|
+
it "calls the files method" do
|
235
|
+
MSpec.should_receive(:files)
|
236
|
+
MSpec.process
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
describe MSpec, ".files" do
|
241
|
+
before :each do
|
242
|
+
MSpec.store :load, []
|
243
|
+
MSpec.store :unload, []
|
244
|
+
MSpec.register_files [:one, :two, :three]
|
245
|
+
Kernel.stub!(:load)
|
246
|
+
end
|
247
|
+
|
248
|
+
it "calls load actions before each file" do
|
249
|
+
load = mock("load")
|
250
|
+
load.stub!(:load).and_return { ScratchPad.record :load }
|
251
|
+
MSpec.register :load, load
|
252
|
+
MSpec.files
|
253
|
+
ScratchPad.recorded.should == :load
|
254
|
+
end
|
255
|
+
|
256
|
+
it "shuffles the file list if .randomize? is true" do
|
257
|
+
MSpec.randomize
|
258
|
+
MSpec.should_receive(:shuffle)
|
259
|
+
MSpec.files
|
260
|
+
MSpec.randomize false
|
261
|
+
end
|
262
|
+
|
263
|
+
it "registers the current file" do
|
264
|
+
MSpec.should_receive(:store).with(:file, :one)
|
265
|
+
MSpec.should_receive(:store).with(:file, :two)
|
266
|
+
MSpec.should_receive(:store).with(:file, :three)
|
267
|
+
MSpec.files
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
describe MSpec, ".shuffle" do
|
272
|
+
before :each do
|
273
|
+
@base = (0..100).to_a
|
274
|
+
@list = @base.clone
|
275
|
+
MSpec.shuffle @list
|
276
|
+
end
|
277
|
+
|
278
|
+
it "does not alter the elements in the list" do
|
279
|
+
@base.each do |elt|
|
280
|
+
@list.should include(elt)
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
it "changes the order of the list" do
|
285
|
+
# obviously, this spec has a certain probability
|
286
|
+
# of failing. If it fails, run it again.
|
287
|
+
@list.should_not == @base
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
describe MSpec, ".tags_path" do
|
292
|
+
before :each do
|
293
|
+
MSpec.store :tags_path, nil
|
294
|
+
end
|
295
|
+
|
296
|
+
it "returns 'spec/tags' if no tags path has been registered" do
|
297
|
+
MSpec.tags_path.should == "spec/tags"
|
298
|
+
end
|
299
|
+
|
300
|
+
it "returns the registered tags path" do
|
301
|
+
MSpec.register_tags_path "/path/to/tags"
|
302
|
+
MSpec.tags_path.should == "/path/to/tags"
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
describe MSpec, ".tags_file" do
|
307
|
+
before :each do
|
308
|
+
MSpec.store :file, "/path/to/spec/something/some_spec.rb"
|
309
|
+
MSpec.store :tags_path, nil
|
310
|
+
end
|
311
|
+
|
312
|
+
it "returns the tags file for the current spec file with default tags_path" do
|
313
|
+
MSpec.tags_file.should == "spec/tags/something/some_tags.txt"
|
314
|
+
end
|
315
|
+
|
316
|
+
it "returns the tags file for the current spec file with custom tags_path" do
|
317
|
+
MSpec.register_tags_path "/path/to/tags"
|
318
|
+
MSpec.tags_file.should == "/path/to/tags/something/some_tags.txt"
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
describe MSpec, ".read_tags" do
|
323
|
+
before :each do
|
324
|
+
MSpec.stub!(:tags_file).and_return(File.dirname(__FILE__) + '/tags.txt')
|
325
|
+
end
|
326
|
+
|
327
|
+
it "returns a list of tag instances for matching tag names found" do
|
328
|
+
one = SpecTag.new "fail(broken):Some#method? works"
|
329
|
+
MSpec.read_tags("fail", "pass").should == [one]
|
330
|
+
end
|
331
|
+
|
332
|
+
it "returns [] if no tags names match" do
|
333
|
+
MSpec.read_tags("super").should == []
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
describe MSpec, ".write_tag" do
|
338
|
+
before :each do
|
339
|
+
FileUtils.stub!(:mkdir_p)
|
340
|
+
MSpec.stub!(:tags_file).and_return(tmp("tags.txt"))
|
341
|
+
@tag = SpecTag.new "fail(broken):Some#method works"
|
342
|
+
end
|
343
|
+
|
344
|
+
after :all do
|
345
|
+
File.delete tmp("tags.txt") rescue nil
|
346
|
+
end
|
347
|
+
|
348
|
+
it "writes a tag to the tags file for the current spec file" do
|
349
|
+
MSpec.write_tag @tag
|
350
|
+
IO.read(tmp("tags.txt")).should == "fail(broken):Some#method works\n"
|
351
|
+
end
|
352
|
+
|
353
|
+
it "does not write a duplicate tag" do
|
354
|
+
File.open(tmp("tags.txt"), "w") { |f| f.puts @tag }
|
355
|
+
MSpec.write_tag @tag
|
356
|
+
IO.read(tmp("tags.txt")).should == "fail(broken):Some#method works\n"
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
describe MSpec, ".delete_tag" do
|
361
|
+
before :each do
|
362
|
+
FileUtils.cp File.dirname(__FILE__) + "/tags.txt", tmp("tags.txt")
|
363
|
+
MSpec.stub!(:tags_file).and_return(tmp("tags.txt"))
|
364
|
+
@tag = SpecTag.new "fail(Comments don't matter):Some#method? works"
|
365
|
+
end
|
366
|
+
|
367
|
+
after :each do
|
368
|
+
File.delete tmp("tags.txt") rescue nil
|
369
|
+
end
|
370
|
+
|
371
|
+
it "deletes the tag if it exists" do
|
372
|
+
MSpec.delete_tag(@tag).should == true
|
373
|
+
IO.read(tmp("tags.txt")).should == %[incomplete(20%):The#best method ever
|
374
|
+
benchmark(0.01825):The#fastest method today
|
375
|
+
]
|
376
|
+
end
|
377
|
+
|
378
|
+
it "does not change the tags file contents if the tag doesn't exist" do
|
379
|
+
@tag.tag = "failed"
|
380
|
+
MSpec.delete_tag(@tag).should == false
|
381
|
+
IO.read(tmp("tags.txt")).should == %[fail(broken):Some#method? works
|
382
|
+
incomplete(20%):The#best method ever
|
383
|
+
benchmark(0.01825):The#fastest method today
|
384
|
+
]
|
385
|
+
end
|
386
|
+
|
387
|
+
it "deletes the tag file if it is empty" do
|
388
|
+
MSpec.delete_tag(@tag).should == true
|
389
|
+
MSpec.delete_tag(SpecTag.new("incomplete:The#best method ever")).should == true
|
390
|
+
MSpec.delete_tag(SpecTag.new("benchmark:The#fastest method today")).should == true
|
391
|
+
File.exist?(tmp("tags.txt")).should == false
|
392
|
+
end
|
393
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'mspec/runner/shared'
|
3
|
+
|
4
|
+
describe Object, "#shared" do
|
5
|
+
it "stores the passed block in the MSpec module" do
|
6
|
+
proc = lambda { :shared }
|
7
|
+
shared :shared, &proc
|
8
|
+
MSpec.retrieve(:shared).should == proc
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe Object, "#it_behaves_like" do
|
13
|
+
before :each do
|
14
|
+
end
|
15
|
+
|
16
|
+
it "retrieves the instance variable set on Object and calls the proc" do
|
17
|
+
proc = lambda { |a| raise Exception, "visited with #{a.inspect}" }
|
18
|
+
shared :shared, &proc
|
19
|
+
lambda {
|
20
|
+
it_behaves_like(:shared, nil)
|
21
|
+
}.should raise_error(Exception, "visited with nil")
|
22
|
+
end
|
23
|
+
|
24
|
+
it "accepts an optional argument to specify the class/module" do
|
25
|
+
proc = lambda { |a, b| raise Exception, "visited with #{a.inspect}, #{b.inspect}" }
|
26
|
+
shared :shared, &proc
|
27
|
+
lambda {
|
28
|
+
it_behaves_like(:shared, :method, :klass)
|
29
|
+
}.should raise_error(Exception, "visited with :method, :klass")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "accepts an optional argument to specify the class/module name" do
|
33
|
+
proc = lambda { |a, b, c|
|
34
|
+
raise Exception, "visited with #{a.inspect}, #{b.inspect}, #{c.inspect}"
|
35
|
+
}
|
36
|
+
shared :shared, &proc
|
37
|
+
lambda {
|
38
|
+
it_behaves_like(:shared, :method, :klass, :name)
|
39
|
+
}.should raise_error(Exception, "visited with :method, :klass, :name")
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,535 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'mspec/matchers/base'
|
3
|
+
require 'mspec/runner/mspec'
|
4
|
+
require 'mspec/mocks/mock'
|
5
|
+
require 'mspec/runner/state'
|
6
|
+
|
7
|
+
describe RunState do
|
8
|
+
before :each do
|
9
|
+
@state = RunState.new
|
10
|
+
@proc = lambda { }
|
11
|
+
end
|
12
|
+
|
13
|
+
it "records before(:all) blocks" do
|
14
|
+
@state.before(:all, &@proc)
|
15
|
+
@state.instance_variable_get(:@start).should == [@proc]
|
16
|
+
end
|
17
|
+
|
18
|
+
it "records before(:each) blocks" do
|
19
|
+
@state.before(:each, &@proc)
|
20
|
+
@state.instance_variable_get(:@before).should == [@proc]
|
21
|
+
end
|
22
|
+
|
23
|
+
it "records after(:all) blocks" do
|
24
|
+
@state.after(:all, &@proc)
|
25
|
+
@state.instance_variable_get(:@finish).should == [@proc]
|
26
|
+
end
|
27
|
+
|
28
|
+
it "records after(:each) blocks" do
|
29
|
+
@state.after(:each, &@proc)
|
30
|
+
@state.instance_variable_get(:@after).should == [@proc]
|
31
|
+
end
|
32
|
+
|
33
|
+
it "records it blocks" do
|
34
|
+
@state.it("message", &@proc)
|
35
|
+
msg, proc = @state.instance_variable_get(:@spec)[0]
|
36
|
+
msg.should == "message"
|
37
|
+
proc.should == @proc
|
38
|
+
end
|
39
|
+
|
40
|
+
it "records describe blocks" do
|
41
|
+
@state.describe(Object, "message", &@proc)
|
42
|
+
@state.instance_variable_get(:@describe).should == "Object message"
|
43
|
+
@state.instance_variable_get(:@block).should == @proc
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe RunState, "#protect" do
|
48
|
+
it "calls MSpec.protect" do
|
49
|
+
ScratchPad.record []
|
50
|
+
a = lambda { ScratchPad << :a }
|
51
|
+
b = lambda { ScratchPad << :b }
|
52
|
+
RunState.new.protect("message", [a, b])
|
53
|
+
ScratchPad.recorded.should == [:a, :b]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe RunState, "#state" do
|
58
|
+
before :each do
|
59
|
+
MSpec.store :before, []
|
60
|
+
MSpec.store :after, []
|
61
|
+
|
62
|
+
@state = RunState.new
|
63
|
+
end
|
64
|
+
|
65
|
+
it "returns nil if no spec is being executed" do
|
66
|
+
@state.state.should == nil
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns a SpecState instance if a spec is being executed" do
|
70
|
+
ScratchPad.record @state
|
71
|
+
@state.describe("") { }
|
72
|
+
@state.it("") { ScratchPad.record ScratchPad.recorded.state }
|
73
|
+
@state.process
|
74
|
+
@state.state.should == nil
|
75
|
+
ScratchPad.recorded.should be_kind_of(SpecState)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe RunState, "#process" do
|
80
|
+
before :each do
|
81
|
+
MSpec.store :before, []
|
82
|
+
MSpec.store :after, []
|
83
|
+
|
84
|
+
@state = RunState.new
|
85
|
+
@state.describe("") { }
|
86
|
+
|
87
|
+
@a = lambda { ScratchPad << :a }
|
88
|
+
@b = lambda { ScratchPad << :b }
|
89
|
+
ScratchPad.record []
|
90
|
+
end
|
91
|
+
|
92
|
+
it "calls each before(:all) block" do
|
93
|
+
@state.before(:all, &@a)
|
94
|
+
@state.before(:all, &@b)
|
95
|
+
@state.it("") { }
|
96
|
+
@state.process
|
97
|
+
ScratchPad.recorded.should == [:a, :b]
|
98
|
+
end
|
99
|
+
|
100
|
+
it "calls each after(:all) block" do
|
101
|
+
@state.after(:all, &@a)
|
102
|
+
@state.after(:all, &@b)
|
103
|
+
@state.it("") { }
|
104
|
+
@state.process
|
105
|
+
ScratchPad.recorded.should == [:a, :b]
|
106
|
+
end
|
107
|
+
|
108
|
+
it "calls each it block" do
|
109
|
+
@state.it("one", &@a)
|
110
|
+
@state.it("two", &@b)
|
111
|
+
@state.process
|
112
|
+
ScratchPad.recorded.should == [:a, :b]
|
113
|
+
end
|
114
|
+
|
115
|
+
it "calls each before(:each) block" do
|
116
|
+
@state.before(:each, &@a)
|
117
|
+
@state.before(:each, &@b)
|
118
|
+
@state.it("") { }
|
119
|
+
@state.process
|
120
|
+
ScratchPad.recorded.should == [:a, :b]
|
121
|
+
end
|
122
|
+
|
123
|
+
it "calls each after(:each) block" do
|
124
|
+
@state.after(:each, &@a)
|
125
|
+
@state.after(:each, &@b)
|
126
|
+
@state.it("") { }
|
127
|
+
@state.process
|
128
|
+
ScratchPad.recorded.should == [:a, :b]
|
129
|
+
end
|
130
|
+
|
131
|
+
it "calls Mock.cleanup for each it block" do
|
132
|
+
@state.it("") { }
|
133
|
+
@state.it("") { }
|
134
|
+
Mock.should_receive(:cleanup).twice
|
135
|
+
@state.process
|
136
|
+
end
|
137
|
+
|
138
|
+
it "calls Mock.verify_count for each it block" do
|
139
|
+
@state.it("") { }
|
140
|
+
@state.it("") { }
|
141
|
+
Mock.should_receive(:verify_count).twice
|
142
|
+
@state.process
|
143
|
+
end
|
144
|
+
|
145
|
+
it "calls the describe block" do
|
146
|
+
ScratchPad.record []
|
147
|
+
@state.describe(Object, "msg") { ScratchPad << :a }
|
148
|
+
@state.process
|
149
|
+
ScratchPad.recorded.should == [:a]
|
150
|
+
end
|
151
|
+
|
152
|
+
it "creates a new SpecState instance for each spec" do
|
153
|
+
ScratchPad.record @state
|
154
|
+
@state.describe("desc") { }
|
155
|
+
@state.it("it") { ScratchPad.record ScratchPad.recorded.state }
|
156
|
+
@state.process
|
157
|
+
ScratchPad.recorded.should be_kind_of(SpecState)
|
158
|
+
end
|
159
|
+
|
160
|
+
it "records exceptions that occur while running the spec" do
|
161
|
+
ScratchPad.record @state
|
162
|
+
exception = Exception.new("bump!")
|
163
|
+
MSpec.stack.push @state
|
164
|
+
@state.describe("describe") { }
|
165
|
+
@state.it("it") { raise exception }
|
166
|
+
@state.after(:each) { ScratchPad.record ScratchPad.recorded.state.exceptions }
|
167
|
+
@state.process
|
168
|
+
ScratchPad.recorded.should == [[nil, exception]]
|
169
|
+
end
|
170
|
+
|
171
|
+
it "shuffles the spec list if MSpec.randomize? is true" do
|
172
|
+
MSpec.randomize
|
173
|
+
MSpec.should_receive(:shuffle)
|
174
|
+
@state.it("") { }
|
175
|
+
@state.process
|
176
|
+
MSpec.randomize false
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe RunState, "#process in pretend mode" do
|
181
|
+
before :all do
|
182
|
+
MSpec.register_mode :pretend
|
183
|
+
end
|
184
|
+
|
185
|
+
after :all do
|
186
|
+
MSpec.register_mode nil
|
187
|
+
end
|
188
|
+
|
189
|
+
before :each do
|
190
|
+
MSpec.store :before, []
|
191
|
+
MSpec.store :after, []
|
192
|
+
|
193
|
+
@state = RunState.new
|
194
|
+
@state.describe("") { }
|
195
|
+
|
196
|
+
@a = lambda { ScratchPad << :a }
|
197
|
+
@b = lambda { ScratchPad << :b }
|
198
|
+
ScratchPad.record []
|
199
|
+
end
|
200
|
+
|
201
|
+
it "does not call any before(:all) block" do
|
202
|
+
@state.before(:all, &@a)
|
203
|
+
@state.before(:all, &@b)
|
204
|
+
@state.it("") { }
|
205
|
+
@state.process
|
206
|
+
ScratchPad.recorded.should == []
|
207
|
+
end
|
208
|
+
|
209
|
+
it "does not call any after(:all) block" do
|
210
|
+
@state.after(:all, &@a)
|
211
|
+
@state.after(:all, &@b)
|
212
|
+
@state.it("") { }
|
213
|
+
@state.process
|
214
|
+
ScratchPad.recorded.should == []
|
215
|
+
end
|
216
|
+
|
217
|
+
it "does not call any it block" do
|
218
|
+
@state.it("one", &@a)
|
219
|
+
@state.it("two", &@b)
|
220
|
+
@state.process
|
221
|
+
ScratchPad.recorded.should == []
|
222
|
+
end
|
223
|
+
|
224
|
+
it "does not call any before(:each) block" do
|
225
|
+
@state.before(:each, &@a)
|
226
|
+
@state.before(:each, &@b)
|
227
|
+
@state.it("") { }
|
228
|
+
@state.process
|
229
|
+
ScratchPad.recorded.should == []
|
230
|
+
end
|
231
|
+
|
232
|
+
it "does not call any after(:each) block" do
|
233
|
+
@state.after(:each, &@a)
|
234
|
+
@state.after(:each, &@b)
|
235
|
+
@state.it("") { }
|
236
|
+
@state.process
|
237
|
+
ScratchPad.recorded.should == []
|
238
|
+
end
|
239
|
+
|
240
|
+
it "does not call Mock.cleanup" do
|
241
|
+
@state.it("") { }
|
242
|
+
@state.it("") { }
|
243
|
+
Mock.should_not_receive(:cleanup)
|
244
|
+
@state.process
|
245
|
+
end
|
246
|
+
|
247
|
+
it "calls the describe block" do
|
248
|
+
ScratchPad.record []
|
249
|
+
@state.describe(Object, "msg") { ScratchPad << :a }
|
250
|
+
@state.process
|
251
|
+
ScratchPad.recorded.should == [:a]
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
describe RunState, "#process" do
|
256
|
+
before :each do
|
257
|
+
MSpec.store :before, []
|
258
|
+
MSpec.store :after, []
|
259
|
+
|
260
|
+
@state = RunState.new
|
261
|
+
@state.describe("") { }
|
262
|
+
@state.it("") { }
|
263
|
+
end
|
264
|
+
|
265
|
+
after :each do
|
266
|
+
MSpec.store :before, nil
|
267
|
+
MSpec.store :after, nil
|
268
|
+
end
|
269
|
+
|
270
|
+
it "calls registered before actions with the current SpecState instance" do
|
271
|
+
before = mock("before")
|
272
|
+
before.should_receive(:before).and_return {
|
273
|
+
ScratchPad.record :before
|
274
|
+
@spec_state = @state.state
|
275
|
+
}
|
276
|
+
MSpec.register :before, before
|
277
|
+
@state.process
|
278
|
+
ScratchPad.recorded.should == :before
|
279
|
+
@spec_state.should be_kind_of(SpecState)
|
280
|
+
end
|
281
|
+
|
282
|
+
it "calls registered after actions with the current SpecState instance" do
|
283
|
+
after = mock("after")
|
284
|
+
after.should_receive(:after).and_return {
|
285
|
+
ScratchPad.record :after
|
286
|
+
@spec_state = @state.state
|
287
|
+
}
|
288
|
+
MSpec.register :after, after
|
289
|
+
@state.process
|
290
|
+
ScratchPad.recorded.should == :after
|
291
|
+
@spec_state.should be_kind_of(SpecState)
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
describe RunState, "#process in pretend mode" do
|
296
|
+
before :all do
|
297
|
+
MSpec.register_mode :pretend
|
298
|
+
end
|
299
|
+
|
300
|
+
after :all do
|
301
|
+
MSpec.register_mode nil
|
302
|
+
end
|
303
|
+
|
304
|
+
before :each do
|
305
|
+
MSpec.store :before, []
|
306
|
+
MSpec.store :after, []
|
307
|
+
|
308
|
+
@state = RunState.new
|
309
|
+
@state.describe("") { }
|
310
|
+
@state.it("") { }
|
311
|
+
end
|
312
|
+
|
313
|
+
after :each do
|
314
|
+
MSpec.store :before, nil
|
315
|
+
MSpec.store :after, nil
|
316
|
+
end
|
317
|
+
|
318
|
+
it "calls registered before actions with the current SpecState instance" do
|
319
|
+
before = mock("before")
|
320
|
+
before.should_receive(:before).and_return {
|
321
|
+
ScratchPad.record :before
|
322
|
+
@spec_state = @state.state
|
323
|
+
}
|
324
|
+
MSpec.register :before, before
|
325
|
+
@state.process
|
326
|
+
ScratchPad.recorded.should == :before
|
327
|
+
@spec_state.should be_kind_of(SpecState)
|
328
|
+
end
|
329
|
+
|
330
|
+
it "calls registered after actions with the current SpecState instance" do
|
331
|
+
after = mock("after")
|
332
|
+
after.should_receive(:after).and_return {
|
333
|
+
ScratchPad.record :after
|
334
|
+
@spec_state = @state.state
|
335
|
+
}
|
336
|
+
MSpec.register :after, after
|
337
|
+
@state.process
|
338
|
+
ScratchPad.recorded.should == :after
|
339
|
+
@spec_state.should be_kind_of(SpecState)
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
describe RunState, "#process" do
|
344
|
+
before :each do
|
345
|
+
MSpec.store :enter, []
|
346
|
+
MSpec.store :leave, []
|
347
|
+
|
348
|
+
@state = RunState.new
|
349
|
+
@state.describe("") { }
|
350
|
+
@state.it("") { }
|
351
|
+
end
|
352
|
+
|
353
|
+
after :each do
|
354
|
+
MSpec.store :enter, nil
|
355
|
+
MSpec.store :leave, nil
|
356
|
+
end
|
357
|
+
|
358
|
+
it "calls registered enter actions with the current #describe string" do
|
359
|
+
enter = mock("enter")
|
360
|
+
enter.should_receive(:enter).and_return { ScratchPad.record :enter }
|
361
|
+
MSpec.register :enter, enter
|
362
|
+
@state.process
|
363
|
+
ScratchPad.recorded.should == :enter
|
364
|
+
end
|
365
|
+
|
366
|
+
it "calls registered leave actions" do
|
367
|
+
leave = mock("leave")
|
368
|
+
leave.should_receive(:leave).and_return { ScratchPad.record :leave }
|
369
|
+
MSpec.register :leave, leave
|
370
|
+
@state.process
|
371
|
+
ScratchPad.recorded.should == :leave
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
describe RunState, "#process in pretend mode" do
|
376
|
+
before :all do
|
377
|
+
MSpec.register_mode :pretend
|
378
|
+
end
|
379
|
+
|
380
|
+
after :all do
|
381
|
+
MSpec.register_mode nil
|
382
|
+
end
|
383
|
+
|
384
|
+
before :each do
|
385
|
+
MSpec.store :enter, []
|
386
|
+
MSpec.store :leave, []
|
387
|
+
|
388
|
+
@state = RunState.new
|
389
|
+
@state.describe("") { }
|
390
|
+
@state.it("") { }
|
391
|
+
end
|
392
|
+
|
393
|
+
after :each do
|
394
|
+
MSpec.store :enter, nil
|
395
|
+
MSpec.store :leave, nil
|
396
|
+
end
|
397
|
+
|
398
|
+
it "calls registered enter actions with the current #describe string" do
|
399
|
+
enter = mock("enter")
|
400
|
+
enter.should_receive(:enter).and_return { ScratchPad.record :enter }
|
401
|
+
MSpec.register :enter, enter
|
402
|
+
@state.process
|
403
|
+
ScratchPad.recorded.should == :enter
|
404
|
+
end
|
405
|
+
|
406
|
+
it "calls registered leave actions" do
|
407
|
+
leave = mock("leave")
|
408
|
+
leave.should_receive(:leave).and_return { ScratchPad.record :leave }
|
409
|
+
MSpec.register :leave, leave
|
410
|
+
@state.process
|
411
|
+
ScratchPad.recorded.should == :leave
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
describe SpecState do
|
416
|
+
it "is initialized with the describe and it strings" do
|
417
|
+
SpecState.new("This", "does").should be_kind_of(SpecState)
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
describe SpecState, "#describe" do
|
422
|
+
before :each do
|
423
|
+
@state = SpecState.new("describe", "it")
|
424
|
+
end
|
425
|
+
|
426
|
+
it "returns the arguments to the #describe block stringified and concatenated" do
|
427
|
+
@state.describe.should == "describe"
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
describe SpecState, "#it" do
|
432
|
+
before :each do
|
433
|
+
@state = SpecState.new("describe", "it")
|
434
|
+
end
|
435
|
+
|
436
|
+
it "returns the argument to the #it block" do
|
437
|
+
@state.it.should == "it"
|
438
|
+
end
|
439
|
+
end
|
440
|
+
|
441
|
+
describe SpecState, "#exceptions" do
|
442
|
+
before :each do
|
443
|
+
@state = SpecState.new("describe", "it")
|
444
|
+
end
|
445
|
+
|
446
|
+
it "returns an array" do
|
447
|
+
@state.exceptions.should be_kind_of(Array)
|
448
|
+
end
|
449
|
+
end
|
450
|
+
|
451
|
+
describe SpecState, "#exception?" do
|
452
|
+
before :each do
|
453
|
+
@state = SpecState.new("describe", "it")
|
454
|
+
end
|
455
|
+
|
456
|
+
it "returns false if no exceptions were recorded" do
|
457
|
+
@state.exception?.should == false
|
458
|
+
end
|
459
|
+
|
460
|
+
it "returns true if any exceptions were recorded" do
|
461
|
+
@state.exceptions.push :a
|
462
|
+
@state.exception?.should == true
|
463
|
+
end
|
464
|
+
end
|
465
|
+
|
466
|
+
describe SpecState, "#unfiltered?" do
|
467
|
+
before :each do
|
468
|
+
MSpec.store :include, nil
|
469
|
+
MSpec.store :exclude, nil
|
470
|
+
|
471
|
+
@state = SpecState.new("describe", "it")
|
472
|
+
@filter = mock("filter")
|
473
|
+
end
|
474
|
+
|
475
|
+
it "returns true if MSpec include filters list is empty" do
|
476
|
+
@state.unfiltered?.should == true
|
477
|
+
end
|
478
|
+
|
479
|
+
it "returns true if MSpec include filters match this spec" do
|
480
|
+
@filter.should_receive(:===).and_return(true)
|
481
|
+
MSpec.register :include, @filter
|
482
|
+
@state.unfiltered?.should == true
|
483
|
+
end
|
484
|
+
|
485
|
+
it "returns false if MSpec include filters do not match this spec" do
|
486
|
+
@filter.should_receive(:===).and_return(false)
|
487
|
+
MSpec.register :include, @filter
|
488
|
+
@state.unfiltered?.should == false
|
489
|
+
end
|
490
|
+
|
491
|
+
it "returns true if MSpec exclude filters list is empty" do
|
492
|
+
@state.unfiltered?.should == true
|
493
|
+
end
|
494
|
+
|
495
|
+
it "returns true if MSpec exclude filters do not match this spec" do
|
496
|
+
@filter.should_receive(:===).and_return(false)
|
497
|
+
MSpec.register :exclude, @filter
|
498
|
+
@state.unfiltered?.should == true
|
499
|
+
end
|
500
|
+
|
501
|
+
it "returns false if MSpec exclude filters match this spec" do
|
502
|
+
@filter.should_receive(:===).and_return(true)
|
503
|
+
MSpec.register :exclude, @filter
|
504
|
+
@state.unfiltered?.should == false
|
505
|
+
end
|
506
|
+
|
507
|
+
it "returns false if MSpec include and exclude filters match this spec" do
|
508
|
+
@filter.should_receive(:===).twice.and_return(true)
|
509
|
+
MSpec.register :include, @filter
|
510
|
+
MSpec.register :exclude, @filter
|
511
|
+
@state.unfiltered?.should == false
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
515
|
+
describe SpecState, "#filtered?" do
|
516
|
+
before :each do
|
517
|
+
@state = SpecState.new("describe", "it")
|
518
|
+
end
|
519
|
+
|
520
|
+
it "returns true if #unfiltered returns false" do
|
521
|
+
@state.should_receive(:unfiltered?).and_return(false)
|
522
|
+
@state.filtered?.should == true
|
523
|
+
end
|
524
|
+
|
525
|
+
it "returns false if #unfiltered returns true" do
|
526
|
+
@state.should_receive(:unfiltered?).and_return(true)
|
527
|
+
@state.filtered?.should == false
|
528
|
+
end
|
529
|
+
end
|
530
|
+
|
531
|
+
describe SpecState, "#failure?" do
|
532
|
+
before :each do
|
533
|
+
@state = SpecState.new("describe", "it")
|
534
|
+
end
|
535
|
+
end
|