gir_ffi 0.6.7 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +7 -0
  2. data/{History.txt → Changelog.md} +93 -61
  3. data/{DESIGN.rdoc → DESIGN.md} +7 -7
  4. data/README.md +5 -7
  5. data/TODO.md +90 -0
  6. data/lib/ffi-glib.rb +0 -1
  7. data/lib/ffi-glib/array.rb +13 -29
  8. data/lib/ffi-glib/array_methods.rb +13 -0
  9. data/lib/ffi-glib/container_class_methods.rb +6 -1
  10. data/lib/ffi-glib/hash_table.rb +3 -2
  11. data/lib/ffi-glib/list.rb +3 -17
  12. data/lib/ffi-glib/list_methods.rb +22 -3
  13. data/lib/ffi-glib/ptr_array.rb +19 -19
  14. data/lib/ffi-glib/s_list.rb +3 -17
  15. data/lib/ffi-gobject.rb +10 -17
  16. data/lib/ffi-gobject/object.rb +19 -9
  17. data/lib/ffi-gobject/object_class.rb +14 -0
  18. data/lib/ffi-gobject/ruby_closure.rb +4 -5
  19. data/lib/ffi-gobject/value.rb +7 -5
  20. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  21. data/lib/gir_ffi-base.rb +0 -2
  22. data/lib/gir_ffi-base/gobject.rb +1 -0
  23. data/lib/gir_ffi-base/gobject/lib.rb +1 -1
  24. data/lib/gir_ffi.rb +2 -0
  25. data/lib/gir_ffi/arg_helper.rb +18 -8
  26. data/lib/gir_ffi/builders/argument_builder.rb +62 -55
  27. data/lib/gir_ffi/builders/base_argument_builder.rb +52 -106
  28. data/lib/gir_ffi/builders/base_type_builder.rb +3 -3
  29. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +34 -0
  30. data/lib/gir_ffi/builders/callback_argument_builder.rb +73 -0
  31. data/lib/gir_ffi/builders/callback_builder.rb +19 -9
  32. data/lib/gir_ffi/builders/callback_return_value_builder.rb +54 -0
  33. data/lib/gir_ffi/builders/closure_convertor.rb +9 -0
  34. data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +9 -0
  35. data/lib/gir_ffi/builders/constructor_result_convertor.rb +9 -0
  36. data/lib/gir_ffi/builders/enum_builder.rb +16 -16
  37. data/lib/gir_ffi/builders/field_builder.rb +36 -15
  38. data/lib/gir_ffi/builders/function_builder.rb +32 -27
  39. data/lib/gir_ffi/builders/interface_builder.rb +14 -4
  40. data/lib/gir_ffi/builders/mapping_method_builder.rb +95 -43
  41. data/lib/gir_ffi/builders/module_builder.rb +22 -35
  42. data/lib/gir_ffi/builders/null_convertor.rb +9 -0
  43. data/lib/gir_ffi/builders/object_builder.rb +11 -14
  44. data/lib/gir_ffi/builders/property_builder.rb +107 -9
  45. data/lib/gir_ffi/builders/registered_type_builder.rb +2 -2
  46. data/lib/gir_ffi/builders/return_value_builder.rb +42 -33
  47. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +15 -0
  48. data/lib/gir_ffi/builders/signal_builder.rb +18 -58
  49. data/lib/gir_ffi/builders/struct_builder.rb +1 -2
  50. data/lib/gir_ffi/builders/type_builder.rb +1 -0
  51. data/lib/gir_ffi/builders/unintrospectable_builder.rb +4 -4
  52. data/lib/gir_ffi/builders/user_defined_builder.rb +151 -26
  53. data/lib/gir_ffi/builders/vfunc_builder.rb +57 -0
  54. data/lib/gir_ffi/builders/with_layout.rb +10 -8
  55. data/lib/gir_ffi/builders/with_methods.rb +1 -1
  56. data/lib/gir_ffi/callback_base.rb +42 -8
  57. data/lib/gir_ffi/class_base.rb +1 -2
  58. data/lib/gir_ffi/enum_base.rb +26 -4
  59. data/lib/gir_ffi/error_argument_info.rb +21 -0
  60. data/lib/gir_ffi/{setter_argument_info.rb → field_argument_info.rb} +2 -1
  61. data/lib/gir_ffi/g_type.rb +25 -0
  62. data/lib/gir_ffi/in_out_pointer.rb +3 -14
  63. data/lib/gir_ffi/in_pointer.rb +20 -21
  64. data/lib/gir_ffi/info_ext.rb +2 -0
  65. data/lib/gir_ffi/info_ext/i_callable_info.rb +0 -9
  66. data/lib/gir_ffi/info_ext/i_callback_info.rb +17 -0
  67. data/lib/gir_ffi/info_ext/i_function_info.rb +4 -0
  68. data/lib/gir_ffi/info_ext/i_property_info.rb +4 -0
  69. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -0
  70. data/lib/gir_ffi/info_ext/i_signal_info.rb +14 -16
  71. data/lib/gir_ffi/info_ext/i_type_info.rb +72 -34
  72. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +12 -0
  73. data/lib/gir_ffi/info_ext/safe_constant_name.rb +3 -2
  74. data/lib/gir_ffi/interface_base.rb +8 -3
  75. data/lib/gir_ffi/module_base.rb +3 -5
  76. data/lib/gir_ffi/object_base.rb +8 -0
  77. data/lib/gir_ffi/receiver_argument_info.rb +21 -0
  78. data/lib/gir_ffi/receiver_type_info.rb +27 -0
  79. data/lib/gir_ffi/return_value_info.rb +23 -0
  80. data/lib/gir_ffi/signal_base.rb +1 -1
  81. data/lib/{ffi-glib → gir_ffi}/sized_array.rb +10 -6
  82. data/lib/gir_ffi/struct_base.rb +10 -9
  83. data/lib/gir_ffi/type_base.rb +1 -0
  84. data/lib/gir_ffi/type_map.rb +3 -0
  85. data/lib/gir_ffi/unintrospectable_type_info.rb +4 -1
  86. data/lib/gir_ffi/union_base.rb +4 -21
  87. data/lib/gir_ffi/user_data_argument_info.rb +21 -0
  88. data/lib/gir_ffi/user_data_type_info.rb +17 -0
  89. data/lib/gir_ffi/user_defined_type_info.rb +18 -4
  90. data/lib/gir_ffi/version.rb +1 -1
  91. data/lib/gir_ffi/vfunc_base.rb +8 -0
  92. data/lib/gir_ffi/vfunc_implementation.rb +11 -0
  93. data/lib/gir_ffi/zero_terminated.rb +18 -24
  94. data/test/base_test_helper.rb +2 -3
  95. data/test/ffi-glib/array_test.rb +3 -3
  96. data/test/ffi-glib/ruby_closure_test.rb +3 -3
  97. data/test/ffi-gobject/value_test.rb +15 -1
  98. data/test/ffi-gobject_test.rb +2 -1
  99. data/test/gir_ffi/arg_helper_test.rb +21 -2
  100. data/test/gir_ffi/builders/argument_builder_test.rb +213 -287
  101. data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
  102. data/test/gir_ffi/builders/callback_builder_test.rb +26 -8
  103. data/test/gir_ffi/builders/field_builder_test.rb +18 -3
  104. data/test/gir_ffi/builders/function_builder_test.rb +30 -12
  105. data/test/gir_ffi/builders/interface_builder_test.rb +9 -0
  106. data/test/gir_ffi/builders/module_builder_test.rb +0 -39
  107. data/test/gir_ffi/builders/object_builder_test.rb +27 -27
  108. data/test/gir_ffi/builders/property_builder_test.rb +110 -0
  109. data/test/gir_ffi/builders/return_value_builder_test.rb +168 -200
  110. data/test/gir_ffi/builders/signal_builder_test.rb +58 -14
  111. data/test/gir_ffi/builders/struct_builder_test.rb +2 -41
  112. data/test/gir_ffi/builders/user_defined_builder_test.rb +88 -20
  113. data/test/gir_ffi/builders/vfunc_builder_test.rb +44 -0
  114. data/test/gir_ffi/g_type_test.rb +29 -0
  115. data/test/gir_ffi/in_pointer_test.rb +28 -9
  116. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -9
  117. data/test/gir_ffi/info_ext/i_callback_info_test.rb +19 -0
  118. data/test/gir_ffi/info_ext/i_function_info_test.rb +9 -0
  119. data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -11
  120. data/test/gir_ffi/info_ext/i_type_info_test.rb +140 -16
  121. data/test/gir_ffi/interface_base_test.rb +9 -3
  122. data/test/gir_ffi/object_base_test.rb +1 -2
  123. data/test/{ffi-glib → gir_ffi}/sized_array_test.rb +28 -28
  124. data/test/gir_ffi/type_map_test.rb +1 -1
  125. data/test/gir_ffi/user_defined_type_info_test.rb +36 -4
  126. data/test/gir_ffi_test.rb +5 -5
  127. data/test/gir_ffi_test_helper.rb +4 -0
  128. data/test/integration/generated_gimarshallingtests_test.rb +163 -59
  129. data/test/integration/generated_gobject_test.rb +21 -8
  130. data/test/integration/generated_pango_test.rb +2 -2
  131. data/test/integration/generated_regress_test.rb +361 -101
  132. data/test/lib/autogen.sh +5 -1
  133. metadata +51 -35
  134. data/TODO.rdoc +0 -63
  135. data/lib/gir_ffi-base/gir_ffi/library.rb +0 -17
  136. data/lib/gir_ffi-base/gir_ffi/struct.rb +0 -27
@@ -67,11 +67,11 @@ describe GirFFI do
67
67
  before do
68
68
  @klass = Class.new GIMarshallingTests::OverridesObject
69
69
  Object.const_set "DerivedB#{Sequence.next}", @klass
70
- @gtype = GirFFI.define_type @klass do
71
- install_property GObject.param_spec_int("foo", "foo bar",
72
- "The Foo Bar Property",
73
- 10, 20, 15,
74
- 3)
70
+ @gtype = GirFFI.define_type @klass do |info|
71
+ info.install_property GObject.param_spec_int("foo", "foo bar",
72
+ "The Foo Bar Property",
73
+ 10, 20, 15,
74
+ 3)
75
75
  end
76
76
  end
77
77
 
@@ -31,6 +31,10 @@ class Minitest::Test
31
31
  get_introspection_data(namespace, klass).find_signal name
32
32
  end
33
33
 
34
+ def get_vfunc_introspection_data namespace, klass, name
35
+ get_introspection_data(namespace, klass).find_vfunc name
36
+ end
37
+
34
38
  SAVED_MODULES = {}
35
39
 
36
40
  def save_module name
@@ -7,6 +7,16 @@ GirFFI.setup :GIMarshallingTests
7
7
 
8
8
  # Tests generated methods and functions in the GIMarshallingTests namespace.
9
9
  describe GIMarshallingTests do
10
+ let(:derived_klass) { Object.const_set("DerivedClass#{Sequence.next}",
11
+ Class.new(GIMarshallingTests::Object)) }
12
+
13
+ def make_derived_instance
14
+ GirFFI.define_type derived_klass do |info|
15
+ yield info if block_given?
16
+ end
17
+ derived_klass.new
18
+ end
19
+
10
20
  describe "GIMarshallingTests::BoxedStruct" do
11
21
  let(:instance) { GIMarshallingTests::BoxedStruct.new }
12
22
 
@@ -183,19 +193,30 @@ describe GIMarshallingTests do
183
193
 
184
194
  describe "GIMarshallingTests::Interface" do
185
195
  it "has a working method #test_int8_in" do
186
- skip "Interfaces cannot be tested directly"
196
+ derived_klass.class_eval { include GIMarshallingTests::Interface }
197
+ instance = make_derived_instance do |info|
198
+ info.install_vfunc_implementation :test_int8_in, proc {|obj, in_| obj.int = in_ }
199
+ end
200
+ instance.test_int8_in 8
201
+ instance.int.must_equal 8
187
202
  end
188
203
  end
189
204
 
190
205
  describe "GIMarshallingTests::Interface2" do
191
- it "must be tested" do
192
- skip "Interfaces cannot be tested directly"
206
+ it "must be tested for clashes with Interface" do
207
+ skip "Needs more work to determine desired behavior"
193
208
  end
194
209
  end
195
210
 
196
211
  describe "GIMarshallingTests::Interface3" do
197
212
  it "has a working method #test_variant_array_in" do
198
- skip "Interfaces cannot be tested directly"
213
+ derived_klass.class_eval { include GIMarshallingTests::Interface3 }
214
+ instance = make_derived_instance do |info|
215
+ info.install_vfunc_implementation :test_variant_array_in, proc {|obj, in_|
216
+ obj.int = in_.to_a.first.get_byte }
217
+ end
218
+ instance.test_variant_array_in [GLib::Variant.new_byte(42)]
219
+ instance.int.must_equal 42
199
220
  end
200
221
  end
201
222
 
@@ -325,8 +346,13 @@ describe GIMarshallingTests do
325
346
  it "has a working method #get_ref_info_for_vfunc_return_object_transfer_none" do
326
347
  skip "Needs vfunc setup"
327
348
  end
349
+
328
350
  it "has a working method #int8_in" do
329
- skip "Needs vfunc setup"
351
+ derived_instance = make_derived_instance do |info|
352
+ info.install_vfunc_implementation :method_int8_in, proc {|obj, in_| obj.int = in_ }
353
+ end
354
+ derived_instance.int8_in 23
355
+ derived_instance.int.must_equal 23
330
356
  end
331
357
 
332
358
  it "has a working method #int8_out" do
@@ -367,19 +393,31 @@ describe GIMarshallingTests do
367
393
  end
368
394
 
369
395
  it "has a working method #method_int8_in" do
370
- skip "Needs vfunc setup"
396
+ derived_instance = make_derived_instance do |info|
397
+ info.install_vfunc_implementation :method_int8_in, proc {|obj, in_| obj.int = in_ }
398
+ end
399
+ derived_instance.method_int8_in 108
400
+ derived_instance.int.must_equal 108
371
401
  end
372
402
 
373
403
  it "has a working method #method_int8_out" do
374
- skip "Needs vfunc setup"
404
+ derived_instance = make_derived_instance do |info|
405
+ info.install_vfunc_implementation :method_int8_out, proc {|obj| 42 }
406
+ end
407
+ derived_instance.method_int8_out.must_equal 42
375
408
  end
376
409
 
377
410
  it "has a working method #method_str_arg_out_ret" do
378
- skip "Needs vfunc setup"
411
+ skip unless get_vfunc_introspection_data("GIMarshallingTests", "Object",
412
+ "method_str_arg_out_ret")
413
+ derived_instance = make_derived_instance do |info|
414
+ info.install_vfunc_implementation :method_str_arg_out_ret, proc {|obj, arg| [arg, 42] }
415
+ end
416
+ derived_instance.method_str_arg_out_ret("foo").must_equal ["foo", 42]
379
417
  end
380
418
 
381
419
  it "has a working method #method_variant_array_in" do
382
- skip "Needs vfunc setup"
420
+ skip "This function is only found in the header"
383
421
  end
384
422
 
385
423
  it "has a working method #method_with_default_implementation" do
@@ -405,44 +443,92 @@ describe GIMarshallingTests do
405
443
  it "has a working method #vfunc_caller_allocated_out_parameter" do
406
444
  skip "Needs vfunc setup"
407
445
  end
446
+
408
447
  it "has a working method #vfunc_meth_with_error" do
409
448
  skip "Needs vfunc setup"
410
449
  end
450
+
411
451
  it "has a working method #vfunc_multiple_out_parameters" do
412
- skip "Needs vfunc setup"
452
+ derived_instance = make_derived_instance do |info|
453
+ info.install_vfunc_implementation(
454
+ :vfunc_multiple_out_parameters,
455
+ proc {|*args| [42.1, -142.3] })
456
+ end
457
+ result = derived_instance.vfunc_multiple_out_parameters
458
+ result[0].must_be_close_to 42.1
459
+ result[1].must_be_close_to(-142.3)
413
460
  end
461
+
414
462
  it "has a working method #vfunc_one_out_parameter" do
415
- skip "Needs vfunc setup"
463
+ derived_instance = make_derived_instance do |info|
464
+ info.install_vfunc_implementation(
465
+ :vfunc_one_out_parameter,
466
+ proc {|*args| 23.4 })
467
+ end
468
+ derived_instance.vfunc_one_out_parameter.
469
+ must_be_within_epsilon 23.4
416
470
  end
471
+
417
472
  it "has a working method #vfunc_out_enum" do
418
- skip "Needs vfunc setup"
473
+ skip unless get_vfunc_introspection_data("GIMarshallingTests", "Object",
474
+ "vfunc_out_enum")
475
+ derived_instance = make_derived_instance do |info|
476
+ info.install_vfunc_implementation :vfunc_out_enum, proc {|obj| :value2 }
477
+ end
478
+ derived_instance.vfunc_out_enum.must_equal :value2
419
479
  end
480
+
420
481
  it "has a working method #vfunc_return_enum" do
421
- skip "Needs vfunc setup"
482
+ skip unless get_vfunc_introspection_data("GIMarshallingTests", "Object",
483
+ "vfunc_return_enum")
484
+ derived_instance = make_derived_instance do |info|
485
+ info.install_vfunc_implementation :vfunc_return_enum, proc {|obj| :value2 }
486
+ end
487
+ derived_instance.vfunc_return_enum.must_equal :value2
422
488
  end
489
+
423
490
  it "has a working method #vfunc_return_value_and_multiple_out_parameters" do
424
- skip "Needs vfunc setup"
491
+ derived_instance = make_derived_instance do |info|
492
+ info.install_vfunc_implementation(
493
+ :vfunc_return_value_and_multiple_out_parameters,
494
+ proc {|*args| [42, -142, 3] })
495
+ end
496
+ derived_instance.vfunc_return_value_and_multiple_out_parameters.
497
+ must_equal [42, -142, 3]
425
498
  end
499
+
426
500
  it "has a working method #vfunc_return_value_and_one_out_parameter" do
427
- skip "Needs vfunc setup"
501
+ derived_instance = make_derived_instance do |info|
502
+ info.install_vfunc_implementation(
503
+ :vfunc_return_value_and_one_out_parameter,
504
+ proc {|*args| [42, -142] })
505
+ end
506
+ derived_instance.vfunc_return_value_and_one_out_parameter.
507
+ must_equal [42, -142]
428
508
  end
509
+
429
510
  it "has a working method #vfunc_return_value_only" do
430
- skip "Needs vfunc setup"
511
+ derived_instance = make_derived_instance do |info|
512
+ info.install_vfunc_implementation :vfunc_return_value_only, proc {|obj| 0xdeadbeef }
513
+ end
514
+ result = derived_instance.vfunc_return_value_only
515
+ result.must_equal 0xdeadbeef
431
516
  end
517
+
432
518
  it "has a working method #vfunc_with_callback" do
433
519
  skip "Needs vfunc setup"
434
520
  end
435
521
 
436
522
  describe "its 'int' property" do
437
523
  it "can be retrieved with #get_property" do
438
- assert_equal 42, instance.get_property("int")
524
+ assert_equal 42, instance.get_property("int").get_value
439
525
  end
440
526
  it "can be retrieved with #int" do
441
527
  assert_equal 42, instance.int
442
528
  end
443
529
  it "can be set with #set_property" do
444
530
  instance.set_property("int", 13)
445
- assert_equal 13, instance.get_property("int")
531
+ assert_equal 13, instance.get_property("int").get_value
446
532
  end
447
533
  it "can be set with #int=" do
448
534
  instance.int = 1
@@ -536,7 +622,7 @@ describe GIMarshallingTests do
536
622
 
537
623
  describe "its 'some-boolean' property" do
538
624
  it "can be retrieved with #get_property" do
539
- instance.get_property("some-boolean").must_equal false
625
+ instance.get_property("some-boolean").get_value.must_equal false
540
626
  end
541
627
 
542
628
  it "can be retrieved with #some_boolean" do
@@ -545,12 +631,12 @@ describe GIMarshallingTests do
545
631
 
546
632
  it "can be set with #set_property" do
547
633
  instance.set_property("some-boolean", true)
548
- instance.get_property("some-boolean").must_equal true
634
+ instance.get_property("some-boolean").get_value.must_equal true
549
635
  end
550
636
 
551
637
  it "can be set with #some_boolean=" do
552
638
  instance.some_boolean = true
553
- instance.get_property("some-boolean").must_equal true
639
+ instance.get_property("some-boolean").get_value.must_equal true
554
640
  end
555
641
  end
556
642
 
@@ -562,21 +648,22 @@ describe GIMarshallingTests do
562
648
  end
563
649
 
564
650
  it "can be retrieved with #get_property" do
565
- instance.get_property("some-boxed-glist").must_equal nil
651
+ instance.get_property("some-boxed-glist").get_value.must_equal nil
566
652
  end
567
653
 
568
654
  it "can be retrieved with #some_boxed_glist" do
569
655
  instance.some_boxed_glist.must_equal nil
570
656
  end
571
657
 
572
- it "can be set with #set_property" do
573
- instance.set_property("some-boxed-glist", [1, 2, 3])
574
- instance.get_property("some-boxed-glist").to_a.must_equal [1, 2, 3]
658
+ it "can be set with #set_property_extended" do
659
+ instance.set_property_extended("some-boxed-glist", [1, 2, 3])
660
+ instance.some_boxed_glist.to_a.must_equal [1, 2, 3]
575
661
  end
576
662
 
577
663
  it "can be set with #some_boxed_glist=" do
578
664
  instance.some_boxed_glist = [1, 2, 3]
579
665
  instance.some_boxed_glist.to_a.must_equal [1, 2, 3]
666
+ instance.get_property_extended("some-boxed-glist").to_a.must_equal [1, 2, 3]
580
667
  end
581
668
  end
582
669
 
@@ -588,7 +675,7 @@ describe GIMarshallingTests do
588
675
  end
589
676
 
590
677
  it "can be retrieved with #get_property" do
591
- instance.get_property("some-boxed-struct").must_equal nil
678
+ instance.get_property("some-boxed-struct").get_value.must_equal nil
592
679
  end
593
680
 
594
681
  it "can be retrieved with #some_boxed_struct" do
@@ -599,7 +686,7 @@ describe GIMarshallingTests do
599
686
  boxed = GIMarshallingTests::BoxedStruct.new
600
687
  boxed.long_ = 42
601
688
  instance.set_property("some-boxed-struct", boxed)
602
- instance.get_property("some-boxed-struct").long_.must_equal 42
689
+ instance.get_property("some-boxed-struct").get_value.long_.must_equal 42
603
690
  end
604
691
 
605
692
  it "can be set with #some_boxed_struct=" do
@@ -612,7 +699,7 @@ describe GIMarshallingTests do
612
699
 
613
700
  describe "its 'some-char' property" do
614
701
  it "can be retrieved with #get_property" do
615
- instance.get_property("some-char").must_equal 0
702
+ instance.get_property("some-char").get_value.must_equal 0
616
703
  end
617
704
 
618
705
  it "can be retrieved with #some_char" do
@@ -621,7 +708,7 @@ describe GIMarshallingTests do
621
708
 
622
709
  it "can be set with #set_property" do
623
710
  instance.set_property "some-char", 42
624
- instance.get_property("some-char").must_equal 42
711
+ instance.get_property("some-char").get_value.must_equal 42
625
712
  end
626
713
 
627
714
  it "can be set with #some_char=" do
@@ -632,7 +719,7 @@ describe GIMarshallingTests do
632
719
 
633
720
  describe "its 'some-double' property" do
634
721
  it "can be retrieved with #get_property" do
635
- instance.get_property("some-double").must_equal 0.0
722
+ instance.get_property("some-double").get_value.must_equal 0.0
636
723
  end
637
724
 
638
725
  it "can be retrieved with #some_double" do
@@ -641,7 +728,7 @@ describe GIMarshallingTests do
641
728
 
642
729
  it "can be set with #set_property" do
643
730
  instance.set_property("some-double", 3.14)
644
- instance.get_property("some-double").must_equal 3.14
731
+ instance.get_property("some-double").get_value.must_equal 3.14
645
732
  end
646
733
 
647
734
  it "can be set with #some_double=" do
@@ -652,7 +739,7 @@ describe GIMarshallingTests do
652
739
 
653
740
  describe "its 'some-float' property" do
654
741
  it "can be retrieved with #get_property" do
655
- instance.get_property("some-float").must_equal 0.0
742
+ instance.get_property("some-float").get_value.must_equal 0.0
656
743
  end
657
744
 
658
745
  it "can be retrieved with #some_float" do
@@ -661,7 +748,7 @@ describe GIMarshallingTests do
661
748
 
662
749
  it "can be set with #set_property" do
663
750
  instance.set_property("some-float", 3.14)
664
- instance.get_property("some-float").must_be_close_to 3.14
751
+ instance.get_property("some-float").get_value.must_be_close_to 3.14
665
752
  end
666
753
 
667
754
  it "can be set with #some_float=" do
@@ -672,7 +759,7 @@ describe GIMarshallingTests do
672
759
 
673
760
  describe "its 'some-int' property" do
674
761
  it "can be retrieved with #get_property" do
675
- instance.get_property("some-int").must_equal 0
762
+ instance.get_property("some-int").get_value.must_equal 0
676
763
  end
677
764
 
678
765
  it "can be retrieved with #some_int" do
@@ -681,7 +768,7 @@ describe GIMarshallingTests do
681
768
 
682
769
  it "can be set with #set_property" do
683
770
  instance.set_property "some-int", 4242
684
- instance.get_property("some-int").must_equal 4242
771
+ instance.get_property("some-int").get_value.must_equal 4242
685
772
  end
686
773
 
687
774
  it "can be set with #some_int=" do
@@ -692,7 +779,7 @@ describe GIMarshallingTests do
692
779
 
693
780
  describe "its 'some-int64' property" do
694
781
  it "can be retrieved with #get_property" do
695
- instance.get_property("some-int64").must_equal 0
782
+ instance.get_property("some-int64").get_value.must_equal 0
696
783
  end
697
784
 
698
785
  it "can be retrieved with #some_int64" do
@@ -701,7 +788,7 @@ describe GIMarshallingTests do
701
788
 
702
789
  it "can be set with #set_property" do
703
790
  instance.set_property "some-int64", 42_000_000_000_000
704
- instance.get_property("some-int64").must_equal 42_000_000_000_000
791
+ instance.get_property("some-int64").get_value.must_equal 42_000_000_000_000
705
792
  end
706
793
 
707
794
  it "can be set with #some_int64=" do
@@ -712,7 +799,7 @@ describe GIMarshallingTests do
712
799
 
713
800
  describe "its 'some-long' property" do
714
801
  it "can be retrieved with #get_property" do
715
- instance.get_property("some-long").must_equal 0
802
+ instance.get_property("some-long").get_value.must_equal 0
716
803
  end
717
804
 
718
805
  it "can be retrieved with #some_long" do
@@ -721,7 +808,7 @@ describe GIMarshallingTests do
721
808
 
722
809
  it "can be set with #set_property" do
723
810
  instance.set_property "some-long", 4242
724
- instance.get_property("some-long").must_equal 4242
811
+ instance.get_property("some-long").get_value.must_equal 4242
725
812
  end
726
813
 
727
814
  it "can be set with #some_long=" do
@@ -738,7 +825,7 @@ describe GIMarshallingTests do
738
825
  end
739
826
 
740
827
  it "can be retrieved with #get_property" do
741
- instance.get_property("some-object").must_be_nil
828
+ instance.get_property("some-object").get_value.must_be_nil
742
829
  end
743
830
 
744
831
  it "can be retrieved with #some_object" do
@@ -748,7 +835,7 @@ describe GIMarshallingTests do
748
835
  it "can be set with #set_property" do
749
836
  ob = GIMarshallingTests::Object.new 42
750
837
  instance.set_property "some-object", ob
751
- instance.get_property("some-object").must_equal ob
838
+ instance.get_property("some-object").get_value.must_equal ob
752
839
  end
753
840
 
754
841
  it "can be set with #some_object=" do
@@ -766,16 +853,16 @@ describe GIMarshallingTests do
766
853
  end
767
854
 
768
855
  it "can be retrieved with #get_property" do
769
- instance.get_property("some-strv").must_be :==, []
856
+ instance.get_property("some-strv").get_value.must_be :==, []
770
857
  end
771
858
 
772
859
  it "can be retrieved with #some_strv" do
773
860
  instance.some_strv.must_be :==, []
774
861
  end
775
862
 
776
- it "can be set with #set_property" do
777
- instance.set_property("some-strv", ["foo", "bar"])
778
- instance.get_property("some-strv").must_be :==, ["foo", "bar"]
863
+ it "can be set with #set_property_extended" do
864
+ instance.set_property_extended("some-strv", ["foo", "bar"])
865
+ instance.get_property("some-strv").get_value.must_be :==, ["foo", "bar"]
779
866
  end
780
867
 
781
868
  it "can be set with #some_strv=" do
@@ -786,7 +873,7 @@ describe GIMarshallingTests do
786
873
 
787
874
  describe "its 'some-uchar' property" do
788
875
  it "can be retrieved with #get_property" do
789
- instance.get_property("some-uchar").must_equal 0
876
+ instance.get_property("some-uchar").get_value.must_equal 0
790
877
  end
791
878
 
792
879
  it "can be retrieved with #some_uchar" do
@@ -795,7 +882,7 @@ describe GIMarshallingTests do
795
882
 
796
883
  it "can be set with #set_property" do
797
884
  instance.set_property "some-uchar", 42
798
- instance.get_property("some-uchar").must_equal 42
885
+ instance.get_property("some-uchar").get_value.must_equal 42
799
886
  end
800
887
 
801
888
  it "can be set with #some_uchar=" do
@@ -806,7 +893,7 @@ describe GIMarshallingTests do
806
893
 
807
894
  describe "its 'some-uuint' property" do
808
895
  it "can be retrieved with #get_property" do
809
- instance.get_property("some-uint").must_equal 0
896
+ instance.get_property("some-uint").get_value.must_equal 0
810
897
  end
811
898
 
812
899
  it "can be retrieved with #some_uint" do
@@ -815,7 +902,7 @@ describe GIMarshallingTests do
815
902
 
816
903
  it "can be set with #set_property" do
817
904
  instance.set_property "some-uint", 4242
818
- instance.get_property("some-uint").must_equal 4242
905
+ instance.get_property("some-uint").get_value.must_equal 4242
819
906
  end
820
907
 
821
908
  it "can be set with #some_uint=" do
@@ -826,7 +913,7 @@ describe GIMarshallingTests do
826
913
 
827
914
  describe "its 'some-uint64' property" do
828
915
  it "can be retrieved with #get_property" do
829
- instance.get_property("some-uint64").must_equal 0
916
+ instance.get_property("some-uint64").get_value.must_equal 0
830
917
  end
831
918
 
832
919
  it "can be retrieved with #some_uint64" do
@@ -835,7 +922,7 @@ describe GIMarshallingTests do
835
922
 
836
923
  it "can be set with #set_property" do
837
924
  instance.set_property "some-uint64", 42_000_000_000_000
838
- instance.get_property("some-uint64").must_equal 42_000_000_000_000
925
+ instance.get_property("some-uint64").get_value.must_equal 42_000_000_000_000
839
926
  end
840
927
 
841
928
  it "can be set with #some_uint64=" do
@@ -846,7 +933,7 @@ describe GIMarshallingTests do
846
933
 
847
934
  describe "its 'some-ulong' property" do
848
935
  it "can be retrieved with #get_property" do
849
- instance.get_property("some-ulong").must_equal 0
936
+ instance.get_property("some-ulong").get_value.must_equal 0
850
937
  end
851
938
 
852
939
  it "can be retrieved with #some_ulong" do
@@ -855,7 +942,7 @@ describe GIMarshallingTests do
855
942
 
856
943
  it "can be set with #set_property" do
857
944
  instance.set_property "some-ulong", 4242
858
- instance.get_property("some-ulong").must_equal 4242
945
+ instance.get_property("some-ulong").get_value.must_equal 4242
859
946
  end
860
947
 
861
948
  it "can be set with #some_ulong=" do
@@ -872,7 +959,7 @@ describe GIMarshallingTests do
872
959
  end
873
960
 
874
961
  it "can be retrieved with #get_property" do
875
- instance.get_property("some-variant").must_be_nil
962
+ instance.get_property("some-variant").get_value.must_be_nil
876
963
  end
877
964
 
878
965
  it "can be retrieved with #some_variant" do
@@ -882,7 +969,7 @@ describe GIMarshallingTests do
882
969
  it "can be set with #set_property" do
883
970
  value = GLib::Variant.new_string("Foo")
884
971
  instance.set_property "some-variant", value
885
- instance.get_property("some-variant").must_equal value
972
+ instance.get_property("some-variant").get_value.must_equal value
886
973
  end
887
974
 
888
975
  it "can be set with #some_variant=" do
@@ -1299,19 +1386,29 @@ describe GIMarshallingTests do
1299
1386
  end
1300
1387
 
1301
1388
  it "has a working function #callback_multiple_out_parameters" do
1302
- skip "Out parameters for callbacks are not supported yet"
1389
+ result = GIMarshallingTests.callback_multiple_out_parameters proc { |*args|
1390
+ [12.0, 13.0]
1391
+ }
1392
+ result.must_equal [12.0, 13.0]
1303
1393
  end
1304
1394
 
1305
1395
  it "has a working function #callback_one_out_parameter" do
1306
- skip "Out parameters for callbacks are not supported yet"
1396
+ result = GIMarshallingTests.callback_one_out_parameter proc { 42.0 }
1397
+ result.must_equal 42.0
1307
1398
  end
1308
1399
 
1309
1400
  it "has a working function #callback_return_value_and_multiple_out_parameters" do
1310
- skip "Out parameters for callbacks are not supported yet"
1401
+ result = GIMarshallingTests.callback_return_value_and_multiple_out_parameters proc { |*args|
1402
+ [42, -142, 3]
1403
+ }
1404
+ result.must_equal [42, -142, 3]
1311
1405
  end
1312
1406
 
1313
1407
  it "has a working function #callback_return_value_and_one_out_parameter" do
1314
- skip "Out parameters for callbacks are not supported yet"
1408
+ result = GIMarshallingTests.callback_return_value_and_one_out_parameter proc { |*args|
1409
+ [42, -142]
1410
+ }
1411
+ result.must_equal [42, -142]
1315
1412
  end
1316
1413
 
1317
1414
  it "has a working function #callback_return_value_only" do
@@ -1906,6 +2003,13 @@ describe GIMarshallingTests do
1906
2003
  pass
1907
2004
  end
1908
2005
 
2006
+ it "has a working function #gvalue_in_with_modification" do
2007
+ skip unless get_introspection_data 'GIMarshallingTests', 'gvalue_in_with_modification'
2008
+ gv = GObject::Value.wrap_ruby_value(42)
2009
+ GIMarshallingTests.gvalue_in_with_modification gv
2010
+ gv.get_value.must_equal 24
2011
+ end
2012
+
1909
2013
  it "has a working function #gvalue_in_with_type" do
1910
2014
  gv = GObject::Value.new
1911
2015
  gv.init GIMarshallingTests::SubSubObject.get_gtype