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.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/ruby/test_threadgroup.rb b/test/ruby/test_threadgroup.rb
new file mode 100644
index 0000000000..ec95bd6419
--- /dev/null
+++ b/test/ruby/test_threadgroup.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: false
+require 'test/unit'
+
+class TestThreadGroup < Test::Unit::TestCase
+ def test_thread_init
+ thgrp = ThreadGroup.new
+ th = Thread.new{
+ thgrp.add(Thread.current)
+ Thread.new{sleep 1}
+ }.value
+ assert_equal(thgrp, th.group)
+ ensure
+ th.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