summaryrefslogtreecommitdiff
path: root/test/dl
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-07 23:32:32 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-07 23:32:32 +0000
commit922bc54adb2b1cbcc14edc93a37f626c7a784a02 (patch)
tree5c99881d79d5877810411e2193256f85de7ec7f5 /test/dl
parentc95cbc0cc5f9c5d11438c3fd7258ef98dda9399e (diff)
* 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/dl')
-rw-r--r--test/dl/test_cfunc.rb59
-rw-r--r--test/dl/test_cptr.rb18
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