[macruby-changes] [3303] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Jan 19 15:56:52 PST 2010


Revision: 3303
          http://trac.macosforge.org/projects/ruby/changeset/3303
Author:   ernest.prabhakar at gmail.com
Date:     2010-01-19 15:56:50 -0800 (Tue, 19 Jan 2010)
Log Message:
-----------
gcd_prelude appears to pass all specs

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

Modified: MacRuby/trunk/gcd_prelude.rb
===================================================================
--- MacRuby/trunk/gcd_prelude.rb	2010-01-19 23:56:48 UTC (rev 3302)
+++ MacRuby/trunk/gcd_prelude.rb	2010-01-19 23:56:50 UTC (rev 3303)
@@ -4,22 +4,31 @@
        exit:PROC_EXIT,
        fork:PROC_FORK,
        exec:PROC_EXEC,
-       signal:PROC_SIGNAL}
+       signal:PROC_SIGNAL
+       }
     def self.proc_event(e)
-      (e.is_a? Numeric) ? e.to_i : @@proc_events[e]
+      convert_event(e, @@proc_events)
     end
 
     @@vnode_events = {
       delete:VNODE_DELETE,
       write:VNODE_WRITE, 
-      append:VNODE_EXTEND, 
+      extend:VNODE_EXTEND, 
       attrib:VNODE_ATTRIB, 
       link:VNODE_LINK, 
       rename:VNODE_RENAME, 
-      revoke:VNODE_REVOKE}
+      revoke:VNODE_REVOKE
+      }
     def self.vnode_event(e)
-      (e.is_a? Numeric) ? e.to_i : @@vnode_events[e]
+      convert_event(e, @@vnode_events)
     end
+    
+    def self.convert_event(e, hash)
+      return e.to_i if e.is_a? Numeric
+      value = hash[e]
+      raise ArgumentError, "No event type #{e}" if value.nil?
+      value
+    end
   end
   
   class Queue
@@ -33,25 +42,25 @@
 
     def on_process_event(pid, *events, &block)
       mask = events.collect {|e| Dispatch::Source::proc_event(e)}.reduce(:|)
-      Dispatch::Source.new(Dispatch::Source::DATA_PROC, pid, mask, self, &block)
+      Dispatch::Source.new(Dispatch::Source::PROC, pid, mask, self, &block)
     end
 
     def on_signal(signal, &block)
       signal = Signal.list[signal.to_s] if signal.to_i == 0
-      Dispatch::Source.new(Dispatch::Source::DATA_SIGNAL, signal, 0, self, &block)
+      Dispatch::Source.new(Dispatch::Source::SIGNAL, signal, 0, self, &block)
     end
 
     def on_read(file, &block)
-      Dispatch::Source.new(Dispatch::Source::DATA_READ, file, 0, self, &block)
+      Dispatch::Source.new(Dispatch::Source::READ, file, 0, self, &block)
     end
 
     def on_write(file, &block)
-      Dispatch::Source.new(Dispatch::Source::DATA_WRITE, file, 0, self, &block)
+      Dispatch::Source.new(Dispatch::Source::WRITE, file, 0, self, &block)
     end
 
     def on_file_event(file, *events, &block)
       mask = events.collect {|e| Dispatch::Source::vnode_event(e)}.reduce(:|)
-      Dispatch::Source.new(Dispatch::Source::DATA_VNODE, file,mask, self,&block)
+      Dispatch::Source.new(Dispatch::Source::VNODE, file,mask, self,&block)
     end
 
     def on_interval(sec, &block)

Modified: MacRuby/trunk/spec/macruby/core/gcd/prelude_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/core/gcd/prelude_spec.rb	2010-01-19 23:56:48 UTC (rev 3302)
+++ MacRuby/trunk/spec/macruby/core/gcd/prelude_spec.rb	2010-01-19 23:56:50 UTC (rev 3303)
@@ -5,7 +5,7 @@
 
   describe "Dispatch::Queue convenience method:" do
     before :each do
-      @q = Dispatch::Queue.new('org.macruby.gcd_spec.sources')
+      @q = Dispatch::Queue.new('org.macruby.gcd_spec.prelude')
       @src = nil
     end
 
@@ -18,10 +18,8 @@
       it "fires with data on summed inputs" do
         @count = 0
         @src = @q.on_add {|s| @count += s.data}
-        @src.suspend!
         @src << 20
         @src << 22
-        @src.resume!
         @q.sync {}
         @count.should == 42
       end
@@ -30,11 +28,9 @@
     describe "on_or" do
       it "fires with data on ORed inputs" do
         @count = 0
-        @src = @q.on_or {|s| @count += s.data}
-        @src.suspend!
-        @src << 0xb101_000
-        @src << 0xb000_010
-        @src.resume!
+        @src = @q.on_or {|s| p @count += s.data}
+        @src << 0b101_000
+        @src << 0b000_010
         @q.sync {}
         @count.should == 42
       end
@@ -44,10 +40,12 @@
       it "fires with data indicating which process event(s)" do
         @signal = Signal.list["USR1"]
         @event = nil
-        @src = @q.on_process_event($$, :exit,:fork,:exec,:reap,:signal) do 
+        @src = @q.on_process_event($$, :exit, :fork, :exec, :signal) do 
            |s| @event = s.data
         end
+        Signal.trap(@signal, "IGNORE")
         Process.kill(@signal, $$)
+        Signal.trap(@signal, "DEFAULT")
         @q.sync {}
         @event.should == Dispatch::Source::PROC_SIGNAL
       end
@@ -88,7 +86,7 @@
           File.open(@filename, "w") {|f| f.print @msg}
           @file = File.open(@filename, "r")
           @result = ""
-          @src = @q.on_read(@file, close:true) {|s| @result<<@file.read(s.data)}
+          @src = @q.on_read(@file) {|s| @result<<@file.read(s.data)}
           while (@result.size < @msg.size) do; end
           @q.sync { }
           @result.should == @msg
@@ -100,7 +98,7 @@
           @file = File.open(@filename, "w")
           @pos = 0
           @message = @msg
-          @src = @q.on_read(@file, close:true) do |s|
+          @src = @q.on_read(@file) do |s|
             pos = s.data
             if not @message.nil? then
               next_msg = @message[0..pos-1]
@@ -131,16 +129,16 @@
         end
       end          
 
-      describe "on_interval" do
-        it "fires with data on how often the timer has fired" do
-          @count = -1
-          repeats = 2
-          @interval = 0.02
-          @src = @q.on_interval(@interval) {|s| @count += s.data}
-          sleep repeats*@interval
-          @q.sync { }
-          @count.should == repeats
-        end
+    end
+    describe "on_interval" do
+      it "fires with data on how often the timer has fired" do
+        @count = -1
+        repeats = 2
+        @interval = 0.02
+        @src = @q.on_interval(@interval) {|s| @count += s.data}
+        sleep repeats*@interval
+        @q.sync { }
+        @count.should == repeats
       end
     end
   end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100119/3a7342b2/attachment-0001.html>


More information about the macruby-changes mailing list