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.
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