1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
require 'test/unit'
class TestInstantiatingInterfaces < Test::Unit::TestCase
require 'java'
class NoRun
include java.lang.Runnable
end
class Runner
include java.lang.Runnable
def run; 'run' end
end
def test_include_mixin
mixin = NoRun.new
assert_raises(NoMethodError) { mixin.run }
Runner.new.run
end
def test_impl_proc
foo = nil
java.lang.Runnable.impl do
foo = "ran"
end.run
assert_equal("ran", foo)
cs = java.lang.CharSequence.impl(:charAt) do |sym, index|
assert_equal(:charAt, sym)
assert_equal(0, index)
end
assert_nothing_raised { cs.charAt(0) }
assert_raises(NoMethodError) { cs.length }
calls = []
cs = java.lang.CharSequence.impl(:charAt, :length) do |sym, *args|
calls << sym; calls << args
sym == :length ? 2 : ' '
end
assert_equal ' ', cs.charAt(0)
assert_equal ' ', cs.charAt(1)
assert_equal 2, cs.length
assert_equal [ :charAt, [0], :charAt, [1], :length, [] ], calls
def cs.length; 3 end
def cs.char_at; nil end
assert_equal 3, cs.length
assert_equal ' ', cs.charAt(2)
end
end
|