gir_ffi 0.15.3 → 0.15.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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +15 -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/destroy_notify.rb +2 -2
  10. data/lib/ffi-glib/hash_table.rb +1 -2
  11. data/lib/ffi-glib/list.rb +11 -5
  12. data/lib/ffi-glib/list_methods.rb +12 -0
  13. data/lib/ffi-glib/s_list.rb +10 -4
  14. data/lib/ffi-gobject.rb +0 -3
  15. data/lib/ffi-gobject/object.rb +77 -73
  16. data/lib/ffi-gobject/object_class.rb +1 -1
  17. data/lib/ffi-gobject/value.rb +107 -108
  18. data/lib/ffi-gobject_introspection/i_base_info.rb +20 -19
  19. data/lib/gir_ffi-base/gobject/lib.rb +4 -0
  20. data/lib/gir_ffi/array_element_convertor.rb +1 -2
  21. data/lib/gir_ffi/boxed_base.rb +1 -5
  22. data/lib/gir_ffi/builder.rb +1 -1
  23. data/lib/gir_ffi/builder_helper.rb +7 -4
  24. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
  25. data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
  26. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  27. data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
  28. data/lib/gir_ffi/builders/callback_builder.rb +14 -12
  29. data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
  30. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  31. data/lib/gir_ffi/builders/enum_builder.rb +3 -3
  32. data/lib/gir_ffi/builders/interface_builder.rb +3 -1
  33. data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
  34. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
  35. data/lib/gir_ffi/builders/method_template.rb +4 -4
  36. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  37. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  38. data/lib/gir_ffi/builders/object_builder.rb +16 -6
  39. data/lib/gir_ffi/builders/property_builder.rb +1 -2
  40. data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
  41. data/lib/gir_ffi/builders/struct_builder.rb +5 -5
  42. data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
  43. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  44. data/lib/gir_ffi/callback_base.rb +3 -3
  45. data/lib/gir_ffi/core.rb +17 -2
  46. data/lib/gir_ffi/glib_error.rb +1 -2
  47. data/lib/gir_ffi/in_pointer.rb +7 -0
  48. data/lib/gir_ffi/object_base.rb +27 -0
  49. data/lib/gir_ffi/return_value_info.rb +1 -2
  50. data/lib/gir_ffi/struct_base.rb +1 -9
  51. data/lib/gir_ffi/struct_like_base.rb +9 -5
  52. data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
  53. data/lib/gir_ffi/union_base.rb +1 -9
  54. data/lib/gir_ffi/user_defined_object_info.rb +3 -2
  55. data/lib/gir_ffi/version.rb +1 -1
  56. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  57. metadata +86 -136
  58. data/Gemfile +0 -14
  59. data/Rakefile +0 -9
  60. data/tasks/test.rake +0 -204
  61. data/test/base_test_helper.rb +0 -70
  62. data/test/ffi-glib/array_test.rb +0 -203
  63. data/test/ffi-glib/byte_array_test.rb +0 -28
  64. data/test/ffi-glib/bytes_test.rb +0 -61
  65. data/test/ffi-glib/closure_test.rb +0 -38
  66. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  67. data/test/ffi-glib/hash_table_test.rb +0 -68
  68. data/test/ffi-glib/list_test.rb +0 -86
  69. data/test/ffi-glib/main_loop_test.rb +0 -53
  70. data/test/ffi-glib/ptr_array_test.rb +0 -112
  71. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  72. data/test/ffi-glib/s_list_test.rb +0 -76
  73. data/test/ffi-glib/strv_test.rb +0 -60
  74. data/test/ffi-glib/variant_test.rb +0 -12
  75. data/test/ffi-gobject/gobject_test.rb +0 -76
  76. data/test/ffi-gobject/object_class_test.rb +0 -31
  77. data/test/ffi-gobject/object_test.rb +0 -123
  78. data/test/ffi-gobject/param_spec_test.rb +0 -32
  79. data/test/ffi-gobject/value_test.rb +0 -390
  80. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  81. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
  82. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
  83. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  84. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  85. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  86. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  87. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  88. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  89. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  90. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  91. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
  92. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  93. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  94. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  95. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  96. data/test/ffi-gobject_test.rb +0 -153
  97. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  98. data/test/gir_ffi/arg_helper_test.rb +0 -146
  99. data/test/gir_ffi/boolean_test.rb +0 -43
  100. data/test/gir_ffi/boxed_base_test.rb +0 -65
  101. data/test/gir_ffi/builder_test.rb +0 -168
  102. data/test/gir_ffi/builders/argument_builder_test.rb +0 -691
  103. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  104. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -130
  105. data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
  106. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -84
  107. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  108. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -39
  109. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  110. data/test/gir_ffi/builders/field_builder_test.rb +0 -140
  111. data/test/gir_ffi/builders/function_builder_test.rb +0 -570
  112. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -56
  113. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  114. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  115. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  116. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  117. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
  118. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -444
  119. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -199
  120. data/test/gir_ffi/builders/struct_builder_test.rb +0 -96
  121. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
  122. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
  123. data/test/gir_ffi/builders/union_builder_test.rb +0 -28
  124. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -528
  125. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -107
  126. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -245
  127. data/test/gir_ffi/callback_base_test.rb +0 -22
  128. data/test/gir_ffi/class_base_test.rb +0 -171
  129. data/test/gir_ffi/core_test.rb +0 -99
  130. data/test/gir_ffi/enum_base_test.rb +0 -43
  131. data/test/gir_ffi/error_type_info_test.rb +0 -50
  132. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -22
  133. data/test/gir_ffi/g_type_test.rb +0 -31
  134. data/test/gir_ffi/in_pointer_test.rb +0 -203
  135. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  136. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -22
  137. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  138. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  139. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  140. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -712
  141. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  142. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  143. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  144. data/test/gir_ffi/interface_base_test.rb +0 -20
  145. data/test/gir_ffi/method_stubber_test.rb +0 -67
  146. data/test/gir_ffi/object_base_test.rb +0 -64
  147. data/test/gir_ffi/object_store_test.rb +0 -41
  148. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  149. data/test/gir_ffi/sized_array_test.rb +0 -206
  150. data/test/gir_ffi/struct_base_test.rb +0 -23
  151. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  152. data/test/gir_ffi/type_map_test.rb +0 -17
  153. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  154. data/test/gir_ffi/union_base_test.rb +0 -23
  155. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  156. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  157. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  158. data/test/gir_ffi/version_test.rb +0 -9
  159. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  160. data/test/gir_ffi_test_helper.rb +0 -84
  161. data/test/integration/callback_exceptions_test.rb +0 -59
  162. data/test/integration/derived_classes_test.rb +0 -54
  163. data/test/integration/generated_everything_test.rb +0 -453
  164. data/test/integration/generated_gimarshallingtests_test.rb +0 -3109
  165. data/test/integration/generated_gio_test.rb +0 -116
  166. data/test/integration/generated_glib_test.rb +0 -10
  167. data/test/integration/generated_gobject_test.rb +0 -124
  168. data/test/integration/generated_gst_test.rb +0 -38
  169. data/test/integration/generated_gtk_source_test.rb +0 -21
  170. data/test/integration/generated_gtop_test.rb +0 -22
  171. data/test/integration/generated_pango_ft2_test.rb +0 -17
  172. data/test/integration/generated_pango_test.rb +0 -24
  173. data/test/integration/generated_regress_test.rb +0 -4076
  174. data/test/integration/generated_secret_test.rb +0 -14
  175. data/test/integration/generated_utility_test.rb +0 -174
  176. data/test/integration/generated_warnlib_test.rb +0 -45
  177. data/test/integration/method_lookup_test.rb +0 -34
  178. data/test/introspection_test_helper.rb +0 -94
  179. data/test/lib/Makefile.am +0 -110
  180. data/test/lib/autogen.sh +0 -4
  181. data/test/lib/configure.ac +0 -34
  182. data/test/lib/m4/jhflags.m4 +0 -21
  183. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,444 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::ReturnValueBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:type_info) { method_info.return_type }
8
- let(:ownership_transfer) { method_info.caller_owns }
9
- let(:return_type_info) do
10
- GirFFI::ReturnValueInfo.new(type_info, ownership_transfer, false)
11
- end
12
- let(:builder) do
13
- GirFFI::Builders::ReturnValueBuilder.new(var_gen, return_type_info)
14
- end
15
-
16
- describe "for :gint32" do
17
- let(:method_info) do
18
- get_introspection_data("GIMarshallingTests",
19
- "int_return_min")
20
- end
21
-
22
- it "has no statements in #post_conversion" do
23
- _(builder.post_conversion).must_equal []
24
- end
25
-
26
- it "returns the result of the c function directly" do
27
- _(builder.capture_variable_name).must_equal "_v1"
28
- _(builder.return_value_name).must_equal "_v1"
29
- end
30
- end
31
-
32
- describe "for :struct" do
33
- describe "with transfer :nothing" do
34
- let(:method_info) do
35
- get_method_introspection_data("GIMarshallingTests",
36
- "BoxedStruct",
37
- "returnv")
38
- end
39
-
40
- it "wraps and copies the result in #post_conversion" do
41
- _(builder.capture_variable_name).must_equal "_v1"
42
- _(builder.post_conversion)
43
- .must_equal ["_v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1)"]
44
- end
45
-
46
- it "returns the copied result" do
47
- _(builder.capture_variable_name).must_equal "_v1"
48
- _(builder.return_value_name).must_equal "_v2"
49
- end
50
- end
51
- end
52
-
53
- describe "for :union" do
54
- let(:method_info) do
55
- get_method_introspection_data("GIMarshallingTests",
56
- "Union",
57
- "returnv")
58
- end
59
-
60
- it "wraps the result in #post_conversion" do
61
- _(builder.capture_variable_name).must_equal "_v1"
62
- _(builder.post_conversion)
63
- .must_equal ["_v2 = GIMarshallingTests::Union.wrap_copy(_v1)"]
64
- end
65
-
66
- it "returns the wrapped result" do
67
- _(builder.capture_variable_name).must_equal "_v1"
68
- _(builder.return_value_name).must_equal "_v2"
69
- end
70
- end
71
-
72
- describe "for :interface" do
73
- let(:method_info) do
74
- get_method_introspection_data("Gio",
75
- "File",
76
- "new_for_commandline_arg")
77
- end
78
-
79
- it "wraps the result in #post_conversion" do
80
- _(builder.capture_variable_name).must_equal "_v1"
81
- _(builder.post_conversion).must_equal ["_v2 = Gio::File.wrap(_v1)"]
82
- end
83
-
84
- it "returns the wrapped result" do
85
- _(builder.capture_variable_name).must_equal "_v1"
86
- _(builder.return_value_name).must_equal "_v2"
87
- end
88
- end
89
-
90
- describe "for :object" do
91
- describe "with full ownership transfer" do
92
- let(:method_info) do
93
- get_method_introspection_data("GIMarshallingTests",
94
- "Object",
95
- "full_return")
96
- end
97
-
98
- it "wraps the result in #post_conversion" do
99
- _(builder.capture_variable_name).must_equal "_v1"
100
- _(builder.post_conversion).must_equal ["_v2 = GIMarshallingTests::Object.wrap(_v1)"]
101
- end
102
-
103
- it "returns the wrapped result" do
104
- _(builder.capture_variable_name).must_equal "_v1"
105
- _(builder.return_value_name).must_equal "_v2"
106
- end
107
- end
108
-
109
- describe "with no ownership transfer" do
110
- let(:method_info) do
111
- get_method_introspection_data("GIMarshallingTests",
112
- "Object",
113
- "none_return")
114
- end
115
-
116
- it "wraps the result in #post_conversion" do
117
- _(builder.capture_variable_name).must_equal "_v1"
118
- _(builder.post_conversion)
119
- .must_equal [
120
- "_v2 = GIMarshallingTests::Object.wrap(_v1).tap { |it| it && it.ref }"
121
- ]
122
- end
123
-
124
- it "returns the wrapped result" do
125
- _(builder.capture_variable_name).must_equal "_v1"
126
- _(builder.return_value_name).must_equal "_v2"
127
- end
128
- end
129
- end
130
-
131
- describe "for :strv" do
132
- let(:method_info) do
133
- get_method_introspection_data("GLib",
134
- "KeyFile",
135
- "get_locale_string_list")
136
- end
137
-
138
- it "wraps the result in #post_conversion" do
139
- _(builder.capture_variable_name).must_equal "_v1"
140
- _(builder.post_conversion).must_equal ["_v2 = GLib::Strv.wrap(_v1)"]
141
- end
142
-
143
- it "returns the wrapped result" do
144
- _(builder.capture_variable_name).must_equal "_v1"
145
- _(builder.return_value_name).must_equal "_v2"
146
- end
147
- end
148
-
149
- describe "for :zero_terminated" do
150
- let(:method_info) do
151
- get_method_introspection_data("GLib",
152
- "Variant",
153
- "dup_bytestring")
154
- end
155
-
156
- it "wraps the result in #post_conversion" do
157
- _(builder.capture_variable_name).must_equal "_v1"
158
- _(builder.post_conversion)
159
- .must_equal ["_v2 = GirFFI::ZeroTerminated.wrap(:guint8, _v1)"]
160
- end
161
-
162
- it "returns the wrapped result" do
163
- _(builder.capture_variable_name).must_equal "_v1"
164
- _(builder.return_value_name).must_equal "_v2"
165
- end
166
- end
167
-
168
- describe "for :byte_array" do
169
- let(:method_info) do
170
- get_introspection_data("GIMarshallingTests",
171
- "bytearray_full_return")
172
- end
173
-
174
- it "wraps the result in #post_conversion" do
175
- _(builder.capture_variable_name).must_equal "_v1"
176
- _(builder.post_conversion).must_equal ["_v2 = GLib::ByteArray.wrap(_v1)"]
177
- end
178
-
179
- it "returns the wrapped result" do
180
- _(builder.capture_variable_name).must_equal "_v1"
181
- _(builder.return_value_name).must_equal "_v2"
182
- end
183
- end
184
-
185
- describe "for :ptr_array" do
186
- let(:method_info) do
187
- get_introspection_data("GIMarshallingTests",
188
- "gptrarray_utf8_none_return")
189
- end
190
-
191
- it "wraps the result in #post_conversion" do
192
- _(builder.capture_variable_name).must_equal "_v1"
193
- _(builder.post_conversion).must_equal ["_v2 = GLib::PtrArray.wrap(:utf8, _v1)"]
194
- end
195
-
196
- it "returns the wrapped result" do
197
- _(builder.capture_variable_name).must_equal "_v1"
198
- _(builder.return_value_name).must_equal "_v2"
199
- end
200
- end
201
-
202
- describe "for :glist" do
203
- let(:method_info) do
204
- get_introspection_data("GIMarshallingTests",
205
- "glist_int_none_return")
206
- end
207
-
208
- it "wraps the result in #post_conversion" do
209
- _(builder.capture_variable_name).must_equal "_v1"
210
- _(builder.post_conversion).must_equal ["_v2 = GLib::List.wrap(:gint32, _v1)"]
211
- end
212
-
213
- it "returns the wrapped result" do
214
- _(builder.capture_variable_name).must_equal "_v1"
215
- _(builder.return_value_name).must_equal "_v2"
216
- end
217
- end
218
-
219
- describe "for :gslist" do
220
- let(:method_info) do
221
- get_introspection_data("GIMarshallingTests",
222
- "gslist_int_none_return")
223
- end
224
-
225
- it "wraps the result in #post_conversion" do
226
- _(builder.capture_variable_name).must_equal "_v1"
227
- _(builder.post_conversion).must_equal ["_v2 = GLib::SList.wrap(:gint32, _v1)"]
228
- end
229
-
230
- it "returns the wrapped result" do
231
- _(builder.capture_variable_name).must_equal "_v1"
232
- _(builder.return_value_name).must_equal "_v2"
233
- end
234
- end
235
-
236
- describe "for :ghash" do
237
- let(:method_info) do
238
- get_introspection_data("GIMarshallingTests",
239
- "ghashtable_int_none_return")
240
- end
241
-
242
- it "wraps the result in #post_conversion" do
243
- _(builder.capture_variable_name).must_equal "_v1"
244
- _(builder.post_conversion)
245
- .must_equal ["_v2 = GLib::HashTable.wrap([:gint32, :gint32], _v1)"]
246
- end
247
-
248
- it "returns the wrapped result" do
249
- _(builder.capture_variable_name).must_equal "_v1"
250
- _(builder.return_value_name).must_equal "_v2"
251
- end
252
- end
253
-
254
- describe "for :array" do
255
- let(:method_info) do
256
- get_introspection_data("GIMarshallingTests",
257
- "garray_int_none_return")
258
- end
259
-
260
- it "wraps the result in #post_conversion" do
261
- _(builder.capture_variable_name).must_equal "_v1"
262
- _(builder.post_conversion).must_equal ["_v2 = GLib::Array.wrap(:gint32, _v1)"]
263
- end
264
-
265
- it "returns the wrapped result" do
266
- _(builder.capture_variable_name).must_equal "_v1"
267
- _(builder.return_value_name).must_equal "_v2"
268
- end
269
- end
270
-
271
- describe "for :error" do
272
- let(:method_info) do
273
- get_introspection_data("GIMarshallingTests",
274
- "gerror_return")
275
- end
276
-
277
- it "wraps the result in #post_conversion" do
278
- _(builder.capture_variable_name).must_equal "_v1"
279
- _(builder.post_conversion).must_equal ["_v2 = GLib::Error.wrap(_v1)"]
280
- end
281
-
282
- it "returns the wrapped result" do
283
- _(builder.capture_variable_name).must_equal "_v1"
284
- _(builder.return_value_name).must_equal "_v2"
285
- end
286
- end
287
-
288
- describe "for :c" do
289
- describe "with fixed size" do
290
- let(:method_info) do
291
- get_introspection_data("GIMarshallingTests",
292
- "array_fixed_int_return")
293
- end
294
-
295
- it "converts the result in #post_conversion" do
296
- _(builder.capture_variable_name).must_equal "_v1"
297
- _(builder.post_conversion)
298
- .must_equal ["_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1)"]
299
- end
300
-
301
- it "returns the wrapped result" do
302
- _(builder.capture_variable_name).must_equal "_v1"
303
- _(builder.return_value_name).must_equal "_v2"
304
- end
305
- end
306
-
307
- describe "with separate size parameter" do
308
- let(:length_argument) { Object.new }
309
- let(:method_info) do
310
- get_method_introspection_data("GIMarshallingTests",
311
- "Object",
312
- "method_array_return")
313
- end
314
-
315
- before do
316
- allow(length_argument).to receive(:post_converted_name).and_return "bar"
317
- builder.length_arg = length_argument
318
- end
319
-
320
- it "converts the result in #post_conversion" do
321
- _(builder.capture_variable_name).must_equal "_v1"
322
- _(builder.post_conversion)
323
- .must_equal ["_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1)"]
324
- end
325
-
326
- it "returns the wrapped result" do
327
- _(builder.capture_variable_name).must_equal "_v1"
328
- _(builder.return_value_name).must_equal "_v2"
329
- end
330
- end
331
- end
332
-
333
- describe "for :utf8" do
334
- describe "with no transfer" do
335
- let(:method_info) do
336
- get_introspection_data("GIMarshallingTests", "utf8_none_return")
337
- end
338
-
339
- it "converts the result in #post_conversion" do
340
- _(builder.capture_variable_name).must_equal "_v1"
341
- _(builder.post_conversion).must_equal ["_v2 = _v1.to_utf8"]
342
- end
343
-
344
- it "returns the converted result" do
345
- _(builder.capture_variable_name).must_equal "_v1"
346
- _(builder.return_value_name).must_equal "_v2"
347
- end
348
- end
349
-
350
- describe "with full transfer" do
351
- let(:method_info) do
352
- get_introspection_data("GIMarshallingTests", "utf8_full_return")
353
- end
354
-
355
- it "autoreleases and converts the result in #post_conversion" do
356
- _(builder.capture_variable_name).must_equal "_v1"
357
- _(builder.post_conversion)
358
- .must_equal ["_v2 = GirFFI::AllocationHelper.free_after _v1, &:to_utf8"]
359
- end
360
-
361
- it "returns the converted result" do
362
- _(builder.capture_variable_name).must_equal "_v1"
363
- _(builder.return_value_name).must_equal "_v2"
364
- end
365
- end
366
- end
367
-
368
- describe "for :void pointer" do
369
- let(:ownership_transfer) { :nothing }
370
- let(:callback_info) do
371
- get_introspection_data("GIMarshallingTests", "CallbackIntInt")
372
- end
373
- let(:type_info) { callback_info.args[1].argument_type }
374
-
375
- it "has no statements in #post_conversion" do
376
- _(builder.post_conversion).must_equal []
377
- end
378
-
379
- it "returns the result of the c function directly" do
380
- _(builder.capture_variable_name).must_equal "_v1"
381
- _(builder.return_value_name).must_equal "_v1"
382
- end
383
- end
384
-
385
- describe "for :void" do
386
- let(:method_info) do
387
- get_method_introspection_data("Regress", "TestObj", "null_out")
388
- end
389
-
390
- it "has no statements in #post_conversion" do
391
- _(builder.post_conversion).must_equal []
392
- end
393
-
394
- it "marks itself as irrelevant" do
395
- _(builder.relevant?).must_equal false
396
- end
397
-
398
- it "returns nothing" do
399
- _(builder.return_value_name).must_be_nil
400
- end
401
- end
402
-
403
- describe "for a closure argument" do
404
- let(:ownership_transfer) { :nothing }
405
- let(:callback_info) do
406
- get_introspection_data("Regress", "TestCallbackUserData")
407
- end
408
- let(:type_info) { callback_info.args[0].argument_type }
409
-
410
- before do
411
- builder.mark_as_user_data :dummy
412
- end
413
-
414
- it "fetches the stored object in #post_conversion" do
415
- _(builder.capture_variable_name).must_equal "_v1"
416
- _(builder.post_conversion)
417
- .must_equal ["_v2 = GirFFI::ArgHelper::OBJECT_STORE.fetch(_v1)"]
418
- end
419
-
420
- it "returns the stored object" do
421
- _(builder.capture_variable_name).must_equal "_v1"
422
- _(builder.return_value_name).must_equal "_v2"
423
- end
424
- end
425
-
426
- describe "for a skipped return value" do
427
- let(:method_info) do
428
- get_method_introspection_data("Regress", "TestObj", "skip_return_val")
429
- end
430
- let(:return_type_info) { GirFFI::ReturnValueInfo.new(type_info, :nothing, true) }
431
-
432
- it "has no statements in #post_conversion" do
433
- _(builder.post_conversion).must_equal []
434
- end
435
-
436
- it "marks itself as irrelevant" do
437
- _(builder.relevant?).must_equal false
438
- end
439
-
440
- it "returns nothing" do
441
- _(builder.return_value_name).must_be_nil
442
- end
443
- end
444
- end
@@ -1,199 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::SignalClosureBuilder do
6
- let(:builder) { GirFFI::Builders::SignalClosureBuilder.new signal_info }
7
-
8
- describe "#build_class" do
9
- let(:signal_info) do
10
- get_signal_introspection_data "Regress", "TestObj", "test"
11
- end
12
-
13
- it "builds a descendant of RubyClosure" do
14
- klass = builder.build_class
15
- _(klass.superclass).must_equal GObject::RubyClosure
16
- end
17
- end
18
-
19
- describe "#marshaller_definition" do
20
- describe "for a signal with no arguments or return value" do
21
- let(:signal_info) do
22
- get_signal_introspection_data "Regress", "TestObj", "test"
23
- end
24
-
25
- it "returns a valid marshaller converting only the receiver" do
26
- expected = <<~CODE
27
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
28
- _instance = param_values.first.get_value_plain
29
- _v1 = _instance
30
- wrap(closure.to_ptr).invoke_block(_v1)
31
- end
32
- CODE
33
-
34
- _(builder.marshaller_definition).must_equal expected
35
- end
36
- end
37
-
38
- describe "for a signal with an argument and a return value" do
39
- let(:signal_info) do
40
- get_signal_introspection_data "Regress", "TestObj", "sig-with-int64-prop"
41
- end
42
-
43
- it "returns a valid mapping method" do
44
- expected = <<~CODE
45
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
46
- _instance, i = param_values.map(&:get_value_plain)
47
- _v1 = _instance
48
- _v2 = i
49
- _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
50
- return_value.set_value _v3
51
- end
52
- CODE
53
-
54
- _(builder.marshaller_definition).must_equal expected
55
- end
56
- end
57
-
58
- describe "for a signal with an enum argument" do
59
- let(:signal_info) do
60
- get_signal_introspection_data "Gio", "MountOperation", "reply"
61
- end
62
-
63
- it "returns a valid mapping method" do
64
- expected = <<~CODE
65
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
66
- _instance, result = param_values.map(&:get_value_plain)
67
- _v1 = _instance
68
- _v2 = result
69
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
70
- end
71
- CODE
72
-
73
- _(builder.marshaller_definition).must_equal expected
74
- end
75
- end
76
-
77
- describe "for a signal with a array plus length arguments" do
78
- let(:signal_info) do
79
- get_signal_introspection_data "Regress", "TestObj", "sig-with-array-len-prop"
80
- end
81
-
82
- it "returns a valid mapping method" do
83
- expected = <<~CODE
84
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
85
- _instance, arr, len = param_values.map(&:get_value_plain)
86
- _v1 = _instance
87
- _v2 = len
88
- _v3 = GirFFI::SizedArray.wrap(:guint32, _v2, arr)
89
- wrap(closure.to_ptr).invoke_block(_v1, _v3)
90
- end
91
- CODE
92
-
93
- _(builder.marshaller_definition).must_equal expected
94
- end
95
- end
96
-
97
- describe "for a signal with a struct argument" do
98
- let(:signal_info) do
99
- get_signal_introspection_data "Regress", "TestObj", "test-with-static-scope-arg"
100
- end
101
-
102
- it "returns a valid mapping method" do
103
- expected = <<~CODE
104
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
105
- _instance, object = param_values.map(&:get_value_plain)
106
- _v1 = _instance
107
- _v2 = Regress::TestSimpleBoxedA.wrap(object)
108
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
109
- end
110
- CODE
111
-
112
- _(builder.marshaller_definition).must_equal expected
113
- end
114
- end
115
-
116
- describe "for a signal returning an array of integers" do
117
- let(:signal_info) do
118
- get_signal_introspection_data "Regress", "TestObj", "sig-with-intarray-ret"
119
- end
120
-
121
- it "returns a valid mapping method" do
122
- expected = <<~CODE
123
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
124
- _instance, i = param_values.map(&:get_value_plain)
125
- _v1 = _instance
126
- _v2 = i
127
- _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
128
- _v4 = GLib::Array.from(:gint32, _v3)
129
- return_value.set_value _v4
130
- end
131
- CODE
132
-
133
- _(builder.marshaller_definition).must_equal expected
134
- end
135
- end
136
-
137
- describe "for a signal returning a string" do
138
- let(:signal_info) do
139
- get_signal_introspection_data "Regress", "AnnotationObject", "attribute-signal"
140
- end
141
-
142
- it "returns a mapping method that passes the string result to return_value directly" \
143
- do
144
- expected = <<~CODE
145
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
146
- _instance, arg1, arg2 = param_values.map(&:get_value_plain)
147
- _v1 = _instance
148
- _v2 = arg1
149
- _v3 = arg2
150
- _v4 = wrap(closure.to_ptr).invoke_block(_v1, _v2, _v3)
151
- return_value.set_value _v4
152
- end
153
- CODE
154
-
155
- _(builder.marshaller_definition).must_equal expected
156
- end
157
- end
158
-
159
- describe "for a signal with GList argument" do
160
- let(:signal_info) do
161
- get_signal_introspection_data "Regress", "AnnotationObject", "list-signal"
162
- end
163
-
164
- it "returns a valid mapping method" do
165
- expected = <<~CODE
166
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
167
- _instance, list = param_values.map(&:get_value_plain)
168
- _v1 = _instance
169
- _v2 = GLib::List.wrap(:utf8, list)
170
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
171
- end
172
- CODE
173
-
174
- _(builder.marshaller_definition).must_equal expected
175
- end
176
- end
177
-
178
- describe "for a signal with GError argument" do
179
- let(:signal_info) do
180
- get_signal_introspection_data "Regress", "TestObj", "sig-with-gerror"
181
- end
182
-
183
- it "returns a valid mapping method" do
184
- skip_below "1.61.1"
185
-
186
- expected = <<~CODE
187
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
188
- _instance, error = param_values.map(&:get_value_plain)
189
- _v1 = _instance
190
- _v2 = GLib::Error.wrap(error)
191
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
192
- end
193
- CODE
194
-
195
- _(builder.marshaller_definition).must_equal expected
196
- end
197
- end
198
- end
199
- end