diff options
Diffstat (limited to 'test/fiddle/test_closure.rb')
-rw-r--r-- | test/fiddle/test_closure.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/test/fiddle/test_closure.rb b/test/fiddle/test_closure.rb new file mode 100644 index 0000000000..ae343460f2 --- /dev/null +++ b/test/fiddle/test_closure.rb @@ -0,0 +1,49 @@ +require_relative 'helper' + +module Fiddle + class TestClosure < Fiddle::TestCase + def test_argument_errors + assert_raises(TypeError) do + Closure.new(TYPE_INT, TYPE_INT) + end + + assert_raises(TypeError) do + Closure.new('foo', [TYPE_INT]) + end + + assert_raises(TypeError) do + Closure.new(TYPE_INT, ['meow!']) + end + end + + def test_call + closure = Class.new(Closure) { + def call + 10 + end + }.new(TYPE_INT, []) + + func = Function.new(closure, [], TYPE_INT) + assert_equal 10, func.call + end + + def test_returner + closure = Class.new(Closure) { + def call thing + thing + end + }.new(TYPE_INT, [TYPE_INT]) + + func = Function.new(closure, [TYPE_INT], TYPE_INT) + assert_equal 10, func.call(10) + end + + def test_block_caller + cb = Closure::BlockCaller.new(TYPE_INT, [TYPE_INT]) do |one| + one + end + func = Function.new(cb, [TYPE_INT], TYPE_INT) + assert_equal 11, func.call(11) + end + end +end |