mspec 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. data/LICENSE +22 -0
  2. data/README +101 -0
  3. data/Rakefile +44 -0
  4. data/bin/mkspec +7 -0
  5. data/bin/mspec +7 -0
  6. data/bin/mspec-ci +8 -0
  7. data/bin/mspec-run +8 -0
  8. data/bin/mspec-tag +8 -0
  9. data/lib/mspec.rb +6 -0
  10. data/lib/mspec/commands/mkspec.rb +147 -0
  11. data/lib/mspec/commands/mspec-ci.rb +71 -0
  12. data/lib/mspec/commands/mspec-run.rb +80 -0
  13. data/lib/mspec/commands/mspec-tag.rb +87 -0
  14. data/lib/mspec/commands/mspec.rb +143 -0
  15. data/lib/mspec/expectations.rb +2 -0
  16. data/lib/mspec/expectations/expectations.rb +12 -0
  17. data/lib/mspec/expectations/should.rb +23 -0
  18. data/lib/mspec/guards.rb +13 -0
  19. data/lib/mspec/guards/bug.rb +27 -0
  20. data/lib/mspec/guards/compliance.rb +18 -0
  21. data/lib/mspec/guards/conflict.rb +16 -0
  22. data/lib/mspec/guards/endian.rb +40 -0
  23. data/lib/mspec/guards/extensions.rb +12 -0
  24. data/lib/mspec/guards/guard.rb +120 -0
  25. data/lib/mspec/guards/noncompliance.rb +12 -0
  26. data/lib/mspec/guards/platform.rb +38 -0
  27. data/lib/mspec/guards/quarantine.rb +15 -0
  28. data/lib/mspec/guards/runner.rb +30 -0
  29. data/lib/mspec/guards/superuser.rb +15 -0
  30. data/lib/mspec/guards/support.rb +12 -0
  31. data/lib/mspec/guards/version.rb +40 -0
  32. data/lib/mspec/helpers.rb +6 -0
  33. data/lib/mspec/helpers/bignum.rb +5 -0
  34. data/lib/mspec/helpers/const_lookup.rb +5 -0
  35. data/lib/mspec/helpers/flunk.rb +5 -0
  36. data/lib/mspec/helpers/io.rb +13 -0
  37. data/lib/mspec/helpers/scratch.rb +17 -0
  38. data/lib/mspec/helpers/tmp.rb +32 -0
  39. data/lib/mspec/matchers.rb +16 -0
  40. data/lib/mspec/matchers/base.rb +95 -0
  41. data/lib/mspec/matchers/be_ancestor_of.rb +24 -0
  42. data/lib/mspec/matchers/be_close.rb +27 -0
  43. data/lib/mspec/matchers/be_empty.rb +20 -0
  44. data/lib/mspec/matchers/be_false.rb +20 -0
  45. data/lib/mspec/matchers/be_kind_of.rb +24 -0
  46. data/lib/mspec/matchers/be_nil.rb +20 -0
  47. data/lib/mspec/matchers/be_true.rb +20 -0
  48. data/lib/mspec/matchers/complain.rb +56 -0
  49. data/lib/mspec/matchers/eql.rb +26 -0
  50. data/lib/mspec/matchers/equal.rb +26 -0
  51. data/lib/mspec/matchers/equal_utf16.rb +34 -0
  52. data/lib/mspec/matchers/include.rb +32 -0
  53. data/lib/mspec/matchers/output.rb +67 -0
  54. data/lib/mspec/matchers/output_to_fd.rb +71 -0
  55. data/lib/mspec/matchers/raise_error.rb +48 -0
  56. data/lib/mspec/mocks.rb +3 -0
  57. data/lib/mspec/mocks/mock.rb +123 -0
  58. data/lib/mspec/mocks/object.rb +28 -0
  59. data/lib/mspec/mocks/proxy.rb +112 -0
  60. data/lib/mspec/runner.rb +13 -0
  61. data/lib/mspec/runner/actions.rb +6 -0
  62. data/lib/mspec/runner/actions/debug.rb +17 -0
  63. data/lib/mspec/runner/actions/filter.rb +40 -0
  64. data/lib/mspec/runner/actions/gdb.rb +17 -0
  65. data/lib/mspec/runner/actions/tag.rb +97 -0
  66. data/lib/mspec/runner/actions/tally.rb +80 -0
  67. data/lib/mspec/runner/actions/timer.rb +22 -0
  68. data/lib/mspec/runner/filters.rb +4 -0
  69. data/lib/mspec/runner/filters/match.rb +22 -0
  70. data/lib/mspec/runner/filters/profile.rb +54 -0
  71. data/lib/mspec/runner/filters/regexp.rb +7 -0
  72. data/lib/mspec/runner/filters/tag.rb +29 -0
  73. data/lib/mspec/runner/formatters.rb +7 -0
  74. data/lib/mspec/runner/formatters/dotted.rb +81 -0
  75. data/lib/mspec/runner/formatters/html.rb +87 -0
  76. data/lib/mspec/runner/formatters/specdoc.rb +27 -0
  77. data/lib/mspec/runner/formatters/spinner.rb +89 -0
  78. data/lib/mspec/runner/formatters/summary.rb +8 -0
  79. data/lib/mspec/runner/formatters/unit.rb +25 -0
  80. data/lib/mspec/runner/formatters/yaml.rb +43 -0
  81. data/lib/mspec/runner/mspec.rb +232 -0
  82. data/lib/mspec/runner/object.rb +20 -0
  83. data/lib/mspec/runner/shared.rb +12 -0
  84. data/lib/mspec/runner/state.rb +116 -0
  85. data/lib/mspec/runner/tag.rb +20 -0
  86. data/lib/mspec/utils/name_map.rb +130 -0
  87. data/lib/mspec/utils/options.rb +344 -0
  88. data/lib/mspec/utils/script.rb +77 -0
  89. data/lib/mspec/version.rb +3 -0
  90. data/spec/commands/mkspec_spec.rb +321 -0
  91. data/spec/commands/mspec_ci_spec.rb +139 -0
  92. data/spec/commands/mspec_run_spec.rb +146 -0
  93. data/spec/commands/mspec_spec.rb +359 -0
  94. data/spec/commands/mspec_tag_spec.rb +131 -0
  95. data/spec/expectations/expectations_spec.rb +16 -0
  96. data/spec/expectations/should_spec.rb +99 -0
  97. data/spec/guards/bug_spec.rb +137 -0
  98. data/spec/guards/compliance_spec.rb +70 -0
  99. data/spec/guards/conflict_spec.rb +20 -0
  100. data/spec/guards/endian_spec.rb +42 -0
  101. data/spec/guards/extensions_spec.rb +36 -0
  102. data/spec/guards/guard_spec.rb +355 -0
  103. data/spec/guards/noncompliance_spec.rb +36 -0
  104. data/spec/guards/platform_spec.rb +84 -0
  105. data/spec/guards/quarantine_spec.rb +19 -0
  106. data/spec/guards/runner_spec.rb +75 -0
  107. data/spec/guards/superuser_spec.rb +22 -0
  108. data/spec/guards/support_spec.rb +22 -0
  109. data/spec/guards/version_spec.rb +133 -0
  110. data/spec/helpers/bignum_spec.rb +11 -0
  111. data/spec/helpers/const_lookup_spec.rb +19 -0
  112. data/spec/helpers/flunk_spec.rb +15 -0
  113. data/spec/helpers/io_spec.rb +34 -0
  114. data/spec/helpers/scratch_spec.rb +22 -0
  115. data/spec/helpers/tmp_spec.rb +72 -0
  116. data/spec/matchers/base_spec.rb +180 -0
  117. data/spec/matchers/be_ancestor_of_spec.rb +28 -0
  118. data/spec/matchers/be_close_spec.rb +46 -0
  119. data/spec/matchers/be_empty_spec.rb +26 -0
  120. data/spec/matchers/be_false_spec.rb +28 -0
  121. data/spec/matchers/be_kind_of_spec.rb +29 -0
  122. data/spec/matchers/be_nil_spec.rb +27 -0
  123. data/spec/matchers/be_true_spec.rb +28 -0
  124. data/spec/matchers/complain_spec.rb +52 -0
  125. data/spec/matchers/eql_spec.rb +33 -0
  126. data/spec/matchers/equal_spec.rb +33 -0
  127. data/spec/matchers/equal_utf16_spec.rb +47 -0
  128. data/spec/matchers/include_spec.rb +37 -0
  129. data/spec/matchers/output_spec.rb +74 -0
  130. data/spec/matchers/output_to_fd_spec.rb +33 -0
  131. data/spec/matchers/raise_error_spec.rb +56 -0
  132. data/spec/mocks/mock_spec.rb +272 -0
  133. data/spec/mocks/proxy_spec.rb +259 -0
  134. data/spec/runner/actions/debug_spec.rb +61 -0
  135. data/spec/runner/actions/filter_spec.rb +84 -0
  136. data/spec/runner/actions/gdb_spec.rb +61 -0
  137. data/spec/runner/actions/tag_spec.rb +253 -0
  138. data/spec/runner/actions/tally_spec.rb +107 -0
  139. data/spec/runner/actions/timer_spec.rb +42 -0
  140. data/spec/runner/filters/a.yaml +4 -0
  141. data/spec/runner/filters/b.yaml +11 -0
  142. data/spec/runner/filters/match_spec.rb +44 -0
  143. data/spec/runner/filters/profile_spec.rb +117 -0
  144. data/spec/runner/filters/regexp_spec.rb +13 -0
  145. data/spec/runner/filters/tag_spec.rb +77 -0
  146. data/spec/runner/formatters/dotted_spec.rb +184 -0
  147. data/spec/runner/formatters/html_spec.rb +191 -0
  148. data/spec/runner/formatters/specdoc_spec.rb +57 -0
  149. data/spec/runner/formatters/spinner_spec.rb +78 -0
  150. data/spec/runner/formatters/summary_spec.rb +29 -0
  151. data/spec/runner/formatters/unit_spec.rb +71 -0
  152. data/spec/runner/formatters/yaml_spec.rb +123 -0
  153. data/spec/runner/mspec_spec.rb +393 -0
  154. data/spec/runner/shared_spec.rb +41 -0
  155. data/spec/runner/state_spec.rb +535 -0
  156. data/spec/runner/tag_spec.rb +93 -0
  157. data/spec/runner/tags.txt +3 -0
  158. data/spec/spec_helper.rb +46 -0
  159. data/spec/utils/name_map_spec.rb +178 -0
  160. data/spec/utils/options_spec.rb +862 -0
  161. data/spec/utils/script_spec.rb +240 -0
  162. metadata +217 -0
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'mspec/guards/conflict'
3
+
4
+ describe Object, "#conflicts_with" do
5
+ before :each do
6
+ ScratchPad.clear
7
+ end
8
+
9
+ it "does not yield if Object.constants includes any of the arguments" do
10
+ Object.stub!(:constants).and_return(["SomeClass", "OtherClass"])
11
+ conflicts_with(:SomeClass, :AClass, :BClass) { ScratchPad.record :yield }
12
+ ScratchPad.recorded.should_not == :yield
13
+ end
14
+
15
+ it "yields if Object.constants does not include any of the arguments" do
16
+ Object.stub!(:constants).and_return(["SomeClass", "OtherClass"])
17
+ conflicts_with(:AClass, :BClass) { ScratchPad.record :yield }
18
+ ScratchPad.recorded.should == :yield
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'mspec/guards/endian'
3
+
4
+ describe Object, "#big_endian" do
5
+ before :each do
6
+ @guard = BigEndianGuard.new
7
+ BigEndianGuard.stub!(:new).and_return(@guard)
8
+ ScratchPad.clear
9
+ end
10
+
11
+ it "yields on big-endian platforms" do
12
+ @guard.stub!(:pattern).and_return([1])
13
+ big_endian { ScratchPad.record :yield }
14
+ ScratchPad.recorded.should == :yield
15
+ end
16
+
17
+ it "does not yield on little-endian platforms" do
18
+ @guard.stub!(:pattern).and_return([0])
19
+ big_endian { ScratchPad.record :yield }
20
+ ScratchPad.recorded.should_not == :yield
21
+ end
22
+ end
23
+
24
+ describe Object, "#little_endian" do
25
+ before :each do
26
+ @guard = LittleEndianGuard.new
27
+ LittleEndianGuard.stub!(:new).and_return(@guard)
28
+ ScratchPad.clear
29
+ end
30
+
31
+ it "yields on little-endian platforms" do
32
+ @guard.stub!(:pattern).and_return([0])
33
+ little_endian { ScratchPad.record :yield }
34
+ ScratchPad.recorded.should == :yield
35
+ end
36
+
37
+ it "does not yield on big-endian platforms" do
38
+ @guard.stub!(:pattern).and_return([1])
39
+ little_endian { ScratchPad.record :yield }
40
+ ScratchPad.recorded.should_not == :yield
41
+ end
42
+ end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'mspec/guards/extensions'
3
+
4
+ describe Object, "#extended_on" do
5
+ before :each do
6
+ @guard = ExtensionsGuard.new
7
+ ExtensionsGuard.stub!(:new).and_return(@guard)
8
+ ScratchPad.clear
9
+ end
10
+
11
+ it "does not yield when #implementation? and #platform? return false" do
12
+ @guard.stub!(:implementation?).and_return(false)
13
+ @guard.stub!(:platform?).and_return(false)
14
+ extended_on(:rbx) { ScratchPad.record :yield }
15
+ ScratchPad.recorded.should_not == :yield
16
+ end
17
+
18
+ it "yields when #implementation? or #platform? return true" do
19
+ @guard.stub!(:implementation?).and_return(true)
20
+ @guard.stub!(:platform?).and_return(false)
21
+ extended_on(:rbx) { ScratchPad.record :yield }
22
+ ScratchPad.recorded.should == :yield
23
+
24
+ @guard.stub!(:implementation?).and_return(false)
25
+ @guard.stub!(:platform?).and_return(true)
26
+ extended_on(:rbx) { ScratchPad.record :yield }
27
+ ScratchPad.recorded.should == :yield
28
+ end
29
+
30
+ it "yields when #implementation? and #platform? return true" do
31
+ @guard.stub!(:implementation?).and_return(true)
32
+ @guard.stub!(:platform?).and_return(true)
33
+ extended_on(:rbx) { ScratchPad.record :yield }
34
+ ScratchPad.recorded.should == :yield
35
+ end
36
+ end
@@ -0,0 +1,355 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'mspec/guards/guard'
3
+ require 'rbconfig'
4
+
5
+ describe SpecGuard, ".register" do
6
+ before :each do
7
+ @tally = mock("tally")
8
+ @tally.stub!(:register)
9
+ TallyAction.stub!(:new).and_return(@tally)
10
+ SpecGuard.instance_variable_set(:@registered, nil)
11
+ end
12
+
13
+ it "creates a new TallyAction if one does not exist" do
14
+ TallyAction.should_receive(:new).and_return(@tally)
15
+ @tally.should_receive(:register)
16
+ SpecGuard.register
17
+ SpecGuard.register
18
+ end
19
+
20
+ it "registers itself with MSpec :finish actions" do
21
+ MSpec.should_receive(:register).with(:finish, SpecGuard)
22
+ SpecGuard.register
23
+ end
24
+ end
25
+
26
+ describe SpecGuard, ".unregister" do
27
+ before :each do
28
+ @tally = mock("tally")
29
+ @tally.stub!(:register)
30
+ TallyAction.stub!(:new).and_return(@tally)
31
+ SpecGuard.instance_variable_set(:@registered, nil)
32
+ end
33
+
34
+ it "unregisters its tally action" do
35
+ @tally.should_receive(:unregister)
36
+ SpecGuard.register
37
+ SpecGuard.unregister
38
+ end
39
+ end
40
+
41
+ describe SpecGuard, "#yield?" do
42
+ before :each do
43
+ MSpec.store :mode, nil
44
+ @guard = SpecGuard.new
45
+ end
46
+
47
+ it "returns true if MSpec.verify_mode? is true" do
48
+ MSpec.should_receive(:verify_mode?).and_return(true)
49
+ @guard.yield?.should == true
50
+ end
51
+
52
+ it "returns true if MSpec.verify_mode? is true regardless of invert being true" do
53
+ MSpec.should_receive(:verify_mode?).and_return(true)
54
+ @guard.yield?(true).should == true
55
+ end
56
+
57
+ it "returns true if MSpec.report_mode? is true" do
58
+ MSpec.should_receive(:report_mode?).and_return(true)
59
+ @guard.yield?.should == true
60
+ end
61
+
62
+ it "returns true if MSpec.report_mode? is true regardless of invert being true" do
63
+ MSpec.should_receive(:report_mode?).and_return(true)
64
+ @guard.yield?(true).should == true
65
+ end
66
+
67
+ it "returns #match? if neither report nor verify mode are true" do
68
+ @guard.stub!(:match?).and_return(false)
69
+ @guard.yield?.should == false
70
+ @guard.stub!(:match?).and_return(true)
71
+ @guard.yield?.should == true
72
+ end
73
+
74
+ it "returns #match? if invert is true and neither report nor verify mode are true" do
75
+ @guard.stub!(:match?).and_return(false)
76
+ @guard.yield?(true).should == true
77
+ @guard.stub!(:match?).and_return(true)
78
+ @guard.yield?(true).should == false
79
+ end
80
+ end
81
+
82
+ describe SpecGuard, "#===" do
83
+ it "returns true" do
84
+ anything = mock("anything")
85
+ SpecGuard.new.===(anything).should == true
86
+ end
87
+ end
88
+
89
+ describe SpecGuard, "#implementation?" do
90
+ before :all do
91
+ @verbose = $VERBOSE
92
+ $VERBOSE = nil
93
+ end
94
+
95
+ after :all do
96
+ $VERBOSE = @verbose
97
+ end
98
+
99
+ before :each do
100
+ @ruby_name = Object.const_get :RUBY_NAME
101
+ @guard = SpecGuard.new
102
+ end
103
+
104
+ after :each do
105
+ Object.const_set :RUBY_NAME, @ruby_name
106
+ end
107
+
108
+ it "returns true if passed :ruby and RUBY_NAME == 'ruby'" do
109
+ Object.const_set :RUBY_NAME, 'ruby'
110
+ @guard.implementation?(:ruby).should == true
111
+ end
112
+
113
+ it "returns true if passed :rbx and RUBY_NAME == 'rbx'" do
114
+ Object.const_set :RUBY_NAME, 'rbx'
115
+ @guard.implementation?(:rbx).should == true
116
+ end
117
+
118
+ it "returns true if passed :rubinius and RUBY_NAME == 'rbx'" do
119
+ Object.const_set :RUBY_NAME, 'rbx'
120
+ @guard.implementation?(:rubinius).should == true
121
+ end
122
+
123
+ it "returns true if passed :jruby and RUBY_NAME == 'jruby'" do
124
+ Object.const_set :RUBY_NAME, 'jruby'
125
+ @guard.implementation?(:jruby).should == true
126
+ end
127
+
128
+ it "returns false when passed an unrecognized name" do
129
+ Object.const_set :RUBY_NAME, 'ruby'
130
+ @guard.implementation?(:python).should == false
131
+ end
132
+ end
133
+
134
+ describe SpecGuard, "#platform?" do
135
+ before :all do
136
+ @verbose = $VERBOSE
137
+ $VERBOSE = nil
138
+ end
139
+
140
+ after :all do
141
+ $VERBOSE = @verbose
142
+ end
143
+
144
+ before :each do
145
+ @ruby_platform = Object.const_get :RUBY_PLATFORM
146
+ Object.const_set :RUBY_PLATFORM, 'solarce'
147
+ @guard = SpecGuard.new
148
+ end
149
+
150
+ after :each do
151
+ Object.const_set :RUBY_PLATFORM, @ruby_platform
152
+ end
153
+
154
+ it "returns false when arg does not match RUBY_PLATFORM" do
155
+ @guard.platform?(:ruby).should == false
156
+ end
157
+
158
+ it "returns false when no arg matches RUBY_PLATFORM" do
159
+ @guard.platform?(:ruby, :jruby, :rubinius).should == false
160
+ end
161
+
162
+ it "returns true when arg matches RUBY_PLATFORM" do
163
+ @guard.platform?(:solarce).should == true
164
+ end
165
+
166
+ it "returns true when any arg matches RUBY_PLATFORM" do
167
+ @guard.platform?(:ruby, :jruby, :solarce, :rubinius).should == true
168
+ end
169
+
170
+ it "returns true when arg is :windows and RUBY_PLATFORM contains 'mswin'" do
171
+ Object.const_set :RUBY_PLATFORM, 'i386-mswin32'
172
+ @guard.platform?(:windows).should == true
173
+ end
174
+
175
+ it "returns true when arg is :windows and RUBY_PLATFORM contains 'mingw'" do
176
+ Object.const_set :RUBY_PLATFORM, 'i386-mingw32'
177
+ @guard.platform?(:windows).should == true
178
+ end
179
+
180
+ it "returns false when arg is not :windows and Config::CONFIG['host_os'] contains 'mswin'" do
181
+ Object.const_set :RUBY_PLATFORM, 'i386-mswin32'
182
+ @guard.platform?(:linux).should == false
183
+ end
184
+
185
+ it "returns false when arg is not :windows and Config::CONFIG['host_os'] contains 'mingw'" do
186
+ Object.const_set :RUBY_PLATFORM, 'i386-mingw32'
187
+ @guard.platform?(:linux).should == false
188
+ end
189
+ end
190
+
191
+ describe SpecGuard, "#platform? on JRuby" do
192
+ before :all do
193
+ @verbose = $VERBOSE
194
+ $VERBOSE = nil
195
+ end
196
+
197
+ after :all do
198
+ $VERBOSE = @verbose
199
+ end
200
+
201
+ before :each do
202
+ @ruby_platform = Object.const_get :RUBY_PLATFORM
203
+ Object.const_set :RUBY_PLATFORM, 'java'
204
+ @guard = SpecGuard.new
205
+ end
206
+
207
+ after :each do
208
+ Object.const_set :RUBY_PLATFORM, @ruby_platform
209
+ end
210
+
211
+ it "returns true when arg is :java and RUBY_PLATFORM contains 'java'" do
212
+ @guard.platform?(:java).should == true
213
+ end
214
+
215
+ it "returns true when arg is :windows and RUBY_PLATFORM contains 'java' and os?(:windows) is true" do
216
+ Config::CONFIG.stub!(:[]).and_return('mswin32')
217
+ @guard.platform?(:windows).should == true
218
+ end
219
+
220
+ it "returns true when RUBY_PLATFORM contains 'java' and os?(argument) is true" do
221
+ Config::CONFIG.stub!(:[]).and_return('amiga')
222
+ @guard.platform?(:amiga).should == true
223
+ end
224
+ end
225
+
226
+ describe SpecGuard, "#wordsize?" do
227
+ before :each do
228
+ @guard = SpecGuard.new
229
+ end
230
+
231
+ it "returns true when arg is 32 and 1.size is 4" do
232
+ @guard.wordsize?(32).should == (1.size == 4)
233
+ end
234
+
235
+ it "returns true when arg is 64 and 1.size is 8" do
236
+ @guard.wordsize?(64).should == (1.size == 8)
237
+ end
238
+ end
239
+
240
+ describe SpecGuard, "#os?" do
241
+ before :each do
242
+ @guard = SpecGuard.new
243
+ Config::CONFIG.stub!(:[]).and_return('unreal')
244
+ end
245
+
246
+ it "returns true if argument matches Config::CONFIG['host_os']" do
247
+ @guard.os?(:unreal).should == true
248
+ end
249
+
250
+ it "returns true if any argument matches Config::CONFIG['host_os']" do
251
+ @guard.os?(:bsd, :unreal, :amiga).should == true
252
+ end
253
+
254
+ it "returns false if no argument matches Config::CONFIG['host_os']" do
255
+ @guard.os?(:bsd, :netbsd, :amiga, :msdos).should == false
256
+ end
257
+
258
+ it "returns false if argument does not match Config::CONFIG['host_os']" do
259
+ @guard.os?(:amiga).should == false
260
+ end
261
+
262
+ it "returns true when arg is :windows and Config::CONFIG['host_os'] contains 'mswin'" do
263
+ Config::CONFIG.stub!(:[]).and_return('i386-mswin32')
264
+ @guard.os?(:windows).should == true
265
+ end
266
+
267
+ it "returns true when arg is :windows and Config::CONFIG['host_os'] contains 'mingw'" do
268
+ Config::CONFIG.stub!(:[]).and_return('i386-mingw32')
269
+ @guard.os?(:windows).should == true
270
+ end
271
+
272
+ it "returns false when arg is not :windows and Config::CONFIG['host_os'] contains 'mswin'" do
273
+ Config::CONFIG.stub!(:[]).and_return('i386-mingw32')
274
+ @guard.os?(:linux).should == false
275
+ end
276
+
277
+ it "returns false when arg is not :windows and Config::CONFIG['host_os'] contains 'mingw'" do
278
+ Config::CONFIG.stub!(:[]).and_return('i386-mingw32')
279
+ @guard.os?(:linux).should == false
280
+ end
281
+ end
282
+
283
+ describe SpecGuard, "windows?" do
284
+ before :each do
285
+ @guard = SpecGuard.new
286
+ end
287
+
288
+ it "returns false if not passed :windows" do
289
+ @guard.windows?(:linux, 'mswin32').should == false
290
+ @guard.windows?(:linux, 'i386-mingw32').should == false
291
+ end
292
+
293
+ it "returns true if passed :windows and the key matches 'mswin' or 'mingw'" do
294
+ @guard.windows?(:windows, 'mswin32').should == true
295
+ @guard.windows?(:windows, 'i386-mingw32').should == true
296
+ end
297
+
298
+ it "returns false if passed :windows and the key matches neither 'mswin' nor 'mingw'" do
299
+ @guard.windows?(:windows, 'darwin9.0').should == false
300
+ @guard.windows?(:windows, 'linux').should == false
301
+ end
302
+ end
303
+
304
+ describe SpecGuard, "#match?" do
305
+ before :each do
306
+ @guard = SpecGuard.new
307
+ SpecGuard.stub!(:new).and_return(@guard)
308
+ end
309
+
310
+ it "returns true if #platform? or #implementation? return true" do
311
+ @guard.stub!(:implementation?).and_return(true)
312
+ @guard.stub!(:platform?).and_return(false)
313
+ @guard.match?.should == true
314
+
315
+ @guard.stub!(:implementation?).and_return(false)
316
+ @guard.stub!(:platform?).and_return(true)
317
+ @guard.match?.should == true
318
+ end
319
+
320
+ it "returns false if #platform? and #implementation? return false" do
321
+ @guard.stub!(:implementation?).and_return(false)
322
+ @guard.stub!(:platform?).and_return(false)
323
+ @guard.match?.should == false
324
+ end
325
+ end
326
+
327
+ describe SpecGuard, "#unregister" do
328
+ before :each do
329
+ @tally = mock("tally")
330
+ @tally.stub!(:register)
331
+ TallyAction.stub!(:new).and_return(@tally)
332
+ MSpec.stub!(:unregister)
333
+ @guard = SpecGuard.new
334
+
335
+ SpecGuard.instance_variable_set(:@registered, nil)
336
+ SpecGuard.register
337
+ end
338
+
339
+ it "unregisters from MSpec :exclude actions" do
340
+ MSpec.should_receive(:unregister).with(:exclude, @guard)
341
+ @tally.should_receive(:unregister)
342
+ @guard.unregister
343
+ end
344
+
345
+ it "unregisters from MSpec :after actions" do
346
+ MSpec.should_receive(:unregister).with(:after, @guard)
347
+ @tally.should_receive(:unregister)
348
+ @guard.unregister
349
+ end
350
+
351
+ it "invokes the class's unregister method" do
352
+ SpecGuard.should_receive(:unregister)
353
+ @guard.unregister
354
+ end
355
+ end