Revision: 3098 http://trac.macosforge.org/projects/ruby/changeset/3098 Author: ernest.prabhakar@gmail.com Date: 2009-12-10 15:26:45 -0800 (Thu, 10 Dec 2009) Log Message: ----------- Fixed errors in Dispatch::Group spec, still have failures Modified Paths: -------------- MacRuby/trunk/spec/macruby/core/gcd/group_spec.rb Modified: MacRuby/trunk/spec/macruby/core/gcd/group_spec.rb =================================================================== --- MacRuby/trunk/spec/macruby/core/gcd/group_spec.rb 2009-12-10 22:57:37 UTC (rev 3097) +++ MacRuby/trunk/spec/macruby/core/gcd/group_spec.rb 2009-12-10 23:26:45 UTC (rev 3098) @@ -2,15 +2,80 @@ if MACOSX_VERSION >= 10.6 describe "Dispatch::Group" do + before :each do + @q = Dispatch::Queue.new('org.macruby.gcd_spec.group') + @g = Dispatch::Group.new + @i = 0 + end + it "returns an instance of Group" do - @group = Dispatch::Group.new - @group.should be_kind_of(Dispatch::Group) + @g.should be_kind_of(Dispatch::Group) end - describe "#notify" do + it "is passed as an argument to Dispatch::Queue#async" do + lambda { @q.async(@g) { @i = 42 } }.should_not raise_error(ArgumentError) + lambda { @q.async(42) }.should raise_error(ArgumentError) end + + describe :wait do + + it "can wait forever until associated blocks have been run" do + @q.async(@g) { @i = 42 } + @g.wait(Dispatch::TIME_FOREVER) + @i.should == 42 + end + + it "can only wait until timeout for associated blocks to run" do + @i.should == 0 + @q.async(@g) { sleep 5; @i = 42 } + @g.wait(0.1) + @i.should == 0 + end + + it "will wait forever if no timeout is specified" do + @q.async(@g) {sleep 0.2; @i = 42 } + @g.wait + @i.should == 42 + end + + it "will return non-zero if it times out" do + @q.async(@g) {sleep 1} + @g.wait(0.2).should_not == 0 + end + + it "will return zero if succeeds" do + @g.wait(Dispatch::TIME_FOREVER).should == 0 + end + + end + + describe :notify, :shared => true do + it "will run a notify block on the specified queue" do + @g.notify(@q) { @i += 58 } + @q.sync {} + @i.should == 58 + end + + it "will run the notify block only after all associated blocks have been run" do + q2 = Dispatch::Queue.new('org.macruby.gcd_spec.group2') + @q.suspend! + @q.async(@g) { @i = 42 } + @i.should == 0 + @g.notify(q2) { @i += 58 } + @i.should == 0 + q2.suspend! + @q.resume! + @q.sync {} + @i.should == 42 + q2.resume! + q2.sync {} + @i.should == 100 + end + end - describe "#wait" do + describe "Dispatch::Group#on_completion" do + it_should_behave_like "notify" end end -end + + end
participants (1)
-
source_changes@macosforge.org