diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-07 23:32:32 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-07 23:32:32 +0000 |
commit | 922bc54adb2b1cbcc14edc93a37f626c7a784a02 (patch) | |
tree | 5c99881d79d5877810411e2193256f85de7ec7f5 /test | |
parent | c95cbc0cc5f9c5d11438c3fd7258ef98dda9399e (diff) | |
download | ruby-922bc54adb2b1cbcc14edc93a37f626c7a784a02.tar.gz |
* test/dl/test_{cfunc,ptr}.rb: added tests from Aaron Patterson.
see [ruby-dev:39249].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24785 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/dl/test_cfunc.rb | 59 | ||||
-rw-r--r-- | test/dl/test_cptr.rb | 18 |
2 files changed, 77 insertions, 0 deletions
diff --git a/test/dl/test_cfunc.rb b/test/dl/test_cfunc.rb new file mode 100644 index 0000000000..9047c66b3c --- /dev/null +++ b/test/dl/test_cfunc.rb @@ -0,0 +1,59 @@ +require 'test_base' +require 'dl/func' + +module DL + class TestCFunc < TestBase + def setup + super + @name = 'strcpy' + @cf = CFunc.new(@libc[@name], TYPE_VOIDP, @name) + end + + def test_new_ptr_type_name + assert_equal @name, @cf.name + assert @cf.name.tainted?, 'name should be tainted' + assert_equal :cdecl, @cf.calltype + assert_equal TYPE_VOIDP, @cf.ctype + end + + def test_new_ptr + cf = CFunc.new(@libc['strcpy']) + assert_nil cf.name + assert_equal :cdecl, cf.calltype + assert_equal TYPE_VOID, cf.ctype + end + + def test_name_should_be_duped + assert_equal @name, @cf.name + assert @cf.name.tainted?, 'name should be tainted' + + name = @name.dup + @name << 'foo' + + assert_equal name, @cf.name + end + + def test_to_s + s = @cf.to_s + assert s.tainted?, 'to_s should be tainted' + assert_match(/ptr=#{sprintf("0x%x", @cf.ptr)}/, s) + assert_match(/name='#{@cf.name}'/, s) + assert_match(/type=#{@cf.ctype}/, s) + end + + def test_inspect + assert_equal @cf.inspect, @cf.to_s + end + + def test_to_i + assert_equal @cf.to_i, @cf.ptr + end + + def test_last_error + f = Function.new(@cf, [TYPE_VOIDP, TYPE_VOIDP]) + assert_nil CFunc.last_error + str = f.call("000", "123") + assert_not_nil CFunc.last_error + end + end +end diff --git a/test/dl/test_cptr.rb b/test/dl/test_cptr.rb new file mode 100644 index 0000000000..3ff811f6e3 --- /dev/null +++ b/test/dl/test_cptr.rb @@ -0,0 +1,18 @@ +require 'test_base' + +module DL + class TestCPtr < TestBase + def test_free + ptr = CPtr.malloc(4) + assert_nil ptr.free + end + + def test_free= + free = CFunc.new(@libc['free'], TYPE_VOID, 'free') + ptr = CPtr.malloc(4) + ptr.free = free + + assert_equal free.ptr, ptr.free.ptr + end + end +end |