gir_ffi 0.7.8 → 0.7.9
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 +16 -0
- data/README.md +24 -11
- data/TODO.md +10 -2
- data/gir_ffi.gemspec +2 -2
- data/lib/ffi-glib/array.rb +1 -1
- data/lib/ffi-glib/hash_table.rb +0 -4
- data/lib/ffi-gobject.rb +10 -6
- data/lib/ffi-gobject/object.rb +17 -0
- data/lib/ffi-gobject/ruby_closure.rb +1 -1
- data/lib/ffi-gobject/value.rb +28 -4
- data/lib/ffi-gobject_introspection.rb +4 -0
- data/lib/ffi-gobject_introspection/g_error.rb +2 -2
- data/lib/ffi-gobject_introspection/i_base_info.rb +1 -3
- data/lib/ffi-gobject_introspection/i_callable_info.rb +8 -0
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +2 -0
- data/lib/ffi-gobject_introspection/i_repository.rb +4 -4
- data/lib/ffi-gobject_introspection/lib.rb +57 -32
- data/lib/gir_ffi.rb +1 -1
- data/lib/gir_ffi/boxed_base.rb +40 -0
- data/lib/gir_ffi/builders/argument_builder.rb +11 -3
- data/lib/gir_ffi/builders/base_argument_builder.rb +4 -0
- data/lib/gir_ffi/builders/boxed_builder.rb +29 -0
- data/lib/gir_ffi/builders/callback_builder.rb +3 -1
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +9 -1
- data/lib/gir_ffi/builders/field_builder.rb +68 -18
- data/lib/gir_ffi/builders/function_builder.rb +12 -2
- data/lib/gir_ffi/builders/mapping_method_builder.rb +7 -5
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/module_builder.rb +1 -1
- data/lib/gir_ffi/builders/registered_type_builder.rb +0 -9
- data/lib/gir_ffi/builders/return_value_builder.rb +0 -1
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -1
- data/lib/gir_ffi/builders/struct_builder.rb +4 -16
- data/lib/gir_ffi/builders/union_builder.rb +2 -13
- data/lib/gir_ffi/builders/user_defined_builder.rb +6 -6
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +44 -0
- data/lib/gir_ffi/builders/vfunc_builder.rb +3 -1
- data/lib/gir_ffi/callback_base.rb +5 -2
- data/lib/gir_ffi/class_base.rb +6 -7
- data/lib/gir_ffi/enum_base.rb +5 -0
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -0
- data/lib/gir_ffi/field_argument_info.rb +4 -0
- data/lib/gir_ffi/in_out_pointer.rb +1 -1
- data/lib/gir_ffi/in_pointer.rb +2 -2
- data/lib/gir_ffi/info_ext/i_arg_info.rb +12 -2
- data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_callback_info.rb +7 -2
- data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +7 -2
- data/lib/gir_ffi/info_ext/i_type_info.rb +21 -9
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +5 -0
- data/lib/gir_ffi/interface_base.rb +5 -0
- data/lib/gir_ffi/object_base.rb +5 -0
- data/lib/gir_ffi/receiver_argument_info.rb +5 -0
- data/lib/gir_ffi/registered_type_base.rb +5 -0
- data/lib/gir_ffi/return_value_info.rb +3 -1
- data/lib/gir_ffi/sized_array.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +2 -24
- data/lib/gir_ffi/type_map.rb +5 -1
- data/lib/gir_ffi/union_base.rb +2 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +1 -1
- data/test/base_test_helper.rb +6 -6
- data/test/ffi-glib/hash_table_test.rb +7 -7
- data/test/ffi-glib/iconv_test.rb +2 -3
- data/test/ffi-glib/main_loop_test.rb +2 -2
- data/test/ffi-gobject/gobject_test.rb +1 -1
- data/test/ffi-gobject/object_test.rb +5 -14
- data/test/ffi-gobject/value_test.rb +30 -6
- data/test/ffi-gobject_introspection/i_base_info_test.rb +6 -6
- data/test/ffi-gobject_introspection/i_repository_test.rb +2 -4
- data/test/gir_ffi/arg_helper_test.rb +1 -1
- data/test/gir_ffi/builder_test.rb +18 -12
- data/test/gir_ffi/builders/argument_builder_test.rb +2 -5
- data/test/gir_ffi/builders/callback_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +11 -10
- data/test/gir_ffi/builders/field_builder_test.rb +0 -2
- data/test/gir_ffi/builders/function_builder_test.rb +156 -147
- data/test/gir_ffi/builders/interface_builder_test.rb +1 -1
- data/test/gir_ffi/builders/module_builder_test.rb +2 -2
- data/test/gir_ffi/builders/object_builder_test.rb +2 -2
- data/test/gir_ffi/builders/property_builder_test.rb +5 -5
- data/test/gir_ffi/builders/return_value_builder_test.rb +30 -30
- data/test/gir_ffi/builders/struct_builder_test.rb +14 -14
- data/test/gir_ffi/builders/user_defined_builder_test.rb +21 -22
- data/test/gir_ffi/builders/vfunc_builder_test.rb +57 -0
- data/test/gir_ffi/class_base_test.rb +8 -8
- data/test/gir_ffi/ffi_ext/pointer_test.rb +4 -4
- data/test/gir_ffi/g_type_test.rb +1 -1
- data/test/gir_ffi/in_pointer_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +3 -3
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_field_info_test.rb +8 -8
- data/test/gir_ffi/info_ext/i_function_info_test.rb +13 -13
- data/test/gir_ffi/info_ext/i_type_info_test.rb +131 -132
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
- data/test/gir_ffi/interface_base_test.rb +3 -3
- data/test/gir_ffi/object_base_test.rb +3 -3
- data/test/gir_ffi/sized_array_test.rb +2 -2
- data/test/gir_ffi/type_map_test.rb +3 -3
- data/test/gir_ffi/unintrospectable_type_info_test.rb +14 -14
- data/test/gir_ffi/user_defined_property_info_test.rb +1 -1
- data/test/gir_ffi/user_defined_type_info_test.rb +25 -12
- data/test/gir_ffi/zero_terminated_test.rb +0 -1
- data/test/gir_ffi_test.rb +3 -3
- data/test/gir_ffi_test_helper.rb +4 -0
- data/test/integration/generated_gimarshallingtests_test.rb +31 -25
- data/test/integration/generated_gio_test.rb +1 -1
- data/test/integration/generated_gobject_test.rb +1 -1
- data/test/integration/generated_regress_test.rb +18 -22
- metadata +11 -8
@@ -22,7 +22,7 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
22
22
|
describe 'for :zero_terminated' do
|
23
23
|
let(:arg_info) {
|
24
24
|
get_introspection_data('GIMarshallingTests',
|
25
|
-
|
25
|
+
'array_in_len_zero_terminated').args[0]
|
26
26
|
}
|
27
27
|
|
28
28
|
it 'has the correct value for #pre_conversion' do
|
@@ -109,7 +109,6 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
describe 'for :struct' do
|
112
|
-
|
113
112
|
describe 'when not allocated by the caller' do
|
114
113
|
let(:arg_info) {
|
115
114
|
get_introspection_data('GIMarshallingTests', 'boxed_struct_out').args[0]
|
@@ -156,7 +155,6 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
156
155
|
end
|
157
156
|
|
158
157
|
describe 'for :array' do
|
159
|
-
|
160
158
|
describe 'when allocated by the callee' do
|
161
159
|
let(:arg_info) {
|
162
160
|
get_introspection_data('GIMarshallingTests', 'garray_utf8_none_out').args[0]
|
@@ -221,7 +219,6 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
221
219
|
end
|
222
220
|
|
223
221
|
describe 'for :c' do
|
224
|
-
|
225
222
|
describe 'with fixed size' do
|
226
223
|
let(:arg_info) {
|
227
224
|
get_introspection_data('GIMarshallingTests', 'array_fixed_out').args[0]
|
@@ -243,7 +240,7 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
243
240
|
|
244
241
|
let(:length_argument) { Object.new }
|
245
242
|
before do
|
246
|
-
|
243
|
+
allow(length_argument).to receive(:post_converted_name).and_return 'bar'
|
247
244
|
builder.length_arg = length_argument
|
248
245
|
end
|
249
246
|
|
@@ -52,7 +52,7 @@ describe GirFFI::Builders::CallbackBuilder do
|
|
52
52
|
describe 'for a callback with one out argument' do
|
53
53
|
let(:callback_info) {
|
54
54
|
get_introspection_data('GIMarshallingTests',
|
55
|
-
|
55
|
+
'CallbackOneOutParameter')
|
56
56
|
}
|
57
57
|
it 'returns a valid mapping method' do
|
58
58
|
expected = <<-CODE.reset_indentation
|
@@ -2,11 +2,12 @@ require 'gir_ffi_test_helper'
|
|
2
2
|
|
3
3
|
describe GirFFI::Builders::CallbackReturnValueBuilder do
|
4
4
|
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
5
|
-
let(:return_value_info) { GirFFI::ReturnValueInfo.new(type_info) }
|
5
|
+
let(:return_value_info) { GirFFI::ReturnValueInfo.new(type_info, ownership_transfer, false) }
|
6
6
|
let(:type_info) { callback_info.return_type }
|
7
|
+
let(:ownership_transfer) { callback_info.caller_owns }
|
7
8
|
let(:builder) {
|
8
9
|
GirFFI::Builders::CallbackReturnValueBuilder.new(var_gen,
|
9
|
-
|
10
|
+
return_value_info)
|
10
11
|
}
|
11
12
|
|
12
13
|
before do
|
@@ -29,7 +30,7 @@ describe GirFFI::Builders::CallbackReturnValueBuilder do
|
|
29
30
|
describe 'for :void' do
|
30
31
|
let(:callback_info) {
|
31
32
|
get_introspection_data('GIMarshallingTests',
|
32
|
-
|
33
|
+
'CallbackMultipleOutParameters')
|
33
34
|
}
|
34
35
|
|
35
36
|
it 'has no statements in #post_conversion' do
|
@@ -45,8 +46,8 @@ describe GirFFI::Builders::CallbackReturnValueBuilder do
|
|
45
46
|
describe 'for :enum' do
|
46
47
|
let(:callback_info) {
|
47
48
|
get_vfunc_introspection_data('GIMarshallingTests',
|
48
|
-
|
49
|
-
|
49
|
+
'Object',
|
50
|
+
'vfunc_return_enum')
|
50
51
|
}
|
51
52
|
|
52
53
|
it 'converts the result' do
|
@@ -61,17 +62,17 @@ describe GirFFI::Builders::CallbackReturnValueBuilder do
|
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
64
|
-
describe 'for :object' do
|
65
|
+
describe 'for :object with full transfer' do
|
65
66
|
let(:callback_info) {
|
66
67
|
get_vfunc_introspection_data('GIMarshallingTests',
|
67
|
-
|
68
|
-
|
68
|
+
'Object',
|
69
|
+
'vfunc_return_object_transfer_full')
|
69
70
|
}
|
70
71
|
|
71
|
-
it '
|
72
|
+
it 'increases the refcount of the result and converts it to a pointer' do
|
72
73
|
# Ensure variable names are generated in order
|
73
74
|
builder.capture_variable_name.must_equal '_v1'
|
74
|
-
builder.post_conversion.must_equal ['_v2 = GObject::Object.from(_v1).to_ptr']
|
75
|
+
builder.post_conversion.must_equal ['_v2 = GObject::Object.from(_v1.ref).to_ptr']
|
75
76
|
end
|
76
77
|
|
77
78
|
it 'returns the result of the conversion' do
|
@@ -11,7 +11,6 @@ describe GirFFI::Builders::FieldBuilder do
|
|
11
11
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
12
12
|
_v2 = GirFFI::InOutPointer.new(:gint8, _v1)
|
13
13
|
_v3 = _v2.to_value
|
14
|
-
|
15
14
|
_v3
|
16
15
|
end
|
17
16
|
CODE
|
@@ -55,7 +54,6 @@ describe GirFFI::Builders::FieldBuilder do
|
|
55
54
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
56
55
|
_v2 = GirFFI::InOutPointer.new(Regress::TestEnum, _v1)
|
57
56
|
_v3 = _v2.to_value
|
58
|
-
|
59
57
|
_v3
|
60
58
|
end
|
61
59
|
CODE
|
@@ -1,170 +1,144 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::Builders::FunctionBuilder do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
8
|
-
code = fbuilder.generate
|
9
|
-
|
10
|
-
expected = <<-CODE
|
11
|
-
def self.test_array_fixed_out_objects
|
12
|
-
_v1 = GirFFI::InOutPointer.for [:pointer, :c]
|
13
|
-
Regress::Lib.regress_test_array_fixed_out_objects _v1
|
14
|
-
_v2 = GirFFI::SizedArray.wrap([:pointer, Regress::TestObj], 2, _v1.to_value)
|
15
|
-
return _v2
|
16
|
-
end
|
17
|
-
CODE
|
18
|
-
|
19
|
-
assert_equal expected.reset_indentation, code
|
20
|
-
end
|
4
|
+
describe '#generate' do
|
5
|
+
let(:builder) { GirFFI::Builders::FunctionBuilder.new function_info }
|
6
|
+
let(:code) { builder.generate }
|
21
7
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
8
|
+
describe 'for Regress:test_array_fixed_out_objects' do
|
9
|
+
let(:function_info) { get_introspection_data 'Regress', 'test_array_fixed_out_objects' }
|
10
|
+
it 'builds a correct definition' do
|
11
|
+
skip unless function_info
|
12
|
+
code.must_equal <<-CODE.reset_indentation
|
13
|
+
def self.test_array_fixed_out_objects
|
14
|
+
_v1 = GirFFI::InOutPointer.for [:pointer, :c]
|
15
|
+
Regress::Lib.regress_test_array_fixed_out_objects _v1
|
16
|
+
_v2 = GirFFI::SizedArray.wrap([:pointer, Regress::TestObj], 2, _v1.to_value)
|
17
|
+
return _v2
|
18
|
+
end
|
19
|
+
CODE
|
34
20
|
end
|
35
|
-
|
36
|
-
|
37
|
-
assert_equal expected.reset_indentation, code
|
38
|
-
end
|
21
|
+
end
|
39
22
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
23
|
+
describe 'for functions having a linked length argument' do
|
24
|
+
let(:function_info) { get_introspection_data 'Regress', 'test_array_gint16_in' }
|
25
|
+
it 'builds a correct definition' do
|
26
|
+
code.must_equal <<-CODE.reset_indentation
|
27
|
+
def self.test_array_gint16_in(ints)
|
28
|
+
n_ints = ints.nil? ? 0 : ints.length
|
29
|
+
_v1 = n_ints
|
30
|
+
_v2 = GirFFI::SizedArray.from(:gint16, -1, ints)
|
31
|
+
_v3 = Regress::Lib.regress_test_array_gint16_in _v1, _v2
|
32
|
+
return _v3
|
33
|
+
end
|
34
|
+
CODE
|
52
35
|
end
|
53
|
-
|
54
|
-
|
55
|
-
assert_equal expected.reset_indentation, code
|
56
|
-
end
|
36
|
+
end
|
57
37
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
return _v4
|
38
|
+
describe 'for functions with callbacks' do
|
39
|
+
let(:function_info) { get_introspection_data 'Regress', 'test_callback_destroy_notify' }
|
40
|
+
it 'builds a correct definition' do
|
41
|
+
code.must_equal <<-CODE.reset_indentation
|
42
|
+
def self.test_callback_destroy_notify(callback, user_data, notify)
|
43
|
+
_v1 = Regress::TestCallbackUserData.from(callback)
|
44
|
+
_v2 = GirFFI::InPointer.from_closure_data(user_data)
|
45
|
+
_v3 = GLib::DestroyNotify.from(notify)
|
46
|
+
_v4 = Regress::Lib.regress_test_callback_destroy_notify _v1, _v2, _v3
|
47
|
+
return _v4
|
48
|
+
end
|
49
|
+
CODE
|
71
50
|
end
|
72
|
-
|
73
|
-
|
74
|
-
assert_equal expected.reset_indentation, code
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'creates a call to GObject::Value#from for functions that take a GValue' do
|
78
|
-
go = get_introspection_data 'GIMarshallingTests', 'gvalue_in'
|
79
|
-
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
80
|
-
code = fbuilder.generate
|
51
|
+
end
|
81
52
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
53
|
+
describe 'for constructors' do
|
54
|
+
let(:function_info) { get_method_introspection_data 'Regress', 'TestObj', 'new_from_file' }
|
55
|
+
it 'builds correct definition' do
|
56
|
+
code.must_equal <<-CODE.reset_indentation
|
57
|
+
def self.new_from_file(x)
|
58
|
+
_v1 = GirFFI::InPointer.from(:utf8, x)
|
59
|
+
_v2 = FFI::MemoryPointer.new(:pointer).write_pointer nil
|
60
|
+
_v3 = Regress::Lib.regress_test_obj_new_from_file _v1, _v2
|
61
|
+
GirFFI::ArgHelper.check_error(_v2)
|
62
|
+
_v4 = self.constructor_wrap(_v3)
|
63
|
+
return _v4
|
64
|
+
end
|
65
|
+
CODE
|
86
66
|
end
|
87
|
-
|
88
|
-
|
89
|
-
assert_equal expected.reset_indentation, code
|
90
|
-
end
|
67
|
+
end
|
91
68
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
_v2 = GirFFI::SizedArray.from(:gint32, -1, arr)
|
102
|
-
Regress::Lib.regress_test_array_int_null_in _v2, _v1
|
69
|
+
describe 'for functions that take a GValue' do
|
70
|
+
let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_in' }
|
71
|
+
it 'creates a call to GObject::Value#from' do
|
72
|
+
code.must_equal <<-CODE.reset_indentation
|
73
|
+
def self.gvalue_in(value)
|
74
|
+
_v1 = GObject::Value.from(value)
|
75
|
+
GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_in _v1
|
76
|
+
end
|
77
|
+
CODE
|
103
78
|
end
|
104
|
-
|
105
|
-
|
106
|
-
assert_equal expected.reset_indentation, code
|
107
|
-
end
|
79
|
+
end
|
108
80
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
_v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.to_value)
|
121
|
-
return _v4
|
81
|
+
describe 'for functions with a nullable input array' do
|
82
|
+
let(:function_info) { get_introspection_data 'Regress', 'test_array_int_null_in' }
|
83
|
+
it 'builds correct definition' do
|
84
|
+
code.must_equal <<-CODE.reset_indentation
|
85
|
+
def self.test_array_int_null_in(arr)
|
86
|
+
len = arr.nil? ? 0 : arr.length
|
87
|
+
_v1 = len
|
88
|
+
_v2 = GirFFI::SizedArray.from(:gint32, -1, arr)
|
89
|
+
Regress::Lib.regress_test_array_int_null_in _v2, _v1
|
90
|
+
end
|
91
|
+
CODE
|
122
92
|
end
|
123
|
-
|
124
|
-
|
125
|
-
assert_equal expected.reset_indentation, code
|
126
|
-
end
|
93
|
+
end
|
127
94
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
_v3 = _v1.to_value
|
142
|
-
_v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.to_value)
|
143
|
-
return _v4
|
95
|
+
describe 'for functions with a nullable output array' do
|
96
|
+
let(:function_info) { get_introspection_data 'Regress', 'test_array_int_null_out' }
|
97
|
+
it 'builds correct definition' do
|
98
|
+
code.must_equal <<-CODE.reset_indentation
|
99
|
+
def self.test_array_int_null_out
|
100
|
+
_v1 = GirFFI::InOutPointer.for :gint32
|
101
|
+
_v2 = GirFFI::InOutPointer.for [:pointer, :c]
|
102
|
+
Regress::Lib.regress_test_array_int_null_out _v2, _v1
|
103
|
+
_v3 = _v1.to_value
|
104
|
+
_v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.to_value)
|
105
|
+
return _v4
|
106
|
+
end
|
107
|
+
CODE
|
144
108
|
end
|
145
|
-
|
146
|
-
|
147
|
-
assert_equal expected.reset_indentation, code
|
148
|
-
end
|
149
|
-
|
150
|
-
it 'builds a correct definition for a simple method' do
|
151
|
-
go = get_method_introspection_data 'Regress', 'TestObj', 'instance_method'
|
152
|
-
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
153
|
-
code = fbuilder.generate
|
109
|
+
end
|
154
110
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
111
|
+
describe 'for a method with an inout array with size argument' do
|
112
|
+
let(:function_info) { get_method_introspection_data 'GIMarshallingTests', 'Object', 'method_array_inout' }
|
113
|
+
it 'builds the correct definition' do
|
114
|
+
code.must_equal <<-CODE.reset_indentation
|
115
|
+
def method_array_inout(ints)
|
116
|
+
length = ints.nil? ? 0 : ints.length
|
117
|
+
_v1 = GirFFI::InOutPointer.for :gint32
|
118
|
+
_v1.set_value length
|
119
|
+
_v2 = GirFFI::InOutPointer.for [:pointer, :c]
|
120
|
+
_v2.set_value GirFFI::SizedArray.from(:gint32, -1, ints)
|
121
|
+
GIMarshallingTests::Lib.gi_marshalling_tests_object_method_array_inout self, _v2, _v1
|
122
|
+
_v3 = _v1.to_value
|
123
|
+
_v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.to_value)
|
124
|
+
return _v4
|
125
|
+
end
|
126
|
+
CODE
|
159
127
|
end
|
160
|
-
|
128
|
+
end
|
161
129
|
|
162
|
-
|
163
|
-
|
130
|
+
describe 'for a simple method' do
|
131
|
+
let(:function_info) { get_method_introspection_data 'Regress', 'TestObj', 'instance_method' }
|
164
132
|
|
165
|
-
|
166
|
-
|
167
|
-
|
133
|
+
it 'builds a correct definition' do
|
134
|
+
code.must_equal <<-CODE.reset_indentation
|
135
|
+
def instance_method
|
136
|
+
_v1 = Regress::Lib.regress_test_obj_instance_method self
|
137
|
+
return _v1
|
138
|
+
end
|
139
|
+
CODE
|
140
|
+
end
|
141
|
+
end
|
168
142
|
|
169
143
|
describe 'for GLib::Variant.get_strv' do
|
170
144
|
let(:function_info) { get_method_introspection_data 'GLib', 'Variant', 'get_strv' }
|
@@ -197,7 +171,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
197
171
|
end
|
198
172
|
end
|
199
173
|
|
200
|
-
describe 'for GIMarshallingTests::Object
|
174
|
+
describe 'for GIMarshallingTests::Object#method_int8_arg_and_out_callee' do
|
201
175
|
let(:function_info) {
|
202
176
|
get_method_introspection_data('GIMarshallingTests', 'Object',
|
203
177
|
'method_int8_arg_and_out_callee')
|
@@ -216,5 +190,40 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
216
190
|
CODE
|
217
191
|
end
|
218
192
|
end
|
193
|
+
|
194
|
+
describe 'for GIMarshallingTests::Object.full_inout' do
|
195
|
+
let(:function_info) {
|
196
|
+
get_method_introspection_data('GIMarshallingTests', 'Object',
|
197
|
+
'full_inout')
|
198
|
+
}
|
199
|
+
|
200
|
+
it 'builds a correct definition' do
|
201
|
+
code.must_equal <<-CODE.reset_indentation
|
202
|
+
def self.full_inout(object)
|
203
|
+
_v1 = GirFFI::InOutPointer.for [:pointer, GIMarshallingTests::Object]
|
204
|
+
_v1.set_value GIMarshallingTests::Object.from(object.ref)
|
205
|
+
GIMarshallingTests::Lib.gi_marshalling_tests_object_full_inout _v1
|
206
|
+
_v2 = GIMarshallingTests::Object.wrap(_v1.to_value)
|
207
|
+
return _v2
|
208
|
+
end
|
209
|
+
CODE
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
describe 'for Regress::TestObj#instance_method_full' do
|
214
|
+
let(:function_info) {
|
215
|
+
get_method_introspection_data('Regress', 'TestObj',
|
216
|
+
'instance_method_full')
|
217
|
+
}
|
218
|
+
|
219
|
+
it 'builds a correct definition including self.ref' do
|
220
|
+
skip unless function_info
|
221
|
+
code.must_equal <<-CODE.reset_indentation
|
222
|
+
def instance_method_full
|
223
|
+
Regress::Lib.regress_test_obj_instance_method_full self.ref
|
224
|
+
end
|
225
|
+
CODE
|
226
|
+
end
|
227
|
+
end
|
219
228
|
end
|
220
229
|
end
|