summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-31 13:04:48 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-31 13:04:48 +0000
commitd763098c294c8e11036695ffc6fb8b87d46087e1 (patch)
tree35121f2b45b843431710e1bf55646cec4bf965ae /test
parentf7665cbaa3e3c8752bd001431f840516a254c0e7 (diff)
merges r24785 and r24833 from trunk into ruby_1_9_1, with small modification.
-- * 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/branches/ruby_1_9_1@25591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-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..a2394d5154
--- /dev/null
+++ b/test/dl/test_cfunc.rb
@@ -0,0 +1,59 @@
+require_relative 'test_base'
+require 'dl/func'
+
+module DL
+ class TestCFunc < TestBase
+ def setup
+ super
+ @func_name = 'strcpy'
+ @cf = CFunc.new(@libc[@func_name], TYPE_VOIDP, @func_name)
+ end
+
+ def test_new_ptr_type_name
+ assert_equal @func_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 @func_name, @cf.name
+ assert @cf.name.tainted?, 'name should be tainted'
+
+ name = @func_name.dup
+ @func_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..2d6a08e1c5
--- /dev/null
+++ b/test/dl/test_cptr.rb
@@ -0,0 +1,18 @@
+require_relative '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