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,372 +4,412 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
4
4
|
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
5
5
|
let(:return_type_info) { GirFFI::ReturnValueInfo.new(type_info) }
|
6
6
|
let(:for_constructor) { false }
|
7
|
-
let(:builder) {
|
7
|
+
let(:builder) {
|
8
|
+
GirFFI::Builders::ReturnValueBuilder.new(var_gen,
|
8
9
|
return_type_info,
|
9
|
-
for_constructor)
|
10
|
+
for_constructor)
|
11
|
+
}
|
10
12
|
|
11
|
-
describe
|
12
|
-
let(:type_info) {
|
13
|
-
|
13
|
+
describe 'for :gint32' do
|
14
|
+
let(:type_info) {
|
15
|
+
get_introspection_data('GIMarshallingTests',
|
16
|
+
'int_return_min').return_type
|
17
|
+
}
|
14
18
|
|
15
|
-
it
|
19
|
+
it 'has no statements in #post_conversion' do
|
16
20
|
builder.post_conversion.must_equal []
|
17
21
|
end
|
18
22
|
|
19
|
-
it
|
20
|
-
builder.capture_variable_name.must_equal
|
21
|
-
builder.return_value_name.must_equal
|
23
|
+
it 'returns the result of the c function directly' do
|
24
|
+
builder.capture_variable_name.must_equal '_v1'
|
25
|
+
builder.return_value_name.must_equal '_v1'
|
22
26
|
end
|
23
27
|
end
|
24
28
|
|
25
|
-
describe
|
26
|
-
let(:type_info) {
|
27
|
-
|
28
|
-
|
29
|
+
describe 'for :struct' do
|
30
|
+
let(:type_info) {
|
31
|
+
get_method_introspection_data('GIMarshallingTests',
|
32
|
+
'BoxedStruct',
|
33
|
+
'returnv').return_type
|
34
|
+
}
|
29
35
|
|
30
|
-
it
|
31
|
-
builder.capture_variable_name.must_equal
|
32
|
-
builder.post_conversion.must_equal [
|
36
|
+
it 'wraps the result in #post_conversion' do
|
37
|
+
builder.capture_variable_name.must_equal '_v1'
|
38
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap(_v1)']
|
33
39
|
end
|
34
40
|
|
35
|
-
it
|
36
|
-
builder.capture_variable_name.must_equal
|
37
|
-
builder.return_value_name.must_equal
|
41
|
+
it 'returns the wrapped result' do
|
42
|
+
builder.capture_variable_name.must_equal '_v1'
|
43
|
+
builder.return_value_name.must_equal '_v2'
|
38
44
|
end
|
39
45
|
end
|
40
46
|
|
41
|
-
describe
|
42
|
-
let(:type_info) {
|
43
|
-
|
44
|
-
|
47
|
+
describe 'for :union' do
|
48
|
+
let(:type_info) {
|
49
|
+
get_method_introspection_data('GIMarshallingTests',
|
50
|
+
'Union',
|
51
|
+
'returnv').return_type
|
52
|
+
}
|
45
53
|
|
46
|
-
it
|
47
|
-
builder.capture_variable_name.must_equal
|
48
|
-
builder.post_conversion.must_equal [
|
54
|
+
it 'wraps the result in #post_conversion' do
|
55
|
+
builder.capture_variable_name.must_equal '_v1'
|
56
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Union.wrap(_v1)']
|
49
57
|
end
|
50
58
|
|
51
|
-
it
|
52
|
-
builder.capture_variable_name.must_equal
|
53
|
-
builder.return_value_name.must_equal
|
59
|
+
it 'returns the wrapped result' do
|
60
|
+
builder.capture_variable_name.must_equal '_v1'
|
61
|
+
builder.return_value_name.must_equal '_v2'
|
54
62
|
end
|
55
63
|
end
|
56
64
|
|
57
|
-
describe
|
58
|
-
let(:type_info) {
|
59
|
-
|
60
|
-
|
65
|
+
describe 'for :interface' do
|
66
|
+
let(:type_info) {
|
67
|
+
get_method_introspection_data('Gio',
|
68
|
+
'File',
|
69
|
+
'new_for_commandline_arg').return_type
|
70
|
+
}
|
61
71
|
|
62
|
-
it
|
63
|
-
builder.capture_variable_name.must_equal
|
64
|
-
builder.post_conversion.must_equal [
|
72
|
+
it 'wraps the result in #post_conversion' do
|
73
|
+
builder.capture_variable_name.must_equal '_v1'
|
74
|
+
builder.post_conversion.must_equal ['_v2 = Gio::File.wrap(_v1)']
|
65
75
|
end
|
66
76
|
|
67
|
-
it
|
68
|
-
builder.capture_variable_name.must_equal
|
69
|
-
builder.return_value_name.must_equal
|
77
|
+
it 'returns the wrapped result' do
|
78
|
+
builder.capture_variable_name.must_equal '_v1'
|
79
|
+
builder.return_value_name.must_equal '_v2'
|
70
80
|
end
|
71
81
|
end
|
72
82
|
|
73
|
-
describe
|
74
|
-
describe
|
75
|
-
let(:type_info) {
|
76
|
-
|
77
|
-
|
83
|
+
describe 'for :object' do
|
84
|
+
describe 'when the method is not a constructor' do
|
85
|
+
let(:type_info) {
|
86
|
+
get_method_introspection_data('GIMarshallingTests',
|
87
|
+
'Object',
|
88
|
+
'full_return').return_type
|
89
|
+
}
|
78
90
|
let(:for_constructor) { false }
|
79
91
|
|
80
|
-
it
|
81
|
-
builder.capture_variable_name.must_equal
|
82
|
-
builder.post_conversion.must_equal [
|
92
|
+
it 'wraps the result in #post_conversion' do
|
93
|
+
builder.capture_variable_name.must_equal '_v1'
|
94
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Object.wrap(_v1)']
|
83
95
|
end
|
84
96
|
|
85
|
-
it
|
86
|
-
builder.capture_variable_name.must_equal
|
87
|
-
builder.return_value_name.must_equal
|
97
|
+
it 'returns the wrapped result' do
|
98
|
+
builder.capture_variable_name.must_equal '_v1'
|
99
|
+
builder.return_value_name.must_equal '_v2'
|
88
100
|
end
|
89
101
|
end
|
90
102
|
|
91
|
-
describe
|
92
|
-
let(:type_info) {
|
93
|
-
|
94
|
-
|
103
|
+
describe 'when the method is a constructor' do
|
104
|
+
let(:type_info) {
|
105
|
+
get_method_introspection_data('GIMarshallingTests',
|
106
|
+
'Object',
|
107
|
+
'new').return_type
|
108
|
+
}
|
95
109
|
let(:for_constructor) { true }
|
96
110
|
|
97
|
-
it
|
98
|
-
builder.capture_variable_name.must_equal
|
99
|
-
builder.post_conversion.must_equal [
|
111
|
+
it 'wraps the result in #post_conversion' do
|
112
|
+
builder.capture_variable_name.must_equal '_v1'
|
113
|
+
builder.post_conversion.must_equal ['_v2 = self.constructor_wrap(_v1)']
|
100
114
|
end
|
101
115
|
|
102
|
-
it
|
103
|
-
builder.capture_variable_name.must_equal
|
104
|
-
builder.return_value_name.must_equal
|
116
|
+
it 'returns the wrapped result' do
|
117
|
+
builder.capture_variable_name.must_equal '_v1'
|
118
|
+
builder.return_value_name.must_equal '_v2'
|
105
119
|
end
|
106
120
|
end
|
107
121
|
end
|
108
122
|
|
109
|
-
describe
|
110
|
-
let(:type_info) {
|
111
|
-
|
112
|
-
|
123
|
+
describe 'for :strv' do
|
124
|
+
let(:type_info) {
|
125
|
+
get_method_introspection_data('GLib',
|
126
|
+
'KeyFile',
|
127
|
+
'get_locale_string_list').return_type
|
128
|
+
}
|
113
129
|
|
114
|
-
it
|
115
|
-
builder.capture_variable_name.must_equal
|
116
|
-
builder.post_conversion.must_equal [
|
130
|
+
it 'wraps the result in #post_conversion' do
|
131
|
+
builder.capture_variable_name.must_equal '_v1'
|
132
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1)']
|
117
133
|
end
|
118
134
|
|
119
|
-
it
|
120
|
-
builder.capture_variable_name.must_equal
|
121
|
-
builder.return_value_name.must_equal
|
135
|
+
it 'returns the wrapped result' do
|
136
|
+
builder.capture_variable_name.must_equal '_v1'
|
137
|
+
builder.return_value_name.must_equal '_v2'
|
122
138
|
end
|
123
139
|
end
|
124
140
|
|
125
|
-
describe
|
126
|
-
let(:type_info) {
|
127
|
-
|
128
|
-
|
141
|
+
describe 'for :zero_terminated' do
|
142
|
+
let(:type_info) {
|
143
|
+
get_method_introspection_data('GLib',
|
144
|
+
'Variant',
|
145
|
+
'dup_bytestring').return_type
|
146
|
+
}
|
129
147
|
before do
|
130
148
|
skip unless type_info.zero_terminated?
|
131
149
|
end
|
132
150
|
|
133
|
-
it
|
134
|
-
builder.capture_variable_name.must_equal
|
135
|
-
builder.post_conversion.must_equal [
|
151
|
+
it 'wraps the result in #post_conversion' do
|
152
|
+
builder.capture_variable_name.must_equal '_v1'
|
153
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::ZeroTerminated.wrap(:guint8, _v1)']
|
136
154
|
end
|
137
155
|
|
138
|
-
it
|
139
|
-
builder.capture_variable_name.must_equal
|
140
|
-
builder.return_value_name.must_equal
|
156
|
+
it 'returns the wrapped result' do
|
157
|
+
builder.capture_variable_name.must_equal '_v1'
|
158
|
+
builder.return_value_name.must_equal '_v2'
|
141
159
|
end
|
142
160
|
end
|
143
161
|
|
144
|
-
describe
|
145
|
-
let(:type_info) {
|
146
|
-
|
162
|
+
describe 'for :byte_array' do
|
163
|
+
let(:type_info) {
|
164
|
+
get_introspection_data('GIMarshallingTests',
|
165
|
+
'bytearray_full_return').return_type
|
166
|
+
}
|
147
167
|
|
148
|
-
it
|
149
|
-
builder.capture_variable_name.must_equal
|
150
|
-
builder.post_conversion.must_equal [
|
168
|
+
it 'wraps the result in #post_conversion' do
|
169
|
+
builder.capture_variable_name.must_equal '_v1'
|
170
|
+
builder.post_conversion.must_equal ['_v2 = GLib::ByteArray.wrap(_v1)']
|
151
171
|
end
|
152
172
|
|
153
|
-
it
|
154
|
-
builder.capture_variable_name.must_equal
|
155
|
-
builder.return_value_name.must_equal
|
173
|
+
it 'returns the wrapped result' do
|
174
|
+
builder.capture_variable_name.must_equal '_v1'
|
175
|
+
builder.return_value_name.must_equal '_v2'
|
156
176
|
end
|
157
177
|
end
|
158
178
|
|
159
|
-
describe
|
160
|
-
let(:type_info) {
|
161
|
-
|
179
|
+
describe 'for :ptr_array' do
|
180
|
+
let(:type_info) {
|
181
|
+
get_introspection_data('GIMarshallingTests',
|
182
|
+
'gptrarray_utf8_none_return').return_type
|
183
|
+
}
|
162
184
|
|
163
|
-
it
|
164
|
-
builder.capture_variable_name.must_equal
|
165
|
-
builder.post_conversion.must_equal [
|
185
|
+
it 'wraps the result in #post_conversion' do
|
186
|
+
builder.capture_variable_name.must_equal '_v1'
|
187
|
+
builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1)']
|
166
188
|
end
|
167
189
|
|
168
|
-
it
|
169
|
-
builder.capture_variable_name.must_equal
|
170
|
-
builder.return_value_name.must_equal
|
190
|
+
it 'returns the wrapped result' do
|
191
|
+
builder.capture_variable_name.must_equal '_v1'
|
192
|
+
builder.return_value_name.must_equal '_v2'
|
171
193
|
end
|
172
194
|
end
|
173
195
|
|
174
|
-
describe
|
175
|
-
let(:type_info) {
|
176
|
-
|
196
|
+
describe 'for :glist' do
|
197
|
+
let(:type_info) {
|
198
|
+
get_introspection_data('GIMarshallingTests',
|
199
|
+
'glist_int_none_return').return_type
|
200
|
+
}
|
177
201
|
|
178
|
-
it
|
179
|
-
builder.capture_variable_name.must_equal
|
180
|
-
builder.post_conversion.must_equal [
|
202
|
+
it 'wraps the result in #post_conversion' do
|
203
|
+
builder.capture_variable_name.must_equal '_v1'
|
204
|
+
builder.post_conversion.must_equal ['_v2 = GLib::List.wrap(:gint32, _v1)']
|
181
205
|
end
|
182
206
|
|
183
|
-
it
|
184
|
-
builder.capture_variable_name.must_equal
|
185
|
-
builder.return_value_name.must_equal
|
207
|
+
it 'returns the wrapped result' do
|
208
|
+
builder.capture_variable_name.must_equal '_v1'
|
209
|
+
builder.return_value_name.must_equal '_v2'
|
186
210
|
end
|
187
211
|
end
|
188
212
|
|
189
|
-
describe
|
190
|
-
let(:type_info) {
|
191
|
-
|
213
|
+
describe 'for :gslist' do
|
214
|
+
let(:type_info) {
|
215
|
+
get_introspection_data('GIMarshallingTests',
|
216
|
+
'gslist_int_none_return').return_type
|
217
|
+
}
|
192
218
|
|
193
|
-
it
|
194
|
-
builder.capture_variable_name.must_equal
|
195
|
-
builder.post_conversion.must_equal [
|
219
|
+
it 'wraps the result in #post_conversion' do
|
220
|
+
builder.capture_variable_name.must_equal '_v1'
|
221
|
+
builder.post_conversion.must_equal ['_v2 = GLib::SList.wrap(:gint32, _v1)']
|
196
222
|
end
|
197
223
|
|
198
|
-
it
|
199
|
-
builder.capture_variable_name.must_equal
|
200
|
-
builder.return_value_name.must_equal
|
224
|
+
it 'returns the wrapped result' do
|
225
|
+
builder.capture_variable_name.must_equal '_v1'
|
226
|
+
builder.return_value_name.must_equal '_v2'
|
201
227
|
end
|
202
228
|
end
|
203
229
|
|
204
|
-
describe
|
205
|
-
let(:type_info) {
|
206
|
-
|
230
|
+
describe 'for :ghash' do
|
231
|
+
let(:type_info) {
|
232
|
+
get_introspection_data('GIMarshallingTests',
|
233
|
+
'ghashtable_int_none_return').return_type
|
234
|
+
}
|
207
235
|
|
208
|
-
it
|
209
|
-
builder.capture_variable_name.must_equal
|
210
|
-
builder.post_conversion.must_equal [
|
236
|
+
it 'wraps the result in #post_conversion' do
|
237
|
+
builder.capture_variable_name.must_equal '_v1'
|
238
|
+
builder.post_conversion.must_equal ['_v2 = GLib::HashTable.wrap([:gint32, :gint32], _v1)']
|
211
239
|
end
|
212
240
|
|
213
|
-
it
|
214
|
-
builder.capture_variable_name.must_equal
|
215
|
-
builder.return_value_name.must_equal
|
241
|
+
it 'returns the wrapped result' do
|
242
|
+
builder.capture_variable_name.must_equal '_v1'
|
243
|
+
builder.return_value_name.must_equal '_v2'
|
216
244
|
end
|
217
245
|
end
|
218
246
|
|
219
|
-
describe
|
220
|
-
let(:type_info) {
|
221
|
-
|
222
|
-
|
247
|
+
describe 'for :array' do
|
248
|
+
let(:type_info) {
|
249
|
+
get_introspection_data('GIMarshallingTests',
|
250
|
+
'garray_int_none_return').return_type
|
251
|
+
}
|
223
252
|
|
224
|
-
it
|
225
|
-
builder.capture_variable_name.must_equal
|
226
|
-
builder.post_conversion.must_equal [
|
253
|
+
it 'wraps the result in #post_conversion' do
|
254
|
+
builder.capture_variable_name.must_equal '_v1'
|
255
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Array.wrap(:gint32, _v1)']
|
227
256
|
end
|
228
257
|
|
229
|
-
it
|
230
|
-
builder.capture_variable_name.must_equal
|
231
|
-
builder.return_value_name.must_equal
|
258
|
+
it 'returns the wrapped result' do
|
259
|
+
builder.capture_variable_name.must_equal '_v1'
|
260
|
+
builder.return_value_name.must_equal '_v2'
|
232
261
|
end
|
233
262
|
end
|
234
263
|
|
235
|
-
describe
|
236
|
-
let(:type_info) {
|
237
|
-
|
264
|
+
describe 'for :error' do
|
265
|
+
let(:type_info) {
|
266
|
+
get_introspection_data('GIMarshallingTests',
|
267
|
+
'gerror_return').return_type
|
268
|
+
}
|
238
269
|
|
239
|
-
it
|
240
|
-
builder.capture_variable_name.must_equal
|
241
|
-
builder.post_conversion.must_equal [
|
270
|
+
it 'wraps the result in #post_conversion' do
|
271
|
+
builder.capture_variable_name.must_equal '_v1'
|
272
|
+
builder.post_conversion.must_equal ['_v2 = GLib::Error.wrap(_v1)']
|
242
273
|
end
|
243
274
|
|
244
|
-
it
|
245
|
-
builder.capture_variable_name.must_equal
|
246
|
-
builder.return_value_name.must_equal
|
275
|
+
it 'returns the wrapped result' do
|
276
|
+
builder.capture_variable_name.must_equal '_v1'
|
277
|
+
builder.return_value_name.must_equal '_v2'
|
247
278
|
end
|
248
279
|
end
|
249
280
|
|
250
|
-
describe
|
251
|
-
describe
|
252
|
-
let(:type_info) {
|
253
|
-
|
281
|
+
describe 'for :c' do
|
282
|
+
describe 'with fixed size' do
|
283
|
+
let(:type_info) {
|
284
|
+
get_introspection_data('GIMarshallingTests',
|
285
|
+
'array_fixed_int_return').return_type
|
286
|
+
}
|
254
287
|
|
255
|
-
it
|
256
|
-
builder.capture_variable_name.must_equal
|
257
|
-
builder.post_conversion.must_equal [
|
288
|
+
it 'converts the result in #post_conversion' do
|
289
|
+
builder.capture_variable_name.must_equal '_v1'
|
290
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1)']
|
258
291
|
end
|
259
292
|
|
260
|
-
it
|
261
|
-
builder.capture_variable_name.must_equal
|
262
|
-
builder.return_value_name.must_equal
|
293
|
+
it 'returns the wrapped result' do
|
294
|
+
builder.capture_variable_name.must_equal '_v1'
|
295
|
+
builder.return_value_name.must_equal '_v2'
|
263
296
|
end
|
264
297
|
end
|
265
298
|
|
266
|
-
describe
|
299
|
+
describe 'with separate size parameter' do
|
267
300
|
let(:length_argument) { Object.new }
|
268
|
-
let(:type_info) {
|
269
|
-
|
270
|
-
|
301
|
+
let(:type_info) {
|
302
|
+
get_method_introspection_data('GIMarshallingTests',
|
303
|
+
'Object',
|
304
|
+
'method_array_return').return_type
|
305
|
+
}
|
271
306
|
|
272
307
|
before do
|
273
|
-
stub(length_argument).post_converted_name {
|
308
|
+
stub(length_argument).post_converted_name { 'bar' }
|
274
309
|
builder.length_arg = length_argument
|
275
310
|
end
|
276
311
|
|
277
|
-
it
|
278
|
-
builder.capture_variable_name.must_equal
|
279
|
-
builder.post_conversion.must_equal [
|
312
|
+
it 'converts the result in #post_conversion' do
|
313
|
+
builder.capture_variable_name.must_equal '_v1'
|
314
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1)']
|
280
315
|
end
|
281
316
|
|
282
|
-
it
|
283
|
-
builder.capture_variable_name.must_equal
|
284
|
-
builder.return_value_name.must_equal
|
317
|
+
it 'returns the wrapped result' do
|
318
|
+
builder.capture_variable_name.must_equal '_v1'
|
319
|
+
builder.return_value_name.must_equal '_v2'
|
285
320
|
end
|
286
321
|
end
|
287
322
|
end
|
288
323
|
|
289
|
-
describe
|
324
|
+
describe 'for :utf8' do
|
290
325
|
let(:type_info) {
|
291
|
-
get_introspection_data(
|
326
|
+
get_introspection_data('GIMarshallingTests', 'utf8_full_return').return_type
|
327
|
+
}
|
292
328
|
|
293
|
-
it
|
294
|
-
builder.capture_variable_name.must_equal
|
295
|
-
builder.post_conversion.must_equal [
|
329
|
+
it 'converts the result in #post_conversion' do
|
330
|
+
builder.capture_variable_name.must_equal '_v1'
|
331
|
+
builder.post_conversion.must_equal ['_v2 = _v1.to_utf8']
|
296
332
|
end
|
297
333
|
|
298
|
-
it
|
299
|
-
builder.capture_variable_name.must_equal
|
300
|
-
builder.return_value_name.must_equal
|
334
|
+
it 'returns the converted result' do
|
335
|
+
builder.capture_variable_name.must_equal '_v1'
|
336
|
+
builder.return_value_name.must_equal '_v2'
|
301
337
|
end
|
302
338
|
end
|
303
339
|
|
304
|
-
describe
|
340
|
+
describe 'for :void pointer' do
|
305
341
|
let(:callback_info) {
|
306
|
-
get_introspection_data(
|
342
|
+
get_introspection_data('GIMarshallingTests', 'CallbackIntInt')
|
343
|
+
}
|
307
344
|
let(:type_info) { callback_info.args[1].argument_type }
|
308
345
|
|
309
346
|
before do
|
310
347
|
skip unless callback_info
|
311
348
|
end
|
312
349
|
|
313
|
-
it
|
350
|
+
it 'has no statements in #post_conversion' do
|
314
351
|
builder.post_conversion.must_equal []
|
315
352
|
end
|
316
353
|
|
317
|
-
it
|
318
|
-
builder.capture_variable_name.must_equal
|
319
|
-
builder.return_value_name.must_equal
|
354
|
+
it 'returns the result of the c function directly' do
|
355
|
+
builder.capture_variable_name.must_equal '_v1'
|
356
|
+
builder.return_value_name.must_equal '_v1'
|
320
357
|
end
|
321
358
|
end
|
322
359
|
|
323
|
-
describe
|
360
|
+
describe 'for :void' do
|
324
361
|
let(:type_info) {
|
325
|
-
get_method_introspection_data(
|
362
|
+
get_method_introspection_data('Regress', 'TestObj', 'null_out').return_type
|
363
|
+
}
|
326
364
|
|
327
|
-
it
|
365
|
+
it 'has no statements in #post_conversion' do
|
328
366
|
builder.post_conversion.must_equal []
|
329
367
|
end
|
330
368
|
|
331
|
-
it
|
369
|
+
it 'marks itself as irrelevant' do
|
332
370
|
builder.relevant?.must_equal false
|
333
371
|
end
|
334
372
|
|
335
|
-
it
|
373
|
+
it 'returns nothing' do
|
336
374
|
builder.return_value_name.must_be_nil
|
337
375
|
end
|
338
376
|
end
|
339
377
|
|
340
|
-
describe
|
378
|
+
describe 'for a closure argument' do
|
341
379
|
let(:type_info) {
|
342
|
-
get_introspection_data(
|
380
|
+
get_introspection_data('Regress', 'TestCallbackUserData').args[0].argument_type
|
381
|
+
}
|
343
382
|
|
344
383
|
before do
|
345
384
|
builder.closure = true
|
346
385
|
end
|
347
386
|
|
348
|
-
it
|
349
|
-
builder.capture_variable_name.must_equal
|
350
|
-
builder.post_conversion.must_equal [
|
387
|
+
it 'fetches the stored object in #post_conversion' do
|
388
|
+
builder.capture_variable_name.must_equal '_v1'
|
389
|
+
builder.post_conversion.must_equal ['_v2 = GirFFI::ArgHelper::OBJECT_STORE.fetch(_v1)']
|
351
390
|
end
|
352
391
|
|
353
|
-
it
|
354
|
-
builder.capture_variable_name.must_equal
|
355
|
-
builder.return_value_name.must_equal
|
392
|
+
it 'returns the stored object' do
|
393
|
+
builder.capture_variable_name.must_equal '_v1'
|
394
|
+
builder.return_value_name.must_equal '_v2'
|
356
395
|
end
|
357
396
|
end
|
358
397
|
|
359
|
-
describe
|
398
|
+
describe 'for a skipped return value' do
|
360
399
|
let(:type_info) {
|
361
|
-
get_method_introspection_data(
|
400
|
+
get_method_introspection_data('Regress', 'TestObj', 'skip_return_val').return_type
|
401
|
+
}
|
362
402
|
let(:return_type_info) { GirFFI::ReturnValueInfo.new(type_info, true) }
|
363
403
|
|
364
|
-
it
|
404
|
+
it 'has no statements in #post_conversion' do
|
365
405
|
builder.post_conversion.must_equal []
|
366
406
|
end
|
367
407
|
|
368
|
-
it
|
408
|
+
it 'marks itself as irrelevant' do
|
369
409
|
builder.relevant?.must_equal false
|
370
410
|
end
|
371
411
|
|
372
|
-
it
|
412
|
+
it 'returns nothing' do
|
373
413
|
builder.return_value_name.must_be_nil
|
374
414
|
end
|
375
415
|
end
|