gir_ffi 0.1.0 → 0.2.0

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.
Files changed (78) hide show
  1. data/History.txt +14 -0
  2. data/TODO.rdoc +10 -5
  3. data/lib/ffi-glib.rb +7 -73
  4. data/lib/ffi-glib/array.rb +29 -4
  5. data/lib/ffi-glib/byte_array.rb +15 -1
  6. data/lib/ffi-glib/hash_table.rb +31 -24
  7. data/lib/ffi-glib/list.rb +28 -0
  8. data/lib/ffi-glib/list_methods.rb +10 -2
  9. data/lib/ffi-glib/ptr_array.rb +39 -0
  10. data/lib/ffi-glib/s_list.rb +29 -0
  11. data/lib/ffi-gobject.rb +49 -22
  12. data/lib/ffi-gobject/closure.rb +4 -3
  13. data/lib/ffi-gobject/helper.rb +20 -43
  14. data/lib/ffi-gobject/initially_unowned.rb +2 -0
  15. data/lib/ffi-gobject/object.rb +54 -0
  16. data/lib/ffi-gobject/ruby_closure.rb +22 -16
  17. data/lib/ffi-gobject/value.rb +54 -19
  18. data/lib/ffi-gobject_introspection/i_constant_info.rb +17 -1
  19. data/lib/ffi-gobject_introspection/i_field_info.rb +8 -0
  20. data/lib/ffi-gobject_introspection/i_property_info.rb +3 -1
  21. data/lib/ffi-gobject_introspection/lib.rb +19 -2
  22. data/lib/gir_ffi/arg_helper.rb +7 -45
  23. data/lib/gir_ffi/builder.rb +1 -1
  24. data/lib/gir_ffi/builder/argument.rb +148 -107
  25. data/lib/gir_ffi/builder/argument/base.rb +5 -5
  26. data/lib/gir_ffi/builder/argument/in_base.rb +2 -2
  27. data/lib/gir_ffi/builder/argument/in_out_base.rb +2 -3
  28. data/lib/gir_ffi/builder/argument/out_base.rb +2 -3
  29. data/lib/gir_ffi/builder/function.rb +11 -17
  30. data/lib/gir_ffi/builder/module.rb +26 -0
  31. data/lib/gir_ffi/builder/type.rb +5 -0
  32. data/lib/gir_ffi/builder/type/base.rb +2 -0
  33. data/lib/gir_ffi/builder/type/callback.rb +18 -3
  34. data/lib/gir_ffi/builder/type/constant.rb +4 -12
  35. data/lib/gir_ffi/builder/type/enum.rb +15 -6
  36. data/lib/gir_ffi/builder/type/interface.rb +4 -0
  37. data/lib/gir_ffi/builder/type/object.rb +11 -0
  38. data/lib/gir_ffi/builder/type/struct_based.rb +14 -4
  39. data/lib/gir_ffi/builder/type/union.rb +13 -7
  40. data/lib/gir_ffi/builder/type/with_layout.rb +59 -8
  41. data/lib/gir_ffi/class_base.rb +8 -1
  42. data/lib/gir_ffi/in_out_pointer.rb +17 -18
  43. data/lib/gir_ffi/in_pointer.rb +8 -1
  44. data/lib/gir_ffi/type_map.rb +12 -0
  45. data/lib/gir_ffi/variable_name_generator.rb +12 -0
  46. data/lib/gir_ffi/version.rb +1 -1
  47. data/test/ffi-glib/array_test.rb +54 -0
  48. data/test/ffi-glib/byte_array_test.rb +21 -0
  49. data/test/ffi-glib/glib_overrides_test.rb +1 -46
  50. data/test/ffi-glib/hash_table_test.rb +24 -0
  51. data/test/ffi-glib/list_test.rb +46 -0
  52. data/test/ffi-glib/ptr_array_test.rb +51 -0
  53. data/test/ffi-glib/s_list_test.rb +46 -0
  54. data/test/ffi-gobject/g_object_overrides_test.rb +8 -8
  55. data/test/ffi-gobject/gobject_test.rb +26 -0
  56. data/test/ffi-gobject/object_test.rb +12 -0
  57. data/test/ffi-gobject_introspection/i_constant_info_test.rb +5 -1
  58. data/test/ffi-gobject_introspection/lib_test.rb +56 -0
  59. data/test/integration/generated_gimarshallingtests_test.rb +118 -76
  60. data/test/integration/generated_regress_test.rb +220 -62
  61. data/test/integration/pretty_print_test.rb +11 -0
  62. data/test/type_builder_test.rb +0 -48
  63. data/test/unintrospectable_type_builder_test.rb +8 -2
  64. data/test/unit/builder_test.rb +1 -1
  65. data/test/unit/callback_builder_test.rb +19 -0
  66. data/test/unit/constant_builder_test.rb +11 -0
  67. data/test/unit/enum_builder_test.rb +25 -0
  68. data/test/unit/function_builder_test.rb +17 -0
  69. data/test/unit/in_out_pointer_test.rb +11 -0
  70. data/test/unit/in_pointer_test.rb +6 -2
  71. data/test/unit/interface_builder_test.rb +17 -0
  72. data/test/unit/module_builder_test.rb +95 -0
  73. data/test/unit/object_type_builder_test.rb +24 -0
  74. data/test/unit/struct_builder_test.rb +106 -0
  75. data/test/unit/union_builder_test.rb +17 -0
  76. data/test/unit/variable_name_generator_test.rb +16 -0
  77. metadata +102 -75
  78. data/test/module_builder_test.rb +0 -53
@@ -33,19 +33,19 @@ class GeneratedRegressTest < MiniTest::Spec
33
33
  should "create an instance using #new_alternative_constructor1" do
34
34
  tb = Regress::TestBoxed.new_alternative_constructor1 1
35
35
  assert_instance_of Regress::TestBoxed, tb
36
- assert_equal 1, tb[:some_int8]
36
+ assert_equal 1, tb.some_int8
37
37
  end
38
38
 
39
39
  should "create an instance using #new_alternative_constructor2" do
40
40
  tb = Regress::TestBoxed.new_alternative_constructor2 1, 2
41
41
  assert_instance_of Regress::TestBoxed, tb
42
- assert_equal 1 + 2, tb[:some_int8]
42
+ assert_equal 1 + 2, tb.some_int8
43
43
  end
44
44
 
45
45
  should "create an instance using #new_alternative_constructor3" do
46
46
  tb = Regress::TestBoxed.new_alternative_constructor3 "54"
47
47
  assert_instance_of Regress::TestBoxed, tb
48
- assert_equal 54, tb[:some_int8]
48
+ assert_equal 54, tb.some_int8
49
49
  end
50
50
 
51
51
  should "have non-zero positive result for #get_gtype" do
@@ -72,12 +72,12 @@ class GeneratedRegressTest < MiniTest::Spec
72
72
  end
73
73
 
74
74
  should "copy fields" do
75
- assert_equal 123, @tb2[:some_int8]
75
+ assert_equal 123, @tb2.some_int8
76
76
  end
77
77
 
78
78
  should "create a true copy" do
79
- @tb[:some_int8] = 89
80
- assert_equal 123, @tb2[:some_int8]
79
+ @tb.some_int8 = 89
80
+ assert_equal 123, @tb2.some_int8
81
81
  end
82
82
  end
83
83
  end
@@ -112,15 +112,48 @@ class GeneratedRegressTest < MiniTest::Spec
112
112
  end
113
113
 
114
114
  describe "TestFundamentalObject" do
115
- it "must be tested"
115
+ it "must exist" do
116
+ Regress::TestFundamentalObject
117
+ end
118
+
119
+ it "does not have GObject::Object as an ancestor" do
120
+ refute_includes Regress::TestFundamentalObject.ancestors,
121
+ GObject::Object
122
+ end
123
+ # TODO: Test more, if possible (e.g., cannot be instantiated).
116
124
  end
117
125
 
118
126
  describe "TestFundamentalSubObject" do
119
- it "must be tested"
127
+ before do
128
+ @so = Regress::TestFundamentalSubObject.new "foo"
129
+ end
130
+
131
+ it "can be instantiated" do
132
+ pass
133
+ end
134
+
135
+ it "is a subclass of TestFundamentalObject" do
136
+ assert_kind_of Regress::TestFundamentalObject, @so
137
+ end
138
+
139
+ it "stores the constructor parameter in the :data field" do
140
+ assert_equal "foo", @so.data
141
+ end
142
+
143
+ it "has a refcount of 1" do
144
+ assert_equal 1, @so.fundamental_object.refcount
145
+ end
120
146
  end
121
147
 
122
148
  describe "TestInterface" do
123
- it "must be tested"
149
+ it "is a module" do
150
+ assert_instance_of Module, Regress::TestInterface
151
+ end
152
+
153
+ it "extends InterfaceBase" do
154
+ metaclass = class << Regress::TestInterface; self; end
155
+ assert_includes metaclass.ancestors, GirFFI::InterfaceBase
156
+ end
124
157
  end
125
158
 
126
159
  context "the Regress::TestObj class" do
@@ -167,6 +200,115 @@ class GeneratedRegressTest < MiniTest::Spec
167
200
  end
168
201
  end
169
202
 
203
+ describe "#get_property" do
204
+ it "gets the 'bare' property" do
205
+ obj = Regress::TestObj.new_from_file("bar")
206
+ @o.set_bare obj
207
+
208
+ obj2 = @o.get_property("bare")
209
+
210
+ assert_equal obj.to_ptr, obj2.to_ptr
211
+ assert_instance_of Regress::TestObj, obj2
212
+ end
213
+
214
+ it "gets the 'boxed' property" do
215
+ tb = Regress::TestBoxed.new_alternative_constructor1 75
216
+ @o.set_property "boxed", tb
217
+
218
+ tb2 = @o.get_property("boxed")
219
+
220
+ assert_instance_of Regress::TestBoxed, tb2
221
+ assert_equal 75, tb2.some_int8
222
+ end
223
+
224
+ it "gets the 'hash-table' property" do
225
+ ht = GLib::HashTable.new :utf8, :gint8
226
+ ht.insert "foo", 34
227
+ ht.insert "bar", 83
228
+
229
+ @o.set_property "hash-table", ht
230
+
231
+ ht2 = @o.get_property "hash-table"
232
+ assert_equal({"foo" => 34, "bar" => 83}, ht2.to_hash)
233
+ end
234
+
235
+ it "gets the 'float' property" do
236
+ @o.set_property "float", 3.14
237
+ assert_in_epsilon 3.14, @o.get_property("float")
238
+ end
239
+
240
+ it "gets the 'double' property" do
241
+ @o.set_property "double", 3.14
242
+ assert_in_epsilon 3.14, @o.get_property("double")
243
+ end
244
+
245
+ it "gets the 'int' property" do
246
+ @o.set_property "int", 42
247
+ assert_equal 42, @o.get_property("int")
248
+ end
249
+
250
+ it "gets the 'list' property" do
251
+ lst = GLib::List.new(:utf8).append("foo").append("bar")
252
+
253
+ @o.set_property "list", lst
254
+
255
+ lst2 = @o.get_property "list"
256
+ assert_equal ["foo", "bar"], lst2.to_a
257
+ end
258
+
259
+ it "gets the 'string' property" do
260
+ @o.set_property "string", "foobar"
261
+ assert_equal "foobar", @o.get_property("string")
262
+ end
263
+ end
264
+
265
+ describe "#set_property" do
266
+ it "sets the 'bare' property" do
267
+ obj = Regress::TestObj.new_from_file("bar")
268
+ @o.set_property "bare", obj
269
+ assert_equal obj.to_ptr, @o.bare.to_ptr
270
+ end
271
+
272
+ it "sets the 'boxed' property" do
273
+ tb = Regress::TestBoxed.new_alternative_constructor1 75
274
+ @o.set_property "boxed", tb
275
+ tb2 = @o.boxed
276
+ assert_equal 75, tb2.some_int8
277
+ end
278
+
279
+ it "sets the 'hash-table' property" do
280
+ @o.set_property("hash-table", {"foo" => 34, "bar" => 83})
281
+ assert_equal({"foo" => 34, "bar" => 83},
282
+ GLib::HashTable.wrap(:utf8, :gint32, @o.hash_table.to_ptr).to_hash)
283
+ end
284
+
285
+ it "sets the 'float' property" do
286
+ @o.set_property "float", 3.14
287
+ assert_in_epsilon 3.14, @o.some_float
288
+ end
289
+
290
+ it "sets the 'double' property" do
291
+ @o.set_property "double", 3.14
292
+ assert_in_epsilon 3.14, @o.some_double
293
+ end
294
+
295
+ it "sets the 'int' property" do
296
+ @o.set_property "int", 42
297
+ assert_equal 42, @o.some_int8
298
+ end
299
+
300
+ it "sets the 'list' property" do
301
+ @o.set_property "list", ["foo", "bar"]
302
+ assert_equal ["foo", "bar"],
303
+ GLib::List.wrap(:utf8, @o.list.to_ptr).to_a
304
+ end
305
+
306
+ it "sets the 'string' property" do
307
+ @o.set_property "string", "foobar"
308
+ assert_equal "foobar", @o.string
309
+ end
310
+ end
311
+
170
312
  should "have a reference count of 1" do
171
313
  assert_equal 1, ref_count(@o)
172
314
  end
@@ -184,7 +326,7 @@ class GeneratedRegressTest < MiniTest::Spec
184
326
  obj = Regress::TestObj.new_from_file("bar")
185
327
  @o.set_bare obj
186
328
  # TODO: What is the correct value to retrieve from the fields?
187
- assert_equal obj.to_ptr, @o[:bare]
329
+ assert_equal obj.to_ptr, @o.bare.to_ptr
188
330
  end
189
331
 
190
332
  should "have a working #instance_method method" do
@@ -247,19 +389,19 @@ class GeneratedRegressTest < MiniTest::Spec
247
389
  context "an instance" do
248
390
  setup do
249
391
  @obj = Regress::TestSimpleBoxedA.new
250
- @obj[:some_int] = 4236
251
- @obj[:some_int8] = 36
252
- @obj[:some_double] = 23.53
253
- @obj[:some_enum] = :value2
392
+ @obj.some_int = 4236
393
+ @obj.some_int8 = 36
394
+ @obj.some_double = 23.53
395
+ @obj.some_enum = :value2
254
396
  end
255
397
 
256
398
  context "its equals method" do
257
399
  setup do
258
400
  @ob2 = Regress::TestSimpleBoxedA.new
259
- @ob2[:some_int] = 4236
260
- @ob2[:some_int8] = 36
261
- @ob2[:some_double] = 23.53
262
- @ob2[:some_enum] = :value2
401
+ @ob2.some_int = 4236
402
+ @ob2.some_int8 = 36
403
+ @ob2.some_double = 23.53
404
+ @ob2.some_enum = :value2
263
405
  end
264
406
 
265
407
  should "return true if values are the same" do
@@ -267,12 +409,12 @@ class GeneratedRegressTest < MiniTest::Spec
267
409
  end
268
410
 
269
411
  should "return true if enum values differ" do
270
- @ob2[:some_enum] = :value3
412
+ @ob2.some_enum = :value3
271
413
  assert_equal true, @obj.equals(@ob2)
272
414
  end
273
415
 
274
416
  should "return false if other values differ" do
275
- @ob2[:some_int] = 1
417
+ @ob2.some_int = 1
276
418
  assert_equal false, @obj.equals(@ob2)
277
419
  end
278
420
  end
@@ -287,15 +429,15 @@ class GeneratedRegressTest < MiniTest::Spec
287
429
  end
288
430
 
289
431
  should "copy fields" do
290
- assert_equal 4236, @ob2[:some_int]
291
- assert_equal 36, @ob2[:some_int8]
292
- assert_equal 23.53, @ob2[:some_double]
293
- assert_equal :value2, @ob2[:some_enum]
432
+ assert_equal 4236, @ob2.some_int
433
+ assert_equal 36, @ob2.some_int8
434
+ assert_equal 23.53, @ob2.some_double
435
+ assert_equal :value2, @ob2.some_enum
294
436
  end
295
437
 
296
438
  should "create a true copy" do
297
- @obj[:some_int8] = 89
298
- assert_equal 36, @ob2[:some_int8]
439
+ @obj.some_int8 = 89
440
+ assert_equal 36, @ob2.some_int8
299
441
  end
300
442
  end
301
443
  end
@@ -305,17 +447,17 @@ class GeneratedRegressTest < MiniTest::Spec
305
447
  context "an instance" do
306
448
  should "have a working clone method" do
307
449
  a = Regress::TestStructA.new
308
- a[:some_int] = 2556
309
- a[:some_int8] = -10
310
- a[:some_double] = 1.03455e20
311
- a[:some_enum] = :value2
450
+ a.some_int = 2556
451
+ a.some_int8 = -10
452
+ a.some_double = 1.03455e20
453
+ a.some_enum = :value2
312
454
 
313
455
  b = a.clone
314
456
 
315
- assert_equal 2556, b[:some_int]
316
- assert_equal(-10, b[:some_int8])
317
- assert_equal 1.03455e20, b[:some_double]
318
- assert_equal :value2, b[:some_enum]
457
+ assert_equal 2556, b.some_int
458
+ assert_equal(-10, b.some_int8)
459
+ assert_equal 1.03455e20, b.some_double
460
+ assert_equal :value2, b.some_enum
319
461
  end
320
462
  end
321
463
  end
@@ -324,25 +466,26 @@ class GeneratedRegressTest < MiniTest::Spec
324
466
  describe "an instance" do
325
467
  it "has a working method #clone" do
326
468
  a = Regress::TestStructB.new
327
- a[:some_int8] = 42
328
- a[:nested_a][:some_int] = 2556
329
- a[:nested_a][:some_int8] = -10
330
- a[:nested_a][:some_double] = 1.03455e20
331
- a[:nested_a][:some_enum] = :value2
469
+ a.some_int8 = 42
470
+ a.nested_a.some_int = 2556
471
+ a.nested_a.some_int8 = -10
472
+ a.nested_a.some_double = 1.03455e20
473
+ a.nested_a.some_enum = :value2
332
474
 
333
475
  b = a.clone
334
476
 
335
- assert_equal 42, b[:some_int8]
336
- assert_equal 2556, b[:nested_a][:some_int]
337
- assert_equal(-10, b[:nested_a][:some_int8])
338
- assert_equal 1.03455e20, b[:nested_a][:some_double]
339
- assert_equal :value2, b[:nested_a][:some_enum]
477
+ assert_equal 42, b.some_int8
478
+ assert_equal 2556, b.nested_a.some_int
479
+ assert_equal(-10, b.nested_a.some_int8)
480
+ assert_equal 1.03455e20, b.nested_a.some_double
481
+ assert_equal :value2, b.nested_a.some_enum
340
482
  end
341
483
  end
342
484
  end
343
485
 
344
- # XXX: TestStructC is not typedef'd in regress.h
345
- # describe "TestStructC"
486
+ describe "TestStructC" do
487
+ it "needs to be tested"
488
+ end
346
489
 
347
490
  describe "TestSubObj" do
348
491
  it "is created with #new" do
@@ -366,7 +509,7 @@ class GeneratedRegressTest < MiniTest::Spec
366
509
  end
367
510
 
368
511
  it "has a field parent_instance" do
369
- assert_instance_of Regress::TestObj::Struct, @tso[:parent_instance]
512
+ assert_instance_of Regress::TestObj, @tso.parent_instance
370
513
  end
371
514
  end
372
515
  end
@@ -386,26 +529,24 @@ class GeneratedRegressTest < MiniTest::Spec
386
529
  @obj = Regress::TestWi8021x.new
387
530
  end
388
531
 
389
- should "set its boolean struct member with #set_testbool" do
532
+ it "sets its boolean field with #set_testbool" do
390
533
  @obj.set_testbool true
391
- assert_equal 1, @obj[:testbool]
534
+ assert_equal 1, @obj.testbool
392
535
  @obj.set_testbool false
393
- assert_equal 0, @obj[:testbool]
536
+ assert_equal 0, @obj.testbool
394
537
  end
395
538
 
396
- should "get its boolean struct member with #get_testbool" do
397
- @obj[:testbool] = 0
539
+ it "gets its boolean field with #get_testbool" do
540
+ @obj.set_testbool false
398
541
  assert_equal false, @obj.get_testbool
399
- @obj[:testbool] = 1
542
+ @obj.set_testbool true
400
543
  assert_equal true, @obj.get_testbool
401
544
  end
402
545
 
403
- should "get its boolean struct member with #get_property" do
404
- @obj[:testbool] = 1
405
- gv = GObject::Value.new
406
- gv.init GObject.type_from_name "gboolean"
407
- @obj.get_property "testbool", gv
408
- assert_equal true, gv.get_boolean
546
+ it "gets its boolean field with #get_property" do
547
+ @obj.set_testbool true
548
+ val = @obj.get_property "testbool"
549
+ assert_equal true, val
409
550
  end
410
551
  end
411
552
  end
@@ -491,7 +632,7 @@ class GeneratedRegressTest < MiniTest::Spec
491
632
 
492
633
  should "have correct test_async_ready_callback" do
493
634
  a = 1
494
- main_loop = GLib.main_loop_new nil, false
635
+ main_loop = GLib::MainLoop.new nil, false
495
636
 
496
637
  Regress.test_async_ready_callback Proc.new {
497
638
  main_loop.quit
@@ -631,12 +772,29 @@ class GeneratedRegressTest < MiniTest::Spec
631
772
  assert_in_delta 5435.32, r, 0.001
632
773
  end
633
774
 
775
+ describe "#test_garray_container_return" do
776
+ before do
777
+ @arr = Regress.test_garray_container_return
778
+ end
779
+
780
+ it "returns an instance of GLib::PtrArray" do
781
+ @arr.must_be_instance_of GLib::PtrArray
782
+ end
783
+
784
+ it "returns the correct values" do
785
+ @arr.len.must_be :==, 1
786
+ ptr = @arr.pdata
787
+ ptr2 = ptr.read_pointer
788
+ ptr2.read_string.must_be :==, "regress"
789
+ end
790
+ end
791
+
634
792
  describe "#test_ghash_container_return" do
635
793
  before do
636
794
  @hash = Regress.test_ghash_container_return
637
795
  end
638
796
 
639
- it "returns an instance of GLib::Hash" do
797
+ it "returns an instance of GLib::HashTable" do
640
798
  @hash.must_be_instance_of GLib::HashTable
641
799
  end
642
800
 
@@ -868,7 +1026,7 @@ class GeneratedRegressTest < MiniTest::Spec
868
1026
 
869
1027
  should "have correct test_simple_boxed_a_const_return" do
870
1028
  result = Regress.test_simple_boxed_a_const_return
871
- assert_equal [5, 6, 7.0], [result[:some_int], result[:some_int8], result[:some_double]]
1029
+ assert_equal [5, 6, 7.0], [result.some_int, result.some_int8, result.some_double]
872
1030
  end
873
1031
 
874
1032
  describe "the #test_simple_callback function" do
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../gir_ffi_test_helper.rb', File.dirname(__FILE__))
2
+
3
+ describe "Pretty-printing the Regress module" do
4
+ before do
5
+ GirFFI.setup :Regress
6
+ end
7
+
8
+ it "runs without throwing an exception" do
9
+ Regress._builder.pretty_print
10
+ end
11
+ end
@@ -2,54 +2,6 @@ require File.expand_path('gir_ffi_test_helper.rb', File.dirname(__FILE__))
2
2
 
3
3
  class TypeBuilderTest < MiniTest::Spec
4
4
  context "The Builder::Type class" do
5
- should "use parent struct as default layout" do
6
- @gir = GObjectIntrospection::IRepository.default
7
- @gir.require 'GObject', nil
8
-
9
- stub(info = Object.new).parent { @gir.find_by_name 'GObject', 'Object' }
10
- stub(info).fields { [] }
11
- stub(info).info_type { :object }
12
- stub(info).safe_name { 'Bar' }
13
- stub(info).namespace { 'Foo' }
14
-
15
- @classbuilder = GirFFI::Builder::Type::Object.new info
16
-
17
- spec = @classbuilder.send :layout_specification
18
- assert_equal [:parent, GObject::Object::Struct, 0], spec
19
- end
20
-
21
- describe "for a layout with a fixed-length array" do
22
- before do
23
- stub(subtype = Object.new).pointer? { false }
24
- stub(subtype).tag { :foo }
25
-
26
- stub(@type = Object.new).pointer? { false }
27
- stub(@type).tag { :array }
28
- stub(@type).array_fixed_size { 2 }
29
- stub(@type).param_type { subtype }
30
-
31
- stub(field = Object.new).field_type { @type }
32
- stub(field).name { "bar" }
33
- stub(field).offset { 0 }
34
-
35
- stub(@struct = Object.new).safe_name { 'Bar' }
36
- stub(@struct).namespace { 'Foo' }
37
- stub(@struct).fields { [ field ] }
38
- end
39
-
40
- it "creates the correct ffi type for the array" do
41
- builder = GirFFI::Builder::Type::RegisteredType.new @struct
42
- spec = builder.send :itypeinfo_to_ffitype_for_struct, @type
43
- assert_equal [:foo, 2], spec
44
- end
45
-
46
- it "creates the correct layout specification" do
47
- builder = GirFFI::Builder::Type::Struct.new @struct
48
- spec = builder.send :layout_specification
49
- assert_equal [:bar, [:foo, 2], 0], spec
50
- end
51
- end
52
-
53
5
  context "for Gtk::Widget" do
54
6
  setup do
55
7
  @cbuilder = GirFFI::Builder::Type::Object.new get_introspection_data('Gtk', 'Widget')