[macruby-changes] [3257] MacRuby/trunk/spec/macruby/core/gcd/source_spec.rb

source_changes at macosforge.org source_changes at macosforge.org
Tue Jan 12 16:47:27 PST 2010


Revision: 3257
          http://trac.macosforge.org/projects/ruby/changeset/3257
Author:   ernest.prabhakar at gmail.com
Date:     2010-01-12 16:47:26 -0800 (Tue, 12 Jan 2010)
Log Message:
-----------
Add and spec Dispatch::Timer specs

Modified Paths:
--------------
    MacRuby/trunk/spec/macruby/core/gcd/source_spec.rb

Modified: MacRuby/trunk/spec/macruby/core/gcd/source_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/core/gcd/source_spec.rb	2010-01-13 00:47:24 UTC (rev 3256)
+++ MacRuby/trunk/spec/macruby/core/gcd/source_spec.rb	2010-01-13 00:47:26 UTC (rev 3257)
@@ -164,7 +164,7 @@
           src = Dispatch::Source.new(@type, $$, @mask, @q) { |s|  @i = s.data }
           Signal.trap(@signal, "IGNORE")
           Process.kill(@signal, $$)
-          sleep 0.01
+          sleep 0.05
           Signal.trap(@signal, "DEFAULT")
           @q.sync { }
           @i.should == @mask
@@ -298,6 +298,7 @@
                 @flag = s.data
             end
             @file.write(@msg)
+            @file.flush
             @q.sync { }
             @flag.should == @mask
             src.cancel!            
@@ -311,13 +312,48 @@
   describe "Dispatch::Timer" do
     before :each do
       @q = Dispatch::Queue.new('org.macruby.gcd_spec.sources')
+      @interval = 0.02
+      @src = nil
     end
+
+    after :each do
+      @src.cancel!
+      @q.sync { }
+    end
     
     it "returns an instance of Dispatch::Source" do
-      src = Dispatch::Timer.new(Time.now, 0.1, 0, @q) { }
-      src.should be_kind_of(Dispatch::Source)
-      src.should be_kind_of(Dispatch::Timer)
+      @src = Dispatch::Timer.new(0, @interval, 0, @q) { }
+      @src.should be_kind_of(Dispatch::Source)
+      @src.should be_kind_of(Dispatch::Timer)
     end
+    
+    it "should not be suspended" do
+      @src = Dispatch::Timer.new(0, @interval, 0, @q) { }
+      @src.suspended?.should == false
+    end
+
+    it "fires after the delay" do
+      delay = 2*@interval
+      @latest = start = Time.now      
+      @src = Dispatch::Timer.new(delay, @interval, 0, @q) { @latest = Time.now }
+      @latest.should == start
+      sleep delay
+      @q.sync { }
+      @latest.should > start
+    end
+
+    it "fires every interval thereafter" do
+      repeats = 3
+      @count = -1 # ignore zeroeth event to simplify interval counting
+      t0 = Time.now
+      #
+      @src = Dispatch::Timer.new(0, @interval, 0, @q) { |s| @count +=  s.data }
+      sleep repeats*@interval
+      @q.sync { }
+      t1 = Time.now
+      @count.should == repeats
+      @count.should == ((t1-t0).to_f / @interval).to_i
+    end
   end
 
 end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100112/50ee19c1/attachment-0001.html>


More information about the macruby-changes mailing list