spec/celluloid/block_spec.rb in celluloid-0.17.0 vs spec/celluloid/block_spec.rb in celluloid-0.17.1

- old
+ new

@@ -13,25 +13,51 @@ other.do_something_and_callback do |value| $data << [:yielded, @name, current_actor.name] $data << receive_result(:self) $data << current_actor.receive_result(:current_actor) $data << sender_actor.receive_result(:sender) - "somevalue" + :pete_the_polyglot_alien end end + def deferred_excecution(value, &block) + defer { + yield(value) + } + end + + def deferred_current_actor(&block) + defer { + yield(current_actor.name) + } + end + + def defer_for_something(other, &block) + sender_actor = current_actor + defer { + $data << [:outside, @name, current_actor.name] + other.do_something_and_callback do |value| + $data << [:yielded, @name, current_actor.name] + $data << receive_result(:self) + $data << current_actor.receive_result(:current_actor) + $data << sender_actor.receive_result(:sender) + :pete_the_polyglot_alien + end + } + end + def do_something_and_callback $data << [:something, @name, current_actor.name] $data << yield(:foo) end def receive_result(result) [result, @name, current_actor.name] end end - it "works" do + it "work between actors" do $data = [] a1 = MyBlockActor.new("one") a2 = MyBlockActor.new("two") @@ -42,10 +68,45 @@ [:something, "two", "two"], [:yielded, "one", "one"], [:self, "one", "one"], [:current_actor, "one", "one"], [:sender, "one", "one"], - "somevalue", + :pete_the_polyglot_alien, + ] + + expect($data).to eq(expected) + end + + execute_deferred = Proc.new { + a1 = MyBlockActor.new("one") + expect(a1.deferred_excecution(:pete_the_polyglot_alien) { |v| v }) + .to eq(:pete_the_polyglot_alien) + } + + unless RUBY_ENGINE == 'jruby' + xit("can be deferred", &execute_deferred) + else + it("can be deferred", &execute_deferred) + end + + xit "can execute deferred blocks referencing current_actor" do + a1 = MyBlockActor.new("one") + expect(a1.deferred_current_actor { |v| v }).to be("one") + end + + xit "can execute deferred blocks with another actor" do + $data = [] + a1 = MyBlockActor.new("one") + a2 = MyBlockActor.new("two") + a1.defer_for_something a2 + expected = [ + [:outside, "one", "one"], + [:something, "two", "two"], + [:yielded, "one", "one"], + [:self, "one", "one"], + [:current_actor, "one", "one"], + [:sender, "one", "one"], + :pete_the_polyglot_alien, ] expect($data).to eq(expected) end end