Sha256: 264c0c1dcea194a92dcbc103308796e2b9baa5653cde23fe8e6d9fc3f0c537b3

Contents?: true

Size: 1.45 KB

Versions: 7

Compression:

Stored size: 1.45 KB

Contents

require 'test_helper'

describe "Correct handling of encapsulated methods" do
  before(:all) do
    Extension.new "encapsulation" do |e|
      e.sources full_dir("headers/class_methods.h")
      node = e.namespace "encapsulation"
    end

    require 'encapsulation'
  end

  specify "should handle private/protected/public" do
    ext = Extended.new
    ext.public_method.should == 1

    lambda do
      ext.private_method
    end.should raise_error(NoMethodError)

    lambda do
      ext.protected_method
    end.should raise_error(NoMethodError)
  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
    lambda do
      arg.wrap_me_private
    end.should raise_error(NoMethodError)

    lambda do
      arg.wrap_me_protected
    end.should raise_error(NoMethodError)

    lambda do
      arg.wrap_me_public ArgumentAccess::PublicStruct.new
    end.should_not raise_error(NoMethodError)
    
    # Multiple argument methods
    lambda do
      arg.wrap_me_many_no
    end.should raise_error(NoMethodError)

    lambda do
      arg.wrap_me_many_yes(1, 2.0, ArgumentAccess::PublicStruct.new)
    end.should_not raise_error(NoMethodError)
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
rbplusplus-1.3.0 test/class_methods_encapsulate_test.rb
rbplusplus-1.2.1 test/class_methods_encapsulate_test.rb
rbplusplus-1.2.0 test/class_methods_encapsulate_test.rb
rbplusplus-1.1.0 test/class_methods_encapsulate_test.rb
rbplusplus-1.0.3 test/class_methods_encapsulate_test.rb
rbplusplus-1.0.1 test/class_methods_encapsulate_test.rb
rbplusplus-1.0 test/class_methods_encapsulate_test.rb