[macruby-changes] [3694] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Thu Mar 4 09:59:32 PST 2010


Revision: 3694
          http://trac.macosforge.org/projects/ruby/changeset/3694
Author:   ernest.prabhakar at gmail.com
Date:     2010-03-04 09:59:32 -0800 (Thu, 04 Mar 2010)
Log Message:
-----------
Dispatch::Source specs

Modified Paths:
--------------
    MacRuby/trunk/lib/dispatch/source.rb
    MacRuby/trunk/spec/macruby/library/dispatch/source_spec.rb
    MacRuby/trunk/spec/macruby/tags/macruby/library/dispatch/source_tags.txt

Modified: MacRuby/trunk/lib/dispatch/source.rb
===================================================================
--- MacRuby/trunk/lib/dispatch/source.rb	2010-03-04 17:58:46 UTC (rev 3693)
+++ MacRuby/trunk/lib/dispatch/source.rb	2010-03-04 17:59:32 UTC (rev 3694)
@@ -27,11 +27,11 @@
       end
     
       def events2mask(events)
-        mask = events.collect { |e| convert(e) }.reduce(:|)
+        mask = events.collect { |e| event2num(e) }.reduce(:|)
       end
 
       def data2events(bitmask)
-        @@events.select {|k,v| v & bitmask }
+        @@events.collect { |k,v| k if (v & bitmask) > 0 }.compact
       end
 
       # Returns Dispatch::Source of type DATA_ADD

Modified: MacRuby/trunk/spec/macruby/library/dispatch/source_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/library/dispatch/source_spec.rb	2010-03-04 17:58:46 UTC (rev 3693)
+++ MacRuby/trunk/spec/macruby/library/dispatch/source_spec.rb	2010-03-04 17:59:32 UTC (rev 3694)
@@ -14,6 +14,33 @@
       @q.sync { }
     end
 
+
+    describe :event2num do
+      it "converts PROC symbol to int" do
+        Dispatch::Source.event2num(:signal).should == Dispatch::Source::PROC_SIGNAL
+      end
+
+      it "converts VNODE symbol to int" do
+        Dispatch::Source.event2num(:rename).should == Dispatch::Source::VNODE_RENAME
+      end
+    end
+    
+    describe :data2events do
+      it "converts PROC bitfields to symbols" do
+        mask = Dispatch::Source::PROC_EXIT | Dispatch::Source::PROC_SIGNAL 
+        events = Dispatch::Source.data2events(mask)
+        events.include?(:signal).should == true
+        events.include?(:fork).should == false
+      end
+
+      it "converts VNODE bitfields to symbols" do
+        mask = Dispatch::Source::VNODE_DELETE | Dispatch::Source::VNODE_WRITE
+        events = Dispatch::Source.data2events(mask)
+        events.include?(:delete).should == true
+        events.include?(:rename).should == false
+      end
+    end
+    
     describe "add" do
       it "fires with data on summed inputs" do
         @count = 0
@@ -36,52 +63,55 @@
       end
     end    
 
-    describe "process" do
-      it "fires with data indicating which process event(s)" do
+    describe "PROC" do
+      before :each do
         @signal = Signal.list["USR1"]
-        @events = []
-        @src = Dispatch::Source.process($$, %w(exit fork exec signal), @q) do 
-           |s| @events += Dispatch::Source.data2events(s.data)
+      end
+
+      describe "process" do
+        
+        it "fires with data on process event(s)" do
+          @event = 0
+          @events = []
+          @src = Dispatch::Source.process($$, %w(exit fork exec signal), @q) do |s|
+             @event += s.data
+             @events += Dispatch::Source.data2events(s.data)
+          end
+          Signal.trap(@signal, "IGNORE")
+          Process.kill(@signal, $$)
+          Signal.trap(@signal, "DEFAULT")
+          @q.sync {}
+          @events.include?(:signal).should == true
         end
-        Signal.trap(@signal, "IGNORE")
-        Process.kill(@signal, $$)
-        Signal.trap(@signal, "DEFAULT")
-        @q.sync {}
-        @event.should.include? :signal
-      end
       
-      it "can use bitfields as well as arrays to describe events " do
-        @signal = Signal.list["USR1"]
-        mask = Dispatch::Source::PROC_EXIT | Dispatch::Source::PROC_SIGNAL 
-        @event = 0
-        @src = Dispatch::Source.process($$, mask, @q) { |s| @event = s.data }
-        Signal.trap(@signal, "IGNORE")
-        Process.kill(@signal, $$)
-        Signal.trap(@signal, "DEFAULT")
-        @q.sync {}
-        (@event & Dispatch::Source.event2num(:signal)).should > 0
+        it "can use bitfields as well as arrays" do
+          mask = Dispatch::Source::PROC_EXIT | Dispatch::Source::PROC_SIGNAL 
+          @event = 0
+          @src = Dispatch::Source.process($$, mask, @q) { |s| @event |= s.data }
+          Signal.trap(@signal, "IGNORE")
+          Process.kill(@signal, $$)
+          Signal.trap(@signal, "DEFAULT")
+          @q.sync {}
+          @event.should == Dispatch::Source.event2num(:signal)
+        end
       end
-      
-      
-      
-    end
 
-    describe "signal" do
-      it "fires with data on how often the process was signaled" do
-        @signal = Signal.list["USR1"]
-        @count = 0
-        @src = Dispatch::Source.signal(@signal, @q) {|s| @count += s.data}
-        Signal.trap(@signal, "IGNORE")
-        Process.kill(@signal, $$)
-        Process.kill(@signal, $$)
-        Signal.trap(@signal, "DEFAULT")
-        @q.sync {}
-        @count.should == 2
-        @src.cancel!
-      end
-    end    
+      describe "signal" do
+        it "fires with data on signal count" do
+          @count = 0
+          @src = Dispatch::Source.signal(@signal, @q) {|s| @count += s.data}
+          Signal.trap(@signal, "IGNORE")
+          Process.kill(@signal, $$)
+          Process.kill(@signal, $$)
+          Signal.trap(@signal, "DEFAULT")
+          @q.sync {}
+          @count.should == 2
+          @src.cancel!
+        end
+      end  
+    end  
 
-    describe "vnode" do
+    describe "VNODE" do
       before :each do
         @msg = "#{$$}-#{Time.now}"
         @filename = tmp("gcd_spec_source-#{@msg}")
@@ -97,7 +127,7 @@
       end
 
       describe "read" do
-        it "fires with data on how many bytes can be read" do
+        it "fires with data on readable bytes" do
           File.open(@filename, "w") {|f| f.print @msg}
           @file = File.open(@filename, "r")
           @result = ""
@@ -109,7 +139,7 @@
       end    
 
       describe "write" do
-        it "fires with data on how many bytes can be written" do
+        it "fires with data on writable bytes" do
           @file = File.open(@filename, "w")
           @pos = 0
           @message = @msg
@@ -128,20 +158,21 @@
       end
       
       describe "file" do
-        it "fires with data indicating which file event(s)" do
+        it "fires with data on file events" do
+          write_flag = Dispatch::Source.event2num(:write)
           @file = File.open(@filename, "w")
           @fired = false
+          @mask = 0
           events = %w(delete write extend attrib link rename revoke)
           @src = Dispatch::Source.file(@file, events, @q) do |s|
-              @flag = s.data
+              @mask |= s.data
               @fired = true
           end
           @file.write(@msg)
           @file.flush
           @q.sync { }
-          #while (@fired == false) do; end
           @fired.should == true
-          @flag.should == Dispatch::Source.event2num(:write)
+          (@mask & write_flag).should == write_flag
         end
       end          
     end

Modified: MacRuby/trunk/spec/macruby/tags/macruby/library/dispatch/source_tags.txt
===================================================================
--- MacRuby/trunk/spec/macruby/tags/macruby/library/dispatch/source_tags.txt	2010-03-04 17:58:46 UTC (rev 3693)
+++ MacRuby/trunk/spec/macruby/tags/macruby/library/dispatch/source_tags.txt	2010-03-04 17:59:32 UTC (rev 3694)
@@ -1,3 +1,3 @@
-fails:Dispatch::Source process fires with data indicating which process event(s)
-fails:Dispatch::Source signal fires with data on how often the process was signaled
-fails:Dispatch::Source vnode file fires with data indicating which file event(s)
+fails:Dispatch::Source PROC process fires with data on process event(s)
+fails:Dispatch::Source PROC signal fires with data on signal count
+fails:Dispatch::Source PROC process can use bitfields as well as arrays
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100304/0076fbcf/attachment-0001.html>


More information about the macruby-changes mailing list