gir_ffi 0.7.7 → 0.7.8
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/array.rb +1 -1
- data/lib/ffi-glib/error.rb +1 -2
- data/lib/ffi-glib/hash_table.rb +2 -2
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-gobject/base.rb +23 -23
- data/lib/ffi-gobject/object.rb +7 -3
- data/lib/ffi-gobject/value.rb +6 -1
- data/lib/ffi-gobject.rb +9 -6
- data/lib/ffi-gobject_introspection/i_base_info.rb +3 -3
- data/lib/ffi-gobject_introspection/i_constant_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_repository.rb +4 -1
- data/lib/ffi-gobject_introspection/i_type_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_unresolved_info.rb +7 -0
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi/builders/argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +37 -29
- data/lib/gir_ffi/builders/callback_argument_builder.rb +57 -27
- data/lib/gir_ffi/builders/closure_convertor.rb +12 -8
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +12 -8
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +11 -7
- data/lib/gir_ffi/builders/field_builder.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +2 -2
- data/lib/gir_ffi/builders/method_template.rb +1 -1
- data/lib/gir_ffi/builders/null_convertor.rb +11 -7
- data/lib/gir_ffi/builders/property_builder.rb +1 -1
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +17 -13
- data/lib/gir_ffi/error_argument_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +12 -0
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +2 -2
- data/lib/gir_ffi/info_ext/safe_function_name.rb +1 -1
- data/lib/gir_ffi/info_ext.rb +1 -0
- data/lib/gir_ffi/module_base.rb +1 -1
- data/lib/gir_ffi/receiver_argument_info.rb +15 -12
- data/lib/gir_ffi/user_data_argument_info.rb +17 -15
- data/lib/gir_ffi/user_data_type_info.rb +14 -12
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +1 -1
- data/test/base_test_helper.rb +15 -15
- data/test/ffi-glib/array_test.rb +38 -38
- data/test/ffi-glib/byte_array_test.rb +6 -7
- data/test/ffi-glib/bytes_test.rb +9 -9
- data/test/ffi-glib/hash_table_test.rb +26 -23
- data/test/ffi-glib/iconv_test.rb +5 -5
- data/test/ffi-glib/list_test.rb +16 -16
- data/test/ffi-glib/main_loop_test.rb +6 -6
- data/test/ffi-glib/ptr_array_test.rb +45 -45
- data/test/ffi-glib/ruby_closure_test.rb +6 -6
- data/test/ffi-glib/s_list_test.rb +15 -15
- data/test/ffi-glib/strv_test.rb +21 -21
- data/test/ffi-glib/variant_test.rb +4 -4
- data/test/ffi-gobject/gobject_test.rb +35 -35
- data/test/ffi-gobject/object_class_test.rb +1 -1
- data/test/ffi-gobject/object_test.rb +29 -6
- data/test/ffi-gobject/value_test.rb +66 -52
- data/test/ffi-gobject_introspection/i_base_info_test.rb +10 -11
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +6 -6
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +4 -5
- data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -2
- data/test/ffi-gobject_introspection/i_object_info_test.rb +5 -5
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +9 -8
- data/test/ffi-gobject_introspection/i_repository_test.rb +16 -16
- data/test/ffi-gobject_introspection/i_type_info_test.rb +16 -2
- data/test/ffi-gobject_introspection/lib_test.rb +2 -2
- data/test/ffi-gobject_test.rb +50 -40
- data/test/gir_ffi/arg_helper_test.rb +5 -5
- data/test/gir_ffi/builder_test.rb +41 -41
- data/test/gir_ffi/builders/argument_builder_test.rb +240 -207
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -1
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +81 -15
- data/test/gir_ffi/builders/callback_builder_test.rb +39 -14
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +41 -33
- data/test/gir_ffi/builders/enum_builder_test.rb +3 -3
- data/test/gir_ffi/builders/field_builder_test.rb +17 -17
- data/test/gir_ffi/builders/function_builder_test.rb +16 -16
- data/test/gir_ffi/builders/interface_builder_test.rb +9 -7
- data/test/gir_ffi/builders/module_builder_test.rb +5 -6
- data/test/gir_ffi/builders/object_builder_test.rb +24 -19
- data/test/gir_ffi/builders/property_builder_test.rb +25 -23
- data/test/gir_ffi/builders/registered_type_builder_test.rb +11 -11
- data/test/gir_ffi/builders/return_value_builder_test.rb +237 -197
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +29 -22
- data/test/gir_ffi/builders/struct_builder_test.rb +10 -10
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +8 -8
- data/test/gir_ffi/builders/union_builder_test.rb +5 -6
- data/test/gir_ffi/builders/user_defined_builder_test.rb +42 -33
- data/test/gir_ffi/builders/vfunc_builder_test.rb +37 -30
- data/test/gir_ffi/callback_base_test.rb +4 -5
- data/test/gir_ffi/class_base_test.rb +35 -28
- data/test/gir_ffi/error_type_info_test.rb +14 -14
- data/test/gir_ffi/ffi_ext/pointer_test.rb +4 -4
- data/test/gir_ffi/g_type_test.rb +6 -6
- data/test/gir_ffi/in_out_pointer_test.rb +27 -27
- data/test/gir_ffi/in_pointer_test.rb +54 -50
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +8 -7
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +7 -7
- data/test/gir_ffi/info_ext/i_field_info_test.rb +10 -8
- data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -15
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +10 -8
- data/test/gir_ffi/info_ext/i_type_info_test.rb +158 -155
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +17 -0
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +12 -10
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +12 -10
- data/test/gir_ffi/interface_base_test.rb +6 -6
- data/test/gir_ffi/method_stubber_test.rb +16 -13
- data/test/gir_ffi/object_base_test.rb +6 -6
- data/test/gir_ffi/sized_array_test.rb +23 -23
- data/test/gir_ffi/type_map_test.rb +3 -3
- data/test/gir_ffi/unintrospectable_type_info_test.rb +18 -18
- data/test/gir_ffi/user_defined_property_info_test.rb +4 -4
- data/test/gir_ffi/user_defined_type_info_test.rb +16 -16
- data/test/gir_ffi/variable_name_generator_test.rb +6 -6
- data/test/gir_ffi/version_test.rb +1 -1
- data/test/gir_ffi/zero_terminated_test.rb +16 -17
- data/test/gir_ffi-base/glib/boolean_test.rb +13 -13
- data/test/gir_ffi-base/glib/strv_test.rb +11 -11
- data/test/gir_ffi_test.rb +18 -18
- data/test/gir_ffi_test_helper.rb +13 -18
- data/test/integration/derived_classes_test.rb +8 -8
- data/test/integration/generated_gimarshallingtests_test.rb +794 -792
- data/test/integration/generated_gio_test.rb +25 -26
- data/test/integration/generated_glib_test.rb +8 -2
- data/test/integration/generated_gobject_test.rb +16 -9
- data/test/integration/generated_pango_ft2_test.rb +1 -2
- data/test/integration/generated_pango_test.rb +2 -2
- data/test/integration/generated_regress_test.rb +785 -705
- data/test/integration/generated_secret_test.rb +5 -5
- data/test/integration/method_lookup_test.rb +5 -5
- data/test/introspection_test_helper.rb +3 -1
- data/test/minitest/stats_plugin.rb +3 -3
- metadata +6 -3
@@ -4,165 +4,177 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
4
4
|
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
5
5
|
let(:builder) { GirFFI::Builders::ArgumentBuilder.new(var_gen, arg_info) }
|
6
6
|
|
7
|
-
describe
|
8
|
-
describe
|
7
|
+
describe 'for an argument with direction :in' do
|
8
|
+
describe 'for :callback' do
|
9
9
|
let(:arg_info) {
|
10
|
-
get_introspection_data('Regress', 'test_callback_destroy_notify').args[0]
|
10
|
+
get_introspection_data('Regress', 'test_callback_destroy_notify').args[0]
|
11
|
+
}
|
11
12
|
|
12
|
-
it
|
13
|
-
builder.pre_conversion.must_equal [
|
13
|
+
it 'has the correct value for #pre_conversion' do
|
14
|
+
builder.pre_conversion.must_equal ['_v1 = Regress::TestCallbackUserData.from(callback)']
|
14
15
|
end
|
15
16
|
|
16
|
-
it
|
17
|
-
builder.post_conversion.must_equal [
|
17
|
+
it 'has the correct value for #post_conversion' do
|
18
|
+
builder.post_conversion.must_equal []
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
describe
|
22
|
-
let(:arg_info) {
|
23
|
-
|
22
|
+
describe 'for :zero_terminated' do
|
23
|
+
let(:arg_info) {
|
24
|
+
get_introspection_data('GIMarshallingTests',
|
25
|
+
'array_in_len_zero_terminated').args[0]
|
26
|
+
}
|
24
27
|
|
25
|
-
it
|
26
|
-
builder.pre_conversion.must_equal [
|
28
|
+
it 'has the correct value for #pre_conversion' do
|
29
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::ZeroTerminated.from(:gint32, ints)']
|
27
30
|
end
|
28
31
|
|
29
|
-
it
|
30
|
-
builder.post_conversion.must_equal [
|
32
|
+
it 'has the correct value for #post_conversion' do
|
33
|
+
builder.post_conversion.must_equal []
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
34
|
-
describe
|
35
|
-
let(:arg_info) { get_introspection_data(
|
37
|
+
describe 'for :void' do
|
38
|
+
let(:arg_info) { get_introspection_data('Regress', 'test_callback_user_data').args[1] }
|
36
39
|
|
37
|
-
describe
|
40
|
+
describe 'when it is a regular argument' do
|
38
41
|
before do
|
39
42
|
builder.closure = false
|
40
43
|
end
|
41
44
|
|
42
|
-
it
|
43
|
-
builder.pre_conversion.must_equal [
|
45
|
+
it 'has the correct value for #pre_conversion' do
|
46
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InPointer.from(:void, user_data)']
|
44
47
|
end
|
45
48
|
|
46
|
-
it
|
47
|
-
builder.post_conversion.must_equal [
|
49
|
+
it 'has the correct value for #post_conversion' do
|
50
|
+
builder.post_conversion.must_equal []
|
48
51
|
end
|
49
52
|
end
|
50
53
|
|
51
|
-
describe
|
54
|
+
describe 'when it is a closure' do
|
52
55
|
before do
|
53
56
|
builder.closure = true
|
54
57
|
end
|
55
58
|
|
56
|
-
it
|
57
|
-
builder.pre_conversion.must_equal [
|
59
|
+
it 'has the correct value for #pre_conversion' do
|
60
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InPointer.from_closure_data(user_data)']
|
58
61
|
end
|
59
62
|
|
60
|
-
it
|
61
|
-
builder.post_conversion.must_equal [
|
63
|
+
it 'has the correct value for #post_conversion' do
|
64
|
+
builder.post_conversion.must_equal []
|
62
65
|
end
|
63
66
|
end
|
64
67
|
end
|
65
68
|
end
|
66
69
|
|
67
|
-
describe
|
68
|
-
describe
|
69
|
-
let(:arg_info) { get_introspection_data(
|
70
|
+
describe 'for an argument with direction :out' do
|
71
|
+
describe 'for :enum' do
|
72
|
+
let(:arg_info) { get_introspection_data('GIMarshallingTests', 'genum_out').args[0] }
|
70
73
|
|
71
|
-
it
|
72
|
-
builder.pre_conversion.must_equal [
|
74
|
+
it 'has the correct value for #pre_conversion' do
|
75
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for GIMarshallingTests::GEnum']
|
73
76
|
end
|
74
77
|
|
75
|
-
it
|
76
|
-
builder.post_conversion.must_equal [
|
78
|
+
it 'has the correct value for #post_conversion' do
|
79
|
+
builder.post_conversion.must_equal ['_v2 = _v1.to_value']
|
77
80
|
end
|
78
81
|
end
|
79
82
|
|
80
|
-
describe
|
83
|
+
describe 'for :flags' do
|
81
84
|
let(:arg_info) {
|
82
|
-
get_introspection_data(
|
85
|
+
get_introspection_data('GIMarshallingTests', 'flags_out').args[0]
|
86
|
+
}
|
83
87
|
|
84
|
-
it
|
85
|
-
builder.pre_conversion.must_equal [
|
88
|
+
it 'has the correct value for #pre_conversion' do
|
89
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for GIMarshallingTests::Flags']
|
86
90
|
end
|
87
91
|
|
88
|
-
it
|
89
|
-
builder.post_conversion.must_equal [
|
92
|
+
it 'has the correct value for #post_conversion' do
|
93
|
+
builder.post_conversion.must_equal ['_v2 = _v1.to_value']
|
90
94
|
end
|
91
95
|
end
|
92
96
|
|
93
|
-
describe
|
97
|
+
describe 'for :object' do
|
94
98
|
let(:arg_info) {
|
95
|
-
get_method_introspection_data(
|
99
|
+
get_method_introspection_data('Regress', 'TestObj', 'null_out').args[0]
|
100
|
+
}
|
96
101
|
|
97
|
-
it
|
98
|
-
builder.pre_conversion.must_equal [
|
102
|
+
it 'has the correct value for #pre_conversion' do
|
103
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, Regress::TestObj]']
|
99
104
|
end
|
100
105
|
|
101
|
-
it
|
102
|
-
builder.post_conversion.must_equal [
|
106
|
+
it 'has the correct value for #post_conversion' do
|
107
|
+
builder.post_conversion.must_equal ['_v2 = Regress::TestObj.wrap(_v1.to_value)']
|
103
108
|
end
|
104
109
|
end
|
105
110
|
|
106
|
-
describe
|
111
|
+
describe 'for :struct' do
|
107
112
|
|
108
|
-
describe
|
113
|
+
describe 'when not allocated by the caller' do
|
109
114
|
let(:arg_info) {
|
110
|
-
get_introspection_data(
|
115
|
+
get_introspection_data('GIMarshallingTests', 'boxed_struct_out').args[0]
|
116
|
+
}
|
111
117
|
|
112
|
-
it
|
113
|
-
builder.pre_conversion.must_equal [
|
118
|
+
it 'has the correct value for #pre_conversion' do
|
119
|
+
builder.pre_conversion.must_equal [
|
120
|
+
'_v1 = GirFFI::InOutPointer.for [:pointer, GIMarshallingTests::BoxedStruct]'
|
121
|
+
]
|
114
122
|
end
|
115
123
|
|
116
|
-
it
|
117
|
-
builder.post_conversion.must_equal [
|
124
|
+
it 'has the correct value for #post_conversion' do
|
125
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap(_v1.to_value)']
|
118
126
|
end
|
119
127
|
end
|
120
128
|
|
121
|
-
describe
|
129
|
+
describe 'when allocated by the caller' do
|
122
130
|
let(:arg_info) {
|
123
|
-
get_method_introspection_data(
|
131
|
+
get_method_introspection_data('Regress', 'TestStructA', 'clone').args[0]
|
132
|
+
}
|
124
133
|
|
125
|
-
it
|
126
|
-
builder.pre_conversion.must_equal [
|
134
|
+
it 'has the correct value for #pre_conversion' do
|
135
|
+
builder.pre_conversion.must_equal ['_v1 = Regress::TestStructA.new']
|
127
136
|
end
|
128
137
|
|
129
|
-
it
|
138
|
+
it 'has empty #post_conversion' do
|
130
139
|
builder.post_conversion.must_equal []
|
131
140
|
end
|
132
141
|
end
|
133
142
|
end
|
134
143
|
|
135
|
-
describe
|
144
|
+
describe 'for :strv' do
|
136
145
|
let(:arg_info) {
|
137
|
-
get_introspection_data(
|
146
|
+
get_introspection_data('GIMarshallingTests', 'gstrv_out').args[0]
|
147
|
+
}
|
138
148
|
|
139
|
-
it
|
140
|
-
builder.pre_conversion.must_equal [
|
149
|
+
it 'has the correct value for #pre_conversion' do
|
150
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :strv]']
|
141
151
|
end
|
142
152
|
|
143
|
-
it
|
144
|
-
builder.post_conversion.must_equal [
|
153
|
+
it 'has the correct value for #post_conversion' do
|
154
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.to_value)']
|
145
155
|
end
|
146
156
|
end
|
147
157
|
|
148
|
-
describe
|
158
|
+
describe 'for :array' do
|
149
159
|
|
150
|
-
describe
|
160
|
+
describe 'when allocated by the callee' do
|
151
161
|
let(:arg_info) {
|
152
|
-
get_introspection_data(
|
162
|
+
get_introspection_data('GIMarshallingTests', 'garray_utf8_none_out').args[0]
|
163
|
+
}
|
153
164
|
|
154
|
-
it
|
155
|
-
builder.pre_conversion.must_equal [
|
165
|
+
it 'has the correct value for #pre_conversion' do
|
166
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :array]']
|
156
167
|
end
|
157
168
|
|
158
|
-
it
|
159
|
-
builder.post_conversion.must_equal [
|
169
|
+
it 'has the correct value for #post_conversion' do
|
170
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Array.wrap(:utf8, _v1.to_value)']
|
160
171
|
end
|
161
172
|
end
|
162
173
|
|
163
|
-
describe
|
174
|
+
describe 'when allocated by the caller' do
|
164
175
|
let(:function_info) {
|
165
|
-
get_introspection_data(
|
176
|
+
get_introspection_data('GIMarshallingTests', 'garray_utf8_full_out_caller_allocated')
|
177
|
+
}
|
166
178
|
|
167
179
|
let(:arg_info) { function_info.args[0] }
|
168
180
|
|
@@ -170,321 +182,342 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
170
182
|
skip unless function_info
|
171
183
|
end
|
172
184
|
|
173
|
-
it
|
174
|
-
builder.pre_conversion.must_equal [
|
185
|
+
it 'has the correct value for #pre_conversion' do
|
186
|
+
builder.pre_conversion.must_equal ['_v1 = GLib::Array.new :utf8']
|
175
187
|
end
|
176
188
|
|
177
|
-
it
|
189
|
+
it 'has empty #post_conversion' do
|
178
190
|
builder.post_conversion.must_equal []
|
179
191
|
end
|
180
192
|
end
|
181
193
|
end
|
182
194
|
|
183
|
-
describe
|
195
|
+
describe 'for :ptr_array' do
|
184
196
|
let(:arg_info) {
|
185
|
-
get_introspection_data(
|
197
|
+
get_introspection_data('GIMarshallingTests', 'gptrarray_utf8_none_out').args[0]
|
198
|
+
}
|
186
199
|
|
187
|
-
it
|
188
|
-
builder.pre_conversion.must_equal [
|
200
|
+
it 'has the correct value for #pre_conversion' do
|
201
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :ptr_array]']
|
189
202
|
end
|
190
203
|
|
191
|
-
it
|
192
|
-
builder.post_conversion.must_equal [
|
204
|
+
it 'has the correct value for #post_conversion' do
|
205
|
+
builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.to_value)']
|
193
206
|
end
|
194
207
|
end
|
195
208
|
|
196
|
-
describe
|
209
|
+
describe 'for :error' do
|
197
210
|
let(:arg_info) {
|
198
|
-
get_introspection_data(
|
211
|
+
get_introspection_data('GIMarshallingTests', 'gerror_out').args[0]
|
212
|
+
}
|
199
213
|
|
200
|
-
it
|
201
|
-
builder.pre_conversion.must_equal [
|
214
|
+
it 'has the correct value for #pre_conversion' do
|
215
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :error]']
|
202
216
|
end
|
203
217
|
|
204
|
-
it
|
205
|
-
builder.post_conversion.must_equal [
|
218
|
+
it 'has the correct value for #post_conversion' do
|
219
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Error.wrap(_v1.to_value)']
|
206
220
|
end
|
207
221
|
end
|
208
222
|
|
209
|
-
describe
|
223
|
+
describe 'for :c' do
|
210
224
|
|
211
|
-
describe
|
225
|
+
describe 'with fixed size' do
|
212
226
|
let(:arg_info) {
|
213
|
-
get_introspection_data(
|
227
|
+
get_introspection_data('GIMarshallingTests', 'array_fixed_out').args[0]
|
228
|
+
}
|
214
229
|
|
215
|
-
it
|
216
|
-
builder.pre_conversion.must_equal [
|
230
|
+
it 'has the correct value for #pre_conversion' do
|
231
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :c]']
|
217
232
|
end
|
218
233
|
|
219
|
-
it
|
220
|
-
builder.post_conversion.must_equal [
|
234
|
+
it 'has the correct value for #post_conversion' do
|
235
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.to_value)']
|
221
236
|
end
|
222
237
|
end
|
223
238
|
|
224
|
-
describe
|
239
|
+
describe 'with separate size parameter' do
|
225
240
|
let(:arg_info) {
|
226
|
-
get_introspection_data(
|
241
|
+
get_introspection_data('GIMarshallingTests', 'array_out').args[0]
|
242
|
+
}
|
227
243
|
|
228
244
|
let(:length_argument) { Object.new }
|
229
245
|
before do
|
230
|
-
stub(length_argument).post_converted_name {
|
246
|
+
stub(length_argument).post_converted_name { 'bar' }
|
231
247
|
builder.length_arg = length_argument
|
232
248
|
end
|
233
249
|
|
234
|
-
it
|
235
|
-
builder.pre_conversion.must_equal [
|
250
|
+
it 'has the correct value for #pre_conversion' do
|
251
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :c]']
|
236
252
|
end
|
237
253
|
|
238
|
-
it
|
239
|
-
builder.post_conversion.must_equal [
|
254
|
+
it 'has the correct value for #post_conversion' do
|
255
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1.to_value)']
|
240
256
|
end
|
241
257
|
end
|
242
258
|
end
|
243
259
|
|
244
|
-
describe
|
260
|
+
describe 'for :glist' do
|
245
261
|
let(:arg_info) {
|
246
|
-
get_introspection_data(
|
262
|
+
get_introspection_data('GIMarshallingTests', 'glist_utf8_none_out').args[0]
|
263
|
+
}
|
247
264
|
|
248
|
-
it
|
249
|
-
builder.pre_conversion.must_equal [
|
265
|
+
it 'has the correct value for #pre_conversion' do
|
266
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :glist]']
|
250
267
|
end
|
251
268
|
|
252
|
-
it
|
253
|
-
builder.post_conversion.must_equal [
|
269
|
+
it 'has the correct value for #post_conversion' do
|
270
|
+
builder.post_conversion.must_equal ['_v2 = GLib::List.wrap(:utf8, _v1.to_value)']
|
254
271
|
end
|
255
272
|
end
|
256
273
|
|
257
|
-
describe
|
274
|
+
describe 'for :gslist' do
|
258
275
|
let(:arg_info) {
|
259
|
-
get_introspection_data(
|
276
|
+
get_introspection_data('GIMarshallingTests', 'gslist_utf8_none_out').args[0]
|
277
|
+
}
|
260
278
|
|
261
|
-
it
|
262
|
-
builder.pre_conversion.must_equal [
|
279
|
+
it 'has the correct value for #pre_conversion' do
|
280
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :gslist]']
|
263
281
|
end
|
264
282
|
|
265
|
-
it
|
266
|
-
builder.post_conversion.must_equal [
|
283
|
+
it 'has the correct value for #post_conversion' do
|
284
|
+
builder.post_conversion.must_equal ['_v2 = GLib::SList.wrap(:utf8, _v1.to_value)']
|
267
285
|
end
|
268
286
|
end
|
269
287
|
|
270
|
-
describe
|
288
|
+
describe 'for :ghash' do
|
271
289
|
let(:arg_info) {
|
272
|
-
get_introspection_data(
|
290
|
+
get_introspection_data('GIMarshallingTests', 'ghashtable_utf8_none_out').args[0]
|
291
|
+
}
|
273
292
|
|
274
|
-
it
|
275
|
-
builder.pre_conversion.must_equal [
|
293
|
+
it 'has the correct value for #pre_conversion' do
|
294
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, [:ghash, :utf8, :utf8]]']
|
276
295
|
end
|
277
296
|
|
278
|
-
it
|
279
|
-
builder.post_conversion.must_equal [
|
297
|
+
it 'has the correct value for #post_conversion' do
|
298
|
+
builder.post_conversion.must_equal ['_v2 = GLib::HashTable.wrap([:utf8, :utf8], _v1.to_value)']
|
280
299
|
end
|
281
300
|
end
|
282
301
|
end
|
283
302
|
|
284
|
-
describe
|
285
|
-
describe
|
303
|
+
describe 'for an argument with direction :inout' do
|
304
|
+
describe 'for :enum' do
|
286
305
|
let(:arg_info) {
|
287
|
-
get_introspection_data(
|
306
|
+
get_introspection_data('GIMarshallingTests', 'enum_inout').args[0]
|
307
|
+
}
|
288
308
|
|
289
|
-
it
|
290
|
-
builder.pre_conversion.must_equal [
|
291
|
-
|
309
|
+
it 'has the correct value for #pre_conversion' do
|
310
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for GIMarshallingTests::Enum',
|
311
|
+
"_v1.set_value #{arg_info.name}"]
|
292
312
|
end
|
293
313
|
|
294
|
-
it
|
295
|
-
builder.post_conversion.must_equal [
|
314
|
+
it 'has the correct value for #post_conversion' do
|
315
|
+
builder.post_conversion.must_equal ['_v2 = _v1.to_value']
|
296
316
|
end
|
297
317
|
end
|
298
318
|
|
299
|
-
describe
|
319
|
+
describe 'for :flags' do
|
300
320
|
let(:arg_info) {
|
301
|
-
get_introspection_data(
|
321
|
+
get_introspection_data('GIMarshallingTests', 'no_type_flags_inout').args[0]
|
322
|
+
}
|
302
323
|
|
303
|
-
it
|
304
|
-
builder.pre_conversion.must_equal [
|
305
|
-
|
324
|
+
it 'has the correct value for #pre_conversion' do
|
325
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for GIMarshallingTests::NoTypeFlags',
|
326
|
+
"_v1.set_value #{arg_info.name}"]
|
306
327
|
end
|
307
328
|
|
308
|
-
it
|
309
|
-
builder.post_conversion.must_equal [
|
329
|
+
it 'has the correct value for #post_conversion' do
|
330
|
+
builder.post_conversion.must_equal ['_v2 = _v1.to_value']
|
310
331
|
end
|
311
332
|
end
|
312
333
|
|
313
|
-
describe
|
334
|
+
describe 'for :gint32' do
|
314
335
|
let(:arg_info) {
|
315
|
-
get_introspection_data(
|
336
|
+
get_introspection_data('GIMarshallingTests', 'int32_inout_min_max').args[0]
|
337
|
+
}
|
316
338
|
|
317
|
-
it
|
339
|
+
it 'has the correct value for method_argument_name' do
|
318
340
|
builder.method_argument_name.must_equal "#{arg_info.name}"
|
319
341
|
end
|
320
342
|
|
321
|
-
it
|
322
|
-
builder.pre_conversion.must_equal [
|
323
|
-
|
343
|
+
it 'has the correct value for #pre_conversion' do
|
344
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for :gint32',
|
345
|
+
"_v1.set_value #{arg_info.name}"]
|
324
346
|
end
|
325
347
|
|
326
|
-
it
|
327
|
-
builder.post_conversion.must_equal [
|
348
|
+
it 'has the correct value for #post_conversion' do
|
349
|
+
builder.post_conversion.must_equal ['_v2 = _v1.to_value']
|
328
350
|
end
|
329
351
|
end
|
330
352
|
|
331
|
-
describe
|
353
|
+
describe 'for an array length' do
|
332
354
|
let(:function_info) {
|
333
|
-
get_introspection_data('Regress', 'test_array_int_inout')
|
355
|
+
get_introspection_data('Regress', 'test_array_int_inout')
|
356
|
+
}
|
334
357
|
let(:arg_info) { function_info.args[0] }
|
335
358
|
let(:array_arg_info) { function_info.args[1] }
|
336
359
|
let(:array_arg_builder) {
|
337
|
-
GirFFI::Builders::ArgumentBuilder.new(var_gen, array_arg_info)
|
360
|
+
GirFFI::Builders::ArgumentBuilder.new(var_gen, array_arg_info)
|
361
|
+
}
|
338
362
|
|
339
363
|
before do
|
340
364
|
builder.array_arg = array_arg_builder
|
341
365
|
end
|
342
366
|
|
343
|
-
it
|
344
|
-
builder.pre_conversion.must_equal [
|
345
|
-
|
346
|
-
|
367
|
+
it 'has the correct value for #pre_conversion' do
|
368
|
+
builder.pre_conversion.must_equal ['n_ints = ints.nil? ? 0 : ints.length',
|
369
|
+
'_v1 = GirFFI::InOutPointer.for :gint32',
|
370
|
+
'_v1.set_value n_ints']
|
347
371
|
end
|
348
372
|
|
349
|
-
it
|
350
|
-
builder.post_conversion.must_equal [
|
373
|
+
it 'has the correct value for #post_conversion' do
|
374
|
+
builder.post_conversion.must_equal ['_v2 = _v1.to_value']
|
351
375
|
end
|
352
376
|
end
|
353
377
|
|
354
|
-
describe
|
378
|
+
describe 'for :strv' do
|
355
379
|
let(:arg_info) {
|
356
|
-
get_introspection_data(
|
380
|
+
get_introspection_data('GIMarshallingTests', 'gstrv_inout').args[0]
|
381
|
+
}
|
357
382
|
|
358
|
-
it
|
359
|
-
builder.pre_conversion.must_equal [
|
360
|
-
|
383
|
+
it 'has the correct value for #pre_conversion' do
|
384
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :strv]',
|
385
|
+
'_v1.set_value GLib::Strv.from(g_strv)']
|
361
386
|
end
|
362
387
|
|
363
|
-
it
|
364
|
-
builder.post_conversion.must_equal [
|
388
|
+
it 'has the correct value for #post_conversion' do
|
389
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.to_value)']
|
365
390
|
end
|
366
391
|
end
|
367
392
|
|
368
|
-
describe
|
393
|
+
describe 'for :ptr_array' do
|
369
394
|
let(:arg_info) {
|
370
|
-
get_introspection_data(
|
395
|
+
get_introspection_data('GIMarshallingTests', 'gptrarray_utf8_none_inout').args[0]
|
396
|
+
}
|
371
397
|
|
372
|
-
it
|
373
|
-
builder.pre_conversion.must_equal [
|
374
|
-
|
398
|
+
it 'has the correct value for #pre_conversion' do
|
399
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :ptr_array]',
|
400
|
+
'_v1.set_value GLib::PtrArray.from(:utf8, parray_)']
|
375
401
|
end
|
376
402
|
|
377
|
-
it
|
378
|
-
builder.post_conversion.must_equal [
|
403
|
+
it 'has the correct value for #post_conversion' do
|
404
|
+
builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.to_value)']
|
379
405
|
end
|
380
406
|
end
|
381
407
|
|
382
|
-
describe
|
408
|
+
describe 'for :utf8' do
|
383
409
|
let(:arg_info) {
|
384
|
-
get_introspection_data(
|
410
|
+
get_introspection_data('GIMarshallingTests', 'utf8_none_inout').args[0]
|
411
|
+
}
|
385
412
|
|
386
|
-
it
|
387
|
-
builder.pre_conversion.must_equal [
|
388
|
-
|
413
|
+
it 'has the correct value for #pre_conversion' do
|
414
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for :utf8',
|
415
|
+
'_v1.set_value GirFFI::InPointer.from(:utf8, utf8)']
|
389
416
|
end
|
390
417
|
|
391
|
-
it
|
392
|
-
builder.post_conversion.must_equal [
|
418
|
+
it 'has the correct value for #post_conversion' do
|
419
|
+
builder.post_conversion.must_equal ['_v2 = _v1.to_value.to_utf8']
|
393
420
|
end
|
394
421
|
end
|
395
422
|
|
396
|
-
describe
|
397
|
-
describe
|
423
|
+
describe 'for :c' do
|
424
|
+
describe 'with fixed size' do
|
398
425
|
let(:arg_info) {
|
399
|
-
get_introspection_data(
|
426
|
+
get_introspection_data('GIMarshallingTests', 'array_fixed_inout').args[0]
|
427
|
+
}
|
400
428
|
|
401
|
-
it
|
429
|
+
it 'has the correct value for #pre_conversion' do
|
402
430
|
builder.pre_conversion.must_equal [
|
403
431
|
"GirFFI::ArgHelper.check_fixed_array_size 4, ints, \"ints\"",
|
404
|
-
|
405
|
-
|
432
|
+
'_v1 = GirFFI::InOutPointer.for [:pointer, :c]',
|
433
|
+
'_v1.set_value GirFFI::SizedArray.from(:gint32, 4, ints)'
|
406
434
|
]
|
407
435
|
end
|
408
436
|
|
409
|
-
it
|
410
|
-
builder.post_conversion.must_equal [
|
437
|
+
it 'has the correct value for #post_conversion' do
|
438
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.to_value)']
|
411
439
|
end
|
412
440
|
end
|
413
441
|
|
414
|
-
describe
|
442
|
+
describe 'with separate size parameter' do
|
415
443
|
let(:function_info) {
|
416
|
-
get_introspection_data('Regress', 'test_array_int_inout')
|
444
|
+
get_introspection_data('Regress', 'test_array_int_inout')
|
445
|
+
}
|
417
446
|
let(:length_arg_info) { function_info.args[0] }
|
418
447
|
let(:arg_info) { function_info.args[1] }
|
419
448
|
let(:length_arg_builder) {
|
420
|
-
GirFFI::Builders::ArgumentBuilder.new(var_gen, length_arg_info)
|
449
|
+
GirFFI::Builders::ArgumentBuilder.new(var_gen, length_arg_info)
|
450
|
+
}
|
421
451
|
|
422
452
|
before do
|
423
453
|
builder.length_arg = length_arg_builder
|
424
454
|
end
|
425
455
|
|
426
|
-
it
|
456
|
+
it 'has the correct value for #pre_conversion' do
|
427
457
|
builder.pre_conversion.must_equal [
|
428
|
-
|
429
|
-
|
458
|
+
'_v1 = GirFFI::InOutPointer.for [:pointer, :c]',
|
459
|
+
'_v1.set_value GirFFI::SizedArray.from(:gint32, -1, ints)'
|
430
460
|
]
|
431
461
|
end
|
432
462
|
|
433
|
-
it
|
434
|
-
builder.post_conversion.must_equal [
|
463
|
+
it 'has the correct value for #post_conversion' do
|
464
|
+
builder.post_conversion.must_equal ['_v3 = GirFFI::SizedArray.wrap(:gint32, _v2, _v1.to_value)']
|
435
465
|
end
|
436
466
|
end
|
437
467
|
end
|
438
468
|
end
|
439
469
|
|
440
|
-
describe
|
470
|
+
describe 'for a skipped argument with direction :in' do
|
441
471
|
let(:arg_info) {
|
442
|
-
get_method_introspection_data(
|
472
|
+
get_method_introspection_data('Regress', 'TestObj', 'skip_param').args[2]
|
473
|
+
}
|
443
474
|
|
444
|
-
it
|
475
|
+
it 'has the correct value for method_argument_name' do
|
445
476
|
builder.method_argument_name.must_be_nil
|
446
477
|
end
|
447
478
|
|
448
|
-
it
|
449
|
-
builder.pre_conversion.must_equal [
|
479
|
+
it 'has the correct value for #pre_conversion' do
|
480
|
+
builder.pre_conversion.must_equal ['_v1 = 0']
|
450
481
|
end
|
451
482
|
|
452
|
-
it
|
483
|
+
it 'has the correct value for #post_conversion' do
|
453
484
|
builder.post_conversion.must_equal []
|
454
485
|
end
|
455
486
|
end
|
456
487
|
|
457
|
-
describe
|
488
|
+
describe 'for a skipped argument with direction :inout' do
|
458
489
|
let(:arg_info) {
|
459
|
-
get_method_introspection_data(
|
490
|
+
get_method_introspection_data('Regress', 'TestObj', 'skip_inout_param').args[3]
|
491
|
+
}
|
460
492
|
|
461
|
-
it
|
493
|
+
it 'has the correct value for method_argument_name' do
|
462
494
|
builder.method_argument_name.must_be_nil
|
463
495
|
end
|
464
496
|
|
465
|
-
it
|
466
|
-
builder.pre_conversion.must_equal [
|
467
|
-
|
497
|
+
it 'has the correct value for #pre_conversion' do
|
498
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for :gint32',
|
499
|
+
'_v1.set_value 0']
|
468
500
|
end
|
469
501
|
|
470
|
-
it
|
502
|
+
it 'has the correct value for #post_conversion' do
|
471
503
|
builder.post_conversion.must_equal []
|
472
504
|
end
|
473
505
|
end
|
474
506
|
|
475
|
-
describe
|
507
|
+
describe 'for a skipped argument with direction :out' do
|
476
508
|
let(:arg_info) {
|
477
|
-
get_method_introspection_data(
|
509
|
+
get_method_introspection_data('Regress', 'TestObj', 'skip_out_param').args[1]
|
510
|
+
}
|
478
511
|
|
479
|
-
it
|
512
|
+
it 'has the correct value for method_argument_name' do
|
480
513
|
builder.method_argument_name.must_be_nil
|
481
514
|
end
|
482
515
|
|
483
|
-
it
|
484
|
-
builder.pre_conversion.must_equal [
|
516
|
+
it 'has the correct value for #pre_conversion' do
|
517
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for :gint32']
|
485
518
|
end
|
486
519
|
|
487
|
-
it
|
520
|
+
it 'has the correct value for #post_conversion' do
|
488
521
|
builder.post_conversion.must_equal []
|
489
522
|
end
|
490
523
|
end
|