gir_ffi 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +11 -0
- data/TODO.rdoc +5 -0
- data/examples/01_empty_window.rb +0 -1
- data/examples/02_hello_world.rb +0 -1
- data/examples/03_upgraded_hello_world.rb +0 -1
- data/examples/04_webkit.rb +0 -1
- data/lib/gir_ffi/arg_helper.rb +231 -94
- data/lib/gir_ffi/builder/argument.rb +372 -46
- data/lib/gir_ffi/builder/module.rb +25 -10
- data/lib/gir_ffi/builder/type/constant.rb +39 -0
- data/lib/gir_ffi/builder/type/enum.rb +15 -5
- data/lib/gir_ffi/builder/type/registered_type.rb +25 -6
- data/lib/gir_ffi/builder/type/struct.rb +1 -9
- data/lib/gir_ffi/builder/type/union.rb +5 -0
- data/lib/gir_ffi/builder/type.rb +13 -14
- data/lib/gir_ffi/builder.rb +7 -4
- data/lib/gir_ffi/builder_helper.rb +4 -3
- data/lib/gir_ffi/i_base_info.rb +4 -0
- data/lib/gir_ffi/i_constant_info.rb +9 -0
- data/lib/gir_ffi/i_registered_type_info.rb +0 -1
- data/lib/gir_ffi/i_repository.rb +8 -2
- data/lib/gir_ffi/i_type_info.rb +7 -0
- data/lib/gir_ffi/lib.rb +41 -3
- data/lib/gir_ffi/overrides/glib.rb +188 -4
- data/lib/gir_ffi/overrides/gobject.rb +16 -5
- data/tasks/test.rake +1 -1
- data/test/arg_helper_test.rb +5 -5
- data/test/builder_test.rb +64 -41
- data/test/class_base_test.rb +1 -1
- data/test/function_definition_builder_test.rb +24 -2
- data/test/g_object_overrides_test.rb +1 -3
- data/test/g_object_test.rb +1 -1
- data/test/generated_gimarshallingtests_test.rb +1677 -0
- data/test/generated_gio_test.rb +1 -1
- data/test/generated_gtk_test.rb +31 -2
- data/test/generated_regress_test.rb +278 -54
- data/test/girffi_test.rb +20 -5
- data/test/glib_overrides_test.rb +81 -0
- data/test/gtk_overrides_test.rb +2 -3
- data/test/i_object_info_test.rb +1 -1
- data/test/i_repository_test.rb +3 -4
- data/test/lib/Makefile.am +18 -2
- data/test/module_builder_test.rb +1 -1
- data/test/test_helper.rb +88 -5
- data/test/type_builder_test.rb +7 -10
- metadata +16 -13
data/test/builder_test.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
require File.expand_path('test_helper.rb', File.dirname(__FILE__))
|
2
2
|
|
3
|
-
class BuilderTest <
|
3
|
+
class BuilderTest < MiniTest::Spec
|
4
4
|
context "The GirFFI::Builder module" do
|
5
5
|
setup do
|
6
6
|
@gir = GirFFI::IRepository.default
|
7
7
|
end
|
8
8
|
|
9
9
|
context "building GObject::Object" do
|
10
|
-
|
11
|
-
|
12
|
-
GirFFI::Builder.build_class
|
10
|
+
before do
|
11
|
+
save_module :GObject
|
12
|
+
GirFFI::Builder.build_class get_function_introspection_data('GObject', 'Object')
|
13
13
|
end
|
14
14
|
|
15
15
|
should "create a Lib module in the parent namespace ready to attach functions from gobject-2.0" do
|
@@ -23,16 +23,20 @@ class BuilderTest < Test::Unit::TestCase
|
|
23
23
|
|
24
24
|
should "not replace existing classes" do
|
25
25
|
oldclass = GObject::Object
|
26
|
-
GirFFI::Builder.build_class
|
26
|
+
GirFFI::Builder.build_class get_function_introspection_data('GObject', 'Object')
|
27
27
|
assert_equal oldclass, GObject::Object
|
28
28
|
end
|
29
|
+
|
30
|
+
after do
|
31
|
+
restore_module :GObject
|
32
|
+
end
|
29
33
|
end
|
30
34
|
|
31
35
|
context "building Gtk::Window" do
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
GirFFI::Builder.build_class
|
36
|
+
before do
|
37
|
+
save_module :Gtk
|
38
|
+
save_module :GObject
|
39
|
+
GirFFI::Builder.build_class get_function_introspection_data('Gtk', 'Window')
|
36
40
|
end
|
37
41
|
|
38
42
|
should "build Gtk namespace" do
|
@@ -66,22 +70,16 @@ class BuilderTest < Test::Unit::TestCase
|
|
66
70
|
should "result in Gtk::Window.new to succeed" do
|
67
71
|
assert_nothing_raised {Gtk::Window.new(:toplevel)}
|
68
72
|
end
|
69
|
-
end
|
70
73
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
GirFFI::Builder.build_class @gir.find_by_name('Gtk', 'Widget')
|
75
|
-
end
|
76
|
-
|
77
|
-
should "not have regular #new as a constructor" do
|
78
|
-
assert_raises(NoMethodError) { Gtk::Widget.new }
|
74
|
+
after do
|
75
|
+
restore_module :Gtk
|
76
|
+
restore_module :GObject
|
79
77
|
end
|
80
78
|
end
|
81
79
|
|
82
80
|
context "building Gtk" do
|
83
|
-
|
84
|
-
|
81
|
+
before do
|
82
|
+
save_module :Gtk
|
85
83
|
GirFFI::Builder.build_module 'Gtk'
|
86
84
|
end
|
87
85
|
|
@@ -106,6 +104,10 @@ class BuilderTest < Test::Unit::TestCase
|
|
106
104
|
GirFFI::Builder.build_module 'Gtk'
|
107
105
|
assert_equal oldmodule, Gtk::Lib
|
108
106
|
end
|
107
|
+
|
108
|
+
after do
|
109
|
+
restore_module :Gtk
|
110
|
+
end
|
109
111
|
end
|
110
112
|
|
111
113
|
context "looking at Gtk.main" do
|
@@ -159,10 +161,10 @@ class BuilderTest < Test::Unit::TestCase
|
|
159
161
|
end
|
160
162
|
|
161
163
|
context "looking at Regress.test_callback_destroy_notify" do
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
164
|
+
before do
|
165
|
+
save_module :GLib
|
166
|
+
save_module :GObject
|
167
|
+
save_module :Regress
|
166
168
|
GirFFI::Builder.build_module 'GLib'
|
167
169
|
GirFFI::Builder.build_module 'GObject'
|
168
170
|
GirFFI::Builder.build_module 'Regress'
|
@@ -190,16 +192,21 @@ class BuilderTest < Test::Unit::TestCase
|
|
190
192
|
should "define ffi enum type ConnectFlags" do
|
191
193
|
assert_equal({:after => 1, :swapped => 2}, GObject::ConnectFlags.to_h)
|
192
194
|
end
|
195
|
+
|
196
|
+
after do
|
197
|
+
restore_module :Regress
|
198
|
+
restore_module :GObject
|
199
|
+
restore_module :GLib
|
200
|
+
end
|
193
201
|
end
|
194
202
|
|
195
203
|
context "building Regress::TestStructA" do
|
196
204
|
setup do
|
197
|
-
|
198
|
-
GirFFI::Builder.build_class @gir.find_by_name('Regress', 'TestStructA')
|
205
|
+
GirFFI::Builder.build_class get_function_introspection_data('Regress', 'TestStructA')
|
199
206
|
end
|
200
207
|
|
201
208
|
should "set up the correct struct members" do
|
202
|
-
assert_equal
|
209
|
+
assert_equal [:some_int, :some_int8, :some_double, :some_enum],
|
203
210
|
Regress::TestStructA::Struct.members
|
204
211
|
end
|
205
212
|
|
@@ -212,13 +219,13 @@ class BuilderTest < Test::Unit::TestCase
|
|
212
219
|
should "set up struct members with the correct types" do
|
213
220
|
tags = [:int, :int8, :double, Regress::TestEnum]
|
214
221
|
assert_equal tags.map {|t| FFI.find_type t},
|
215
|
-
|
222
|
+
Regress::TestStructA::Struct.layout.fields.map {|f| f.type}
|
216
223
|
end
|
217
224
|
end
|
218
225
|
|
219
226
|
context "building GObject::TypeCValue" do
|
220
227
|
setup do
|
221
|
-
GirFFI::Builder.build_class
|
228
|
+
GirFFI::Builder.build_class get_function_introspection_data('GObject', 'TypeCValue')
|
222
229
|
end
|
223
230
|
|
224
231
|
should "set up the correct union members" do
|
@@ -238,7 +245,7 @@ class BuilderTest < Test::Unit::TestCase
|
|
238
245
|
|
239
246
|
context "building GObject::ValueArray" do
|
240
247
|
should "use provided constructor if present" do
|
241
|
-
GirFFI::Builder.build_class
|
248
|
+
GirFFI::Builder.build_class get_function_introspection_data('GObject', 'ValueArray')
|
242
249
|
assert_nothing_raised {
|
243
250
|
GObject::ValueArray.new 2
|
244
251
|
}
|
@@ -247,7 +254,7 @@ class BuilderTest < Test::Unit::TestCase
|
|
247
254
|
|
248
255
|
context "building Regress::TestBoxed" do
|
249
256
|
setup do
|
250
|
-
GirFFI::Builder.build_class
|
257
|
+
GirFFI::Builder.build_class get_function_introspection_data('Regress', 'TestBoxed')
|
251
258
|
end
|
252
259
|
|
253
260
|
should "set up #wrap" do
|
@@ -260,8 +267,8 @@ class BuilderTest < Test::Unit::TestCase
|
|
260
267
|
end
|
261
268
|
|
262
269
|
context "built Regress module" do
|
263
|
-
|
264
|
-
|
270
|
+
before do
|
271
|
+
save_module :Regress
|
265
272
|
GirFFI::Builder.build_module 'Regress'
|
266
273
|
end
|
267
274
|
|
@@ -279,12 +286,16 @@ class BuilderTest < Test::Unit::TestCase
|
|
279
286
|
should "know its own module builder" do
|
280
287
|
assert GirFFI::Builder::Module === Regress.gir_ffi_builder
|
281
288
|
end
|
289
|
+
|
290
|
+
after do
|
291
|
+
restore_module :Regress
|
292
|
+
end
|
282
293
|
end
|
283
294
|
|
284
295
|
context "built Regress::TestObj" do
|
285
|
-
|
286
|
-
|
287
|
-
GirFFI::Builder.build_class
|
296
|
+
before do
|
297
|
+
save_module :Regress
|
298
|
+
GirFFI::Builder.build_class get_function_introspection_data('Regress', 'TestObj')
|
288
299
|
end
|
289
300
|
|
290
301
|
should "make autocreated instance method available to all instances" do
|
@@ -319,12 +330,16 @@ class BuilderTest < Test::Unit::TestCase
|
|
319
330
|
GirFFI::Builder.send(:ffi_function_argument_types, info)
|
320
331
|
end
|
321
332
|
end
|
333
|
+
|
334
|
+
after do
|
335
|
+
restore_module :Regress
|
336
|
+
end
|
322
337
|
end
|
323
338
|
|
324
339
|
context "built Regress::TestSubObj" do
|
325
|
-
|
326
|
-
|
327
|
-
GirFFI::Builder.build_class
|
340
|
+
before do
|
341
|
+
save_module :Regress
|
342
|
+
GirFFI::Builder.build_class get_function_introspection_data('Regress', 'TestSubObj')
|
328
343
|
end
|
329
344
|
|
330
345
|
should "autocreate parent class' set_bare inside the parent class" do
|
@@ -346,11 +361,15 @@ class BuilderTest < Test::Unit::TestCase
|
|
346
361
|
subobj = Regress::TestSubObj.new
|
347
362
|
assert_equal 0, subobj.instance_method
|
348
363
|
end
|
364
|
+
|
365
|
+
after do
|
366
|
+
restore_module :Regress
|
367
|
+
end
|
349
368
|
end
|
350
369
|
|
351
370
|
context "built Gio::ThreadedSocketService" do
|
352
|
-
|
353
|
-
|
371
|
+
before do
|
372
|
+
save_module :Gio
|
354
373
|
GirFFI::Builder.build_module 'Gio'
|
355
374
|
end
|
356
375
|
|
@@ -363,6 +382,10 @@ class BuilderTest < Test::Unit::TestCase
|
|
363
382
|
assert_nothing_raised { Gio::ThreadedSocketService.new 2 }
|
364
383
|
end
|
365
384
|
end
|
385
|
+
|
386
|
+
after do
|
387
|
+
restore_module :Gio
|
388
|
+
end
|
366
389
|
end
|
367
390
|
end
|
368
391
|
end
|
data/test/class_base_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path('test_helper.rb', File.dirname(__FILE__))
|
2
2
|
|
3
|
-
class ClassBaseTest <
|
3
|
+
class ClassBaseTest < MiniTest::Spec
|
4
4
|
context "A class derived from GirFFI::Base" do
|
5
5
|
# TODO: See if we can test some part of Base again.
|
6
6
|
should "pass" do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path('test_helper.rb', File.dirname(__FILE__))
|
2
2
|
|
3
|
-
class FunctionDefinitionBuilderTest <
|
3
|
+
class FunctionDefinitionBuilderTest < MiniTest::Spec
|
4
4
|
context "The Builder::Function class" do
|
5
5
|
should "build correct definition of Gtk.init" do
|
6
6
|
go = get_function_introspection_data 'Gtk', 'init'
|
@@ -68,7 +68,7 @@ class FunctionDefinitionBuilderTest < Test::Unit::TestCase
|
|
68
68
|
_v4 = FFI::MemoryPointer.new(:pointer).write_pointer nil
|
69
69
|
_v2 = ::Lib.regress_test_obj_new_from_file _v1, _v4
|
70
70
|
GirFFI::ArgHelper.check_error(_v4)
|
71
|
-
_v3 =
|
71
|
+
_v3 = self.constructor_wrap(_v2)
|
72
72
|
return _v3
|
73
73
|
end"
|
74
74
|
|
@@ -111,5 +111,27 @@ class FunctionDefinitionBuilderTest < Test::Unit::TestCase
|
|
111
111
|
|
112
112
|
assert_equal cws(expected), cws(code)
|
113
113
|
end
|
114
|
+
|
115
|
+
it "builds the correct definition of GIMarshallingTests::Object#method_array_inout" do
|
116
|
+
go = get_method_introspection_data 'GIMarshallingTests', 'Object', 'method_array_inout'
|
117
|
+
fbuilder = GirFFI::Builder::Function.new go, Lib
|
118
|
+
code = fbuilder.generate
|
119
|
+
|
120
|
+
expected =
|
121
|
+
"def method_array_inout ints
|
122
|
+
_v1 = GirFFI::ArgHelper.gint32_array_to_inoutptr ints
|
123
|
+
length = ints.length
|
124
|
+
_v3 = GirFFI::ArgHelper.gint32_to_inoutptr length
|
125
|
+
::Lib.gi_marshalling_tests_object_method_array_inout self, _v1, _v3
|
126
|
+
_v4 = GirFFI::ArgHelper.outptr_to_gint32 _v3
|
127
|
+
GirFFI::ArgHelper.cleanup_ptr _v3
|
128
|
+
_v2 = GirFFI::ArgHelper.outptr_to_gint32_array _v1, _v4
|
129
|
+
GirFFI::ArgHelper.cleanup_ptr _v1
|
130
|
+
return _v2
|
131
|
+
end"
|
132
|
+
|
133
|
+
assert_equal cws(expected), cws(code)
|
134
|
+
end
|
135
|
+
|
114
136
|
end
|
115
137
|
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
require File.expand_path('test_helper.rb', File.dirname(__FILE__))
|
2
2
|
|
3
|
-
class GObjectOverridesTest <
|
3
|
+
class GObjectOverridesTest < MiniTest::Spec
|
4
4
|
context "In the GObject module with overridden functions" do
|
5
5
|
setup do
|
6
|
-
GirFFI.setup :GObject
|
7
6
|
GirFFI.setup :Regress
|
8
|
-
GirFFI.setup :Gio
|
9
7
|
end
|
10
8
|
|
11
9
|
context "the Value class" do
|
data/test/g_object_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path('test_helper.rb', File.dirname(__FILE__))
|
2
2
|
|
3
|
-
class GObjectTest <
|
3
|
+
class GObjectTest < MiniTest::Spec
|
4
4
|
context "The GirFFI::GObject helper module" do
|
5
5
|
should "have type_init as a public method" do
|
6
6
|
assert GirFFI::GObject.respond_to?('type_init')
|