Sha256: d1f8f267be582c600c4d95c10b5127b067215c270b6226a068ee60f9fd7f49a6

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

require File.dirname(__FILE__) + '/test_helper'

context "Correct handling of encapsulated methods" do
  def setup
    if !defined?(@@encapsulated)
      super
      @@encapsulated = true 
      Extension.new "encapsulation" do |e|
        e.sources full_dir("headers/class_methods.h")
        node = e.namespace "encapsulation"
      end

      require 'encapsulation'
    end
  end

  specify "should handle private/protected/public" do
    ext = Extended.new
    ext.public_method.should == 1
    should.raise NoMethodError do
      ext.private_method
    end
    should.raise NoMethodError do
      ext.protected_method
    end
  end
  
  specify "should handle virtual methods" do
    ext_factory = ExtendedFactory.new
    ext = ext_factory.new_instance
    ext.fundamental_type_virtual_method.should == 1
    ext.user_defined_type_virtual_method.class.should == Base
  end

  specify "don't wrap methods that use non-public types in their arguments" do
    arg = ArgumentAccess.new

    # Single argument methods
    should.raise NoMethodError do
      arg.wrap_me_private
    end
    should.raise NoMethodError do
      arg.wrap_me_protected
    end

    should.not.raise NoMethodError do
      arg.wrap_me_public ArgumentAccess::PublicStruct.new
    end
    
    # Multiple argument methods
    should.raise NoMethodError do
      arg.wrap_me_many_no
    end
    should.not.raise NoMethodError do
      arg.wrap_me_many_yes(1, 2.0, ArgumentAccess::PublicStruct.new)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rbplusplus-0.9 test/class_methods_encapsulate_test.rb