diff options
Diffstat (limited to 'spec/ruby/library/delegate/delegator')
22 files changed, 447 insertions, 0 deletions
diff --git a/spec/ruby/library/delegate/delegator/case_compare_spec.rb b/spec/ruby/library/delegate/delegator/case_compare_spec.rb new file mode 100644 index 0000000000..b62397cecf --- /dev/null +++ b/spec/ruby/library/delegate/delegator/case_compare_spec.rb @@ -0,0 +1,11 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#===" do + it "is delegated" do + base = mock('base') + delegator = DelegateSpecs::Delegator.new(base) + base.should_receive(:===).with(42).and_return(:foo) + (delegator === 42).should == :foo + end +end diff --git a/spec/ruby/library/delegate/delegator/compare_spec.rb b/spec/ruby/library/delegate/delegator/compare_spec.rb new file mode 100644 index 0000000000..7dee5c2fb5 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/compare_spec.rb @@ -0,0 +1,11 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#<=>" do + it "is delegated" do + base = mock('base') + delegator = DelegateSpecs::Delegator.new(base) + base.should_receive(:<=>).with(42).and_return(1) + (delegator <=> 42).should == 1 + end +end diff --git a/spec/ruby/library/delegate/delegator/complement_spec.rb b/spec/ruby/library/delegate/delegator/complement_spec.rb new file mode 100644 index 0000000000..10cb37c7ea --- /dev/null +++ b/spec/ruby/library/delegate/delegator/complement_spec.rb @@ -0,0 +1,11 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#~" do + it "is delegated" do + base = mock('base') + delegator = DelegateSpecs::Delegator.new(base) + base.should_receive(:~).and_return(:foo) + (~delegator).should == :foo + end +end diff --git a/spec/ruby/library/delegate/delegator/eql_spec.rb b/spec/ruby/library/delegate/delegator/eql_spec.rb new file mode 100644 index 0000000000..b302bb7016 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/eql_spec.rb @@ -0,0 +1,35 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#eql?" do + it "returns true when compared with same delegator" do + base = mock('base') + delegator = DelegateSpecs::Delegator.new(base) + + delegator.eql?(delegator).should == true + end + + it "returns true when compared with the inner object" do + base = mock('base') + delegator = DelegateSpecs::Delegator.new(base) + + delegator.eql?(base).should == true + end + + it "returns false when compared with the delegator with other object" do + base = mock('base') + other = mock('other') + delegator0 = DelegateSpecs::Delegator.new(base) + delegator1 = DelegateSpecs::Delegator.new(other) + + delegator0.eql?(delegator1).should == false + end + + it "returns false when compared with the other object" do + base = mock('base') + other = mock('other') + delegator = DelegateSpecs::Delegator.new(base) + + delegator.eql?(other).should == false + end +end diff --git a/spec/ruby/library/delegate/delegator/equal_spec.rb b/spec/ruby/library/delegate/delegator/equal_spec.rb new file mode 100644 index 0000000000..97aabebabe --- /dev/null +++ b/spec/ruby/library/delegate/delegator/equal_spec.rb @@ -0,0 +1,13 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#equal?" do + it "returns true only when compared with the delegator" do + obj = mock('base') + delegator = DelegateSpecs::Delegator.new(obj) + obj.should_not_receive(:equal?) + delegator.equal?(obj).should == false + delegator.equal?(nil).should == false + delegator.equal?(delegator).should == true + end +end diff --git a/spec/ruby/library/delegate/delegator/equal_value_spec.rb b/spec/ruby/library/delegate/delegator/equal_value_spec.rb new file mode 100644 index 0000000000..d70aad1e03 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/equal_value_spec.rb @@ -0,0 +1,24 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#==" do + before :all do + @base = mock('base') + @delegator = DelegateSpecs::Delegator.new(@base) + end + + it "is not delegated when passed self" do + @base.should_not_receive(:==) + (@delegator == @delegator).should == true + end + + it "is delegated when passed the delegated object" do + @base.should_receive(:==).and_return(false) + (@delegator == @base).should == false + end + + it "is delegated in general" do + @base.should_receive(:==).and_return(true) + (@delegator == 42).should == true + end +end diff --git a/spec/ruby/library/delegate/delegator/frozen_spec.rb b/spec/ruby/library/delegate/delegator/frozen_spec.rb new file mode 100644 index 0000000000..ad87dc8bdf --- /dev/null +++ b/spec/ruby/library/delegate/delegator/frozen_spec.rb @@ -0,0 +1,39 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator when frozen" do + before :all do + @array = [42, :hello] + @delegate = DelegateSpecs::Delegator.new(@array) + @delegate.freeze + end + + it "is still readable" do + @delegate.should == [42, :hello] + @delegate.include?("bar").should == false + end + + it "is frozen" do + @delegate.frozen?.should == true + end + + it "is not writable" do + ->{ @delegate[0] += 2 }.should.raise( RuntimeError ) + end + + it "creates a frozen clone" do + @delegate.clone.frozen?.should == true + end + + it "creates an unfrozen dup" do + @delegate.dup.frozen?.should == false + end + + it "causes mutative calls to raise RuntimeError" do + ->{ @delegate.__setobj__("hola!") }.should.raise( RuntimeError ) + end + + it "returns false if only the delegated object is frozen" do + DelegateSpecs::Delegator.new([1,2,3].freeze).frozen?.should == false + end +end diff --git a/spec/ruby/library/delegate/delegator/hash_spec.rb b/spec/ruby/library/delegate/delegator/hash_spec.rb new file mode 100644 index 0000000000..132cb91ccc --- /dev/null +++ b/spec/ruby/library/delegate/delegator/hash_spec.rb @@ -0,0 +1,11 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#hash" do + it "is delegated" do + base = mock('base') + delegator = DelegateSpecs::Delegator.new(base) + base.should_receive(:hash).and_return(42) + delegator.hash.should == 42 + end +end diff --git a/spec/ruby/library/delegate/delegator/marshal_spec.rb b/spec/ruby/library/delegate/delegator/marshal_spec.rb new file mode 100644 index 0000000000..2817ac7e0b --- /dev/null +++ b/spec/ruby/library/delegate/delegator/marshal_spec.rb @@ -0,0 +1,21 @@ +require_relative '../../../spec_helper' +require 'delegate' + +describe "SimpleDelegator" do + before :all do + @obj = "hello" + @delegate = SimpleDelegator.new(@obj) + end + + it "can be marshalled" do + m = Marshal.load(Marshal.dump(@delegate)) + m.class.should == SimpleDelegator + (m == @obj).should == true + end + + it "can be marshalled with its instance variables intact" do + @delegate.instance_variable_set(:@foo, "bar") + m = Marshal.load(Marshal.dump(@delegate)) + m.instance_variable_get(:@foo).should == "bar" + end +end diff --git a/spec/ruby/library/delegate/delegator/method_spec.rb b/spec/ruby/library/delegate/delegator/method_spec.rb new file mode 100644 index 0000000000..e41d3b4a53 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/method_spec.rb @@ -0,0 +1,69 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#method" do + before :each do + @simple = DelegateSpecs::Simple.new + @delegate = DelegateSpecs::Delegator.new(@simple) + end + + it "returns a method object for public methods of the delegate object" do + m = @delegate.method(:pub) + m.should.instance_of?(Method) + m.call.should == :foo + end + + it "raises a NameError for protected methods of the delegate object" do + -> { + -> { + @delegate.method(:prot) + }.should complain(/delegator does not forward private method #prot/) + }.should.raise(NameError) + end + + it "raises a NameError for a private methods of the delegate object" do + -> { + -> { + @delegate.method(:priv) + }.should complain(/delegator does not forward private method #priv/) + }.should.raise(NameError) + end + + it "returns a method object for public methods of the Delegator class" do + m = @delegate.method(:extra) + m.should.instance_of?(Method) + m.call.should == :cheese + end + + it "returns a method object for protected methods of the Delegator class" do + m = @delegate.method(:extra_protected) + m.should.instance_of?(Method) + m.call.should == :baz + end + + it "returns a method object for private methods of the Delegator class" do + m = @delegate.method(:extra_private) + m.should.instance_of?(Method) + m.call.should == :bar + end + + it "raises a NameError for an invalid method name" do + -> { + @delegate.method(:invalid_and_silly_method_name) + }.should.raise(NameError) + end + + it "returns a method that respond_to_missing?" do + m = @delegate.method(:pub_too) + m.should.instance_of?(Method) + m.call.should == :pub_too + end + + it "raises a NameError if method is no longer valid because object has changed" do + m = @delegate.method(:pub) + @delegate.__setobj__([1,2,3]) + -> { + m.call + }.should.raise(NameError) + end +end diff --git a/spec/ruby/library/delegate/delegator/methods_spec.rb b/spec/ruby/library/delegate/delegator/methods_spec.rb new file mode 100644 index 0000000000..928f63f21d --- /dev/null +++ b/spec/ruby/library/delegate/delegator/methods_spec.rb @@ -0,0 +1,37 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#methods" do + before :all do + @simple = DelegateSpecs::Simple.new + class << @simple + def singleton_method + end + end + + @delegate = DelegateSpecs::Delegator.new(@simple) + @methods = @delegate.methods + end + + it "returns singleton methods when passed false" do + @delegate.methods(false).should.include?(:singleton_method) + end + + it "includes all public methods of the delegate object" do + @methods.should.include? :pub + end + + it "includes all protected methods of the delegate object" do + @methods.should.include? :prot + end + + it "includes instance methods of the Delegator class" do + @methods.should.include? :extra + @methods.should.include? :extra_protected + end + + it "does not include private methods" do + @methods.should_not.include? :priv + @methods.should_not.include? :extra_private + end +end diff --git a/spec/ruby/library/delegate/delegator/not_equal_spec.rb b/spec/ruby/library/delegate/delegator/not_equal_spec.rb new file mode 100644 index 0000000000..7fd234a671 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/not_equal_spec.rb @@ -0,0 +1,24 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#!=" do + before :all do + @base = mock('base') + @delegator = DelegateSpecs::Delegator.new(@base) + end + + it "is not delegated when passed self" do + @base.should_not_receive(:"!=") + (@delegator != @delegator).should == false + end + + it "is delegated when passed the delegated object" do + @base.should_receive(:"!=").and_return(true) + (@delegator != @base).should == true + end + + it "is delegated in general" do + @base.should_receive(:"!=").and_return(false) + (@delegator != 42).should == false + end +end diff --git a/spec/ruby/library/delegate/delegator/not_spec.rb b/spec/ruby/library/delegate/delegator/not_spec.rb new file mode 100644 index 0000000000..50105181c3 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/not_spec.rb @@ -0,0 +1,11 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#!" do + it "is delegated" do + base = mock('base') + delegator = DelegateSpecs::Delegator.new(base) + base.should_receive(:"!").and_return(:foo) + (!delegator).should == :foo + end +end diff --git a/spec/ruby/library/delegate/delegator/private_methods_spec.rb b/spec/ruby/library/delegate/delegator/private_methods_spec.rb new file mode 100644 index 0000000000..5615ed0668 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/private_methods_spec.rb @@ -0,0 +1,20 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#private_methods" do + before :all do + @simple = DelegateSpecs::Simple.new + @delegate = DelegateSpecs::Delegator.new(@simple) + @methods = @delegate.private_methods + end + + it "does not include any method of the delegate object" do # since delegates does not forward private calls + @methods.should_not.include? :priv + @methods.should_not.include? :prot + @methods.should_not.include? :pub + end + + it "includes all private instance methods of the Delegate class" do + @methods.should.include? :extra_private + end +end diff --git a/spec/ruby/library/delegate/delegator/protected_methods_spec.rb b/spec/ruby/library/delegate/delegator/protected_methods_spec.rb new file mode 100644 index 0000000000..3ee999fdac --- /dev/null +++ b/spec/ruby/library/delegate/delegator/protected_methods_spec.rb @@ -0,0 +1,18 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#protected_methods" do + before :all do + @simple = DelegateSpecs::Simple.new + @delegate = DelegateSpecs::Delegator.new(@simple) + @methods = @delegate.protected_methods + end + + it "includes protected methods of the delegate object" do + @methods.should.include? :prot + end + + it "includes protected instance methods of the Delegator class" do + @methods.should.include? :extra_protected + end +end diff --git a/spec/ruby/library/delegate/delegator/public_methods_spec.rb b/spec/ruby/library/delegate/delegator/public_methods_spec.rb new file mode 100644 index 0000000000..8cf6621e2d --- /dev/null +++ b/spec/ruby/library/delegate/delegator/public_methods_spec.rb @@ -0,0 +1,18 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#public_methods" do + before :all do + @simple = DelegateSpecs::Simple.new + @delegate = DelegateSpecs::Delegator.new(@simple) + @methods = @delegate.public_methods + end + + it "includes public methods of the delegate object" do + @methods.should.include? :pub + end + + it "includes public instance methods of the Delegator class" do + @methods.should.include? :extra + end +end diff --git a/spec/ruby/library/delegate/delegator/send_spec.rb b/spec/ruby/library/delegate/delegator/send_spec.rb new file mode 100644 index 0000000000..cc18a2794b --- /dev/null +++ b/spec/ruby/library/delegate/delegator/send_spec.rb @@ -0,0 +1,26 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "SimpleDelegator.new" do + before :all do + @simple = DelegateSpecs::Simple.new + @delegate = SimpleDelegator.new(@simple) + end + + it "forwards public method calls" do + @delegate.pub.should == :foo + end + + it "forwards protected method calls" do + ->{ @delegate.prot }.should.raise( NoMethodError ) + end + + it "doesn't forward private method calls" do + ->{ @delegate.priv }.should.raise( NoMethodError ) + end + + it "doesn't forward private method calls even via send or __send__" do + ->{ @delegate.send(:priv, 42) }.should.raise( NoMethodError ) + ->{ @delegate.__send__(:priv, 42) }.should.raise( NoMethodError ) + end +end diff --git a/spec/ruby/library/delegate/delegator/taint_spec.rb b/spec/ruby/library/delegate/delegator/taint_spec.rb new file mode 100644 index 0000000000..6bf13bb73d --- /dev/null +++ b/spec/ruby/library/delegate/delegator/taint_spec.rb @@ -0,0 +1,8 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#taint" do + before :each do + @delegate = DelegateSpecs::Delegator.new("") + end +end diff --git a/spec/ruby/library/delegate/delegator/tap_spec.rb b/spec/ruby/library/delegate/delegator/tap_spec.rb new file mode 100644 index 0000000000..916e4a37fe --- /dev/null +++ b/spec/ruby/library/delegate/delegator/tap_spec.rb @@ -0,0 +1,16 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#tap" do + it "yield the delegator object" do + obj = mock('base') + delegator = DelegateSpecs::Delegator.new(obj) + obj.should_not_receive(:tap) + yielded = [] + delegator.tap do |x| + yielded << x + end + yielded.size.should == 1 + yielded[0].equal?(delegator).should == true + end +end diff --git a/spec/ruby/library/delegate/delegator/trust_spec.rb b/spec/ruby/library/delegate/delegator/trust_spec.rb new file mode 100644 index 0000000000..f1b81814c5 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/trust_spec.rb @@ -0,0 +1,8 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#trust" do + before :each do + @delegate = DelegateSpecs::Delegator.new([]) + end +end diff --git a/spec/ruby/library/delegate/delegator/untaint_spec.rb b/spec/ruby/library/delegate/delegator/untaint_spec.rb new file mode 100644 index 0000000000..4051fd2629 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/untaint_spec.rb @@ -0,0 +1,8 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#untaint" do + before :each do + @delegate = -> { DelegateSpecs::Delegator.new("") }.call + end +end diff --git a/spec/ruby/library/delegate/delegator/untrust_spec.rb b/spec/ruby/library/delegate/delegator/untrust_spec.rb new file mode 100644 index 0000000000..4f7fa1e582 --- /dev/null +++ b/spec/ruby/library/delegate/delegator/untrust_spec.rb @@ -0,0 +1,8 @@ +require_relative '../../../spec_helper' +require_relative '../fixtures/classes' + +describe "Delegator#untrust" do + before :each do + @delegate = DelegateSpecs::Delegator.new("") + end +end |
