gir_ffi 0.9.5 → 0.10.0.pre1
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.
- checksums.yaml +4 -4
- data/Changelog.md +9 -0
- data/lib/ffi-glib/byte_array.rb +1 -1
- data/lib/ffi-glib/bytes.rb +4 -4
- data/lib/ffi-glib/container_class_methods.rb +2 -0
- data/lib/ffi-glib/iconv.rb +2 -2
- data/lib/ffi-glib/variant.rb +10 -2
- data/lib/ffi-gobject.rb +6 -14
- data/lib/ffi-gobject/object.rb +7 -0
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/param_spec.rb +12 -0
- data/lib/ffi-gobject/value.rb +20 -11
- data/lib/gir_ffi-base/gobject.rb +35 -3
- data/lib/gir_ffi-base/gobject/lib.rb +2 -0
- data/lib/gir_ffi/allocation_helper.rb +11 -0
- data/lib/gir_ffi/arg_helper.rb +4 -0
- data/lib/gir_ffi/boxed_base.rb +28 -32
- data/lib/gir_ffi/builders/argument_builder.rb +31 -6
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +36 -7
- data/lib/gir_ffi/builders/callback_argument_builder.rb +24 -10
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +1 -1
- data/lib/gir_ffi/builders/field_builder.rb +28 -10
- data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +2 -3
- data/lib/gir_ffi/builders/initializer_return_value_builder.rb +5 -1
- data/lib/gir_ffi/builders/null_argument_builder.rb +0 -12
- data/lib/gir_ffi/builders/pointer_value_convertor.rb +38 -0
- data/lib/gir_ffi/builders/return_value_builder.rb +12 -10
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +21 -2
- data/lib/gir_ffi/builders/struct_builder.rb +9 -2
- data/lib/gir_ffi/builders/{boxed_builder.rb → struct_like.rb} +2 -5
- data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +5 -2
- data/lib/gir_ffi/builders/union_builder.rb +5 -2
- data/lib/gir_ffi/enum_base.rb +4 -0
- data/lib/gir_ffi/error_argument_info.rb +0 -16
- data/lib/gir_ffi/ffi_ext/pointer.rb +11 -5
- data/lib/gir_ffi/flags_base.rb +4 -0
- data/lib/gir_ffi/in_out_pointer.rb +5 -30
- data/lib/gir_ffi/in_pointer.rb +5 -4
- data/lib/gir_ffi/info_ext/i_type_info.rb +3 -5
- data/lib/gir_ffi/object_base.rb +4 -0
- data/lib/gir_ffi/sized_array.rb +20 -0
- data/lib/gir_ffi/struct_base.rb +13 -2
- data/lib/gir_ffi/struct_like_base.rb +53 -0
- data/lib/gir_ffi/union_base.rb +7 -1
- data/lib/gir_ffi/version.rb +1 -1
- data/test/ffi-glib/destroy_notify_test.rb +4 -1
- data/test/ffi-gobject/param_spec_test.rb +18 -0
- data/test/gir_ffi/arg_helper_test.rb +17 -0
- data/test/gir_ffi/boxed_base_test.rb +24 -0
- data/test/gir_ffi/builders/argument_builder_test.rb +156 -63
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +10 -10
- data/test/gir_ffi/builders/callback_builder_test.rb +31 -8
- data/test/gir_ffi/builders/field_builder_test.rb +32 -30
- data/test/gir_ffi/builders/function_builder_test.rb +251 -45
- data/test/gir_ffi/builders/initializer_builder_test.rb +17 -1
- data/test/gir_ffi/builders/return_value_builder_test.rb +115 -68
- data/test/gir_ffi/builders/struct_builder_test.rb +6 -0
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +4 -1
- data/test/gir_ffi/builders/vfunc_builder_test.rb +10 -10
- data/test/gir_ffi/in_out_pointer_test.rb +12 -81
- data/test/gir_ffi/in_pointer_test.rb +0 -17
- data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -10
- data/test/gir_ffi/sized_array_test.rb +62 -0
- data/test/gir_ffi/struct_base_test.rb +24 -0
- data/test/gir_ffi/union_base_test.rb +24 -0
- data/test/gir_ffi/version_test.rb +1 -1
- data/test/integration/generated_gimarshallingtests_test.rb +32 -12
- data/test/integration/generated_regress_test.rb +9 -12
- metadata +12 -8
- data/lib/ffi-gobject/base.rb +0 -27
- data/lib/gir_ffi/user_data_argument_info.rb +0 -24
- data/lib/gir_ffi/user_data_type_info.rb +0 -22
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'gir_ffi_test_helper'
|
3
|
+
|
4
|
+
GirFFI.setup :GIMarshallingTests
|
5
|
+
|
6
|
+
describe GirFFI::BoxedBase do
|
7
|
+
describe 'wrap_copy' do
|
8
|
+
it 'returns a wrapped copy with autorelease true' do
|
9
|
+
original = GIMarshallingTests::BoxedStruct.new
|
10
|
+
copy = GIMarshallingTests::BoxedStruct.wrap_copy(original.to_ptr)
|
11
|
+
copy.to_ptr.wont_equal original.to_ptr
|
12
|
+
copy.to_ptr.must_be :autorelease?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'copy_from' do
|
17
|
+
it 'returns a copy with autorelease false' do
|
18
|
+
original = GIMarshallingTests::BoxedStruct.new
|
19
|
+
copy = GIMarshallingTests::BoxedStruct.copy_from(original)
|
20
|
+
copy.to_ptr.wont_equal original.to_ptr
|
21
|
+
copy.to_ptr.wont_be :autorelease?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -6,6 +6,23 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
6
6
|
let(:builder) { GirFFI::Builders::ArgumentBuilder.new(var_gen, arg_info) }
|
7
7
|
|
8
8
|
describe 'for an argument with direction :in' do
|
9
|
+
describe 'for :c' do
|
10
|
+
describe 'with full ownership transfer' do
|
11
|
+
let(:arg_info) do
|
12
|
+
get_introspection_data('GIMarshallingTests', 'array_struct_take_in').args[0]
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'has the correct value for #pre_conversion' do
|
16
|
+
builder.pre_conversion.
|
17
|
+
must_equal ['_v1 = GirFFI::SizedArray.copy_from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)']
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has the correct value for #post_conversion' do
|
21
|
+
builder.post_conversion.must_equal []
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
9
26
|
describe 'for :callback' do
|
10
27
|
let(:arg_info) do
|
11
28
|
get_introspection_data('Regress', 'test_callback_destroy_notify').args[0]
|
@@ -48,7 +65,7 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
48
65
|
end
|
49
66
|
|
50
67
|
it 'has the correct value for #pre_conversion' do
|
51
|
-
builder.pre_conversion.must_equal ['_v1 =
|
68
|
+
builder.pre_conversion.must_equal ['_v1 = user_data']
|
52
69
|
end
|
53
70
|
|
54
71
|
it 'has the correct value for #post_conversion' do
|
@@ -68,7 +85,7 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
68
85
|
end
|
69
86
|
|
70
87
|
it 'has the correct value for #pre_conversion' do
|
71
|
-
builder.pre_conversion.must_equal ['_v1 = GirFFI::
|
88
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::ArgHelper.store(foo)']
|
72
89
|
end
|
73
90
|
|
74
91
|
it 'has the correct value for #post_conversion' do
|
@@ -83,11 +100,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
83
100
|
let(:arg_info) { get_introspection_data('GIMarshallingTests', 'genum_out').args[0] }
|
84
101
|
|
85
102
|
it 'has the correct value for #pre_conversion' do
|
86
|
-
builder.pre_conversion.must_equal ['_v1 =
|
103
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new GIMarshallingTests::GEnum']
|
87
104
|
end
|
88
105
|
|
89
106
|
it 'has the correct value for #post_conversion' do
|
90
|
-
builder.post_conversion.must_equal ['_v2 = _v1
|
107
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::GEnum.get_value_from_pointer(_v1, 0)']
|
91
108
|
end
|
92
109
|
end
|
93
110
|
|
@@ -97,25 +114,42 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
97
114
|
end
|
98
115
|
|
99
116
|
it 'has the correct value for #pre_conversion' do
|
100
|
-
builder.pre_conversion.must_equal ['_v1 =
|
117
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new GIMarshallingTests::Flags']
|
101
118
|
end
|
102
119
|
|
103
120
|
it 'has the correct value for #post_conversion' do
|
104
|
-
builder.post_conversion.must_equal ['_v2 = _v1
|
121
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Flags.get_value_from_pointer(_v1, 0)']
|
105
122
|
end
|
106
123
|
end
|
107
124
|
|
108
125
|
describe 'for :object' do
|
109
|
-
|
110
|
-
|
111
|
-
|
126
|
+
describe 'with full ownership transfer' do
|
127
|
+
let(:arg_info) do
|
128
|
+
get_method_introspection_data('Regress', 'TestObj', 'null_out').args[0]
|
129
|
+
end
|
112
130
|
|
113
|
-
|
114
|
-
|
131
|
+
it 'has the correct value for #pre_conversion' do
|
132
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'has the correct value for #post_conversion' do
|
136
|
+
builder.post_conversion.must_equal ['_v2 = Regress::TestObj.wrap(_v1.get_pointer(0))']
|
137
|
+
end
|
115
138
|
end
|
116
139
|
|
117
|
-
|
118
|
-
|
140
|
+
describe 'with no ownership transfer' do
|
141
|
+
let(:arg_info) do
|
142
|
+
get_method_introspection_data('GIMarshallingTests', 'Object', 'none_out').args[0]
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'has the correct value for #pre_conversion' do
|
146
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'has the correct value for #post_conversion' do
|
150
|
+
builder.post_conversion.
|
151
|
+
must_equal ['_v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }']
|
152
|
+
end
|
119
153
|
end
|
120
154
|
end
|
121
155
|
|
@@ -127,12 +161,13 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
127
161
|
|
128
162
|
it 'has the correct value for #pre_conversion' do
|
129
163
|
builder.pre_conversion.must_equal [
|
130
|
-
'_v1 =
|
164
|
+
'_v1 = FFI::MemoryPointer.new :pointer'
|
131
165
|
]
|
132
166
|
end
|
133
167
|
|
134
168
|
it 'has the correct value for #post_conversion' do
|
135
|
-
builder.post_conversion.
|
169
|
+
builder.post_conversion.
|
170
|
+
must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1.get_pointer(0))']
|
136
171
|
end
|
137
172
|
end
|
138
173
|
|
@@ -157,11 +192,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
157
192
|
end
|
158
193
|
|
159
194
|
it 'has the correct value for #pre_conversion' do
|
160
|
-
builder.pre_conversion.must_equal ['_v1 =
|
195
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
161
196
|
end
|
162
197
|
|
163
198
|
it 'has the correct value for #post_conversion' do
|
164
|
-
builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.
|
199
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.get_pointer(0))']
|
165
200
|
end
|
166
201
|
end
|
167
202
|
|
@@ -172,11 +207,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
172
207
|
end
|
173
208
|
|
174
209
|
it 'has the correct value for #pre_conversion' do
|
175
|
-
builder.pre_conversion.must_equal ['_v1 =
|
210
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
176
211
|
end
|
177
212
|
|
178
213
|
it 'has the correct value for #post_conversion' do
|
179
|
-
builder.post_conversion.must_equal ['_v2 = GLib::Array.wrap(:utf8, _v1.
|
214
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Array.wrap(:utf8, _v1.get_pointer(0))']
|
180
215
|
end
|
181
216
|
end
|
182
217
|
|
@@ -207,11 +242,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
207
242
|
end
|
208
243
|
|
209
244
|
it 'has the correct value for #pre_conversion' do
|
210
|
-
builder.pre_conversion.must_equal ['_v1 =
|
245
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
211
246
|
end
|
212
247
|
|
213
248
|
it 'has the correct value for #post_conversion' do
|
214
|
-
builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.
|
249
|
+
builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.get_pointer(0))']
|
215
250
|
end
|
216
251
|
end
|
217
252
|
|
@@ -221,11 +256,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
221
256
|
end
|
222
257
|
|
223
258
|
it 'has the correct value for #pre_conversion' do
|
224
|
-
builder.pre_conversion.must_equal ['_v1 =
|
259
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
225
260
|
end
|
226
261
|
|
227
262
|
it 'has the correct value for #post_conversion' do
|
228
|
-
builder.post_conversion.must_equal ['_v2 = GLib::Error.wrap(_v1.
|
263
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Error.wrap(_v1.get_pointer(0))']
|
229
264
|
end
|
230
265
|
end
|
231
266
|
|
@@ -236,11 +271,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
236
271
|
end
|
237
272
|
|
238
273
|
it 'has the correct value for #pre_conversion' do
|
239
|
-
builder.pre_conversion.must_equal ['_v1 =
|
274
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
240
275
|
end
|
241
276
|
|
242
277
|
it 'has the correct value for #post_conversion' do
|
243
|
-
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.
|
278
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.get_pointer(0))']
|
244
279
|
end
|
245
280
|
end
|
246
281
|
|
@@ -256,11 +291,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
256
291
|
end
|
257
292
|
|
258
293
|
it 'has the correct value for #pre_conversion' do
|
259
|
-
builder.pre_conversion.must_equal ['_v1 =
|
294
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
260
295
|
end
|
261
296
|
|
262
297
|
it 'has the correct value for #post_conversion' do
|
263
|
-
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1.
|
298
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1.get_pointer(0))']
|
264
299
|
end
|
265
300
|
end
|
266
301
|
end
|
@@ -271,11 +306,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
271
306
|
end
|
272
307
|
|
273
308
|
it 'has the correct value for #pre_conversion' do
|
274
|
-
builder.pre_conversion.must_equal ['_v1 =
|
309
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
275
310
|
end
|
276
311
|
|
277
312
|
it 'has the correct value for #post_conversion' do
|
278
|
-
builder.post_conversion.must_equal ['_v2 = GLib::List.wrap(:utf8, _v1.
|
313
|
+
builder.post_conversion.must_equal ['_v2 = GLib::List.wrap(:utf8, _v1.get_pointer(0))']
|
279
314
|
end
|
280
315
|
end
|
281
316
|
|
@@ -285,11 +320,11 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
285
320
|
end
|
286
321
|
|
287
322
|
it 'has the correct value for #pre_conversion' do
|
288
|
-
builder.pre_conversion.must_equal ['_v1 =
|
323
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
289
324
|
end
|
290
325
|
|
291
326
|
it 'has the correct value for #post_conversion' do
|
292
|
-
builder.post_conversion.must_equal ['_v2 = GLib::SList.wrap(:utf8, _v1.
|
327
|
+
builder.post_conversion.must_equal ['_v2 = GLib::SList.wrap(:utf8, _v1.get_pointer(0))']
|
293
328
|
end
|
294
329
|
end
|
295
330
|
|
@@ -299,11 +334,48 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
299
334
|
end
|
300
335
|
|
301
336
|
it 'has the correct value for #pre_conversion' do
|
302
|
-
builder.pre_conversion.must_equal ['_v1 =
|
337
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
303
338
|
end
|
304
339
|
|
305
340
|
it 'has the correct value for #post_conversion' do
|
306
|
-
builder.post_conversion.must_equal ['_v2 = GLib::HashTable.wrap([:utf8, :utf8], _v1.
|
341
|
+
builder.post_conversion.must_equal ['_v2 = GLib::HashTable.wrap([:utf8, :utf8], _v1.get_pointer(0))']
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
describe 'for :utf8' do
|
346
|
+
describe 'with full ownership transfer' do
|
347
|
+
let(:arg_info) do
|
348
|
+
get_introspection_data('GIMarshallingTests', 'utf8_full_out').args[0]
|
349
|
+
end
|
350
|
+
|
351
|
+
it 'has the correct value for #pre_conversion' do
|
352
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
353
|
+
end
|
354
|
+
|
355
|
+
it 'has the correct value for #post_conversion' do
|
356
|
+
builder.post_conversion.must_equal [
|
357
|
+
'_v2 = _v1.get_pointer(0).tap { |it| it.autorelease = true }.to_utf8'
|
358
|
+
]
|
359
|
+
end
|
360
|
+
|
361
|
+
it 'has the correct value for #return_value_name' do
|
362
|
+
builder.post_conversion
|
363
|
+
builder.return_value_name.must_equal '_v2'
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
describe 'with no ownership transfer' do
|
368
|
+
let(:arg_info) do
|
369
|
+
get_introspection_data('GIMarshallingTests', 'utf8_none_out').args[0]
|
370
|
+
end
|
371
|
+
|
372
|
+
it 'has the correct value for #pre_conversion' do
|
373
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
|
374
|
+
end
|
375
|
+
|
376
|
+
it 'has the correct value for #post_conversion' do
|
377
|
+
builder.post_conversion.must_equal ['_v2 = _v1.get_pointer(0).to_utf8']
|
378
|
+
end
|
307
379
|
end
|
308
380
|
end
|
309
381
|
end
|
@@ -315,12 +387,12 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
315
387
|
end
|
316
388
|
|
317
389
|
it 'has the correct value for #pre_conversion' do
|
318
|
-
builder.pre_conversion.must_equal ['_v1 =
|
319
|
-
"
|
390
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new GIMarshallingTests::Enum',
|
391
|
+
"GIMarshallingTests::Enum.copy_value_to_pointer(#{arg_info.name}, _v1)"]
|
320
392
|
end
|
321
393
|
|
322
394
|
it 'has the correct value for #post_conversion' do
|
323
|
-
builder.post_conversion.must_equal ['_v2 = _v1
|
395
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Enum.get_value_from_pointer(_v1, 0)']
|
324
396
|
end
|
325
397
|
end
|
326
398
|
|
@@ -330,12 +402,13 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
330
402
|
end
|
331
403
|
|
332
404
|
it 'has the correct value for #pre_conversion' do
|
333
|
-
builder.pre_conversion.
|
334
|
-
|
405
|
+
builder.pre_conversion.
|
406
|
+
must_equal ['_v1 = FFI::MemoryPointer.new GIMarshallingTests::NoTypeFlags',
|
407
|
+
"GIMarshallingTests::NoTypeFlags.copy_value_to_pointer(#{arg_info.name}, _v1)"]
|
335
408
|
end
|
336
409
|
|
337
410
|
it 'has the correct value for #post_conversion' do
|
338
|
-
builder.post_conversion.must_equal ['_v2 = _v1
|
411
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::NoTypeFlags.get_value_from_pointer(_v1, 0)']
|
339
412
|
end
|
340
413
|
end
|
341
414
|
|
@@ -349,12 +422,12 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
349
422
|
end
|
350
423
|
|
351
424
|
it 'has the correct value for #pre_conversion' do
|
352
|
-
builder.pre_conversion.must_equal ['_v1 =
|
353
|
-
"_v1.
|
425
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :int32',
|
426
|
+
"_v1.put_int32 0, #{arg_info.name}"]
|
354
427
|
end
|
355
428
|
|
356
429
|
it 'has the correct value for #post_conversion' do
|
357
|
-
builder.post_conversion.must_equal ['_v2 = _v1.
|
430
|
+
builder.post_conversion.must_equal ['_v2 = _v1.get_int32(0)']
|
358
431
|
end
|
359
432
|
end
|
360
433
|
|
@@ -374,12 +447,12 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
374
447
|
|
375
448
|
it 'has the correct value for #pre_conversion' do
|
376
449
|
builder.pre_conversion.must_equal ['n_ints = ints.nil? ? 0 : ints.length',
|
377
|
-
'_v1 =
|
378
|
-
'_v1.
|
450
|
+
'_v1 = FFI::MemoryPointer.new :int32',
|
451
|
+
'_v1.put_int32 0, n_ints']
|
379
452
|
end
|
380
453
|
|
381
454
|
it 'has the correct value for #post_conversion' do
|
382
|
-
builder.post_conversion.must_equal ['_v2 = _v1.
|
455
|
+
builder.post_conversion.must_equal ['_v2 = _v1.get_int32(0)']
|
383
456
|
end
|
384
457
|
end
|
385
458
|
|
@@ -389,12 +462,12 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
389
462
|
end
|
390
463
|
|
391
464
|
it 'has the correct value for #pre_conversion' do
|
392
|
-
builder.pre_conversion.must_equal ['_v1 =
|
393
|
-
'_v1.
|
465
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer',
|
466
|
+
'_v1.put_pointer 0, GLib::Strv.from(g_strv)']
|
394
467
|
end
|
395
468
|
|
396
469
|
it 'has the correct value for #post_conversion' do
|
397
|
-
builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.
|
470
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.get_pointer(0))']
|
398
471
|
end
|
399
472
|
end
|
400
473
|
|
@@ -404,12 +477,12 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
404
477
|
end
|
405
478
|
|
406
479
|
it 'has the correct value for #pre_conversion' do
|
407
|
-
builder.pre_conversion.must_equal ['_v1 =
|
408
|
-
'_v1.
|
480
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer',
|
481
|
+
'_v1.put_pointer 0, GLib::PtrArray.from(:utf8, parray_)']
|
409
482
|
end
|
410
483
|
|
411
484
|
it 'has the correct value for #post_conversion' do
|
412
|
-
builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.
|
485
|
+
builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.get_pointer(0))']
|
413
486
|
end
|
414
487
|
end
|
415
488
|
|
@@ -419,12 +492,32 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
419
492
|
end
|
420
493
|
|
421
494
|
it 'has the correct value for #pre_conversion' do
|
422
|
-
builder.pre_conversion.must_equal ['_v1 =
|
423
|
-
'_v1.
|
495
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer',
|
496
|
+
'_v1.put_pointer 0, GirFFI::InPointer.from_utf8(utf8)']
|
424
497
|
end
|
425
498
|
|
426
499
|
it 'has the correct value for #post_conversion' do
|
427
|
-
builder.post_conversion.must_equal ['_v2 = _v1.
|
500
|
+
builder.post_conversion.must_equal ['_v2 = _v1.get_pointer(0).to_utf8']
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
describe 'for :struct' do
|
505
|
+
describe 'with full ownership transfer' do
|
506
|
+
let(:arg_info) do
|
507
|
+
get_introspection_data('GIMarshallingTests', 'boxed_struct_inout').args[0]
|
508
|
+
end
|
509
|
+
|
510
|
+
it 'has the correct value for #pre_conversion' do
|
511
|
+
builder.pre_conversion.must_equal [
|
512
|
+
'_v1 = FFI::MemoryPointer.new :pointer',
|
513
|
+
'_v1.put_pointer 0, GIMarshallingTests::BoxedStruct.copy_from(struct_)'
|
514
|
+
]
|
515
|
+
end
|
516
|
+
|
517
|
+
it 'has the correct value for #post_conversion' do
|
518
|
+
builder.post_conversion.
|
519
|
+
must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap_own(_v1.get_pointer(0))']
|
520
|
+
end
|
428
521
|
end
|
429
522
|
end
|
430
523
|
|
@@ -437,13 +530,13 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
437
530
|
it 'has the correct value for #pre_conversion' do
|
438
531
|
builder.pre_conversion.must_equal [
|
439
532
|
'GirFFI::ArgHelper.check_fixed_array_size 4, ints, "ints"',
|
440
|
-
'_v1 =
|
441
|
-
'_v1.
|
533
|
+
'_v1 = FFI::MemoryPointer.new :pointer',
|
534
|
+
'_v1.put_pointer 0, GirFFI::SizedArray.from(:gint32, 4, ints)'
|
442
535
|
]
|
443
536
|
end
|
444
537
|
|
445
538
|
it 'has the correct value for #post_conversion' do
|
446
|
-
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.
|
539
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.get_pointer(0))']
|
447
540
|
end
|
448
541
|
end
|
449
542
|
|
@@ -463,13 +556,13 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
463
556
|
|
464
557
|
it 'has the correct value for #pre_conversion' do
|
465
558
|
builder.pre_conversion.must_equal [
|
466
|
-
'_v1 =
|
467
|
-
'_v1.
|
559
|
+
'_v1 = FFI::MemoryPointer.new :pointer',
|
560
|
+
'_v1.put_pointer 0, GirFFI::SizedArray.copy_from(:gint32, -1, ints)'
|
468
561
|
]
|
469
562
|
end
|
470
563
|
|
471
564
|
it 'has the correct value for #post_conversion' do
|
472
|
-
builder.post_conversion.must_equal ['_v3 = GirFFI::SizedArray.wrap(:gint32, _v2, _v1.
|
565
|
+
builder.post_conversion.must_equal ['_v3 = GirFFI::SizedArray.wrap(:gint32, _v2, _v1.get_pointer(0))']
|
473
566
|
end
|
474
567
|
end
|
475
568
|
end
|
@@ -503,8 +596,8 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
503
596
|
end
|
504
597
|
|
505
598
|
it 'has the correct value for #pre_conversion' do
|
506
|
-
builder.pre_conversion.must_equal ['_v1 =
|
507
|
-
'_v1.
|
599
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :int32',
|
600
|
+
'_v1.put_int32 0, 0']
|
508
601
|
end
|
509
602
|
|
510
603
|
it 'has the correct value for #post_conversion' do
|
@@ -522,7 +615,7 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
522
615
|
end
|
523
616
|
|
524
617
|
it 'has the correct value for #pre_conversion' do
|
525
|
-
builder.pre_conversion.must_equal ['_v1 =
|
618
|
+
builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :int32']
|
526
619
|
end
|
527
620
|
|
528
621
|
it 'has the correct value for #post_conversion' do
|