spec/bacon/unit/isolator_spec.rb in caricature-0.7.6 vs spec/bacon/unit/isolator_spec.rb in caricature-0.7.7
- old
+ new
@@ -1,220 +1,220 @@
-require File.dirname(__FILE__) + "/../spec_helper"
-
-class TestIsolation
- attr_accessor :instance, :expectations
- def initialize(instance, expectations)
- @instance, @expectations = instance, expectations
- end
- def send_message(method_name, return_type, *args, &b)
- internal_send method_name, :internal, return_type, *args, &b
- end
- def send_class_message(method_name, return_type, *args, &b)
- internal_send method_name, :class, return_type, *args, &b
- end
- def internal_send(method_name, mode, return_type, *args, &b)
- exp = expectations.find(method_name, mode, *args)
- if exp
- res = instance.__send__(method_name, *args, &b) if exp.super_before?
- res = exp.execute(*args)
- res = instance.__send__(method_name, *args, &b) if !exp.super_before? and exp.call_super?
- res
- else
- rt = nil
- is_value_type = return_type && return_type != System::Void.to_clr_type && return_type.is_value_type
- rt = System::Activator.create_instance(return_type) if is_value_type
- rt
- end
- end
-end
-
-describe "Caricature::RubyIsolator" do
-
- before do
- @subj = Soldier.new
- res = Caricature::RubyIsolator.for Caricature::IsolatorContext.new(@subj)
- iso = TestIsolation.new res.subject, Caricature::Expectations.new
- @proxy = res.isolation
- @proxy.class.instance_variable_set("@___context___", iso)
- end
-
-
- describe "when invoking a method" do
-
- before do
- @proxy.name
- end
-
- it "should return nil" do
- @proxy.name.should.be.nil
- end
-
- end
-
- describe "when isolating a class with class members" do
-
- before do
- res = Caricature::RubyIsolator.for Caricature::IsolatorContext.new(DaggerWithClassMembers)
- iso = TestIsolation.new res.subject, Caricature::Expectations.new
- @proxy = res.isolation
- @proxy.class.instance_variable_set("@___context___", iso)
- end
-
- it "should return nil for the class method" do
-
- @proxy.class.class_name.should.be.nil
-
- end
-
- end
-end
-
-describe "Caricature::ClrIsolator" do
-
- describe "for an instance of a CLR class" do
-
- before do
- @ninja = ClrModels::Ninja.new
- @ninja.name = "Nakiro"
- context = Caricature::IsolatorContext.new(@ninja)
- res = Caricature::ClrIsolator.for context
- iso = TestIsolation.new res.subject, Caricature::Expectations.new
- @proxy = res.isolation
- @proxy.class.instance_variable_set("@___context___", iso)
- end
-
- it "should create a proxy" do
-
- @proxy.___super___.name.should.equal @ninja.name
- @proxy.___super___.id.should.equal 1
- end
-
- describe "when invoking a method" do
-
- before do
- @proxy.name
- end
-
- it "should return nil" do
- @proxy.name.should.be.nil
- end
-
- end
-
- describe "when isolating a class with class members" do
-
- before do
- res = Caricature::ClrIsolator.for Caricature::IsolatorContext.new(ClrModels::SwordWithStatics)
- iso = TestIsolation.new res.subject, Caricature::Expectations.new
- @proxy = res.isolation
- @proxy.class.instance_variable_set("@___context___", iso)
- end
-
- it "should return nil for the class method" do
-
- @proxy.class.class_naming.should.be.nil
-
- end
-
- end
-
- end
-
- describe "for a CLR class" do
-
- before do
- @recorder = Caricature::MethodCallRecorder.new
- context = Caricature::IsolatorContext.new(ClrModels::Ninja, @recorder)
- res = Caricature::ClrIsolator.for context
- iso = TestIsolation.new res.subject, Caricature::Expectations.new
- @proxy = res.isolation
- @proxy.class.instance_variable_set("@___context___", iso)
- end
-
- it "should create a proxy" do
-
- @proxy.class.superclass.should.equal ClrModels::Ninja
-
- end
-
-
- end
-
- describe "for a CLR interface" do
-
- before do
- res = Caricature::ClrInterfaceIsolator.for Caricature::IsolatorContext.new(ClrModels::IWarrior)
- @proxy = res.isolation
- end
-
- it "should create a proxy" do
- @proxy.class.to_s.should.match /^IWarrior/
- end
-
- it "should create a method on the proxy" do
- @proxy.should.respond_to?(:is_killed_by)
- end
-
- it "should create a getter for a property on the proxy" do
- @proxy.should.respond_to?(:id)
- end
-
- it "should create a setter for a writable property on the proxy" do
- @proxy.should.respond_to?(:name=)
- end
-
- end
-
- describe "for a CLR Interface with an event" do
-
- before do
- res = Caricature::ClrInterfaceIsolator.for Caricature::IsolatorContext.new(ClrModels::IExposing)
- @proxy = res.isolation
- end
-
- it "should create an add method for the event" do
- @proxy.should.respond_to?(:add_OnIsExposedChanged)
- end
-
- it "should create a remove method for the event" do
- @proxy.should.respond_to?(:remove_OnIsExposedChanged)
- end
-
- end
-
- describe "for CLR interface recursion" do
-
- before do
- res = Caricature::ClrInterfaceIsolator.for Caricature::IsolatorContext.new(ClrModels::IExposingWarrior)
- @proxy = res.isolation
- end
-
- it "should create a method defined on the CLR interface" do
- @proxy.should.respond_to?(:own_method)
- end
-
- it "should create a method defined on one of the composing interfaces" do
- @proxy.should.respond_to?(:some_method)
- end
-
- it "should create a method defined on one of the topmost composing interfaces" do
- @proxy.should.respond_to?(:is_killed_by)
- end
-
- it "should create an add method for an event defined on a composing interface" do
- @proxy.should.respond_to?(:add_OnIsExposedChanged)
- end
-
- it "should create a remove method for an event defined on a composing interface" do
- @proxy.should.respond_to?(:remove_OnIsExposedChanged)
- end
-
- it "should create a getter for a property on the proxy" do
- @proxy.should.respond_to?(:id)
- end
-
- it "should create a setter for a writable property on the proxy" do
- @proxy.should.respond_to?(:name=)
- end
- end
-
+require File.dirname(__FILE__) + "/../spec_helper"
+
+class TestIsolation
+ attr_accessor :instance, :expectations
+ def initialize(instance, expectations)
+ @instance, @expectations = instance, expectations
+ end
+ def send_message(method_name, return_type, *args, &b)
+ internal_send method_name, :internal, return_type, *args, &b
+ end
+ def send_class_message(method_name, return_type, *args, &b)
+ internal_send method_name, :class, return_type, *args, &b
+ end
+ def internal_send(method_name, mode, return_type, *args, &b)
+ exp = expectations.find(method_name, mode, *args)
+ if exp
+ res = instance.__send__(method_name, *args, &b) if exp.super_before?
+ res = exp.execute(*args)
+ res = instance.__send__(method_name, *args, &b) if !exp.super_before? and exp.call_super?
+ res
+ else
+ rt = nil
+ is_value_type = return_type && return_type != System::Void.to_clr_type && return_type.is_value_type
+ rt = System::Activator.create_instance(return_type) if is_value_type
+ rt
+ end
+ end
+end
+
+describe "Caricature::RubyIsolator" do
+
+ before do
+ @subj = Soldier.new
+ res = Caricature::RubyIsolator.for Caricature::IsolatorContext.new(@subj)
+ iso = TestIsolation.new res.subject, Caricature::Expectations.new
+ @proxy = res.isolation
+ @proxy.class.instance_variable_set("@___context___", iso)
+ end
+
+
+ describe "when invoking a method" do
+
+ before do
+ @proxy.name
+ end
+
+ it "should return nil" do
+ @proxy.name.should.be.nil
+ end
+
+ end
+
+ describe "when isolating a class with class members" do
+
+ before do
+ res = Caricature::RubyIsolator.for Caricature::IsolatorContext.new(DaggerWithClassMembers)
+ iso = TestIsolation.new res.subject, Caricature::Expectations.new
+ @proxy = res.isolation
+ @proxy.class.instance_variable_set("@___context___", iso)
+ end
+
+ it "should return nil for the class method" do
+
+ @proxy.class.class_name.should.be.nil
+
+ end
+
+ end
+end
+
+describe "Caricature::ClrIsolator" do
+
+ describe "for an instance of a CLR class" do
+
+ before do
+ @ninja = ClrModels::Ninja.new
+ @ninja.name = "Nakiro"
+ context = Caricature::IsolatorContext.new(@ninja)
+ res = Caricature::ClrIsolator.for context
+ iso = TestIsolation.new res.subject, Caricature::Expectations.new
+ @proxy = res.isolation
+ @proxy.class.instance_variable_set("@___context___", iso)
+ end
+
+ it "should create a proxy" do
+
+ @proxy.___super___.name.should.equal @ninja.name
+ @proxy.___super___.id.should.equal 1
+ end
+
+ describe "when invoking a method" do
+
+ before do
+ @proxy.name
+ end
+
+ it "should return nil" do
+ @proxy.name.should.be.nil
+ end
+
+ end
+
+ describe "when isolating a class with class members" do
+
+ before do
+ res = Caricature::ClrIsolator.for Caricature::IsolatorContext.new(ClrModels::SwordWithStatics)
+ iso = TestIsolation.new res.subject, Caricature::Expectations.new
+ @proxy = res.isolation
+ @proxy.class.instance_variable_set("@___context___", iso)
+ end
+
+ it "should return nil for the class method" do
+
+ @proxy.class.class_naming.should.be.nil
+
+ end
+
+ end
+
+ end
+
+ describe "for a CLR class" do
+
+ before do
+ @recorder = Caricature::MethodCallRecorder.new
+ context = Caricature::IsolatorContext.new(ClrModels::Ninja, @recorder)
+ res = Caricature::ClrIsolator.for context
+ iso = TestIsolation.new res.subject, Caricature::Expectations.new
+ @proxy = res.isolation
+ @proxy.class.instance_variable_set("@___context___", iso)
+ end
+
+ it "should create a proxy" do
+
+ @proxy.class.superclass.should.equal ClrModels::Ninja
+
+ end
+
+
+ end
+
+ describe "for a CLR interface" do
+
+ before do
+ res = Caricature::ClrInterfaceIsolator.for Caricature::IsolatorContext.new(ClrModels::IWarrior)
+ @proxy = res.isolation
+ end
+
+ it "should create a proxy" do
+ @proxy.class.to_s.should.match /^IWarrior/
+ end
+
+ it "should create a method on the proxy" do
+ @proxy.should.respond_to?(:is_killed_by)
+ end
+
+ it "should create a getter for a property on the proxy" do
+ @proxy.should.respond_to?(:id)
+ end
+
+ it "should create a setter for a writable property on the proxy" do
+ @proxy.should.respond_to?(:name=)
+ end
+
+ end
+
+ describe "for a CLR Interface with an event" do
+
+ before do
+ res = Caricature::ClrInterfaceIsolator.for Caricature::IsolatorContext.new(ClrModels::IExposing)
+ @proxy = res.isolation
+ end
+
+ it "should create an add method for the event" do
+ @proxy.should.respond_to?(:add_OnIsExposedChanged)
+ end
+
+ it "should create a remove method for the event" do
+ @proxy.should.respond_to?(:remove_OnIsExposedChanged)
+ end
+
+ end
+
+ describe "for CLR interface recursion" do
+
+ before do
+ res = Caricature::ClrInterfaceIsolator.for Caricature::IsolatorContext.new(ClrModels::IExposingWarrior)
+ @proxy = res.isolation
+ end
+
+ it "should create a method defined on the CLR interface" do
+ @proxy.should.respond_to?(:own_method)
+ end
+
+ it "should create a method defined on one of the composing interfaces" do
+ @proxy.should.respond_to?(:some_method)
+ end
+
+ it "should create a method defined on one of the topmost composing interfaces" do
+ @proxy.should.respond_to?(:is_killed_by)
+ end
+
+ it "should create an add method for an event defined on a composing interface" do
+ @proxy.should.respond_to?(:add_OnIsExposedChanged)
+ end
+
+ it "should create a remove method for an event defined on a composing interface" do
+ @proxy.should.respond_to?(:remove_OnIsExposedChanged)
+ end
+
+ it "should create a getter for a property on the proxy" do
+ @proxy.should.respond_to?(:id)
+ end
+
+ it "should create a setter for a writable property on the proxy" do
+ @proxy.should.respond_to?(:name=)
+ end
+ end
+
end
\ No newline at end of file