mspec 1.5.7 → 1.5.8

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ spec = Gem::Specification.new do |s|
18
18
 
19
19
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
20
20
  s.authors = ["Brian Ford"]
21
- s.date = %q{2009-2-5}
21
+ s.date = %q{2009-2-9}
22
22
  s.email = %q{bford@engineyard.com}
23
23
  s.has_rdoc = true
24
24
  s.extra_rdoc_files = %w[ README LICENSE ]
@@ -7,7 +7,7 @@ class BugGuard < VersionGuard
7
7
  end
8
8
 
9
9
  def match?
10
- implementation?(:ruby, :ruby18, :ruby19) && ruby_version <= @version
10
+ standard? && ruby_version <= @version
11
11
  end
12
12
  end
13
13
 
@@ -1,18 +1,27 @@
1
1
  require 'mspec/guards/guard'
2
2
 
3
- class ComplianceGuard < SpecGuard
3
+ class CompliantOnGuard < SpecGuard
4
+ def match?
5
+ standard? or implementation?(*@args)
6
+ end
7
+ end
8
+
9
+ class NotCompliantOnGuard < SpecGuard
10
+ def match?
11
+ standard? or !implementation?(*@args)
12
+ end
4
13
  end
5
14
 
6
15
  class Object
7
16
  def compliant_on(*args)
8
- g = ComplianceGuard.new(*args)
17
+ g = CompliantOnGuard.new(*args)
9
18
  yield if g.yield?
10
19
  g.unregister
11
20
  end
12
21
 
13
22
  def not_compliant_on(*args)
14
- g = ComplianceGuard.new(*args)
15
- yield if g.yield? true
23
+ g = NotCompliantOnGuard.new(*args)
24
+ yield if g.yield?
16
25
  g.unregister
17
26
  end
18
27
  end
@@ -1,6 +1,11 @@
1
1
  require 'mspec/guards/guard'
2
2
 
3
3
  class ExtensionsGuard < SpecGuard
4
+ def match?
5
+ match = implementation?(*@args)
6
+ raise Exception, "improper use of extended_on guard" if match and standard?
7
+ match
8
+ end
4
9
  end
5
10
 
6
11
  class Object
@@ -39,7 +39,9 @@ class SpecGuard
39
39
  n = 4
40
40
  end
41
41
 
42
- version = "#{RUBY_VERSION}.#{RUBY_PATCHLEVEL}"
42
+ patch = RUBY_PATCHLEVEL.to_i
43
+ patch = 0 if patch < 0
44
+ version = "#{RUBY_VERSION}.#{patch}"
43
45
  version.split('.')[0,n].join('.')
44
46
  end
45
47
 
@@ -87,24 +89,26 @@ class SpecGuard
87
89
  def implementation?(*args)
88
90
  args.any? do |name|
89
91
  !!case name
90
- when :rbx, :rubinius
92
+ when :rubinius
91
93
  RUBY_NAME =~ /^rbx/
92
94
  when :ruby
93
95
  RUBY_NAME =~ /^ruby/
94
- when :ruby18
95
- RUBY_NAME =~ /^ruby(1.8)?/ and RUBY_VERSION =~ /^1.8/
96
- when :ruby19
97
- RUBY_NAME =~ /^ruby(1.9)?/ and RUBY_VERSION =~ /^1.9/
98
96
  when :jruby
99
97
  RUBY_NAME =~ /^jruby/
100
- when :ironruby, :ir
98
+ when :ironruby
101
99
  RUBY_NAME =~ /^ironruby/
100
+ when :macruby
101
+ RUBY_NAME =~ /^macruby/
102
102
  else
103
103
  false
104
104
  end
105
105
  end
106
106
  end
107
107
 
108
+ def standard?
109
+ implementation? :ruby
110
+ end
111
+
108
112
  def windows?(sym, key)
109
113
  sym == :windows && SpecGuard.windows?(key)
110
114
  end
@@ -1,6 +1,11 @@
1
1
  require 'mspec/guards/guard'
2
2
 
3
3
  class NonComplianceGuard < SpecGuard
4
+ def match?
5
+ match = implementation?(*@args)
6
+ raise Exception, "improper use of deviates_on guard" if match and standard?
7
+ match
8
+ end
4
9
  end
5
10
 
6
11
  class Object
@@ -1,6 +1,11 @@
1
1
  require 'mspec/guards/guard'
2
2
 
3
3
  class SupportedGuard < SpecGuard
4
+ def match?
5
+ match = implementation?(*@args)
6
+ raise Exception, "improper use of not_supported_on guard" if match and standard?
7
+ match
8
+ end
4
9
  end
5
10
 
6
11
  class Object
@@ -12,6 +12,7 @@ require 'mspec/matchers/equal'
12
12
  require 'mspec/matchers/equal_element'
13
13
  require 'mspec/matchers/equal_utf16'
14
14
  require 'mspec/matchers/have_instance_method'
15
+ require 'mspec/matchers/have_method'
15
16
  require 'mspec/matchers/have_private_instance_method'
16
17
  require 'mspec/matchers/include'
17
18
  require 'mspec/matchers/match_yaml'
@@ -1,24 +1,18 @@
1
- require 'mspec/utils/version'
2
-
3
- class HaveInstanceMethodMatcher
4
- def initialize(method, include_super=true)
5
- @include_super = include_super
6
- version = SpecVersion.new(RUBY_VERSION) <=> "1.9"
7
- @method = version < 0 ? method.to_s : method
8
- end
1
+ require 'mspec/matchers/method'
9
2
 
3
+ class HaveInstanceMethodMatcher < MethodMatcher
10
4
  def matches?(mod)
11
5
  @mod = mod
12
6
  mod.instance_methods(@include_super).include? @method
13
7
  end
14
8
 
15
9
  def failure_message
16
- ["Expected #{@mod} to have private method '#{@method.to_s}'",
10
+ ["Expected #{@mod} to have instance method '#{@method.to_s}'",
17
11
  "but it does not"]
18
12
  end
19
13
 
20
14
  def negative_failure_message
21
- ["Expected #{@mod} NOT to have private method '#{@method.to_s}'",
15
+ ["Expected #{@mod} NOT to have instance method '#{@method.to_s}'",
22
16
  "but it does"]
23
17
  end
24
18
  end
@@ -0,0 +1,24 @@
1
+ require 'mspec/matchers/method'
2
+
3
+ class HaveMethodMatcher < MethodMatcher
4
+ def matches?(mod)
5
+ @mod = mod
6
+ @mod.methods(@include_super).include? @method
7
+ end
8
+
9
+ def failure_message
10
+ ["Expected #{@mod} to have method '#{@method.to_s}'",
11
+ "but it does not"]
12
+ end
13
+
14
+ def negative_failure_message
15
+ ["Expected #{@mod} NOT to have method '#{@method.to_s}'",
16
+ "but it does"]
17
+ end
18
+ end
19
+
20
+ class Object
21
+ def have_method(method, include_super=true)
22
+ HaveMethodMatcher.new method, include_super
23
+ end
24
+ end
@@ -1,24 +1,18 @@
1
- require 'mspec/utils/version'
2
-
3
- class HavePrivateInstanceMethodMatcher
4
- def initialize(method, include_super=true)
5
- @include_super = include_super
6
- version = SpecVersion.new(RUBY_VERSION) <=> "1.9"
7
- @method = version < 0 ? method.to_s : method
8
- end
1
+ require 'mspec/matchers/method'
9
2
 
3
+ class HavePrivateInstanceMethodMatcher < MethodMatcher
10
4
  def matches?(mod)
11
5
  @mod = mod
12
6
  mod.private_instance_methods(@include_super).include? @method
13
7
  end
14
8
 
15
9
  def failure_message
16
- ["Expected #{@mod} to have private method '#{@method.to_s}'",
10
+ ["Expected #{@mod} to have private instance method '#{@method.to_s}'",
17
11
  "but it does not"]
18
12
  end
19
13
 
20
14
  def negative_failure_message
21
- ["Expected #{@mod} NOT to have private method '#{@method.to_s}'",
15
+ ["Expected #{@mod} NOT to have private instance method '#{@method.to_s}'",
22
16
  "but it does"]
23
17
  end
24
18
  end
@@ -0,0 +1,13 @@
1
+ require 'mspec/utils/version'
2
+
3
+ class MethodMatcher
4
+ def initialize(method, include_super=true)
5
+ @include_super = include_super
6
+ version = SpecVersion.new(RUBY_VERSION) <=> "1.9"
7
+ @method = version < 0 ? method.to_s : method
8
+ end
9
+
10
+ def matches?(mod)
11
+ raise Exception, "define #matches? in the subclass"
12
+ end
13
+ end
data/lib/mspec/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'mspec/utils/version'
2
2
 
3
3
  module MSpec
4
- VERSION = SpecVersion.new "1.5.7"
4
+ VERSION = SpecVersion.new "1.5.8"
5
5
  end
@@ -2,69 +2,85 @@ require File.dirname(__FILE__) + '/../spec_helper'
2
2
  require 'mspec/guards/compliance'
3
3
 
4
4
  describe Object, "#compliant_on" do
5
+ before :all do
6
+ @verbose = $VERBOSE
7
+ $VERBOSE = nil
8
+ @ruby_name = Object.const_get :RUBY_NAME if Object.const_defined? :RUBY_NAME
9
+ end
10
+
11
+ after :all do
12
+ $VERBOSE = @verbose
13
+ if @ruby_name
14
+ Object.const_set :RUBY_NAME, @ruby_name
15
+ else
16
+ Object.send :remove_const, :RUBY_NAME
17
+ end
18
+ end
19
+
5
20
  before :each do
6
- @guard = ComplianceGuard.new
7
- ComplianceGuard.stub!(:new).and_return(@guard)
8
21
  ScratchPad.clear
9
22
  end
10
23
 
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
- compliant_on(:rbx) { @ScratchPad.record :yield }
24
+ it "does not yield when #standard? and #implementation? return false" do
25
+ Object.const_set :RUBY_NAME, "jruby"
26
+ compliant_on(:rubinius, :ironruby) { ScratchPad.record :yield }
15
27
  ScratchPad.recorded.should_not == :yield
16
28
  end
17
29
 
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
- compliant_on(:rbx) { ScratchPad.record :yield }
30
+ it "yields when #standard? returns true" do
31
+ Object.const_set :RUBY_NAME, "ruby"
32
+ compliant_on(:rubinius) { ScratchPad.record :yield }
22
33
  ScratchPad.recorded.should == :yield
34
+ end
23
35
 
24
- @guard.stub!(:implementation?).and_return(false)
25
- @guard.stub!(:platform?).and_return(true)
26
- compliant_on(:rbx) { ScratchPad.record :yield }
36
+ it "yields when #implementation? returns true" do
37
+ Object.const_set :RUBY_NAME, "jruby"
38
+ compliant_on(:jruby) { ScratchPad.record :yield }
27
39
  ScratchPad.recorded.should == :yield
28
40
  end
29
41
 
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
- compliant_on(:rbx) { ScratchPad.record :yield }
34
- ScratchPad.recorded.should == :yield
42
+ it "does not yield when #implementation? returns false" do
43
+ Object.const_set :RUBY_NAME, "jruby"
44
+ compliant_on(:rubinius) { ScratchPad.record :yield }
45
+ ScratchPad.recorded.should_not == :yield
35
46
  end
36
47
  end
37
48
 
38
49
  describe Object, "#not_compliant_on" do
50
+ before :all do
51
+ @verbose = $VERBOSE
52
+ $VERBOSE = nil
53
+ @ruby_name = Object.const_get :RUBY_NAME if Object.const_defined? :RUBY_NAME
54
+ end
55
+
56
+ after :all do
57
+ $VERBOSE = @verbose
58
+ if @ruby_name
59
+ Object.const_set :RUBY_NAME, @ruby_name
60
+ else
61
+ Object.send :remove_const, :RUBY_NAME
62
+ end
63
+ end
64
+
39
65
  before :each do
40
- @guard = ComplianceGuard.new
41
- ComplianceGuard.stub!(:new).and_return(@guard)
42
66
  ScratchPad.clear
43
67
  end
44
68
 
45
- it "does not yield when #implementation? and #platform? return true" do
46
- @guard.stub!(:implementation?).and_return(true)
47
- @guard.stub!(:platform?).and_return(true)
48
- not_compliant_on(:rbx) { ScratchPad.record :yield }
49
- ScratchPad.recorded.should_not == :yield
69
+ it "yields when #standard? returns true" do
70
+ Object.const_set :RUBY_NAME, "ruby"
71
+ not_compliant_on(:rubinius) { ScratchPad.record :yield }
72
+ ScratchPad.recorded.should == :yield
50
73
  end
51
74
 
52
- it "does not yield when #implementation? or #platform? return true" do
53
- @guard.stub!(:implementation?).and_return(true)
54
- @guard.stub!(:platform?).and_return(false)
55
- not_compliant_on(:rbx) { ScratchPad.record :yield }
56
- ScratchPad.recorded.should_not == :yield
57
-
58
- @guard.stub!(:implementation?).and_return(false)
59
- @guard.stub!(:platform?).and_return(true)
60
- not_compliant_on(:rbx) { ScratchPad.record :yield }
75
+ it "does not yield when #implementation? returns true" do
76
+ Object.const_set :RUBY_NAME, "jruby "
77
+ not_compliant_on(:jruby) { ScratchPad.record :yield }
61
78
  ScratchPad.recorded.should_not == :yield
62
79
  end
63
80
 
64
- it "yields when #implementation? and #platform? return false" do
65
- @guard.stub!(:implementation?).and_return(false)
66
- @guard.stub!(:platform?).and_return(false)
67
- not_compliant_on(:rbx) { ScratchPad.record :yield }
81
+ it "yields when #implementation? returns false" do
82
+ Object.const_set :RUBY_NAME, "jruby "
83
+ not_compliant_on(:rubinius) { ScratchPad.record :yield }
68
84
  ScratchPad.recorded.should == :yield
69
85
  end
70
86
  end
@@ -2,35 +2,42 @@ require File.dirname(__FILE__) + '/../spec_helper'
2
2
  require 'mspec/guards/extensions'
3
3
 
4
4
  describe Object, "#extended_on" do
5
+ before :all do
6
+ @verbose = $VERBOSE
7
+ $VERBOSE = nil
8
+ @ruby_name = Object.const_get :RUBY_NAME if Object.const_defined? :RUBY_NAME
9
+ end
10
+
11
+ after :all do
12
+ $VERBOSE = @verbose
13
+ if @ruby_name
14
+ Object.const_set :RUBY_NAME, @ruby_name
15
+ else
16
+ Object.send :remove_const, :RUBY_NAME
17
+ end
18
+ end
19
+
5
20
  before :each do
6
- @guard = ExtensionsGuard.new
7
- ExtensionsGuard.stub!(:new).and_return(@guard)
8
21
  ScratchPad.clear
9
22
  end
10
23
 
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 }
24
+ it "raises an Exception when #standard? returns true" do
25
+ Object.const_set :RUBY_NAME, "ruby"
26
+ lambda {
27
+ extended_on(:ruby) { ScratchPad.record :yield }
28
+ }.should raise_error(Exception)
15
29
  ScratchPad.recorded.should_not == :yield
16
30
  end
17
31
 
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
32
+ it "does not yield when #implementation? returns false" do
33
+ Object.const_set :RUBY_NAME, "jruby"
34
+ extended_on(:rubinius) { ScratchPad.record :yield }
35
+ ScratchPad.recorded.should_not == :yield
28
36
  end
29
37
 
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 }
38
+ it "yields when #implementation? returns true" do
39
+ Object.const_set :RUBY_NAME, "rbx"
40
+ extended_on(:rubinius) { ScratchPad.record :yield }
34
41
  ScratchPad.recorded.should == :yield
35
42
  end
36
43
  end
@@ -57,6 +57,11 @@ describe SpecGuard, ".ruby_version" do
57
57
  SpecGuard.ruby_version(:full).should == "8.2.3.71"
58
58
  end
59
59
 
60
+ it "returns 0 for negative RUBY_PATCHLEVEL values" do
61
+ Object.const_set :RUBY_PATCHLEVEL, -1
62
+ SpecGuard.ruby_version(:full).should == "8.2.3.0"
63
+ end
64
+
60
65
  it "returns major.minor.tiny for :tiny" do
61
66
  SpecGuard.ruby_version(:tiny).should == "8.2.3"
62
67
  end
@@ -182,11 +187,6 @@ describe SpecGuard, "#implementation?" do
182
187
  @guard.implementation?(:ruby).should == true
183
188
  end
184
189
 
185
- it "returns true if passed :rbx and RUBY_NAME == 'rbx'" do
186
- Object.const_set :RUBY_NAME, 'rbx'
187
- @guard.implementation?(:rbx).should == true
188
- end
189
-
190
190
  it "returns true if passed :rubinius and RUBY_NAME == 'rbx'" do
191
191
  Object.const_set :RUBY_NAME, 'rbx'
192
192
  @guard.implementation?(:rubinius).should == true
@@ -197,12 +197,44 @@ describe SpecGuard, "#implementation?" do
197
197
  @guard.implementation?(:jruby).should == true
198
198
  end
199
199
 
200
+ it "returns true if passed :ironruby and RUBY_NAME == 'ironruby'" do
201
+ Object.const_set :RUBY_NAME, 'ironruby'
202
+ @guard.implementation?(:ironruby).should == true
203
+ end
204
+
205
+ it "returns true if passed :ruby and RUBY_NAME matches /^ruby/" do
206
+ Object.const_set :RUBY_NAME, 'ruby'
207
+ @guard.implementation?(:ruby).should == true
208
+
209
+ Object.const_set :RUBY_NAME, 'ruby1.8'
210
+ @guard.implementation?(:ruby).should == true
211
+
212
+ Object.const_set :RUBY_NAME, 'ruby1.9'
213
+ @guard.implementation?(:ruby).should == true
214
+ end
215
+
200
216
  it "returns false when passed an unrecognized name" do
201
217
  Object.const_set :RUBY_NAME, 'ruby'
202
218
  @guard.implementation?(:python).should == false
203
219
  end
204
220
  end
205
221
 
222
+ describe SpecGuard, "#standard?" do
223
+ before :each do
224
+ @guard = SpecGuard.new
225
+ end
226
+
227
+ it "returns true if #implementation? returns true" do
228
+ @guard.should_receive(:implementation?).with(:ruby).and_return(true)
229
+ @guard.standard?.should be_true
230
+ end
231
+
232
+ it "returns false if #implementation? returns false" do
233
+ @guard.should_receive(:implementation?).with(:ruby).and_return(false)
234
+ @guard.standard?.should be_false
235
+ end
236
+ end
237
+
206
238
  describe SpecGuard, "#platform?" do
207
239
  before :all do
208
240
  @verbose = $VERBOSE
@@ -2,35 +2,42 @@ require File.dirname(__FILE__) + '/../spec_helper'
2
2
  require 'mspec/guards/noncompliance'
3
3
 
4
4
  describe Object, "#deviates_on" do
5
+ before :all do
6
+ @verbose = $VERBOSE
7
+ $VERBOSE = nil
8
+ @ruby_name = Object.const_get :RUBY_NAME if Object.const_defined? :RUBY_NAME
9
+ end
10
+
11
+ after :all do
12
+ $VERBOSE = @verbose
13
+ if @ruby_name
14
+ Object.const_set :RUBY_NAME, @ruby_name
15
+ else
16
+ Object.send :remove_const, :RUBY_NAME
17
+ end
18
+ end
19
+
5
20
  before :each do
6
- @guard = NonComplianceGuard.new
7
- NonComplianceGuard.stub!(:new).and_return(@guard)
8
21
  ScratchPad.clear
9
22
  end
10
23
 
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
- deviates_on(:rbx) { ScratchPad.record :yield }
24
+ it "raises an Exception when when #standard? returns true" do
25
+ Object.const_set :RUBY_NAME, "ruby"
26
+ lambda {
27
+ deviates_on(:ruby) { ScratchPad.record :yield }
28
+ }.should raise_error(Exception)
15
29
  ScratchPad.recorded.should_not == :yield
16
30
  end
17
31
 
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
- deviates_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
- deviates_on(:rbx) { ScratchPad.record :yield }
27
- ScratchPad.recorded.should == :yield
32
+ it "does not yield when #implementation? returns false" do
33
+ Object.const_set :RUBY_NAME, "jruby"
34
+ deviates_on(:rubinius) { ScratchPad.record :yield }
35
+ ScratchPad.recorded.should_not == :yield
28
36
  end
29
37
 
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
- deviates_on(:rbx) { ScratchPad.record :yield }
38
+ it "yields when #implementation? returns true" do
39
+ Object.const_set :RUBY_NAME, "jruby"
40
+ deviates_on(:jruby) { ScratchPad.record :yield }
34
41
  ScratchPad.recorded.should == :yield
35
42
  end
36
43
  end
@@ -2,21 +2,42 @@ require File.dirname(__FILE__) + '/../spec_helper'
2
2
  require 'mspec/guards/support'
3
3
 
4
4
  describe Object, "#not_supported_on" do
5
+ before :all do
6
+ @verbose = $VERBOSE
7
+ $VERBOSE = nil
8
+ @ruby_name = Object.const_get :RUBY_NAME if Object.const_defined? :RUBY_NAME
9
+ end
10
+
11
+ after :all do
12
+ $VERBOSE = @verbose
13
+ if @ruby_name
14
+ Object.const_set :RUBY_NAME, @ruby_name
15
+ else
16
+ Object.send :remove_const, :RUBY_NAME
17
+ end
18
+ end
19
+
5
20
  before :each do
6
- @guard = SupportedGuard.new
7
- SupportedGuard.stub!(:new).and_return(@guard)
8
21
  ScratchPad.clear
9
22
  end
10
23
 
24
+ it "raises an Exception when when #standard? returns true" do
25
+ Object.const_set :RUBY_NAME, "ruby"
26
+ lambda {
27
+ not_supported_on(:ruby) { ScratchPad.record :yield }
28
+ }.should raise_error(Exception)
29
+ ScratchPad.recorded.should_not == :yield
30
+ end
31
+
11
32
  it "does not yield when #implementation? returns true" do
12
- @guard.stub!(:implementation?).and_return(true)
13
- not_supported_on(:rbx) { ScratchPad.record :yield }
33
+ Object.const_set :RUBY_NAME, "jruby"
34
+ not_supported_on(:jruby) { ScratchPad.record :yield }
14
35
  ScratchPad.recorded.should_not == :yield
15
36
  end
16
37
 
17
38
  it "yields when #implementation? returns false" do
18
- @guard.stub!(:implementation?).and_return(false)
19
- not_supported_on(:rbx) { ScratchPad.record :yield }
39
+ Object.const_set :RUBY_NAME, "ruby"
40
+ not_supported_on(:rubinius) { ScratchPad.record :yield }
20
41
  ScratchPad.recorded.should == :yield
21
42
  end
22
43
  end
@@ -13,13 +13,17 @@ class HIMMSpecs
13
13
  end
14
14
 
15
15
  describe HaveInstanceMethodMatcher do
16
- it "matches when mod has the private instance method" do
16
+ it "inherits from MethodMatcher" do
17
+ HaveInstanceMethodMatcher.new(:m).should be_kind_of(MethodMatcher)
18
+ end
19
+
20
+ it "matches when mod has the instance method" do
17
21
  matcher = HaveInstanceMethodMatcher.new :instance_method
18
22
  matcher.matches?(HIMMSpecs).should be_true
19
23
  matcher.matches?(HIMMSpecs::Subclass).should be_true
20
24
  end
21
25
 
22
- it "does not match when mod does not have the private instance method" do
26
+ it "does not match when mod does not have the instance method" do
23
27
  matcher = HaveInstanceMethodMatcher.new :another_method
24
28
  matcher.matches?(HIMMSpecs).should be_false
25
29
  end
@@ -33,7 +37,7 @@ describe HaveInstanceMethodMatcher do
33
37
  matcher = HaveInstanceMethodMatcher.new :some_method
34
38
  matcher.matches?(HIMMSpecs)
35
39
  matcher.failure_message.should == [
36
- "Expected HIMMSpecs to have private method 'some_method'",
40
+ "Expected HIMMSpecs to have instance method 'some_method'",
37
41
  "but it does not"
38
42
  ]
39
43
  end
@@ -42,41 +46,8 @@ describe HaveInstanceMethodMatcher do
42
46
  matcher = HaveInstanceMethodMatcher.new :some_method
43
47
  matcher.matches?(HIMMSpecs)
44
48
  matcher.negative_failure_message.should == [
45
- "Expected HIMMSpecs NOT to have private method 'some_method'",
49
+ "Expected HIMMSpecs NOT to have instance method 'some_method'",
46
50
  "but it does"
47
51
  ]
48
52
  end
49
53
  end
50
-
51
- describe HaveInstanceMethodMatcher do
52
- before :all do
53
- @verbose = $VERBOSE
54
- $VERBOSE = nil
55
- end
56
-
57
- after :all do
58
- $VERBOSE = @verbose
59
- end
60
-
61
- before :each do
62
- @ruby_version = Object.const_get :RUBY_VERSION
63
-
64
- @method = mock("method name")
65
- end
66
-
67
- after :each do
68
- Object.const_set :RUBY_VERSION, @ruby_version
69
- end
70
-
71
- it "converts the method name to a string if RUBY_VERSION < 1.9" do
72
- Object.const_set :RUBY_VERSION, "1.8.6"
73
- @method.should_receive(:to_s).and_return("method_name")
74
- HaveInstanceMethodMatcher.new @method
75
- end
76
-
77
- it "does not convert the method name to a string if RUBY_VERSION >= 1.9" do
78
- Object.const_set :RUBY_VERSION, "1.9.0"
79
- @method.should_not_receive(:to_s)
80
- HaveInstanceMethodMatcher.new @method
81
- end
82
- end
@@ -0,0 +1,55 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'mspec/expectations/expectations'
3
+ require 'mspec/matchers/have_method'
4
+
5
+ class HMMSpecs
6
+ def instance_method
7
+ end
8
+
9
+ class Subclass < HMMSpecs
10
+ def instance_sub_method
11
+ end
12
+ end
13
+ end
14
+
15
+ describe HaveMethodMatcher do
16
+ it "inherits from MethodMatcher" do
17
+ HaveMethodMatcher.new(:m).should be_kind_of(MethodMatcher)
18
+ end
19
+
20
+ it "matches when mod has the method" do
21
+ matcher = HaveMethodMatcher.new :instance_method
22
+ matcher.matches?(HMMSpecs).should be_true
23
+ matcher.matches?(HMMSpecs.new).should be_true
24
+ matcher.matches?(HMMSpecs::Subclass).should be_true
25
+ matcher.matches?(HMMSpecs::Subclass.new).should be_true
26
+ end
27
+
28
+ it "does not match when mod does not have the method" do
29
+ matcher = HaveMethodMatcher.new :another_method
30
+ matcher.matches?(HMMSpecs).should be_false
31
+ end
32
+
33
+ it "does not match if the method is in a superclass and include_super is false" do
34
+ matcher = HaveMethodMatcher.new :instance_method, false
35
+ matcher.matches?(HMMSpecs::Subclass).should be_false
36
+ end
37
+
38
+ it "provides a failure message for #should" do
39
+ matcher = HaveMethodMatcher.new :some_method
40
+ matcher.matches?(HMMSpecs)
41
+ matcher.failure_message.should == [
42
+ "Expected HMMSpecs to have method 'some_method'",
43
+ "but it does not"
44
+ ]
45
+ end
46
+
47
+ it "provides a failure messoge for #should_not" do
48
+ matcher = HaveMethodMatcher.new :some_method
49
+ matcher.matches?(HMMSpecs)
50
+ matcher.negative_failure_message.should == [
51
+ "Expected HMMSpecs NOT to have method 'some_method'",
52
+ "but it does"
53
+ ]
54
+ end
55
+ end
@@ -17,6 +17,10 @@ class HPIMMSpecs
17
17
  end
18
18
 
19
19
  describe HavePrivateInstanceMethodMatcher do
20
+ it "inherits from MethodMatcher" do
21
+ HavePrivateInstanceMethodMatcher.new(:m).should be_kind_of(MethodMatcher)
22
+ end
23
+
20
24
  it "matches when mod has the private instance method" do
21
25
  matcher = HavePrivateInstanceMethodMatcher.new :private_method
22
26
  matcher.matches?(HPIMMSpecs).should be_true
@@ -37,7 +41,7 @@ describe HavePrivateInstanceMethodMatcher do
37
41
  matcher = HavePrivateInstanceMethodMatcher.new :some_method
38
42
  matcher.matches?(HPIMMSpecs)
39
43
  matcher.failure_message.should == [
40
- "Expected HPIMMSpecs to have private method 'some_method'",
44
+ "Expected HPIMMSpecs to have private instance method 'some_method'",
41
45
  "but it does not"
42
46
  ]
43
47
  end
@@ -46,41 +50,8 @@ describe HavePrivateInstanceMethodMatcher do
46
50
  matcher = HavePrivateInstanceMethodMatcher.new :some_method
47
51
  matcher.matches?(HPIMMSpecs)
48
52
  matcher.negative_failure_message.should == [
49
- "Expected HPIMMSpecs NOT to have private method 'some_method'",
53
+ "Expected HPIMMSpecs NOT to have private instance method 'some_method'",
50
54
  "but it does"
51
55
  ]
52
56
  end
53
57
  end
54
-
55
- describe HavePrivateInstanceMethodMatcher do
56
- before :all do
57
- @verbose = $VERBOSE
58
- $VERBOSE = nil
59
- end
60
-
61
- after :all do
62
- $VERBOSE = @verbose
63
- end
64
-
65
- before :each do
66
- @ruby_version = Object.const_get :RUBY_VERSION
67
-
68
- @method = mock("method name")
69
- end
70
-
71
- after :each do
72
- Object.const_set :RUBY_VERSION, @ruby_version
73
- end
74
-
75
- it "converts the method name to a string if RUBY_VERSION < 1.9" do
76
- Object.const_set :RUBY_VERSION, "1.8.6"
77
- @method.should_receive(:to_s).and_return("method_name")
78
- HavePrivateInstanceMethodMatcher.new @method
79
- end
80
-
81
- it "does not convert the method name to a string if RUBY_VERSION >= 1.9" do
82
- Object.const_set :RUBY_VERSION, "1.9.0"
83
- @method.should_not_receive(:to_s)
84
- HavePrivateInstanceMethodMatcher.new @method
85
- end
86
- end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'mspec/expectations/expectations'
3
+ require 'mspec/matchers/have_instance_method'
4
+
5
+ describe MethodMatcher do
6
+ before :all do
7
+ @verbose = $VERBOSE
8
+ $VERBOSE = nil
9
+ end
10
+
11
+ after :all do
12
+ $VERBOSE = @verbose
13
+ end
14
+
15
+ before :each do
16
+ @ruby_version = Object.const_get :RUBY_VERSION
17
+
18
+ @method = mock("method name")
19
+ end
20
+
21
+ after :each do
22
+ Object.const_set :RUBY_VERSION, @ruby_version
23
+ end
24
+
25
+ it "converts the method name to a string if RUBY_VERSION < 1.9" do
26
+ Object.const_set :RUBY_VERSION, "1.8.6"
27
+ @method.should_receive(:to_s).and_return("method_name")
28
+ MethodMatcher.new @method
29
+ end
30
+
31
+ it "does not convert the method name to a string if RUBY_VERSION >= 1.9" do
32
+ Object.const_set :RUBY_VERSION, "1.9.0"
33
+ @method.should_not_receive(:to_s)
34
+ MethodMatcher.new @method
35
+ end
36
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.7
4
+ version: 1.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Ford
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-05 00:00:00 -08:00
12
+ date: 2009-02-09 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -77,9 +77,11 @@ files:
77
77
  - lib/mspec/matchers/equal_element.rb
78
78
  - lib/mspec/matchers/equal_utf16.rb
79
79
  - lib/mspec/matchers/have_instance_method.rb
80
+ - lib/mspec/matchers/have_method.rb
80
81
  - lib/mspec/matchers/have_private_instance_method.rb
81
82
  - lib/mspec/matchers/include.rb
82
83
  - lib/mspec/matchers/match_yaml.rb
84
+ - lib/mspec/matchers/method.rb
83
85
  - lib/mspec/matchers/output.rb
84
86
  - lib/mspec/matchers/output_to_fd.rb
85
87
  - lib/mspec/matchers/raise_error.rb
@@ -184,9 +186,11 @@ files:
184
186
  - spec/matchers/equal_spec.rb
185
187
  - spec/matchers/equal_utf16_spec.rb
186
188
  - spec/matchers/have_instance_method_spec.rb
189
+ - spec/matchers/have_method_spec.rb
187
190
  - spec/matchers/have_private_instance_method_spec.rb
188
191
  - spec/matchers/include_spec.rb
189
192
  - spec/matchers/match_yaml_spec.rb
193
+ - spec/matchers/method_spec.rb
190
194
  - spec/matchers/output_spec.rb
191
195
  - spec/matchers/output_to_fd_spec.rb
192
196
  - spec/matchers/raise_error_spec.rb