diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-20 20:18:52 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-20 20:18:52 +0000 |
commit | 1d15d5f08032acf1b7bceacbb450d617ff6e0931 (patch) | |
tree | a3785a79899302bc149e4a6e72f624ac27dc1f10 /spec/ruby/core/threadgroup | |
parent | 75bfc6440d595bf339007f4fb280fd4d743e89c1 (diff) |
Move spec/rubyspec to spec/ruby for consistency
* Other ruby implementations use the spec/ruby directory.
[Misc #13792] [ruby-core:82287]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby/core/threadgroup')
-rw-r--r-- | spec/ruby/core/threadgroup/add_spec.rb | 36 | ||||
-rw-r--r-- | spec/ruby/core/threadgroup/default_spec.rb | 11 | ||||
-rw-r--r-- | spec/ruby/core/threadgroup/enclose_spec.rb | 25 | ||||
-rw-r--r-- | spec/ruby/core/threadgroup/enclosed_spec.rb | 14 | ||||
-rw-r--r-- | spec/ruby/core/threadgroup/fixtures/classes.rb | 6 | ||||
-rw-r--r-- | spec/ruby/core/threadgroup/list_spec.rb | 24 |
6 files changed, 116 insertions, 0 deletions
diff --git a/spec/ruby/core/threadgroup/add_spec.rb b/spec/ruby/core/threadgroup/add_spec.rb new file mode 100644 index 0000000000..3b88d3460e --- /dev/null +++ b/spec/ruby/core/threadgroup/add_spec.rb @@ -0,0 +1,36 @@ +require File.expand_path('../../../spec_helper', __FILE__) +require File.expand_path('../fixtures/classes', __FILE__) + +describe "ThreadGroup#add" do + before :each do + @chan1,@chan2 = Channel.new,Channel.new + @thread = Thread.new { @chan1 << :go; @chan2.receive } + @chan1.receive + end + + after :each do + @chan2 << :done + @thread.join + end + + it "adds the given thread to a group and returns self" do + @thread.group.should_not == nil + + tg = ThreadGroup.new + tg.add(@thread).should == tg + @thread.group.should == tg + tg.list.include?(@thread).should == true + end + + it "removes itself from any other threadgroup" do + tg1 = ThreadGroup.new + tg2 = ThreadGroup.new + + tg1.add(@thread) + @thread.group.should == tg1 + tg2.add(@thread) + @thread.group.should == tg2 + tg2.list.include?(@thread).should == true + tg1.list.include?(@thread).should == false + end +end diff --git a/spec/ruby/core/threadgroup/default_spec.rb b/spec/ruby/core/threadgroup/default_spec.rb new file mode 100644 index 0000000000..d72b86ed39 --- /dev/null +++ b/spec/ruby/core/threadgroup/default_spec.rb @@ -0,0 +1,11 @@ +require File.expand_path('../../../spec_helper', __FILE__) + +describe "ThreadGroup::Default" do + it "is a ThreadGroup instance" do + ThreadGroup::Default.should be_kind_of(ThreadGroup) + end + + it "is the ThreadGroup of the main thread" do + ThreadGroup::Default.should == Thread.main.group + end +end diff --git a/spec/ruby/core/threadgroup/enclose_spec.rb b/spec/ruby/core/threadgroup/enclose_spec.rb new file mode 100644 index 0000000000..5827ddb6aa --- /dev/null +++ b/spec/ruby/core/threadgroup/enclose_spec.rb @@ -0,0 +1,25 @@ +require File.expand_path('../../../spec_helper', __FILE__) +require File.expand_path('../fixtures/classes', __FILE__) + +describe "ThreadGroup#enclose" do + before :each do + @chan1,@chan2 = Channel.new,Channel.new + @thread = Thread.new { @chan1 << :go; @chan2.receive } + @chan1.receive + end + + after :each do + @chan2 << :done + @thread.join + end + + it "raises a ThreadError if attempting to move a Thread from an enclosed ThreadGroup" do + thread_group = ThreadGroup.new + default_group = @thread.group + thread_group.add(@thread) + thread_group.enclose + lambda do + default_group.add(@thread) + end.should raise_error(ThreadError) + end +end diff --git a/spec/ruby/core/threadgroup/enclosed_spec.rb b/spec/ruby/core/threadgroup/enclosed_spec.rb new file mode 100644 index 0000000000..2c1c79f24a --- /dev/null +++ b/spec/ruby/core/threadgroup/enclosed_spec.rb @@ -0,0 +1,14 @@ +require File.expand_path('../../../spec_helper', __FILE__) + +describe "ThreadGroup#enclosed?" do + it "returns false when a ThreadGroup has not been enclosed (default state)" do + thread_group = ThreadGroup.new + thread_group.enclosed?.should be_false + end + + it "returns true when a ThreadGroup is enclosed" do + thread_group = ThreadGroup.new + thread_group.enclose + thread_group.enclosed?.should be_true + end +end diff --git a/spec/ruby/core/threadgroup/fixtures/classes.rb b/spec/ruby/core/threadgroup/fixtures/classes.rb new file mode 100644 index 0000000000..7dfe5e92d1 --- /dev/null +++ b/spec/ruby/core/threadgroup/fixtures/classes.rb @@ -0,0 +1,6 @@ +unless defined? Channel + require 'thread' + class Channel < Queue + alias receive shift + end +end diff --git a/spec/ruby/core/threadgroup/list_spec.rb b/spec/ruby/core/threadgroup/list_spec.rb new file mode 100644 index 0000000000..aa7b3f73fa --- /dev/null +++ b/spec/ruby/core/threadgroup/list_spec.rb @@ -0,0 +1,24 @@ +require File.expand_path('../../../spec_helper', __FILE__) +require File.expand_path('../fixtures/classes', __FILE__) + +describe "ThreadGroup#list" do + it "returns the list of threads in the group" do + chan = Channel.new + th1 = Thread.new { chan << :go; sleep } + chan.receive.should == :go + tg = ThreadGroup.new + tg.add(th1) + tg.list.should include(th1) + + th2 = Thread.new { chan << :go; sleep } + chan.receive.should == :go + + tg.add(th2) + (tg.list & [th1, th2]).should include(th1, th2) + + Thread.pass while th1.status and th1.status != 'sleep' + Thread.pass while th2.status and th2.status != 'sleep' + th1.run; th1.join + th2.run; th2.join + end +end |