1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
#! /usr/bin/env ruby
# -*- coding: UTF-8 -*-
#
require 'efl/ecore'
#
describe Efl::Ecore do
#
before(:all) do
Ecore = Efl::Ecore
USER_SIGNAL_CB = Proc.new do |data, type, event|
data.read_string.should == "ok"
type.should == Ecore::EVENT_SIGNAL_USER
event.read_int.should == 666
Ecore.event_current_type_get.should == Ecore::EVENT_SIGNAL_USER
Ecore.event_current_event_get.address.should == event.address
Ecore.main_loop_quit
end
EVENT_FREE_CB = Proc.new do |data,event|
data.read_string.should == "none"
event.read_int.should == 666
end
OK = FFI::MemoryPointer.from_string "ok"
KO = FFI::MemoryPointer.from_string "ko"
NONE = FFI::MemoryPointer.from_string "none"
end
before(:each) {
Ecore.init
}
after(:each) {
Ecore.shutdown
}
#
it "should init" do
Ecore.init.should == 2
Ecore.init.should == 3
end
#
it "should shutdown" do
Ecore.shutdown.should == 2
Ecore.shutdown.should == 1
end
#
it "should run a single iteration of the mainloop" do
Ecore.main_loop_iterate
end
#
it 'should be able to add, del event hanlder and process event' do
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 == 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 == 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
end
#
it "should be able to get and set event handler data" do
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 == "ko"
Ecore.event_handler_data_set(evt_handler, OK).address.should == KO.address
Ecore.event_handler_data_get(evt_handler).read_string.should == "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
end
#
it "should be able to create new event type" do
Ecore.event_type_new.should_not == 0
Ecore.event_type_new.should_not == 0
Ecore.event_type_new.should_not == 0
end
#
it "should be possible to add and del event filters" do
loop_data = FFI::MemoryPointer.from_string("loop_data")
event_free_cb = Proc.new do |data,event|
data.read_string.should == "ko"
event.read_int.should == 69
end
start_cb = Proc.new do |data|
data.read_string.should == "ok"
loop_data
end
count = 0
filter_cb = Proc.new do |data,loop_data,type,event|
data.read_string.should == "ok"
loop_data.read_string.should == "loop_data"
type.should == Ecore::EVENT_SIGNAL_USER
count += 1
if event.read_int == 69
count.should == 1
false # drop first event
else
count.should == 2
event.read_int.should == 666
true
end
end
end_cb = Proc.new do |data,loop_data|
data.read_string.should == "ok"
loop_data.read_string.should == "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 == OK.address
evt2 = Ecore.event_add Ecore::EVENT_SIGNAL_USER, e2, EVENT_FREE_CB, NONE
Ecore.main_loop_begin # process event
end
#
describe Efl::Ecore::REcorePipe do
#
it 'should write and read data from pipe' do
data = FFI::MemoryPointer.from_string("none")
cb = Proc.new do |data,buffer,bytes|
data.read_string.should == 'none'
buffer.read_string.should == 'hello world'
bytes.should == 12
end
pipe = Ecore::REcorePipe.new cb, data
pipe.write("hello world").should be_true
Ecore.main_loop_iterate
pipe.read_close
pipe.write_close
end
it "manual destructor should not raise FFI::AutoPointer error" do
data = FFI::MemoryPointer.from_string("none")
cb = Proc.new do |data,buffer,bytes|
data.read_string.should == 'none'
buffer.read_string.should == 'hello world'
bytes.should == 12
end
pipe = Ecore::REcorePipe.new cb, data
pipe.del
end
end
end
|