summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/evendoors_spec.rb132
1 files changed, 132 insertions, 0 deletions
diff --git a/spec/evendoors_spec.rb b/spec/evendoors_spec.rb
index e326107..d385e57 100644
--- a/spec/evendoors_spec.rb
+++ b/spec/evendoors_spec.rb
@@ -57,4 +57,136 @@ describe EvenDoors do
#
end
#
+ describe EvenDoors::Particle do
+ #
+ it "payload manipulation" do
+ p = EvenDoors::Particle.new
+ #
+ p['key']=666
+ p['key'].should eql 666
+ p.data('key').should eql 666
+ p.get_data('key').should eql 666
+ #
+ p.set_data 'key', 69
+ p['key'].should eql 69
+ p.data('key').should eql 69
+ p.get_data('key').should eql 69
+ end
+ #
+ it "payload clone" do
+ p = EvenDoors::Particle.new
+ p['k00'] = { 'k0'=>0,'k1'=>1}
+ p['k11'] = [1,2,3]
+ o = EvenDoors::Particle.new
+ o.clone_data p
+ p['k00']=nil
+ p['k00'].should be_nil
+ o['k00']['k0'].should eql 0
+ o['k00']['k1'].should eql 1
+ p['k11']=nil
+ p['k11'].should be_nil
+ o['k11'][0].should eql 1
+ o['k11'][1].should eql 2
+ o['k11'][2].should eql 3
+ end
+ #
+ it "particle merge" do
+ p = EvenDoors::Particle.new
+ q = EvenDoors::Particle.new
+ o = EvenDoors::Particle.new
+ p.merge! q
+ p.merge! o
+ p.merged(0).should be q
+ p.merged(1).should be o
+ p.merged(2).should be_nil
+ p.merged_shift.should be q
+ p.merged(0).should be o
+ p.merged(1).should be_nil
+ p.merged_shift.should be o
+ p.merged(0).should be_nil
+ end
+ #
+ it "routing: add_dsts, next_dst and dst_routed!" do
+ p = EvenDoors::Particle.new
+ d0 = EvenDoors::Door.new 'door0'
+ d1 = EvenDoors::Door.new 'door1'
+ p.dst.should be_nil
+ p.next_dst.should be_nil
+ p.add_dsts 'some?where,///room0///room1/door?action,room/door,door'
+ p.next_dst.should eql 'some?where'
+ p.dst_routed! d0
+ p.dst.should be d0
+ p.next_dst.should eql 'room0/room1/door?action'
+ p.dst_routed! d1
+ p.dst.should be d1
+ p.next_dst.should eql 'room/door'
+ p.dst_routed! nil
+ p.dst.should be_nil
+ p.next_dst.should eql 'door'
+ end
+ #
+ it "routing: set_dst! and split_dst!" do
+ p = EvenDoors::Particle.new
+ d0 = EvenDoors::Door.new 'door0'
+ #
+ p.set_dst! 'action', 'room0/room1/door'
+ p.split_dst!
+ p.room.should eql 'room0/room1'
+ p.door.should eql 'door'
+ p.action.should eql 'action'
+ #
+ p.set_dst! 'action', '//room////door'
+ p.split_dst!
+ p.room.should eql 'room'
+ p.door.should eql 'door'
+ p.action.should eql 'action'
+ #
+ p.set_dst! 'action', 'room/door'
+ p.split_dst!
+ p.room.should eql 'room'
+ p.door.should eql 'door'
+ p.action.should eql 'action'
+ #
+ p.clear_dsts!
+ p.add_dsts 'door?action,?action'
+ p.split_dst!
+ p.room.should eql nil
+ p.door.should eql 'door'
+ p.action.should eql 'action'
+ #
+ p.dst_routed! d0
+ #
+ p.dst.should be d0
+ p.split_dst!
+ p.room.should eql nil
+ p.door.should eql nil
+ p.action.should eql 'action'
+ #
+ end
+ #
+ it "routing: error!" do
+ p = EvenDoors::Particle.new
+ d = EvenDoors::Door.new 'door'
+ p.src = d
+ p.add_dsts 'door?action,?action'
+ p.next_dst.should eql 'door?action'
+ p.error! 'err_msg'
+ p[EvenDoors::ERROR_FIELD].should eql 'err_msg'
+ p.action.should eq EvenDoors::ACT_ERROR
+ p.dst.should be d
+ end
+ #
+ it "link fileds and link value" do
+ p = EvenDoors::Particle.new
+ p['k0'] = 'v0'
+ p['k1'] = 'v1'
+ p['k2'] = 'v2'
+ p.set_link_fields 'k0,k2'
+ p.link_value.should eql 'v0v2'
+ p.set_link_fields 'k1,k0'
+ p.link_value.should eql 'v1v0'
+ end
+ #
+ end
+ #
end