1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
require 'spec_helper'
require 'mspec/guards'
require 'rbconfig'
describe SpecGuard, ".ruby_version" do
before :each do
@ruby_version = Object.const_get :RUBY_VERSION
Object.const_set :RUBY_VERSION, "8.2.3"
end
after :each do
Object.const_set :RUBY_VERSION, @ruby_version
end
it "returns the full version for :full" do
SpecGuard.ruby_version(:full).should == "8.2.3"
end
it "returns major.minor.tiny for :tiny" do
SpecGuard.ruby_version(:tiny).should == "8.2.3"
end
it "returns major.minor.tiny for :teeny" do
SpecGuard.ruby_version(:tiny).should == "8.2.3"
end
it "returns major.minor for :minor" do
SpecGuard.ruby_version(:minor).should == "8.2"
end
it "defaults to :minor" do
SpecGuard.ruby_version.should == "8.2"
end
it "returns major for :major" do
SpecGuard.ruby_version(:major).should == "8"
end
end
describe SpecGuard, "#yield?" do
before :each do
MSpec.clear_modes
@guard = SpecGuard.new
@guard.stub(:match?).and_return(false)
end
after :each do
MSpec.unregister :add, @guard
MSpec.clear_modes
SpecGuard.clear_guards
end
it "returns true if MSpec.mode?(:unguarded) is true" do
MSpec.register_mode :unguarded
@guard.yield?.should == true
end
it "returns true if MSpec.mode?(:verify) is true" do
MSpec.register_mode :verify
@guard.yield?.should == true
end
it "returns true if MSpec.mode?(:verify) is true regardless of invert being true" do
MSpec.register_mode :verify
@guard.yield?(true).should == true
end
it "returns true if MSpec.mode?(:report) is true" do
MSpec.register_mode :report
@guard.yield?.should == true
end
it "returns true if MSpec.mode?(:report) is true regardless of invert being true" do
MSpec.register_mode :report
@guard.yield?(true).should == true
end
it "returns true if MSpec.mode?(:report_on) is true and SpecGuards.guards contains the named guard" do
MSpec.register_mode :report_on
SpecGuard.guards << :guard_name
@guard.yield?.should == false
@guard.name = :guard_name
@guard.yield?.should == true
end
it "returns #match? if neither report nor verify mode are true" do
@guard.stub(:match?).and_return(false)
@guard.yield?.should == false
@guard.stub(:match?).and_return(true)
@guard.yield?.should == true
end
it "returns #match? if invert is true and neither report nor verify mode are true" do
@guard.stub(:match?).and_return(false)
@guard.yield?(true).should == true
@guard.stub(:match?).and_return(true)
@guard.yield?(true).should == false
end
end
describe SpecGuard, "#match?" do
before :each do
@guard = SpecGuard.new
end
it "must be implemented in subclasses" do
lambda {
@guard.match?
}.should raise_error("must be implemented by the subclass")
end
end
describe SpecGuard, "#unregister" do
before :each do
MSpec.stub(:unregister)
@guard = SpecGuard.new
end
it "unregisters from MSpec :add actions" do
MSpec.should_receive(:unregister).with(:add, @guard)
@guard.unregister
end
end
describe SpecGuard, "#record" do
after :each do
SpecGuard.clear
end
it "saves the name of the guarded spec under the name of the guard" do
guard = SpecGuard.new "a", "1.8"..."1.9"
guard.name = :named_guard
guard.record "SomeClass#action returns true"
SpecGuard.report.should == {
'named_guard a, 1.8...1.9' => ["SomeClass#action returns true"]
}
end
end
describe SpecGuard, ".guards" do
it "returns an Array" do
SpecGuard.guards.should be_kind_of(Array)
end
end
describe SpecGuard, ".clear_guards" do
it "resets the array to empty" do
SpecGuard.guards << :guard
SpecGuard.guards.should == [:guard]
SpecGuard.clear_guards
SpecGuard.guards.should == []
end
end
describe SpecGuard, ".finish" do
before :each do
$stdout = @out = IOStub.new
end
after :each do
$stdout = STDOUT
SpecGuard.clear
end
it "prints the descriptions of the guarded specs" do
guard = SpecGuard.new "a", "1.8"..."1.9"
guard.name = :named_guard
guard.record "SomeClass#action returns true"
guard.record "SomeClass#reverse returns false"
SpecGuard.finish
$stdout.should == %[
2 specs omitted by guard: named_guard a, 1.8...1.9:
SomeClass#action returns true
SomeClass#reverse returns false
]
end
end
|