From 76f2fc8b46d17eea228e10f34020947acb7fd201 Mon Sep 17 00:00:00 2001 From: mame Date: Fri, 30 May 2008 13:42:23 +0000 Subject: * test/ruby/test_signal.rb: add tests to achieve over 80% test coverage of signal.c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16707 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_signal.rb | 99 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) (limited to 'test') diff --git a/test/ruby/test_signal.rb b/test/ruby/test_signal.rb index 1ca9bf0b55..e664961448 100644 --- a/test/ruby/test_signal.rb +++ b/test/ruby/test_signal.rb @@ -64,4 +64,103 @@ class TestSignal < Test::Unit::TestCase w0.close end end + + def test_invalid_signal_name + return unless Process.respond_to?(:kill) + + assert_raise(ArgumentError) { Process.kill(:XXXXXXXXXX, $$) } + end + + def test_signal_exception + assert_raise(ArgumentError) { SignalException.new } + assert_raise(ArgumentError) { SignalException.new(-1) } + assert_raise(ArgumentError) { SignalException.new(:XXXXXXXXXX) } + Signal.list.each do |signm, signo| + next if signm == "EXIT" + assert_equal(SignalException.new(signm).signo, signo) + assert_equal(SignalException.new(signm.to_sym).signo, signo) + assert_equal(SignalException.new(signo).signo, signo) + end + end + + def test_interrupt + assert_raise(Interrupt) { raise Interrupt.new } + end + + def test_signal2 + return unless Process.respond_to?(:kill) + begin + x = false + oldtrap = Signal.trap(:INT) {|sig| x = true } + GC.start + + assert_raise(ArgumentError) { Process.kill } + + Timeout.timeout(10) do + x = false + Process.kill(SignalException.new(:INT).signo, $$) + nil until x + + x = false + Process.kill("INT", $$) + nil until x + + x = false + Process.kill("SIGINT", $$) + nil until x + + x = false + o = Object.new + def o.to_str; "SIGINT"; end + Process.kill(o, $$) + nil until x + end + + assert_raise(ArgumentError) { Process.kill(Object.new, $$) } + + ensure + Signal.trap(:INT, oldtrap) if oldtrap + end + end + + def test_trap + return unless Process.respond_to?(:kill) + begin + oldtrap = Signal.trap(:INT) {|sig| } + + assert_raise(ArgumentError) { Signal.trap } + + assert_raise(SecurityError) do + s = proc {}.taint + Signal.trap(:INT, s) + end + + # FIXME! + Signal.trap(:INT, nil) + Signal.trap(:INT, "") + Signal.trap(:INT, "SIG_IGN") + Signal.trap(:INT, "IGNORE") + + Signal.trap(:INT, "SIG_DFL") + Signal.trap(:INT, "SYSTEM_DEFAULT") + + Signal.trap(:INT, "EXIT") + + assert_raise(ArgumentError) { Signal.trap(:INT, "xxxxxx") } + assert_raise(ArgumentError) { Signal.trap(:INT, "xxxx") } + + Signal.trap(SignalException.new(:INT).signo, "SIG_DFL") + + assert_raise(ArgumentError) { Signal.trap(-1, "xxxx") } + + o = Object.new + def o.to_str; "SIGINT"; end + Signal.trap(o, "SIG_DFL") + + assert_raise(ArgumentError) { Signal.trap("XXXXXXXXXX", "SIG_DFL") } + + ensure + Signal.trap(:INT, oldtrap) if oldtrap + end + end end -- cgit v1.2.3