gir_ffi 0.7.3 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Changelog.md +10 -0
- data/Rakefile +9 -1
- data/TODO.md +4 -0
- data/lib/ffi-glib.rb +5 -0
- data/lib/ffi-glib/bytes.rb +49 -0
- data/lib/ffi-glib/container_class_methods.rb +1 -4
- data/lib/ffi-glib/error.rb +17 -0
- data/lib/ffi-gobject/value.rb +6 -3
- data/lib/ffi-gobject_introspection/i_callback_info.rb +0 -1
- data/lib/ffi-gobject_introspection/i_constant_info.rb +10 -10
- data/lib/ffi-gobject_introspection/i_repository.rb +20 -20
- data/lib/ffi-gobject_introspection/i_vfunc_info.rb +7 -0
- data/lib/ffi-gobject_introspection/lib.rb +1 -7
- data/lib/gir_ffi/arg_helper.rb +23 -2
- data/lib/gir_ffi/builders/argument_builder.rb +15 -1
- data/lib/gir_ffi/builders/base_argument_builder.rb +1 -0
- data/lib/gir_ffi/builders/callback_argument_builder.rb +49 -7
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -2
- data/lib/gir_ffi/builders/closure_convertor.rb +1 -1
- data/lib/gir_ffi/builders/null_convertor.rb +1 -0
- data/lib/gir_ffi/builders/property_builder.rb +1 -1
- data/lib/gir_ffi/builders/return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/type_builder.rb +9 -9
- data/lib/gir_ffi/builders/vfunc_builder.rb +3 -1
- data/lib/gir_ffi/callback_base.rb +6 -0
- data/lib/gir_ffi/error_argument_info.rb +12 -3
- data/lib/gir_ffi/error_type_info.rb +21 -0
- data/lib/gir_ffi/ffi_ext/pointer.rb +5 -6
- data/lib/gir_ffi/glib_error.rb +18 -0
- data/lib/gir_ffi/in_pointer.rb +1 -1
- data/lib/gir_ffi/info_ext/i_type_info.rb +44 -30
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +13 -1
- data/lib/gir_ffi/type_map.rb +30 -29
- data/lib/gir_ffi/user_defined_type_info.rb +1 -0
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_base.rb +1 -0
- data/lib/gir_ffi/zero_terminated.rb +3 -8
- data/test/base_test_helper.rb +1 -0
- data/test/ffi-glib/array_test.rb +2 -2
- data/test/ffi-glib/bytes_test.rb +54 -0
- data/test/ffi-glib/ptr_array_test.rb +2 -2
- data/test/ffi-gobject/value_test.rb +4 -4
- data/test/ffi-gobject_introspection/i_repository_test.rb +1 -1
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +44 -0
- data/test/gir_ffi/builders/callback_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +74 -0
- data/test/gir_ffi/builders/function_builder_test.rb +23 -2
- data/test/gir_ffi/builders/property_builder_test.rb +15 -0
- data/test/gir_ffi/builders/return_value_builder_test.rb +26 -26
- data/test/gir_ffi/builders/signal_builder_test.rb +5 -5
- data/test/gir_ffi/builders/union_builder_test.rb +2 -1
- data/test/gir_ffi/builders/vfunc_builder_test.rb +125 -4
- data/test/gir_ffi/error_type_info_test.rb +48 -0
- data/test/gir_ffi/in_pointer_test.rb +1 -1
- data/test/gir_ffi/sized_array_test.rb +2 -2
- data/test/integration/generated_gimarshallingtests_test.rb +199 -31
- data/test/integration/generated_regress_test.rb +37 -33
- metadata +214 -202
data/test/base_test_helper.rb
CHANGED
@@ -23,6 +23,7 @@ require 'gir_ffi-base'
|
|
23
23
|
require 'ffi-gobject_introspection'
|
24
24
|
|
25
25
|
GObjectIntrospection::IRepository.prepend_search_path File.join(File.dirname(__FILE__), 'lib')
|
26
|
+
|
26
27
|
module GObjectIntrospection
|
27
28
|
class IRepository
|
28
29
|
def shared_library_with_regress namespace
|
data/test/ffi-glib/array_test.rb
CHANGED
@@ -149,8 +149,8 @@ describe GLib::Array do
|
|
149
149
|
|
150
150
|
it "raises an error if the index is out of bounds" do
|
151
151
|
arr = GLib::Array.from :gint32, [1, 2, 3]
|
152
|
-
|
153
|
-
|
152
|
+
proc { arr.index(16) }.must_raise IndexError
|
153
|
+
proc { arr.index(-1) }.must_raise IndexError
|
154
154
|
end
|
155
155
|
end
|
156
156
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'gir_ffi_test_helper'
|
2
|
+
|
3
|
+
describe GLib::Bytes do
|
4
|
+
it "can succesfully be created with Glib::Bytes.new" do
|
5
|
+
bytes = GLib::Bytes.new [1, 2, 3]
|
6
|
+
bytes.must_be_instance_of GLib::Bytes
|
7
|
+
end
|
8
|
+
|
9
|
+
it "has a working #get_size method" do
|
10
|
+
bytes = GLib::Bytes.new [1, 2, 3]
|
11
|
+
bytes.get_size.must_equal 3
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has a working #get_data method" do
|
15
|
+
bytes = GLib::Bytes.new [1, 2, 3]
|
16
|
+
bytes.get_data.to_a.must_equal [1, 2, 3]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "has a working #each method" do
|
20
|
+
a = []
|
21
|
+
bytes = GLib::Bytes.new [1, 2, 3]
|
22
|
+
bytes.each do |v|
|
23
|
+
a.unshift v
|
24
|
+
end
|
25
|
+
a.must_equal [3, 2, 1]
|
26
|
+
end
|
27
|
+
|
28
|
+
it "has a working #to_a method" do
|
29
|
+
bytes = GLib::Bytes.new [1, 2, 3]
|
30
|
+
bytes.to_a.must_equal [1, 2, 3]
|
31
|
+
end
|
32
|
+
|
33
|
+
describe ".from" do
|
34
|
+
it "creates a GLib::Bytes object form an array of small integers" do
|
35
|
+
bytes = GLib::Bytes.from [1, 2, 3]
|
36
|
+
bytes.must_be_instance_of GLib::Bytes
|
37
|
+
bytes.to_a.must_equal [1, 2, 3]
|
38
|
+
end
|
39
|
+
|
40
|
+
it "returns its argument if given a GLib::Bytes object" do
|
41
|
+
bytes = GLib::Bytes.new [1, 2, 3]
|
42
|
+
result = GLib::Bytes.from bytes
|
43
|
+
assert result.equal?(bytes)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "wraps its argument if given a pointer" do
|
47
|
+
bytes = GLib::Bytes.new [1, 2, 3]
|
48
|
+
ptr = bytes.to_ptr
|
49
|
+
result = GLib::Bytes.from ptr
|
50
|
+
result.to_a.must_equal [1, 2, 3]
|
51
|
+
result.to_ptr.must_equal ptr
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -103,8 +103,8 @@ describe GLib::PtrArray do
|
|
103
103
|
|
104
104
|
it "raises an error if the index is out of bounds" do
|
105
105
|
arr = GLib::PtrArray.from :utf8, ["1", "2", "3"]
|
106
|
-
|
107
|
-
|
106
|
+
proc { arr.index(16) }.must_raise IndexError
|
107
|
+
proc { arr.index(-1) }.must_raise IndexError
|
108
108
|
end
|
109
109
|
end
|
110
110
|
end
|
@@ -65,7 +65,7 @@ describe GObject::Value do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "handles long values" do
|
68
|
-
value = 0x1234_5678_9012_3456
|
68
|
+
value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
|
69
69
|
gv = GObject::Value.for_g_type GObject::TYPE_LONG
|
70
70
|
gv.set_value value
|
71
71
|
gv.get_long.must_equal value
|
@@ -93,7 +93,7 @@ describe GObject::Value do
|
|
93
93
|
end
|
94
94
|
|
95
95
|
it "handles ulong values" do
|
96
|
-
value = 0x1234_5678_9012_3456
|
96
|
+
value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
|
97
97
|
gv = GObject::Value.for_g_type GObject::TYPE_ULONG
|
98
98
|
gv.set_value value
|
99
99
|
gv.get_ulong.must_equal value
|
@@ -157,7 +157,7 @@ describe GObject::Value do
|
|
157
157
|
end
|
158
158
|
|
159
159
|
it "unwraps a long" do
|
160
|
-
value = 0x1234_5678_9012_3456
|
160
|
+
value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
|
161
161
|
gv = GObject::Value.for_g_type GObject::TYPE_LONG
|
162
162
|
gv.set_long value
|
163
163
|
gv.get_value.must_equal value
|
@@ -185,7 +185,7 @@ describe GObject::Value do
|
|
185
185
|
end
|
186
186
|
|
187
187
|
it "unwraps a ulong" do
|
188
|
-
value = 0x1234_5678_9012_3456
|
188
|
+
value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
|
189
189
|
gv = GObject::Value.for_g_type GObject::TYPE_ULONG
|
190
190
|
gv.set_ulong value
|
191
191
|
gv.get_value.must_equal value
|
@@ -42,7 +42,7 @@ describe GObjectIntrospection::IRepository do
|
|
42
42
|
|
43
43
|
describe "#find_by_gtype" do
|
44
44
|
it "raises an error if 0 is passed as the gtype" do
|
45
|
-
|
45
|
+
proc { gir.find_by_gtype 0 }.must_raise ArgumentError
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'gir_ffi_test_helper'
|
2
|
+
|
3
|
+
describe GirFFI::Builders::CallbackArgumentBuilder do
|
4
|
+
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
5
|
+
let(:builder) { GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, arg_info) }
|
6
|
+
|
7
|
+
describe "for an argument with direction :out" do
|
8
|
+
describe "for :zero_terminated" do
|
9
|
+
let(:vfunc_info) {
|
10
|
+
get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
11
|
+
'vfunc_array_out_parameter') }
|
12
|
+
let(:arg_info) { vfunc_info.args[0] }
|
13
|
+
|
14
|
+
before { skip unless vfunc_info }
|
15
|
+
|
16
|
+
it "has the correct value for #pre_conversion" do
|
17
|
+
builder.pre_conversion.must_equal [ "_v1 = GirFFI::InOutPointer.new([:pointer, :zero_terminated], a)" ]
|
18
|
+
end
|
19
|
+
|
20
|
+
it "has the correct value for #post_conversion" do
|
21
|
+
builder.post_conversion.must_equal [ "_v1.set_value GirFFI::ZeroTerminated.from(:gfloat, _v2)" ]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "for an argument with direction :error" do
|
27
|
+
let(:arg_info) { GirFFI::ErrorArgumentInfo.new }
|
28
|
+
|
29
|
+
it "sets up a rescueing block in #pre_conversion" do
|
30
|
+
builder.pre_conversion.must_equal [
|
31
|
+
"_v1 = GirFFI::InOutPointer.new([:pointer, :error], _error)",
|
32
|
+
"begin"
|
33
|
+
]
|
34
|
+
end
|
35
|
+
|
36
|
+
it "converts any exceptions to GLib::Error in #post_conversion" do
|
37
|
+
builder.post_conversion.must_equal [
|
38
|
+
"rescue => _v1",
|
39
|
+
"_v2.set_value GLib::Error.from(_v1)",
|
40
|
+
"end"
|
41
|
+
]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -39,7 +39,7 @@ describe GirFFI::Builders::CallbackBuilder do
|
|
39
39
|
it "returns a valid mapping method" do
|
40
40
|
expected = <<-CODE.reset_indentation
|
41
41
|
def self.call_with_argument_mapping(_proc, user_data)
|
42
|
-
_v1 = GirFFI::ArgHelper::OBJECT_STORE
|
42
|
+
_v1 = GirFFI::ArgHelper::OBJECT_STORE.fetch(user_data)
|
43
43
|
_v2 = _proc.call(_v1)
|
44
44
|
return _v2
|
45
45
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'gir_ffi_test_helper'
|
2
|
+
|
3
|
+
describe GirFFI::Builders::CallbackReturnValueBuilder do
|
4
|
+
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
5
|
+
let(:return_value_info) { GirFFI::ReturnValueInfo.new(type_info) }
|
6
|
+
let(:type_info) { callback_info.return_type }
|
7
|
+
let(:builder) { GirFFI::Builders::CallbackReturnValueBuilder.new(var_gen,
|
8
|
+
return_value_info) }
|
9
|
+
|
10
|
+
before do
|
11
|
+
skip unless callback_info
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "for :gint32" do
|
15
|
+
let(:callback_info) { get_introspection_data("GIMarshallingTests", "CallbackIntInt") }
|
16
|
+
|
17
|
+
it "has no statements in #post_conversion" do
|
18
|
+
builder.post_conversion.must_equal []
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns the result of the callback directly" do
|
22
|
+
builder.capture_variable_name.must_equal "_v1"
|
23
|
+
builder.return_value_name.must_equal "_v1"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "for :void" do
|
28
|
+
let(:callback_info) { get_introspection_data("GIMarshallingTests",
|
29
|
+
"CallbackMultipleOutParameters") }
|
30
|
+
|
31
|
+
it "has no statements in #post_conversion" do
|
32
|
+
builder.post_conversion.must_equal []
|
33
|
+
end
|
34
|
+
|
35
|
+
it "returns nothing" do
|
36
|
+
builder.capture_variable_name.must_be_nil
|
37
|
+
builder.return_value_name.must_be_nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "for :enum" do
|
42
|
+
let(:callback_info) { get_vfunc_introspection_data("GIMarshallingTests",
|
43
|
+
"Object",
|
44
|
+
"vfunc_return_enum") }
|
45
|
+
|
46
|
+
it "converts the result" do
|
47
|
+
# Ensure variable names are generated in order
|
48
|
+
builder.capture_variable_name.must_equal "_v1"
|
49
|
+
builder.post_conversion.must_equal [ "_v2 = GIMarshallingTests::Enum.from(_v1)"]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "returns the result of the conversion" do
|
53
|
+
builder.capture_variable_name.must_equal "_v1"
|
54
|
+
builder.return_value_name.must_equal "_v2"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "for :object" do
|
59
|
+
let(:callback_info) { get_vfunc_introspection_data("GIMarshallingTests",
|
60
|
+
"Object",
|
61
|
+
"vfunc_return_object_transfer_full") }
|
62
|
+
|
63
|
+
it "converts the result to a pointer" do
|
64
|
+
# Ensure variable names are generated in order
|
65
|
+
builder.capture_variable_name.must_equal "_v1"
|
66
|
+
builder.post_conversion.must_equal [ "_v2 = GObject::Object.from(_v1).to_ptr"]
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns the result of the conversion" do
|
70
|
+
builder.capture_variable_name.must_equal "_v1"
|
71
|
+
builder.return_value_name.must_equal "_v2"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -169,9 +169,10 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
169
169
|
describe "for GLib::Variant.get_strv" do
|
170
170
|
let(:function_info) { get_method_introspection_data 'GLib', 'Variant', 'get_strv' }
|
171
171
|
it "builds a correct definition" do
|
172
|
+
size_type = ":guint#{FFI.type_size(:size_t) * 8}"
|
172
173
|
code.must_equal <<-CODE.reset_indentation
|
173
174
|
def get_strv
|
174
|
-
_v1 = GirFFI::InOutPointer.for
|
175
|
+
_v1 = GirFFI::InOutPointer.for #{size_type}
|
175
176
|
_v2 = GLib::Lib.g_variant_get_strv self, _v1
|
176
177
|
_v3 = GLib::Strv.wrap(_v2)
|
177
178
|
return _v3
|
@@ -181,7 +182,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
181
182
|
end
|
182
183
|
|
183
184
|
describe "for Regress.has_parameter_named_attrs" do
|
184
|
-
let(:function_info) {get_introspection_data 'Regress', 'has_parameter_named_attrs' }
|
185
|
+
let(:function_info) { get_introspection_data 'Regress', 'has_parameter_named_attrs' }
|
185
186
|
|
186
187
|
it "builds a correct definition" do
|
187
188
|
skip unless function_info
|
@@ -195,5 +196,25 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
195
196
|
CODE
|
196
197
|
end
|
197
198
|
end
|
199
|
+
|
200
|
+
describe "for GIMarshallingTests::Object.method_int8_arg_and_out_callee" do
|
201
|
+
let(:function_info) {
|
202
|
+
get_method_introspection_data('GIMarshallingTests', 'Object',
|
203
|
+
'method_int8_arg_and_out_callee')
|
204
|
+
}
|
205
|
+
|
206
|
+
it "builds a correct definition" do
|
207
|
+
skip unless function_info
|
208
|
+
code.must_equal <<-CODE.reset_indentation
|
209
|
+
def method_int8_arg_and_out_callee arg
|
210
|
+
_v1 = arg
|
211
|
+
_v2 = GirFFI::InOutPointer.for [:pointer, :gint8]
|
212
|
+
GIMarshallingTests::Lib.gi_marshalling_tests_object_method_int8_arg_and_out_callee self, _v1, _v2
|
213
|
+
_v3 = GirFFI::InOutPointer.new(:gint8, _v2.to_value).to_value
|
214
|
+
return _v3
|
215
|
+
end
|
216
|
+
CODE
|
217
|
+
end
|
218
|
+
end
|
198
219
|
end
|
199
220
|
end
|
@@ -107,4 +107,19 @@ describe GirFFI::Builders::PropertyBuilder do
|
|
107
107
|
builder.setter_def.must_equal expected
|
108
108
|
end
|
109
109
|
end
|
110
|
+
|
111
|
+
describe "#container_defines_getter_method?" do
|
112
|
+
let(:property_info) { Object.new.tap {|o| o.extend GirFFI::InfoExt::IPropertyInfo } }
|
113
|
+
let(:container_info) { Object.new }
|
114
|
+
|
115
|
+
before do
|
116
|
+
stub(property_info).container { container_info }
|
117
|
+
stub(property_info).name { "foo-bar" }
|
118
|
+
stub(container_info).find_instance_method("foo_bar") { true }
|
119
|
+
end
|
120
|
+
|
121
|
+
it "finds methods with underscores for properties with dashes" do
|
122
|
+
builder.container_defines_getter_method?.must_equal true
|
123
|
+
end
|
124
|
+
end
|
110
125
|
end
|
@@ -10,7 +10,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
10
10
|
|
11
11
|
describe "for :gint32" do
|
12
12
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
13
|
-
|
13
|
+
"int_return_min").return_type }
|
14
14
|
|
15
15
|
it "has no statements in #post_conversion" do
|
16
16
|
builder.post_conversion.must_equal []
|
@@ -24,8 +24,8 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
24
24
|
|
25
25
|
describe "for :struct" do
|
26
26
|
let(:type_info) { get_method_introspection_data("GIMarshallingTests",
|
27
|
-
|
28
|
-
|
27
|
+
"BoxedStruct",
|
28
|
+
"returnv").return_type }
|
29
29
|
|
30
30
|
it "wraps the result in #post_conversion" do
|
31
31
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -40,8 +40,8 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
40
40
|
|
41
41
|
describe "for :union" do
|
42
42
|
let(:type_info) { get_method_introspection_data("GIMarshallingTests",
|
43
|
-
|
44
|
-
|
43
|
+
"Union",
|
44
|
+
"returnv").return_type }
|
45
45
|
|
46
46
|
it "wraps the result in #post_conversion" do
|
47
47
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -56,8 +56,8 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
56
56
|
|
57
57
|
describe "for :interface" do
|
58
58
|
let(:type_info) { get_method_introspection_data("Gio",
|
59
|
-
|
60
|
-
|
59
|
+
"File",
|
60
|
+
"new_for_commandline_arg").return_type }
|
61
61
|
|
62
62
|
it "wraps the result in #post_conversion" do
|
63
63
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -73,8 +73,8 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
73
73
|
describe "for :object" do
|
74
74
|
describe "when the method is not a constructor" do
|
75
75
|
let(:type_info) { get_method_introspection_data("GIMarshallingTests",
|
76
|
-
|
77
|
-
|
76
|
+
"Object",
|
77
|
+
"full_return").return_type }
|
78
78
|
let(:for_constructor) { false }
|
79
79
|
|
80
80
|
it "wraps the result in #post_conversion" do
|
@@ -90,8 +90,8 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
90
90
|
|
91
91
|
describe "when the method is a constructor" do
|
92
92
|
let(:type_info) { get_method_introspection_data("GIMarshallingTests",
|
93
|
-
|
94
|
-
|
93
|
+
"Object",
|
94
|
+
"new").return_type }
|
95
95
|
let(:for_constructor) { true }
|
96
96
|
|
97
97
|
it "wraps the result in #post_conversion" do
|
@@ -108,8 +108,8 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
108
108
|
|
109
109
|
describe "for :strv" do
|
110
110
|
let(:type_info) { get_method_introspection_data("GLib",
|
111
|
-
|
112
|
-
|
111
|
+
"KeyFile",
|
112
|
+
"get_locale_string_list").return_type }
|
113
113
|
|
114
114
|
it "wraps the result in #post_conversion" do
|
115
115
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -124,8 +124,8 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
124
124
|
|
125
125
|
describe "for :zero_terminated" do
|
126
126
|
let(:type_info) { get_method_introspection_data("GLib",
|
127
|
-
|
128
|
-
|
127
|
+
"Variant",
|
128
|
+
"dup_bytestring").return_type }
|
129
129
|
before do
|
130
130
|
skip unless type_info.zero_terminated?
|
131
131
|
end
|
@@ -143,7 +143,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
143
143
|
|
144
144
|
describe "for :byte_array" do
|
145
145
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
146
|
-
|
146
|
+
"bytearray_full_return").return_type }
|
147
147
|
|
148
148
|
it "wraps the result in #post_conversion" do
|
149
149
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -158,7 +158,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
158
158
|
|
159
159
|
describe "for :ptr_array" do
|
160
160
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
161
|
-
|
161
|
+
"gptrarray_utf8_none_return").return_type }
|
162
162
|
|
163
163
|
it "wraps the result in #post_conversion" do
|
164
164
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -173,7 +173,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
173
173
|
|
174
174
|
describe "for :glist" do
|
175
175
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
176
|
-
|
176
|
+
"glist_int_none_return").return_type }
|
177
177
|
|
178
178
|
it "wraps the result in #post_conversion" do
|
179
179
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -188,7 +188,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
188
188
|
|
189
189
|
describe "for :gslist" do
|
190
190
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
191
|
-
|
191
|
+
"gslist_int_none_return").return_type }
|
192
192
|
|
193
193
|
it "wraps the result in #post_conversion" do
|
194
194
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -203,7 +203,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
203
203
|
|
204
204
|
describe "for :ghash" do
|
205
205
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
206
|
-
|
206
|
+
"ghashtable_int_none_return").return_type }
|
207
207
|
|
208
208
|
it "wraps the result in #post_conversion" do
|
209
209
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -218,7 +218,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
218
218
|
|
219
219
|
describe "for :array" do
|
220
220
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
221
|
-
|
221
|
+
"garray_int_none_return").return_type }
|
222
222
|
|
223
223
|
|
224
224
|
it "wraps the result in #post_conversion" do
|
@@ -234,7 +234,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
234
234
|
|
235
235
|
describe "for :error" do
|
236
236
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
237
|
-
|
237
|
+
"gerror_return").return_type }
|
238
238
|
|
239
239
|
it "wraps the result in #post_conversion" do
|
240
240
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -250,7 +250,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
250
250
|
describe "for :c" do
|
251
251
|
describe "with fixed size" do
|
252
252
|
let(:type_info) { get_introspection_data("GIMarshallingTests",
|
253
|
-
|
253
|
+
"array_fixed_int_return").return_type }
|
254
254
|
|
255
255
|
it "converts the result in #post_conversion" do
|
256
256
|
builder.capture_variable_name.must_equal "_v1"
|
@@ -266,8 +266,8 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
266
266
|
describe "with separate size parameter" do
|
267
267
|
let(:length_argument) { Object.new }
|
268
268
|
let(:type_info) { get_method_introspection_data("GIMarshallingTests",
|
269
|
-
|
270
|
-
|
269
|
+
"Object",
|
270
|
+
"method_array_return").return_type }
|
271
271
|
|
272
272
|
before do
|
273
273
|
stub(length_argument).post_converted_name { "bar" }
|
@@ -347,7 +347,7 @@ describe GirFFI::Builders::ReturnValueBuilder do
|
|
347
347
|
|
348
348
|
it "fetches the stored object in #post_conversion" do
|
349
349
|
builder.capture_variable_name.must_equal "_v1"
|
350
|
-
builder.post_conversion.must_equal [ "_v2 = GirFFI::ArgHelper::OBJECT_STORE
|
350
|
+
builder.post_conversion.must_equal [ "_v2 = GirFFI::ArgHelper::OBJECT_STORE.fetch(_v1)" ]
|
351
351
|
end
|
352
352
|
|
353
353
|
it "returns the stored object" do
|