diff options
Diffstat (limited to 'spec/ecore_spec.rb')
-rw-r--r-- | spec/ecore_spec.rb | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/spec/ecore_spec.rb b/spec/ecore_spec.rb index 183e64c..6184dba 100644 --- a/spec/ecore_spec.rb +++ b/spec/ecore_spec.rb @@ -7,6 +7,24 @@ describe E17::Ecore do # include E17 # + before(:all) do + USER_SIGNAL_CB = Proc.new do |data, type, event| + data.read_string.should eql "ok" + type.should eql Ecore::EVENT_SIGNAL_USER + event.read_int.should eql 666 + Ecore.event_current_type_get.should eql Ecore::EVENT_SIGNAL_USER + Ecore.event_current_event_get.address.should eql event.address + Ecore.main_loop_quit + end + EVENT_FREE_CB = Proc.new do |data,event| + data.read_string.should eql "none" + event.read_int.should eql 666 + end + OK = FFI::MemoryPointer.from_string "ok" + KO = FFI::MemoryPointer.from_string "ko" + NONE = FFI::MemoryPointer.from_string "none" + end + # it "should init" do Ecore.init.should eql 1 Ecore.init.should eql 2 @@ -41,4 +59,92 @@ describe E17::Ecore do pipe.del.address.should eql data.address Ecore.shutdown end + # + it 'should be able to add, del event hanlder and process event' do + Ecore.init + evt = FFI::MemoryPointer.new(:int) + evt.write_int 666 + # add, del, add event handler + evt_handler = Ecore.event_handler_add Ecore::EVENT_SIGNAL_USER, USER_SIGNAL_CB, KO + evt_handler.null?.should be_false + Ecore.event_handler_del(evt_handler).address.should eql KO.address + evt_handler = Ecore.event_handler_add Ecore::EVENT_SIGNAL_USER, USER_SIGNAL_CB, OK + evt_handler.null?.should be_false + # add, del, add event + ecore_evt = Ecore.event_add Ecore::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE + ecore_evt.null?.should be_false + Ecore.event_del(ecore_evt).address.should eql NONE.address + ecore_evt = Ecore.event_add Ecore::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE + ecore_evt.null?.should be_false + Ecore.main_loop_begin # process event + Ecore.shutdown + end + # + it "should be able to get and set event handler data" do + Ecore.init + evt = FFI::MemoryPointer.new(:int) + evt.write_int 666 + evt_handler = Ecore.event_handler_add Ecore::EVENT_SIGNAL_USER, USER_SIGNAL_CB, KO + evt_handler.null?.should be_false + Ecore.event_handler_data_get(evt_handler).read_string.should eql "ko" + Ecore.event_handler_data_set(evt_handler, OK).address.should eql KO.address + Ecore.event_handler_data_get(evt_handler).read_string.should eql "ok" + ecore_evt = Ecore.event_add Ecore::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE + ecore_evt.null?.should be_false + Ecore.main_loop_begin # process event + Ecore.shutdown + end + # + it "should be able to create new event type" do + Ecore.init + Ecore.event_type_new.should_not eql 0 + Ecore.event_type_new.should_not eql 0 + Ecore.event_type_new.should_not eql 0 + Ecore.shutdown + end + # + it "should be possible to add and del event filters" do + Ecore.init + loop_data = FFI::MemoryPointer.from_string("loop_data") + event_free_cb = Proc.new do |data,event| + data.read_string.should eql "ko" + event.read_int.should eql 69 + end + start_cb = Proc.new do |data| + data.read_string.should eql "ok" + loop_data + end + count = 0 + filter_cb = Proc.new do |data,loop_data,type,event| + data.read_string.should eql "ok" + loop_data.read_string.should eql "loop_data" + type.should eql Ecore::EVENT_SIGNAL_USER + count += 1 + if event.read_int == 69 + count.should eql 1 + false # drop first event + else + count.should eql 2 + event.read_int.should eql 666 + true + end + end + end_cb = Proc.new do |data,loop_data| + data.read_string.should eql "ok" + loop_data.read_string.should eql "loop_data" + end + filter = Ecore.event_filter_add start_cb, filter_cb, end_cb, OK + Ecore.event_handler_add Ecore::EVENT_SIGNAL_USER, USER_SIGNAL_CB, OK + e1 = FFI::MemoryPointer.new(:int) + e1.write_int 69 + evt1 = Ecore.event_add Ecore::EVENT_SIGNAL_USER, e1, event_free_cb, KO + e2 = FFI::MemoryPointer.new(:int) + e2.write_int 666 + evt2 = Ecore.event_add Ecore::EVENT_SIGNAL_USER, e2, EVENT_FREE_CB, NONE + Ecore.main_loop_begin # process event + Ecore.event_filter_del(filter).address.should eql OK.address + evt2 = Ecore.event_add Ecore::EVENT_SIGNAL_USER, e2, EVENT_FREE_CB, NONE + Ecore.main_loop_begin # process event + Ecore.shutdown + end end |