summaryrefslogtreecommitdiff
path: root/test/ruby/test_threadgroup.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_threadgroup.rb')
-rw-r--r--test/ruby/test_threadgroup.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/ruby/test_threadgroup.rb b/test/ruby/test_threadgroup.rb
new file mode 100644
index 0000000000..e29c477247
--- /dev/null
+++ b/test/ruby/test_threadgroup.rb
@@ -0,0 +1,55 @@
+require 'test/unit'
+require 'thread'
+require_relative 'envutil'
+
+class TestThreadGroup < Test::Unit::TestCase
+ def test_thread_init
+ thgrp = ThreadGroup.new
+ Thread.new{
+ thgrp.add(Thread.current)
+ assert_equal(thgrp, Thread.new{sleep 1}.group)
+ }.join
+ end
+
+ def test_frozen_thgroup
+ thgrp = ThreadGroup.new
+
+ t = Thread.new{1}
+ Thread.new{
+ thgrp.add(Thread.current)
+ thgrp.freeze
+ assert_raise(ThreadError) do
+ Thread.new{1}.join
+ end
+ assert_raise(ThreadError) do
+ thgrp.add(t)
+ end
+ assert_raise(ThreadError) do
+ ThreadGroup.new.add Thread.current
+ end
+ }.join
+ t.join
+ end
+
+ def test_enclosed_thgroup
+ thgrp = ThreadGroup.new
+ assert_equal(false, thgrp.enclosed?)
+
+ t = Thread.new{1}
+ Thread.new{
+ thgrp.add(Thread.current)
+ thgrp.enclose
+ assert_equal(true, thgrp.enclosed?)
+ assert_nothing_raised do
+ Thread.new{1}.join
+ end
+ assert_raise(ThreadError) do
+ thgrp.add t
+ end
+ assert_raise(ThreadError) do
+ ThreadGroup.new.add Thread.current
+ end
+ }.join
+ t.join
+ end
+end