Skip to content

Commit

Permalink
Add specs for jruby/jruby#612
Browse files Browse the repository at this point in the history
  • Loading branch information
vp-of-awesome committed Mar 29, 2013
1 parent 4c5f42c commit c86b4b3
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions spec/ffi/struct_by_ref_spec.rb
@@ -0,0 +1,43 @@
#
# This file is part of ruby-ffi.
# For licensing, see LICENSE.SPECS
#

require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))

describe FFI::Struct, ' by_ref' do
before :all do
@struct_class = struct_class = Class.new(FFI::Struct) do
layout :a, :pointer
end

@api = Module.new do
extend FFI::Library
ffi_lib TestLibrary::PATH
fn = FFI::Type::POINTER.size == FFI::Type::LONG.size ? :ret_ulong : ret_uint64_t
attach_function :struct_test, fn, [ struct_class.by_ref ], :pointer
end
end

it "should accept instances of exact struct class" do
s = @struct_class.new
@api.struct_test(s).should == s.pointer
end

it "should accept nil" do
@api.struct_test(nil).should == nil
end

it "should reject other types" do
lambda { @api.struct_test('test').should == nil }.should raise_error(TypeError)
end

it "should reject instances of other struct classes" do
other_class = Class.new(FFI::Struct) do
layout :a, :pointer
end

lambda { @api.struct_test(other_class.new) }.should raise_error(TypeError)
end
end

0 comments on commit c86b4b3

Please sign in to comment.