[macruby-changes] [1350] MacRuby/branches/experimental/mspec

source_changes at macosforge.org source_changes at macosforge.org
Sat Apr 4 15:38:20 PDT 2009


Revision: 1350
          http://trac.macosforge.org/projects/ruby/changeset/1350
Author:   eloy.de.enige at gmail.com
Date:     2009-04-04 15:38:20 -0700 (Sat, 04 Apr 2009)
Log Message:
-----------
Add have_public_instance_method matcher

Modified Paths:
--------------
    MacRuby/branches/experimental/mspec/lib/mspec/matchers.rb

Added Paths:
-----------
    MacRuby/branches/experimental/mspec/lib/mspec/matchers/have_public_instance_method.rb
    MacRuby/branches/experimental/mspec/spec/matchers/have_public_instance_method_spec.rb

Added: MacRuby/branches/experimental/mspec/lib/mspec/matchers/have_public_instance_method.rb
===================================================================
--- MacRuby/branches/experimental/mspec/lib/mspec/matchers/have_public_instance_method.rb	                        (rev 0)
+++ MacRuby/branches/experimental/mspec/lib/mspec/matchers/have_public_instance_method.rb	2009-04-04 22:38:20 UTC (rev 1350)
@@ -0,0 +1,24 @@
+require 'mspec/matchers/method'
+
+class HavePublicInstanceMethodMatcher < MethodMatcher
+  def matches?(mod)
+    @mod = mod
+    mod.public_instance_methods(@include_super).include? @method
+  end
+
+  def failure_message
+    ["Expected #{@mod} to have public instance method '#{@method.to_s}'",
+     "but it does not"]
+  end
+
+  def negative_failure_message
+    ["Expected #{@mod} NOT to have public instance method '#{@method.to_s}'",
+     "but it does"]
+  end
+end
+
+class Object
+  def have_public_instance_method(method, include_super=true)
+    HavePublicInstanceMethodMatcher.new method, include_super
+  end
+end

Modified: MacRuby/branches/experimental/mspec/lib/mspec/matchers.rb
===================================================================
--- MacRuby/branches/experimental/mspec/lib/mspec/matchers.rb	2009-04-04 22:38:07 UTC (rev 1349)
+++ MacRuby/branches/experimental/mspec/lib/mspec/matchers.rb	2009-04-04 22:38:20 UTC (rev 1350)
@@ -15,6 +15,7 @@
 require 'mspec/matchers/have_instance_method'
 require 'mspec/matchers/have_method'
 require 'mspec/matchers/have_private_instance_method'
+require 'mspec/matchers/have_public_instance_method'
 require 'mspec/matchers/include'
 require 'mspec/matchers/match_yaml'
 require 'mspec/matchers/raise_error'

Added: MacRuby/branches/experimental/mspec/spec/matchers/have_public_instance_method_spec.rb
===================================================================
--- MacRuby/branches/experimental/mspec/spec/matchers/have_public_instance_method_spec.rb	                        (rev 0)
+++ MacRuby/branches/experimental/mspec/spec/matchers/have_public_instance_method_spec.rb	2009-04-04 22:38:20 UTC (rev 1350)
@@ -0,0 +1,53 @@
+require File.dirname(__FILE__) + '/../spec_helper'
+require 'mspec/expectations/expectations'
+require 'mspec/matchers/have_public_instance_method'
+
+class HPIMMSpecs
+  def public_method
+  end
+
+  class Subclass < HPIMMSpecs
+    def public_sub_method
+    end
+  end
+end
+
+describe HavePublicInstanceMethodMatcher do
+  it "inherits from MethodMatcher" do
+    HavePublicInstanceMethodMatcher.new(:m).should be_kind_of(MethodMatcher)
+  end
+
+  it "matches when mod has the public instance method" do
+    matcher = HavePublicInstanceMethodMatcher.new :public_method
+    matcher.matches?(HPIMMSpecs).should be_true
+    matcher.matches?(HPIMMSpecs::Subclass).should be_true
+  end
+
+  it "does not match when mod does not have the public instance method" do
+    matcher = HavePublicInstanceMethodMatcher.new :another_method
+    matcher.matches?(HPIMMSpecs).should be_false
+  end
+
+  it "does not match if the method is in a superclass and include_super is false" do
+    matcher = HavePublicInstanceMethodMatcher.new :public_method, false
+    matcher.matches?(HPIMMSpecs::Subclass).should be_false
+  end
+
+  it "provides a failure message for #should" do
+    matcher = HavePublicInstanceMethodMatcher.new :some_method
+    matcher.matches?(HPIMMSpecs)
+    matcher.failure_message.should == [
+      "Expected HPIMMSpecs to have public instance method 'some_method'",
+      "but it does not"
+    ]
+  end
+
+  it "provides a failure messoge for #should_not" do
+    matcher = HavePublicInstanceMethodMatcher.new :some_method
+    matcher.matches?(HPIMMSpecs)
+    matcher.negative_failure_message.should == [
+      "Expected HPIMMSpecs NOT to have public instance method 'some_method'",
+      "but it does"
+    ]
+  end
+end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090404/a9d61bd5/attachment.html>


More information about the macruby-changes mailing list