aboutsummaryrefslogtreecommitdiffstats
path: root/test/fiddle/test_closure.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/fiddle/test_closure.rb')
-rw-r--r--test/fiddle/test_closure.rb49
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