gir_ffi 0.15.2 → 0.15.7

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 (190) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +41 -0
  3. data/README.md +5 -6
  4. data/TODO.md +14 -35
  5. data/docs/Documentation.md +6 -0
  6. data/docs/Subclassing.md +38 -0
  7. data/lib/ffi-glib.rb +8 -3
  8. data/lib/ffi-glib/byte_array.rb +2 -1
  9. data/lib/ffi-glib/container_class_methods.rb +1 -3
  10. data/lib/ffi-glib/destroy_notify.rb +2 -2
  11. data/lib/ffi-glib/hash_table.rb +1 -2
  12. data/lib/ffi-glib/list.rb +11 -5
  13. data/lib/ffi-glib/list_methods.rb +12 -0
  14. data/lib/ffi-glib/s_list.rb +10 -4
  15. data/lib/ffi-gobject.rb +2 -5
  16. data/lib/ffi-gobject/object.rb +102 -92
  17. data/lib/ffi-gobject/object_class.rb +1 -1
  18. data/lib/ffi-gobject/ruby_closure.rb +1 -1
  19. data/lib/ffi-gobject/value.rb +108 -117
  20. data/lib/ffi-gobject_introspection/i_base_info.rb +35 -27
  21. data/lib/gir_ffi-base/gobject/lib.rb +4 -0
  22. data/lib/gir_ffi/array_element_convertor.rb +3 -4
  23. data/lib/gir_ffi/boxed_base.rb +13 -11
  24. data/lib/gir_ffi/builder.rb +3 -4
  25. data/lib/gir_ffi/builder_helper.rb +10 -2
  26. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
  27. data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
  28. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  29. data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
  30. data/lib/gir_ffi/builders/callback_builder.rb +25 -11
  31. data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
  32. data/lib/gir_ffi/builders/enum_builder.rb +9 -5
  33. data/lib/gir_ffi/builders/field_builder.rb +2 -1
  34. data/lib/gir_ffi/builders/function_builder.rb +1 -1
  35. data/lib/gir_ffi/builders/interface_builder.rb +3 -1
  36. data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
  37. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
  38. data/lib/gir_ffi/builders/method_template.rb +4 -4
  39. data/lib/gir_ffi/builders/module_builder.rb +4 -2
  40. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  41. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  42. data/lib/gir_ffi/builders/object_builder.rb +18 -6
  43. data/lib/gir_ffi/builders/property_builder.rb +1 -2
  44. data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
  45. data/lib/gir_ffi/builders/struct_builder.rb +34 -7
  46. data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
  47. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  48. data/lib/gir_ffi/callback_base.rb +7 -8
  49. data/lib/gir_ffi/class_base.rb +1 -0
  50. data/lib/gir_ffi/core.rb +17 -2
  51. data/lib/gir_ffi/glib_error.rb +1 -2
  52. data/lib/gir_ffi/in_pointer.rb +10 -2
  53. data/lib/gir_ffi/interface_base.rb +5 -0
  54. data/lib/gir_ffi/object_base.rb +27 -0
  55. data/lib/gir_ffi/return_value_info.rb +1 -2
  56. data/lib/gir_ffi/struct_base.rb +1 -9
  57. data/lib/gir_ffi/struct_like_base.rb +9 -5
  58. data/lib/gir_ffi/type_map.rb +1 -0
  59. data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
  60. data/lib/gir_ffi/union_base.rb +1 -9
  61. data/lib/gir_ffi/user_defined_object_info.rb +3 -2
  62. data/lib/gir_ffi/version.rb +1 -1
  63. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  64. metadata +106 -143
  65. data/Gemfile +0 -14
  66. data/Rakefile +0 -9
  67. data/tasks/test.rake +0 -204
  68. data/test/base_test_helper.rb +0 -70
  69. data/test/ffi-glib/array_test.rb +0 -203
  70. data/test/ffi-glib/byte_array_test.rb +0 -28
  71. data/test/ffi-glib/bytes_test.rb +0 -61
  72. data/test/ffi-glib/closure_test.rb +0 -38
  73. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  74. data/test/ffi-glib/hash_table_test.rb +0 -68
  75. data/test/ffi-glib/list_test.rb +0 -86
  76. data/test/ffi-glib/main_loop_test.rb +0 -53
  77. data/test/ffi-glib/ptr_array_test.rb +0 -112
  78. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  79. data/test/ffi-glib/s_list_test.rb +0 -76
  80. data/test/ffi-glib/strv_test.rb +0 -60
  81. data/test/ffi-glib/variant_test.rb +0 -12
  82. data/test/ffi-gobject/gobject_test.rb +0 -76
  83. data/test/ffi-gobject/object_class_test.rb +0 -31
  84. data/test/ffi-gobject/object_test.rb +0 -122
  85. data/test/ffi-gobject/param_spec_test.rb +0 -32
  86. data/test/ffi-gobject/value_test.rb +0 -390
  87. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  88. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
  89. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
  90. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  91. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  92. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  93. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  94. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  95. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  96. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  97. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  98. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
  99. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  100. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  101. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  102. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  103. data/test/ffi-gobject_test.rb +0 -151
  104. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  105. data/test/gir_ffi/arg_helper_test.rb +0 -139
  106. data/test/gir_ffi/boolean_test.rb +0 -43
  107. data/test/gir_ffi/boxed_base_test.rb +0 -65
  108. data/test/gir_ffi/builder_test.rb +0 -322
  109. data/test/gir_ffi/builders/argument_builder_test.rb +0 -651
  110. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  111. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -126
  112. data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
  113. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -81
  114. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  115. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  116. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  117. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  118. data/test/gir_ffi/builders/function_builder_test.rb +0 -550
  119. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  120. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  121. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  122. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  123. data/test/gir_ffi/builders/property_builder_test.rb +0 -158
  124. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
  125. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -433
  126. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -197
  127. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  128. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
  129. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
  130. data/test/gir_ffi/builders/union_builder_test.rb +0 -28
  131. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  132. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  133. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -241
  134. data/test/gir_ffi/callback_base_test.rb +0 -22
  135. data/test/gir_ffi/class_base_test.rb +0 -166
  136. data/test/gir_ffi/core_test.rb +0 -98
  137. data/test/gir_ffi/enum_base_test.rb +0 -43
  138. data/test/gir_ffi/error_type_info_test.rb +0 -50
  139. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  140. data/test/gir_ffi/g_type_test.rb +0 -31
  141. data/test/gir_ffi/in_pointer_test.rb +0 -203
  142. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  143. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  144. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  145. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  146. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  147. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -711
  148. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  149. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  150. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  151. data/test/gir_ffi/interface_base_test.rb +0 -20
  152. data/test/gir_ffi/method_stubber_test.rb +0 -65
  153. data/test/gir_ffi/object_base_test.rb +0 -64
  154. data/test/gir_ffi/object_store_test.rb +0 -41
  155. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  156. data/test/gir_ffi/sized_array_test.rb +0 -206
  157. data/test/gir_ffi/struct_base_test.rb +0 -23
  158. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  159. data/test/gir_ffi/type_map_test.rb +0 -17
  160. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  161. data/test/gir_ffi/union_base_test.rb +0 -23
  162. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  163. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  164. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  165. data/test/gir_ffi/version_test.rb +0 -9
  166. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  167. data/test/gir_ffi_test_helper.rb +0 -84
  168. data/test/integration/callback_exceptions_test.rb +0 -59
  169. data/test/integration/derived_classes_test.rb +0 -53
  170. data/test/integration/generated_everything_test.rb +0 -452
  171. data/test/integration/generated_gimarshallingtests_test.rb +0 -3096
  172. data/test/integration/generated_gio_test.rb +0 -116
  173. data/test/integration/generated_glib_test.rb +0 -10
  174. data/test/integration/generated_gobject_test.rb +0 -124
  175. data/test/integration/generated_gst_test.rb +0 -38
  176. data/test/integration/generated_gtk_source_test.rb +0 -32
  177. data/test/integration/generated_gtop_test.rb +0 -22
  178. data/test/integration/generated_pango_ft2_test.rb +0 -17
  179. data/test/integration/generated_pango_test.rb +0 -24
  180. data/test/integration/generated_regress_test.rb +0 -4062
  181. data/test/integration/generated_secret_test.rb +0 -14
  182. data/test/integration/generated_utility_test.rb +0 -174
  183. data/test/integration/generated_warnlib_test.rb +0 -43
  184. data/test/integration/method_lookup_test.rb +0 -34
  185. data/test/introspection_test_helper.rb +0 -93
  186. data/test/lib/Makefile.am +0 -110
  187. data/test/lib/autogen.sh +0 -4
  188. data/test/lib/configure.ac +0 -34
  189. data/test/lib/m4/jhflags.m4 +0 -21
  190. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,550 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::FunctionBuilder do
6
- describe "#method_definition" do
7
- let(:builder) { GirFFI::Builders::FunctionBuilder.new function_info }
8
- let(:code) { builder.method_definition }
9
-
10
- describe "generally" do
11
- let(:function_info) { get_method_introspection_data "GObject", "Object", "get_property" }
12
-
13
- it "returns the same result when called twice" do
14
- original = builder.method_definition
15
- copy = builder.method_definition
16
- _(copy).must_equal original
17
- end
18
- end
19
-
20
- describe "for Regress:test_array_fixed_out_objects" do
21
- let(:function_info) { get_introspection_data "Regress", "test_array_fixed_out_objects" }
22
- it "builds a correct definition" do
23
- _(code).must_equal <<~CODE
24
- def self.test_array_fixed_out_objects
25
- _v1 = FFI::MemoryPointer.new :pointer
26
- Regress::Lib.regress_test_array_fixed_out_objects _v1
27
- _v2 = GirFFI::SizedArray.wrap([:pointer, Regress::TestObj], 2, _v1.get_pointer(0))
28
- return _v2
29
- end
30
- CODE
31
- end
32
- end
33
-
34
- describe "for functions having a linked length argument" do
35
- let(:function_info) { get_introspection_data "Regress", "test_array_gint16_in" }
36
- it "builds a correct definition" do
37
- _(code).must_equal <<~CODE
38
- def self.test_array_gint16_in(ints)
39
- n_ints = ints.nil? ? 0 : ints.length
40
- _v1 = n_ints
41
- _v2 = GirFFI::SizedArray.from(:gint16, -1, ints)
42
- _v3 = Regress::Lib.regress_test_array_gint16_in _v1, _v2
43
- return _v3
44
- end
45
- CODE
46
- end
47
- end
48
-
49
- describe "for methods taking a zero-terminated array with length argument" do
50
- let(:function_info) { get_method_introspection_data "Regress", "AnnotationObject", "parse_args" }
51
- it "builds a correct definition" do
52
- _(code).must_equal <<~CODE
53
- def parse_args(argv)
54
- argc = argv.nil? ? 0 : argv.length
55
- _v1 = FFI::MemoryPointer.new :int32
56
- _v1.put_int32 0, argc
57
- _v2 = FFI::MemoryPointer.new :pointer
58
- _v2.put_pointer 0, GLib::Strv.from(argv)
59
- Regress::Lib.regress_annotation_object_parse_args self, _v1, _v2
60
- _v3 = GLib::Strv.wrap(_v2.get_pointer(0))
61
- return _v3
62
- end
63
- CODE
64
- end
65
- end
66
-
67
- describe "for functions with callbacks" do
68
- let(:function_info) { get_introspection_data "Regress", "test_callback_destroy_notify" }
69
- it "builds a correct definition" do
70
- _(code).must_equal <<~CODE
71
- def self.test_callback_destroy_notify(&callback)
72
- _v1 = Regress::TestCallbackUserData.from(callback)
73
- _v2 = GirFFI::ArgHelper.store(_v1)
74
- _v3 = GLib::DestroyNotify.default
75
- _v4 = Regress::Lib.regress_test_callback_destroy_notify _v1, _v2, _v3
76
- return _v4
77
- end
78
- CODE
79
- end
80
- end
81
-
82
- describe "for functions that take a GValue" do
83
- let(:function_info) { get_introspection_data "GIMarshallingTests", "gvalue_in" }
84
- it "creates a call to GObject::Value#from" do
85
- _(code).must_equal <<~CODE
86
- def self.gvalue_in(value)
87
- _v1 = GObject::Value.from(value)
88
- GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_in _v1
89
- end
90
- CODE
91
- end
92
- end
93
-
94
- describe "for functions that return a GValue" do
95
- let(:function_info) { get_introspection_data "GIMarshallingTests", "gvalue_return" }
96
- it "creates a call to #get_value" do
97
- _(code).must_equal <<~CODE
98
- def self.gvalue_return
99
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_return
100
- _v2 = GObject::Value.wrap(_v1).get_value
101
- return _v2
102
- end
103
- CODE
104
- end
105
- end
106
-
107
- describe "for functions that have a GValue out argument" do
108
- let(:function_info) { get_introspection_data "GIMarshallingTests", "gvalue_out" }
109
- it "creates a call to #get_value" do
110
- _(code).must_equal <<~CODE
111
- def self.gvalue_out
112
- _v1 = FFI::MemoryPointer.new :pointer
113
- GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_out _v1
114
- _v2 = GObject::Value.wrap(_v1.get_pointer(0)).get_value
115
- return _v2
116
- end
117
- CODE
118
- end
119
- end
120
-
121
- describe "for functions that have a caller-allocated GValue out argument" do
122
- let(:function_info) { get_introspection_data "GIMarshallingTests", "gvalue_out_caller_allocates" }
123
-
124
- it "creates a call to #get_value" do
125
- _(code).must_equal <<~CODE
126
- def self.gvalue_out_caller_allocates
127
- _v1 = GObject::Value.new
128
- GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_out_caller_allocates _v1
129
- _v2 = _v1.get_value
130
- return _v2
131
- end
132
- CODE
133
- end
134
- end
135
-
136
- describe "for functions with a nullable input array" do
137
- let(:function_info) { get_introspection_data "Regress", "test_array_int_null_in" }
138
- it "builds correct definition" do
139
- _(code).must_equal <<~CODE
140
- def self.test_array_int_null_in(arr = nil)
141
- len = arr.nil? ? 0 : arr.length
142
- _v1 = len
143
- _v2 = GirFFI::SizedArray.from(:gint32, -1, arr)
144
- Regress::Lib.regress_test_array_int_null_in _v2, _v1
145
- end
146
- CODE
147
- end
148
- end
149
-
150
- describe "for functions with a nullable output array" do
151
- let(:function_info) { get_introspection_data "Regress", "test_array_int_null_out" }
152
- it "builds correct definition" do
153
- _(code).must_equal <<~CODE
154
- def self.test_array_int_null_out
155
- _v1 = FFI::MemoryPointer.new :int32
156
- _v2 = FFI::MemoryPointer.new :pointer
157
- Regress::Lib.regress_test_array_int_null_out _v2, _v1
158
- _v3 = _v1.get_int32(0)
159
- _v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.get_pointer(0))
160
- return _v4
161
- end
162
- CODE
163
- end
164
- end
165
-
166
- describe "for a method with an inout array with size argument" do
167
- let(:function_info) { get_method_introspection_data "GIMarshallingTests", "Object", "method_array_inout" }
168
- it "builds the correct definition" do
169
- _(code).must_equal <<~CODE
170
- def method_array_inout(ints)
171
- length = ints.nil? ? 0 : ints.length
172
- _v1 = FFI::MemoryPointer.new :int32
173
- _v1.put_int32 0, length
174
- _v2 = FFI::MemoryPointer.new :pointer
175
- _v2.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, ints)
176
- GIMarshallingTests::Lib.gi_marshalling_tests_object_method_array_inout self, _v2, _v1
177
- _v3 = _v1.get_int32(0)
178
- _v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.get_pointer(0))
179
- return _v4
180
- end
181
- CODE
182
- end
183
- end
184
-
185
- describe "for a simple method" do
186
- let(:function_info) { get_method_introspection_data "Regress", "TestObj", "instance_method" }
187
-
188
- it "builds a correct definition" do
189
- _(code).must_equal <<~CODE
190
- def instance_method
191
- _v1 = Regress::Lib.regress_test_obj_instance_method self
192
- return _v1
193
- end
194
- CODE
195
- end
196
- end
197
-
198
- describe "for GLib::Variant.get_strv" do
199
- let(:function_info) { get_method_introspection_data "GLib", "Variant", "get_strv" }
200
- it "builds a correct definition" do
201
- size_type = ":uint#{FFI.type_size(:size_t) * 8}"
202
- _(code).must_equal <<~CODE
203
- def get_strv
204
- _v1 = FFI::MemoryPointer.new #{size_type}
205
- _v2 = GLib::Lib.g_variant_get_strv self, _v1
206
- _v3 = GLib::Strv.wrap(_v2)
207
- return _v3
208
- end
209
- CODE
210
- end
211
- end
212
-
213
- describe "for Regress.has_parameter_named_attrs" do
214
- let(:function_info) { get_introspection_data "Regress", "has_parameter_named_attrs" }
215
-
216
- it "builds a correct definition" do
217
- _(code).must_equal <<~CODE
218
- def self.has_parameter_named_attrs(foo, attributes)
219
- _v1 = foo
220
- GirFFI::ArgHelper.check_fixed_array_size 32, attributes, \"attributes\"
221
- _v2 = GirFFI::SizedArray.from([:pointer, :guint32], 32, attributes)
222
- Regress::Lib.regress_has_parameter_named_attrs _v1, _v2
223
- end
224
- CODE
225
- end
226
- end
227
-
228
- describe "for GIMarshallingTests::Object#method_int8_arg_and_out_callee" do
229
- let(:function_info) do
230
- get_method_introspection_data("GIMarshallingTests", "Object",
231
- "method_int8_arg_and_out_callee")
232
- end
233
-
234
- it "builds a correct definition" do
235
- _(code).must_equal <<~CODE
236
- def method_int8_arg_and_out_callee(arg)
237
- _v1 = arg
238
- _v2 = FFI::MemoryPointer.new :pointer
239
- GIMarshallingTests::Lib.gi_marshalling_tests_object_method_int8_arg_and_out_callee self, _v1, _v2
240
- _v3 = _v2.get_pointer(0).get_int8(0)
241
- return _v3
242
- end
243
- CODE
244
- end
245
- end
246
-
247
- describe "object ownership transfer" do
248
- describe "for GIMarshallingTests::Object#full_in" do
249
- let(:function_info) do
250
- get_method_introspection_data("GIMarshallingTests", "Object",
251
- "full_in")
252
- end
253
-
254
- # NOTE: This method is transfer-ownership: none, despite the name.
255
- it "builds a correct definition" do
256
- _(code).must_equal <<~CODE
257
- def full_in
258
- GIMarshallingTests::Lib.gi_marshalling_tests_object_full_in self
259
- end
260
- CODE
261
- end
262
- end
263
-
264
- describe "for GIMarshallingTests::Object.full_inout" do
265
- let(:function_info) do
266
- get_method_introspection_data("GIMarshallingTests", "Object",
267
- "full_inout")
268
- end
269
-
270
- it "builds a correct definition" do
271
- _(code).must_equal <<~CODE
272
- def self.full_inout(object)
273
- _v1 = FFI::MemoryPointer.new :pointer
274
- _v1.put_pointer 0, GIMarshallingTests::Object.from(object && object.ref)
275
- GIMarshallingTests::Lib.gi_marshalling_tests_object_full_inout _v1
276
- _v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0))
277
- return _v2
278
- end
279
- CODE
280
- end
281
- end
282
-
283
- describe "for GIMarshallingTests::Object.full_out" do
284
- let(:function_info) do
285
- get_method_introspection_data("GIMarshallingTests", "Object",
286
- "full_out")
287
- end
288
-
289
- it "builds a correct definition" do
290
- _(code).must_equal <<~CODE
291
- def self.full_out
292
- _v1 = FFI::MemoryPointer.new :pointer
293
- GIMarshallingTests::Lib.gi_marshalling_tests_object_full_out _v1
294
- _v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0))
295
- return _v2
296
- end
297
- CODE
298
- end
299
- end
300
-
301
- describe "for GIMarshallingTests::Object.full_return" do
302
- let(:function_info) do
303
- get_method_introspection_data("GIMarshallingTests", "Object",
304
- "full_return")
305
- end
306
-
307
- it "builds a correct definition" do
308
- _(code).must_equal <<~CODE
309
- def self.full_return
310
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_object_full_return
311
- _v2 = GIMarshallingTests::Object.wrap(_v1)
312
- return _v2
313
- end
314
- CODE
315
- end
316
- end
317
-
318
- describe "for GIMarshallingTests::Object#none_in" do
319
- let(:function_info) do
320
- get_method_introspection_data("GIMarshallingTests", "Object",
321
- "none_in")
322
- end
323
-
324
- it "builds a correct definition" do
325
- _(code).must_equal <<~CODE
326
- def none_in
327
- GIMarshallingTests::Lib.gi_marshalling_tests_object_none_in self
328
- end
329
- CODE
330
- end
331
- end
332
-
333
- describe "for GIMarshallingTests::Object.none_inout" do
334
- let(:function_info) do
335
- get_method_introspection_data("GIMarshallingTests", "Object",
336
- "none_inout")
337
- end
338
-
339
- it "builds a correct definition" do
340
- _(code).must_equal <<~CODE
341
- def self.none_inout(object)
342
- _v1 = FFI::MemoryPointer.new :pointer
343
- _v1.put_pointer 0, GIMarshallingTests::Object.from(object)
344
- GIMarshallingTests::Lib.gi_marshalling_tests_object_none_inout _v1
345
- _v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }
346
- return _v2
347
- end
348
- CODE
349
- end
350
- end
351
-
352
- describe "for GIMarshallingTests::Object.none_out" do
353
- let(:function_info) do
354
- get_method_introspection_data("GIMarshallingTests", "Object",
355
- "none_out")
356
- end
357
-
358
- it "builds a correct definition" do
359
- _(code).must_equal <<~CODE
360
- def self.none_out
361
- _v1 = FFI::MemoryPointer.new :pointer
362
- GIMarshallingTests::Lib.gi_marshalling_tests_object_none_out _v1
363
- _v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }
364
- return _v2
365
- end
366
- CODE
367
- end
368
- end
369
-
370
- describe "for GIMarshallingTests::Object.none_return" do
371
- let(:function_info) do
372
- get_method_introspection_data("GIMarshallingTests", "Object",
373
- "none_return")
374
- end
375
-
376
- it "builds a correct definition" do
377
- _(code).must_equal <<~CODE
378
- def self.none_return
379
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_object_none_return
380
- _v2 = GIMarshallingTests::Object.wrap(_v1).tap { |it| it && it.ref }
381
- return _v2
382
- end
383
- CODE
384
- end
385
- end
386
-
387
- describe "for Regress::TestObj#instance_method_full" do
388
- let(:function_info) do
389
- get_method_introspection_data("Regress", "TestObj",
390
- "instance_method_full")
391
- end
392
-
393
- it "builds a correct definition including self.ref" do
394
- _(code).must_equal <<~CODE
395
- def instance_method_full
396
- Regress::Lib.regress_test_obj_instance_method_full self.ref
397
- end
398
- CODE
399
- end
400
- end
401
- end
402
-
403
- describe "struct ownership transfer" do
404
- describe "for Regress::FooRectangle#add" do
405
- let(:function_info) do
406
- get_method_introspection_data("Regress", "FooRectangle",
407
- "add")
408
- end
409
-
410
- it "builds a correct definition without #ref" do
411
- _(code).must_equal <<~CODE
412
- def add(r2)
413
- _v1 = Regress::FooRectangle.from(r2)
414
- Regress::Lib.regress_foo_rectangle_add self, _v1
415
- end
416
- CODE
417
- end
418
- end
419
- end
420
-
421
- describe "boxed struct ownership transfer" do
422
- describe "for GIMarshallingTests::BoxedStruct.inout" do
423
- let(:function_info) do
424
- get_method_introspection_data("GIMarshallingTests", "BoxedStruct", "inout")
425
- end
426
-
427
- it "builds a correct definition" do
428
- _(code).must_equal <<~CODE
429
- def self.inout(struct_)
430
- _v1 = FFI::MemoryPointer.new :pointer
431
- _v1.put_pointer 0, GIMarshallingTests::BoxedStruct.copy_from(struct_)
432
- GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_inout _v1
433
- _v2 = GIMarshallingTests::BoxedStruct.wrap_own(_v1.get_pointer(0))
434
- return _v2
435
- end
436
- CODE
437
- end
438
- end
439
-
440
- describe "for GIMarshallingTests::BoxedStruct.out" do
441
- let(:function_info) do
442
- get_method_introspection_data("GIMarshallingTests", "BoxedStruct", "out")
443
- end
444
-
445
- it "builds a correct definition" do
446
- _(code).must_equal <<~CODE
447
- def self.out
448
- _v1 = FFI::MemoryPointer.new :pointer
449
- GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_out _v1
450
- _v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1.get_pointer(0))
451
- return _v2
452
- end
453
- CODE
454
- end
455
- end
456
-
457
- describe "for GIMarshallingTests::BoxedStruct.returnv" do
458
- let(:function_info) do
459
- get_method_introspection_data("GIMarshallingTests", "BoxedStruct", "returnv")
460
- end
461
-
462
- it "builds a correct definition" do
463
- _(code).must_equal <<~CODE
464
- def self.returnv
465
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_returnv
466
- _v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1)
467
- return _v2
468
- end
469
- CODE
470
- end
471
- end
472
- end
473
-
474
- describe "string ownership transfer" do
475
- describe "for Regress.test_utf8_out" do
476
- let(:function_info) { get_introspection_data "Regress", "test_utf8_out" }
477
-
478
- it "builds a correct definition" do
479
- _(code).must_equal <<~CODE
480
- def self.test_utf8_out
481
- _v1 = FFI::MemoryPointer.new :pointer
482
- Regress::Lib.regress_test_utf8_out _v1
483
- _v2 = GirFFI::AllocationHelper.free_after _v1.get_pointer(0), &:to_utf8
484
- return _v2
485
- end
486
- CODE
487
- end
488
- end
489
- end
490
-
491
- describe "for functions with an allow-none ingoing parameter" do
492
- let(:function_info) { get_introspection_data "Regress", "test_utf8_null_in" }
493
- it "builds correct definition with default parameter value" do
494
- _(code).must_equal <<~CODE
495
- def self.test_utf8_null_in(in_ = nil)
496
- _v1 = GirFFI::InPointer.from_utf8(in_)
497
- Regress::Lib.regress_test_utf8_null_in _v1
498
- end
499
- CODE
500
- end
501
- end
502
-
503
- describe "for functions where some allow-none cannot be honored" do
504
- let(:function_info) { get_introspection_data "GIMarshallingTests", "array_in_utf8_two_in_out_of_order" }
505
- it "builds correct definition with default parameter value on the later arguments" do
506
- _(code).must_equal <<~CODE
507
- def self.array_in_utf8_two_in_out_of_order(a, ints, b = nil)
508
- length = ints.nil? ? 0 : ints.length
509
- _v1 = length
510
- _v2 = GirFFI::InPointer.from_utf8(a)
511
- _v3 = GirFFI::InPointer.from_utf8(b)
512
- _v4 = GirFFI::SizedArray.from(:gint32, -1, ints)
513
- GIMarshallingTests::Lib.gi_marshalling_tests_array_in_utf8_two_in_out_of_order _v1, _v2, _v4, _v3
514
- end
515
- CODE
516
- end
517
- end
518
-
519
- describe "ownership transfer for an ingoing array of structs" do
520
- describe "with no ownership transfer of the elements" do
521
- let(:function_info) { get_introspection_data "GIMarshallingTests", "array_struct_in" }
522
-
523
- it "builds a correct definition" do
524
- _(code).must_equal <<~CODE
525
- def self.array_struct_in(structs)
526
- length = structs.nil? ? 0 : structs.length
527
- _v1 = length
528
- _v2 = GirFFI::SizedArray.from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)
529
- GIMarshallingTests::Lib.gi_marshalling_tests_array_struct_in _v2, _v1
530
- end
531
- CODE
532
- end
533
- end
534
- describe "with ownership transfer of the elements" do
535
- let(:function_info) { get_introspection_data "GIMarshallingTests", "array_struct_take_in" }
536
-
537
- it "builds a correct definition" do
538
- _(code).must_equal <<~CODE
539
- def self.array_struct_take_in(structs)
540
- length = structs.nil? ? 0 : structs.length
541
- _v1 = length
542
- _v2 = GirFFI::SizedArray.copy_from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)
543
- GIMarshallingTests::Lib.gi_marshalling_tests_array_struct_take_in _v2, _v1
544
- end
545
- CODE
546
- end
547
- end
548
- end
549
- end
550
- end