Revision: 3694 http://trac.macosforge.org/projects/ruby/changeset/3694 Author: ernest.prabhakar@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
participants (1)
-
source_changes@macosforge.org