gir_ffi 0.6.3 → 0.6.4

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 (67) hide show
  1. data/History.txt +11 -0
  2. data/README.md +24 -6
  3. data/lib/ffi-glib/ptr_array.rb +17 -1
  4. data/lib/ffi-glib/variant.rb +15 -0
  5. data/lib/ffi-glib.rb +1 -0
  6. data/lib/ffi-gobject/object.rb +1 -1
  7. data/lib/ffi-gobject/ruby_closure.rb +1 -1
  8. data/lib/ffi-gobject/value.rb +13 -3
  9. data/lib/ffi-gobject.rb +1 -2
  10. data/lib/ffi-gobject_introspection/i_enum_info.rb +14 -0
  11. data/lib/ffi-gobject_introspection/lib.rb +2 -0
  12. data/lib/gir_ffi/arg_helper.rb +2 -0
  13. data/lib/gir_ffi/argument_builder.rb +22 -21
  14. data/lib/gir_ffi/base_argument_builder.rb +2 -1
  15. data/lib/gir_ffi/builder/module.rb +2 -3
  16. data/lib/gir_ffi/builder/type/enum.rb +18 -1
  17. data/lib/gir_ffi/builder/type/object.rb +20 -18
  18. data/lib/gir_ffi/class_base.rb +0 -1
  19. data/lib/gir_ffi/enum_base.rb +25 -0
  20. data/lib/gir_ffi/ffi_ext.rb +1 -0
  21. data/lib/gir_ffi/function_builder.rb +50 -33
  22. data/lib/gir_ffi/in_out_pointer.rb +0 -5
  23. data/lib/gir_ffi/in_pointer.rb +7 -5
  24. data/lib/gir_ffi/info_ext/i_callable_info.rb +4 -0
  25. data/lib/gir_ffi/info_ext/i_enum_info.rb +13 -0
  26. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  27. data/lib/gir_ffi/info_ext/i_object_info.rb +11 -0
  28. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +11 -0
  29. data/lib/gir_ffi/info_ext/i_struct_info.rb +11 -0
  30. data/lib/gir_ffi/info_ext/i_type_info.rb +10 -19
  31. data/lib/gir_ffi/info_ext/i_union_info.rb +12 -0
  32. data/lib/gir_ffi/info_ext/safe_constant_name.rb +0 -2
  33. data/lib/gir_ffi/info_ext.rb +4 -0
  34. data/lib/gir_ffi/interface_base.rb +0 -1
  35. data/lib/gir_ffi/return_value_builder.rb +3 -2
  36. data/lib/gir_ffi/type_map.rb +3 -0
  37. data/lib/gir_ffi/version.rb +1 -1
  38. data/lib/gir_ffi/zero_terminated.rb +36 -3
  39. data/lib/gir_ffi-base/gir_ffi/library.rb +17 -0
  40. data/lib/gir_ffi-base/gobject/lib.rb +2 -2
  41. data/lib/gir_ffi.rb +1 -0
  42. data/tasks/test.rake +1 -0
  43. data/test/base_test_helper.rb +22 -2
  44. data/test/ffi-glib/ruby_closure_test.rb +1 -1
  45. data/test/ffi-glib/variant_test.rb +10 -0
  46. data/test/ffi-gobject/value_test.rb +24 -8
  47. data/test/ffi-gobject_introspection/i_enum_info_test.rb +17 -0
  48. data/test/gir_ffi/argument_builder_test.rb +66 -24
  49. data/test/gir_ffi/builder_test.rb +1 -1
  50. data/test/gir_ffi/function_builder_test.rb +1 -3
  51. data/test/gir_ffi/in_out_pointer_test.rb +5 -3
  52. data/test/gir_ffi/in_pointer_test.rb +32 -2
  53. data/test/gir_ffi/info_ext/i_arg_info_test.rb +2 -2
  54. data/test/gir_ffi/info_ext/i_callable_info_test.rb +2 -2
  55. data/test/gir_ffi/info_ext/i_field_info_test.rb +14 -20
  56. data/test/gir_ffi/info_ext/i_function_info_test.rb +2 -2
  57. data/test/gir_ffi/info_ext/i_signal_info_test.rb +2 -2
  58. data/test/gir_ffi/info_ext/i_type_info_test.rb +8 -8
  59. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
  60. data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
  61. data/test/gir_ffi/return_value_builder_test.rb +18 -1
  62. data/test/gir_ffi/zero_terminated_test.rb +10 -0
  63. data/test/gir_ffi_test_helper.rb +0 -19
  64. data/test/integration/generated_gimarshallingtests_test.rb +291 -99
  65. data/test/integration/generated_regress_test.rb +138 -14
  66. data/test/lib/autogen.sh +6 -2
  67. metadata +14 -2
@@ -125,19 +125,26 @@ describe GIMarshallingTests do
125
125
  end
126
126
 
127
127
  it "has a working function #in" do
128
- skip "methods on enums are not supported yet"
128
+ GIMarshallingTests::Flags.in :value2
129
129
  end
130
+
130
131
  it "has a working function #in_zero" do
131
- skip "methods on enums are not supported yet"
132
+ GIMarshallingTests::Flags.in_zero 0
132
133
  end
134
+
133
135
  it "has a working function #inout" do
134
- skip "methods on enums are not supported yet"
136
+ result = GIMarshallingTests::Flags.inout :value2
137
+ result.must_equal :value1
135
138
  end
139
+
136
140
  it "has a working function #out" do
137
- skip "methods on enums are not supported yet"
141
+ result = GIMarshallingTests::Flags.out
142
+ result.must_equal :value2
138
143
  end
144
+
139
145
  it "has a working function #returnv" do
140
- skip "methods on enums are not supported yet"
146
+ result = GIMarshallingTests::Flags.returnv
147
+ result.must_equal :value2
141
148
  end
142
149
  end
143
150
 
@@ -145,41 +152,50 @@ describe GIMarshallingTests do
145
152
  it "has the member :value1" do
146
153
  assert_equal 0, GIMarshallingTests::GEnum[:value1]
147
154
  end
155
+
148
156
  it "has the member :value2" do
149
157
  assert_equal 1, GIMarshallingTests::GEnum[:value2]
150
158
  end
159
+
151
160
  it "has the member :value3" do
152
161
  assert_equal 42, GIMarshallingTests::GEnum[:value3]
153
162
  end
163
+
154
164
  it "has a working function #in" do
155
- skip "methods on enums are not supported yet"
165
+ GIMarshallingTests::GEnum.in :value3
156
166
  end
167
+
157
168
  it "has a working function #inout" do
158
- skip "methods on enums are not supported yet"
169
+ result = GIMarshallingTests::GEnum.inout :value3
170
+ result.must_equal :value1
159
171
  end
172
+
160
173
  it "has a working function #out" do
161
- skip "methods on enums are not supported yet"
174
+ result = GIMarshallingTests::GEnum.out
175
+ result.must_equal :value3
162
176
  end
177
+
163
178
  it "has a working function #returnv" do
164
- skip "methods on enums are not supported yet"
179
+ result = GIMarshallingTests::GEnum.returnv
180
+ result.must_equal :value3
165
181
  end
166
182
  end
167
183
 
168
184
  describe "GIMarshallingTests::Interface" do
169
185
  it "has a working method #test_int8_in" do
170
- skip
186
+ skip "Interfaces cannot be tested directly"
171
187
  end
172
188
  end
173
189
 
174
190
  describe "GIMarshallingTests::Interface2" do
175
191
  it "must be tested" do
176
- skip
192
+ skip "Interfaces cannot be tested directly"
177
193
  end
178
194
  end
179
195
 
180
196
  describe "GIMarshallingTests::Interface3" do
181
197
  it "has a working method #test_variant_array_in" do
182
- skip
198
+ skip "Interfaces cannot be tested directly"
183
199
  end
184
200
  end
185
201
 
@@ -280,6 +296,24 @@ describe GIMarshallingTests do
280
296
  skip "This function is only found in the header"
281
297
  end
282
298
 
299
+ it "has a working method #get_ref_info_for_vfunc_in_object_transfer_full" do
300
+ skip "Needs vfunc setup"
301
+ end
302
+ it "has a working method #get_ref_info_for_vfunc_in_object_transfer_none" do
303
+ skip "Needs vfunc setup"
304
+ end
305
+ it "has a working method #get_ref_info_for_vfunc_out_object_transfer_full" do
306
+ skip "Needs vfunc setup"
307
+ end
308
+ it "has a working method #get_ref_info_for_vfunc_out_object_transfer_none" do
309
+ skip "Needs vfunc setup"
310
+ end
311
+ it "has a working method #get_ref_info_for_vfunc_return_object_transfer_full" do
312
+ skip "Needs vfunc setup"
313
+ end
314
+ it "has a working method #get_ref_info_for_vfunc_return_object_transfer_none" do
315
+ skip "Needs vfunc setup"
316
+ end
283
317
  it "has a working method #int8_in" do
284
318
  skip "Needs vfunc setup"
285
319
  end
@@ -314,6 +348,14 @@ describe GIMarshallingTests do
314
348
  assert_equal [-1, 0, 1, 2], res.to_a
315
349
  end
316
350
 
351
+ it "has a working method #method_int8_arg_and_out_callee" do
352
+ skip "Needs vfunc setup"
353
+ end
354
+
355
+ it "has a working method #method_int8_arg_and_out_caller" do
356
+ skip "Needs vfunc setup"
357
+ end
358
+
317
359
  it "has a working method #method_int8_in" do
318
360
  skip "Needs vfunc setup"
319
361
  end
@@ -322,6 +364,10 @@ describe GIMarshallingTests do
322
364
  skip "Needs vfunc setup"
323
365
  end
324
366
 
367
+ it "has a working method #method_str_arg_out_ret" do
368
+ skip "Needs vfunc setup"
369
+ end
370
+
325
371
  it "has a working method #method_variant_array_in" do
326
372
  skip "Needs vfunc setup"
327
373
  end
@@ -342,6 +388,10 @@ describe GIMarshallingTests do
342
388
  pass
343
389
  end
344
390
 
391
+ it "has a working method #vfunc_array_out_parameter" do
392
+ skip "Needs vfunc setup"
393
+ end
394
+
345
395
  it "has a working method #vfunc_caller_allocated_out_parameter" do
346
396
  skip "Needs vfunc setup"
347
397
  end
@@ -354,6 +404,12 @@ describe GIMarshallingTests do
354
404
  it "has a working method #vfunc_one_out_parameter" do
355
405
  skip "Needs vfunc setup"
356
406
  end
407
+ it "has a working method #vfunc_out_enum" do
408
+ skip "Needs vfunc setup"
409
+ end
410
+ it "has a working method #vfunc_return_enum" do
411
+ skip "Needs vfunc setup"
412
+ end
357
413
  it "has a working method #vfunc_return_value_and_multiple_out_parameters" do
358
414
  skip "Needs vfunc setup"
359
415
  end
@@ -643,22 +699,33 @@ describe GIMarshallingTests do
643
699
  end
644
700
 
645
701
  it "has a working function #array_gvariant_container_in" do
646
- skip
702
+ v1 = GLib::Variant.new_int32(27)
703
+ v2 = GLib::Variant.new_string("Hello")
704
+ result = GIMarshallingTests.array_gvariant_container_in [v1, v2]
705
+ arr = result.to_a
706
+ arr.size.must_equal 2
707
+ arr[0].get_int32.must_equal 27
708
+ arr[1].get_string.must_equal "Hello"
647
709
  end
710
+
648
711
  it "has a working function #array_gvariant_full_in" do
649
- skip
712
+ v1 = GLib::Variant.new_int32(27)
713
+ v2 = GLib::Variant.new_string("Hello")
714
+ result = GIMarshallingTests.array_gvariant_full_in [v1, v2]
715
+ arr = result.to_a
716
+ arr.size.must_equal 2
717
+ arr[0].get_int32.must_equal 27
718
+ arr[1].get_string.must_equal "Hello"
650
719
  end
651
720
 
652
721
  it "has a working function #array_gvariant_none_in" do
653
- skip "Test was disabled the return value was never correct"
654
722
  v1 = GLib::Variant.new_int32(27)
655
723
  v2 = GLib::Variant.new_string("Hello")
656
- GIMarshallingTests.array_gvariant_none_in [v1, v2]
657
-
658
- pass
659
- # TODO: Can we determine that result should be an array?
660
- # assert_equal 27, res[0].get_int32
661
- # assert_equal "Hello", res[1].get_string
724
+ result = GIMarshallingTests.array_gvariant_none_in [v1, v2]
725
+ arr = result.to_a
726
+ arr.size.must_equal 2
727
+ arr[0].get_int32.must_equal 27
728
+ arr[1].get_string.must_equal "Hello"
662
729
  end
663
730
 
664
731
  it "has a working function #array_in" do
@@ -667,19 +734,29 @@ describe GIMarshallingTests do
667
734
  end
668
735
 
669
736
  it "has a working function #array_in_guint64_len" do
670
- skip
737
+ GIMarshallingTests.array_in_guint64_len [-1, 0, 1, 2]
738
+ pass
671
739
  end
740
+
672
741
  it "has a working function #array_in_guint8_len" do
673
- skip
742
+ GIMarshallingTests.array_in_guint8_len [-1, 0, 1, 2]
743
+ pass
674
744
  end
745
+
675
746
  it "has a working function #array_in_len_before" do
676
- skip
747
+ GIMarshallingTests.array_in_len_before [-1, 0, 1, 2]
748
+ pass
677
749
  end
750
+
678
751
  it "has a working function #array_in_len_zero_terminated" do
679
- skip
752
+ GIMarshallingTests.array_in_len_zero_terminated [-1, 0, 1, 2]
753
+ pass
680
754
  end
755
+
681
756
  it "has a working function #array_in_nonzero_nonlen" do
682
- skip
757
+ skip unless get_introspection_data 'GIMarshallingTests', 'array_in_nonzero_nonlen'
758
+ GIMarshallingTests.array_in_nonzero_nonlen 1, 'abcd'.bytes.to_a
759
+ pass
683
760
  end
684
761
 
685
762
  it "has a working function #array_inout" do
@@ -688,7 +765,9 @@ describe GIMarshallingTests do
688
765
  end
689
766
 
690
767
  it "has a working function #array_inout_etc" do
691
- skip
768
+ arr, sum = GIMarshallingTests.array_inout_etc 42, [-1, 0, 1, 2], 24
769
+ arr.to_a.must_equal [42, -1, 0, 1, 24]
770
+ sum.must_equal 42 + 24
692
771
  end
693
772
 
694
773
  it "has a working function #array_out" do
@@ -697,7 +776,9 @@ describe GIMarshallingTests do
697
776
  end
698
777
 
699
778
  it "has a working function #array_out_etc" do
700
- skip
779
+ arr, sum = GIMarshallingTests.array_out_etc 42, 24
780
+ arr.to_a.must_equal [42, 0, 1, 24]
781
+ sum.must_equal 42 + 24
701
782
  end
702
783
 
703
784
  it "has a working function #array_return" do
@@ -706,10 +787,13 @@ describe GIMarshallingTests do
706
787
  end
707
788
 
708
789
  it "has a working function #array_return_etc" do
709
- skip
790
+ arr, sum = GIMarshallingTests.array_return_etc 42, 24
791
+ arr.to_a.must_equal [42, 0, 1, 24]
792
+ sum.must_equal 42 + 24
710
793
  end
794
+
711
795
  it "has a working function #array_simple_struct_in" do
712
- skip
796
+ skip "Non-pointer arrays of complex types are not supported yet"
713
797
  end
714
798
 
715
799
  it "has a working function #array_string_in" do
@@ -718,10 +802,22 @@ describe GIMarshallingTests do
718
802
  end
719
803
 
720
804
  it "has a working function #array_struct_in" do
721
- skip
805
+ arr = [1, 2, 3].map { |val|
806
+ GIMarshallingTests::BoxedStruct.new.tap { |struct| struct.long_ = val }
807
+ }
808
+ GIMarshallingTests.array_struct_in arr
722
809
  end
810
+
811
+ # NOTE: Should be run with valgrind. See gimarhallingtests.c.
723
812
  it "has a working function #array_struct_take_in" do
724
- skip
813
+ arr = [1, 2, 3].map { |val|
814
+ GIMarshallingTests::BoxedStruct.new.tap { |struct| struct.long_ = val }
815
+ }
816
+ GIMarshallingTests.array_struct_take_in arr
817
+ end
818
+
819
+ it "has a working function #array_struct_value_in" do
820
+ skip "Non-pointer arrays of complex types are not supported yet"
725
821
  end
726
822
 
727
823
  it "has a working function #array_uint8_in" do
@@ -736,7 +832,8 @@ describe GIMarshallingTests do
736
832
  end
737
833
 
738
834
  it "has a working function #array_zero_terminated_inout" do
739
- skip
835
+ res = GIMarshallingTests.array_zero_terminated_inout ["0", "1", "2"]
836
+ res.to_a.must_equal ["-1", "0", "1", "2"]
740
837
  end
741
838
 
742
839
  it "has a working function #array_zero_terminated_out" do
@@ -750,10 +847,13 @@ describe GIMarshallingTests do
750
847
  end
751
848
 
752
849
  it "has a working function #array_zero_terminated_return_null" do
753
- skip
850
+ res = GIMarshallingTests.array_zero_terminated_return_null
851
+ res.to_a.must_equal []
754
852
  end
853
+
755
854
  it "has a working function #array_zero_terminated_return_struct" do
756
- skip
855
+ res = GIMarshallingTests.array_zero_terminated_return_struct
856
+ res.to_a.map(&:long_).must_equal [42, 43, 44]
757
857
  end
758
858
 
759
859
  it "has a working function #boolean_in_false" do
@@ -831,19 +931,24 @@ describe GIMarshallingTests do
831
931
  end
832
932
 
833
933
  it "has a working function #callback_multiple_out_parameters" do
834
- skip
934
+ skip "Out parameters for callbacks are not supported yet"
835
935
  end
936
+
836
937
  it "has a working function #callback_one_out_parameter" do
837
- skip
938
+ skip "Out parameters for callbacks are not supported yet"
838
939
  end
940
+
839
941
  it "has a working function #callback_return_value_and_multiple_out_parameters" do
840
- skip
942
+ skip "Out parameters for callbacks are not supported yet"
841
943
  end
944
+
842
945
  it "has a working function #callback_return_value_and_one_out_parameter" do
843
- skip
946
+ skip "Out parameters for callbacks are not supported yet"
844
947
  end
948
+
845
949
  it "has a working function #callback_return_value_only" do
846
- skip
950
+ result = GIMarshallingTests.callback_return_value_only lambda { 42 }
951
+ result.must_equal 42
847
952
  end
848
953
 
849
954
  it "has a working function #double_in" do
@@ -941,8 +1046,7 @@ describe GIMarshallingTests do
941
1046
  end
942
1047
 
943
1048
  it "has a working function #garray_int_none_in" do
944
- arr = GLib::Array.new :int
945
- arr.append_vals [-1, 0, 1, 2]
1049
+ arr = [-1, 0, 1, 2]
946
1050
  GIMarshallingTests.garray_int_none_in arr
947
1051
  pass
948
1052
  end
@@ -953,13 +1057,20 @@ describe GIMarshallingTests do
953
1057
  end
954
1058
 
955
1059
  it "has a working function #garray_uint64_none_in" do
956
- skip
1060
+ skip unless get_introspection_data 'GIMarshallingTests', 'garray_uint64_none_in'
1061
+ GIMarshallingTests.garray_uint64_none_in [0, 0xffff_ffff_ffff_ffff]
1062
+ pass
957
1063
  end
1064
+
958
1065
  it "has a working function #garray_uint64_none_return" do
959
- skip
1066
+ skip unless get_introspection_data 'GIMarshallingTests', 'garray_uint64_none_return'
1067
+ res = GIMarshallingTests.garray_uint64_none_return
1068
+ res.to_a.must_equal [0, 0xffff_ffff_ffff_ffff]
960
1069
  end
1070
+
961
1071
  it "has a working function #garray_utf8_container_inout" do
962
- skip
1072
+ res = GIMarshallingTests.garray_utf8_container_inout ["0", "1", "2"]
1073
+ res.to_a.must_equal ["-2", "-1", "0", "1"]
963
1074
  end
964
1075
 
965
1076
  it "has a working function #garray_utf8_container_out" do
@@ -972,10 +1083,8 @@ describe GIMarshallingTests do
972
1083
  assert_equal ["0", "1", "2"], res.to_a
973
1084
  end
974
1085
 
975
- # TODO: Allow regular arrays as arguments directly.
976
1086
  it "has a working function #garray_utf8_full_inout" do
977
- arr = GLib::Array.new :utf8
978
- arr.append_vals ["0", "1", "2"]
1087
+ arr = ["0", "1", "2"]
979
1088
  res = GIMarshallingTests.garray_utf8_full_inout arr
980
1089
  assert_equal ["-2", "-1", "0", "1"], res.to_a
981
1090
  end
@@ -985,21 +1094,26 @@ describe GIMarshallingTests do
985
1094
  assert_equal ["0", "1", "2"], res.to_a
986
1095
  end
987
1096
 
1097
+ it "has a working function #garray_utf8_full_out_caller_allocated" do
1098
+ skip unless get_introspection_data 'GIMarshallingTests',
1099
+ 'garray_utf8_full_out_caller_allocated'
1100
+ res = GIMarshallingTests.garray_utf8_full_out_caller_allocated
1101
+ assert_equal ["0", "1", "2"], res.to_a
1102
+ end
1103
+
988
1104
  it "has a working function #garray_utf8_full_return" do
989
1105
  res = GIMarshallingTests.garray_utf8_full_return
990
1106
  assert_equal ["0", "1", "2"], res.to_a
991
1107
  end
992
1108
 
993
1109
  it "has a working function #garray_utf8_none_in" do
994
- arr = GLib::Array.new :utf8
995
- arr.append_vals ["0", "1", "2"]
1110
+ arr = ["0", "1", "2"]
996
1111
  GIMarshallingTests.garray_utf8_none_in arr
997
1112
  pass
998
1113
  end
999
1114
 
1000
1115
  it "has a working function #garray_utf8_none_inout" do
1001
- arr = GLib::Array.new :utf8
1002
- arr.append_vals ["0", "1", "2"]
1116
+ arr = ["0", "1", "2"]
1003
1117
  res = GIMarshallingTests.garray_utf8_none_inout arr
1004
1118
  assert_equal ["-2", "-1", "0", "1"], res.to_a
1005
1119
  end
@@ -1014,6 +1128,13 @@ describe GIMarshallingTests do
1014
1128
  assert_equal ["0", "1", "2"], res.to_a
1015
1129
  end
1016
1130
 
1131
+ it "has a working function #gbytes_full_return" do
1132
+ skip "GBytes is not supported yet"
1133
+ end
1134
+ it "has a working function #gbytes_none_in" do
1135
+ skip "GBytes is not supported yet"
1136
+ end
1137
+
1017
1138
  it "has a working function #gclosure_in" do
1018
1139
  cl = GObject::RubyClosure.new { 42 }
1019
1140
  GIMarshallingTests.gclosure_in cl
@@ -1023,7 +1144,7 @@ describe GIMarshallingTests do
1023
1144
  cl = GIMarshallingTests.gclosure_return
1024
1145
  gv = GObject::Value.wrap_ruby_value 0
1025
1146
  cl.invoke gv, nil, nil
1026
- assert_equal 42, gv.ruby_value
1147
+ assert_equal 42, gv.get_value
1027
1148
  end
1028
1149
 
1029
1150
  it "has a working function #genum_in" do
@@ -1049,27 +1170,36 @@ describe GIMarshallingTests do
1049
1170
  it "has a working function #gerror" do
1050
1171
  begin
1051
1172
  GIMarshallingTests.gerror
1173
+ flunk "Error should have been raised"
1052
1174
  rescue RuntimeError => e
1053
- assert_equal "gi-marshalling-tests-gerror-message", e.message
1175
+ e.message.must_equal GIMarshallingTests::CONSTANT_GERROR_MESSAGE
1054
1176
  end
1055
1177
  end
1056
1178
 
1057
1179
  it "has a working function #gerror_array_in" do
1058
1180
  begin
1059
1181
  GIMarshallingTests.gerror_array_in [1, 2, 3]
1182
+ flunk "Error should have been raised"
1060
1183
  rescue RuntimeError => e
1061
- assert_equal "gi-marshalling-tests-gerror-message", e.message
1184
+ e.message.must_equal GIMarshallingTests::CONSTANT_GERROR_MESSAGE
1062
1185
  end
1063
1186
  end
1064
1187
 
1065
1188
  it "has a working function #gerror_out" do
1066
- skip
1189
+ error, debug = GIMarshallingTests.gerror_out
1190
+ debug.must_equal GIMarshallingTests::CONSTANT_GERROR_DEBUG_MESSAGE
1191
+ error.message.must_equal GIMarshallingTests::CONSTANT_GERROR_MESSAGE
1067
1192
  end
1193
+
1068
1194
  it "has a working function #gerror_out_transfer_none" do
1069
- skip
1195
+ error, debug = GIMarshallingTests.gerror_out_transfer_none
1196
+ debug.must_equal GIMarshallingTests::CONSTANT_GERROR_DEBUG_MESSAGE
1197
+ error.message.must_equal GIMarshallingTests::CONSTANT_GERROR_MESSAGE
1070
1198
  end
1199
+
1071
1200
  it "has a working function #gerror_return" do
1072
- skip
1201
+ error = GIMarshallingTests.gerror_return
1202
+ error.message.must_equal GIMarshallingTests::CONSTANT_GERROR_MESSAGE
1073
1203
  end
1074
1204
 
1075
1205
  it "has a working function #ghashtable_int_none_in" do
@@ -1161,10 +1291,15 @@ describe GIMarshallingTests do
1161
1291
  end
1162
1292
 
1163
1293
  it "has a working function #glist_uint32_none_in" do
1164
- skip
1294
+ skip unless get_introspection_data 'GIMarshallingTests', 'glist_uint32_none_in'
1295
+ GIMarshallingTests.glist_uint32_none_in [0, 0xffff_ffff]
1296
+ pass
1165
1297
  end
1298
+
1166
1299
  it "has a working function #glist_uint32_none_return" do
1167
- skip
1300
+ skip unless get_introspection_data 'GIMarshallingTests', 'glist_uint32_none_return'
1301
+ res = GIMarshallingTests.glist_uint32_none_return
1302
+ res.to_a.must_equal [0, 0xffff_ffff]
1168
1303
  end
1169
1304
 
1170
1305
  it "has a working function #glist_utf8_container_inout" do
@@ -1217,34 +1352,52 @@ describe GIMarshallingTests do
1217
1352
  end
1218
1353
 
1219
1354
  it "has a working function #gptrarray_utf8_container_inout" do
1220
- skip
1355
+ res = GIMarshallingTests.gptrarray_utf8_container_inout ["0", "1", "2"]
1356
+ res.to_a.must_equal ["-2", "-1", "0", "1"]
1221
1357
  end
1358
+
1222
1359
  it "has a working function #gptrarray_utf8_container_out" do
1223
- skip
1360
+ res = GIMarshallingTests.gptrarray_utf8_container_out
1361
+ res.to_a.must_equal ["0", "1", "2"]
1224
1362
  end
1363
+
1225
1364
  it "has a working function #gptrarray_utf8_container_return" do
1226
- skip
1365
+ res = GIMarshallingTests.gptrarray_utf8_container_return
1366
+ res.to_a.must_equal ["0", "1", "2"]
1227
1367
  end
1368
+
1228
1369
  it "has a working function #gptrarray_utf8_full_inout" do
1229
- skip
1370
+ res = GIMarshallingTests.gptrarray_utf8_full_inout ["0", "1", "2"]
1371
+ res.to_a.must_equal ["-2", "-1", "0", "1"]
1230
1372
  end
1373
+
1231
1374
  it "has a working function #gptrarray_utf8_full_out" do
1232
- skip
1375
+ res = GIMarshallingTests.gptrarray_utf8_full_out
1376
+ res.to_a.must_equal ["0", "1", "2"]
1233
1377
  end
1378
+
1234
1379
  it "has a working function #gptrarray_utf8_full_return" do
1235
- skip
1380
+ res = GIMarshallingTests.gptrarray_utf8_full_return
1381
+ res.to_a.must_equal ["0", "1", "2"]
1236
1382
  end
1383
+
1237
1384
  it "has a working function #gptrarray_utf8_none_in" do
1238
- skip
1385
+ GIMarshallingTests.gptrarray_utf8_none_in ["0", "1", "2"]
1239
1386
  end
1387
+
1240
1388
  it "has a working function #gptrarray_utf8_none_inout" do
1241
- skip
1389
+ res = GIMarshallingTests.gptrarray_utf8_none_inout ["0", "1", "2"]
1390
+ res.to_a.must_equal ["-2", "-1", "0", "1"]
1242
1391
  end
1392
+
1243
1393
  it "has a working function #gptrarray_utf8_none_out" do
1244
- skip
1394
+ res = GIMarshallingTests.gptrarray_utf8_none_out
1395
+ res.to_a.must_equal ["0", "1", "2"]
1245
1396
  end
1397
+
1246
1398
  it "has a working function #gptrarray_utf8_none_return" do
1247
- skip
1399
+ res = GIMarshallingTests.gptrarray_utf8_none_return
1400
+ res.to_a.must_equal ["0", "1", "2"]
1248
1401
  end
1249
1402
 
1250
1403
  it "has a working function #gslist_int_none_in" do
@@ -1328,42 +1481,46 @@ describe GIMarshallingTests do
1328
1481
  end
1329
1482
 
1330
1483
  it "has a working function #gtype_in" do
1331
- skip
1484
+ GIMarshallingTests.gtype_in GObject::TYPE_NONE
1485
+ pass
1332
1486
  end
1333
1487
 
1334
1488
  it "has a working function #gtype_inout" do
1335
- none = GObject.type_from_name "void"
1336
- res = GIMarshallingTests.gtype_inout none
1337
- name = GObject.type_name res
1338
- assert_equal "gint", name
1489
+ res = GIMarshallingTests.gtype_inout GObject::TYPE_NONE
1490
+ res.must_equal GObject::TYPE_INT
1339
1491
  end
1340
1492
 
1341
1493
  it "has a working function #gtype_out" do
1342
1494
  res = GIMarshallingTests.gtype_out
1343
- name = GObject.type_name res
1344
- assert_equal "void", name
1495
+ res.must_equal GObject::TYPE_NONE
1345
1496
  end
1346
1497
 
1347
1498
  it "has a working function #gtype_return" do
1348
1499
  res = GIMarshallingTests.gtype_return
1349
- name = GObject.type_name res
1350
- assert_equal "void", name
1500
+ res.must_equal GObject::TYPE_NONE
1351
1501
  end
1352
1502
 
1353
1503
  it "has a working function #gtype_string_in" do
1354
- skip
1504
+ GIMarshallingTests.gtype_string_in GObject::TYPE_STRING
1505
+ pass
1355
1506
  end
1507
+
1356
1508
  it "has a working function #gtype_string_out" do
1357
- skip
1509
+ res = GIMarshallingTests.gtype_string_out
1510
+ res.must_equal GObject::TYPE_STRING
1358
1511
  end
1512
+
1359
1513
  it "has a working function #gtype_string_return" do
1360
- skip
1514
+ res = GIMarshallingTests.gtype_string_return
1515
+ res.must_equal GObject::TYPE_STRING
1361
1516
  end
1517
+
1362
1518
  it "has a working function #gvalue_flat_array" do
1363
- skip
1519
+ skip "Non-pointer arrays of complex types are not supported yet"
1364
1520
  end
1521
+
1365
1522
  it "has a working function #gvalue_flat_array_round_trip" do
1366
- skip
1523
+ skip "Non-pointer arrays of complex types are not supported yet"
1367
1524
  end
1368
1525
 
1369
1526
  it "has a working function #gvalue_in" do
@@ -1381,40 +1538,54 @@ describe GIMarshallingTests do
1381
1538
  end
1382
1539
 
1383
1540
  it "has a working function #gvalue_in_with_type" do
1384
- skip
1541
+ gv = GObject::Value.new
1542
+ gv.init GIMarshallingTests::SubSubObject.get_gtype
1543
+ GIMarshallingTests.gvalue_in_with_type gv, GIMarshallingTests::Object.get_gtype
1385
1544
  end
1386
1545
 
1387
1546
  it "has a working function #gvalue_inout" do
1388
1547
  res = GIMarshallingTests.gvalue_inout GObject::Value.wrap_ruby_value(42)
1389
- assert_equal "42", res.ruby_value
1548
+ assert_equal "42", res.get_value
1390
1549
 
1391
1550
  res = GIMarshallingTests.gvalue_inout 42
1392
- assert_equal "42", res.ruby_value
1551
+ assert_equal "42", res.get_value
1393
1552
  end
1394
1553
 
1395
1554
  it "has a working function #gvalue_int64_in" do
1396
- skip
1555
+ skip unless get_introspection_data 'GIMarshallingTests', 'gvalue_int64_in'
1556
+ gv = GObject::Value.new
1557
+ gv.init GObject::TYPE_INT64
1558
+ gv.set_value 0x7fff_ffff_ffff_ffff
1559
+ GIMarshallingTests.gvalue_int64_in gv
1560
+ pass
1397
1561
  end
1562
+
1398
1563
  it "has a working function #gvalue_int64_out" do
1399
- skip
1564
+ skip unless get_introspection_data 'GIMarshallingTests', 'gvalue_int64_out'
1565
+ gv = GIMarshallingTests.gvalue_int64_out
1566
+ gv.get_value.must_equal 0x7fff_ffff_ffff_ffff
1400
1567
  end
1401
1568
 
1402
1569
  it "has a working function #gvalue_out" do
1403
1570
  res = GIMarshallingTests.gvalue_out
1404
- assert_equal 42, res.ruby_value
1571
+ assert_equal 42, res.get_value
1405
1572
  end
1406
1573
 
1407
1574
  it "has a working function #gvalue_out_caller_allocates" do
1408
- skip
1575
+ skip unless get_introspection_data 'GIMarshallingTests', 'gvalue_out_caller_allocates'
1576
+ res = GIMarshallingTests.gvalue_out_caller_allocates
1577
+ res.get_value.must_equal 42
1409
1578
  end
1410
1579
 
1411
1580
  it "has a working function #gvalue_return" do
1412
1581
  res = GIMarshallingTests.gvalue_return
1413
- assert_equal 42, res.ruby_value
1582
+ assert_equal 42, res.get_value
1414
1583
  end
1415
1584
 
1416
1585
  it "has a working function #init_function" do
1417
- skip
1586
+ res, arr = GIMarshallingTests.init_function ["foo", "bar", "baz"]
1587
+ res.must_equal true
1588
+ arr.to_a.must_equal ["foo", "bar"]
1418
1589
  end
1419
1590
 
1420
1591
  it "has a working function #int16_in_max" do
@@ -1673,7 +1844,7 @@ describe GIMarshallingTests do
1673
1844
  end
1674
1845
 
1675
1846
  it "has a working function #multi_array_key_value_in" do
1676
- skip
1847
+ skip "Non-pointer arrays of complex types are not supported yet"
1677
1848
  end
1678
1849
 
1679
1850
  it "has a working function #no_type_flags_in" do
@@ -1702,13 +1873,28 @@ describe GIMarshallingTests do
1702
1873
  end
1703
1874
 
1704
1875
  it "has a working function #overrides_struct_returnv" do
1705
- skip
1876
+ res = GIMarshallingTests.overrides_struct_returnv
1877
+ res.must_be_instance_of GIMarshallingTests::OverridesStruct
1878
+ end
1879
+
1880
+ it "has a working function #param_spec_in_bool" do
1881
+ skip "param_spec_in_bool tests the wrong type"
1882
+ ps = GObject.param_spec_boolean "mybool", "nick", "blurb", true, :readable
1883
+ GIMarshallingTests.param_spec_in_bool ps
1706
1884
  end
1885
+
1707
1886
  it "has a working function #param_spec_out" do
1708
- skip
1887
+ skip unless get_introspection_data 'GIMarshallingTests', 'param_spec_out'
1888
+ res = GIMarshallingTests.param_spec_out
1889
+ res.value_type.must_equal GObject::TYPE_STRING
1890
+ res.get_name.must_equal "test-param"
1709
1891
  end
1892
+
1710
1893
  it "has a working function #param_spec_return" do
1711
- skip
1894
+ skip unless get_introspection_data 'GIMarshallingTests', 'param_spec_return'
1895
+ res = GIMarshallingTests.param_spec_return
1896
+ res.value_type.must_equal GObject::TYPE_STRING
1897
+ res.get_name.must_equal "test-param"
1712
1898
  end
1713
1899
 
1714
1900
  it "has a working function #pointer_in_return" do
@@ -1730,7 +1916,7 @@ describe GIMarshallingTests do
1730
1916
  end
1731
1917
 
1732
1918
  it "has a working function #return_gvalue_flat_array" do
1733
- skip
1919
+ skip "Non-pointer arrays of complex types are not supported yet"
1734
1920
  end
1735
1921
 
1736
1922
  it "has a working function #short_in_max" do
@@ -1840,7 +2026,7 @@ describe GIMarshallingTests do
1840
2026
  end
1841
2027
 
1842
2028
  it "has a working function #test_interface_test_int8_in" do
1843
- skip
2029
+ skip "Needs implementation of TestInterface"
1844
2030
  end
1845
2031
 
1846
2032
  it "has a working function #time_t_in" do
@@ -2014,6 +2200,12 @@ describe GIMarshallingTests do
2014
2200
  assert_equal max_ushort, res
2015
2201
  end
2016
2202
 
2203
+ it "has a working function #utf8_as_uint8array_in" do
2204
+ skip unless get_introspection_data 'GIMarshallingTests', 'utf8_as_uint8array_in'
2205
+ GIMarshallingTests.utf8_as_uint8array_in GIMarshallingTests::CONSTANT_UTF8.bytes.to_a
2206
+ pass
2207
+ end
2208
+
2017
2209
  it "has a working function #utf8_dangling_out" do
2018
2210
  res = GIMarshallingTests.utf8_dangling_out
2019
2211
  assert_nil res