gir_ffi 0.15.1 → 0.15.6
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 +42 -0
- data/README.md +10 -10
- data/TODO.md +14 -35
- data/docs/Documentation.md +6 -0
- data/docs/Subclassing.md +38 -0
- data/lib/ffi-glib.rb +8 -3
- data/lib/ffi-glib/byte_array.rb +2 -1
- data/lib/ffi-glib/container_class_methods.rb +1 -3
- data/lib/ffi-glib/destroy_notify.rb +2 -2
- data/lib/ffi-glib/hash_table.rb +1 -2
- data/lib/ffi-glib/list.rb +11 -5
- data/lib/ffi-glib/list_methods.rb +12 -0
- data/lib/ffi-glib/s_list.rb +10 -4
- data/lib/ffi-gobject.rb +2 -5
- data/lib/ffi-gobject/object.rb +102 -92
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +1 -1
- data/lib/ffi-gobject/value.rb +108 -117
- data/lib/ffi-gobject_introspection/i_base_info.rb +35 -27
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +4 -0
- data/lib/gir_ffi/array_element_convertor.rb +2 -3
- data/lib/gir_ffi/boxed_base.rb +13 -11
- data/lib/gir_ffi/builder.rb +3 -4
- data/lib/gir_ffi/builder_helper.rb +10 -2
- data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
- data/lib/gir_ffi/builders/callback_builder.rb +25 -11
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
- data/lib/gir_ffi/builders/enum_builder.rb +9 -5
- data/lib/gir_ffi/builders/field_builder.rb +2 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/interface_builder.rb +3 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
- data/lib/gir_ffi/builders/method_template.rb +4 -4
- data/lib/gir_ffi/builders/module_builder.rb +4 -2
- data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
- data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
- data/lib/gir_ffi/builders/object_builder.rb +18 -6
- data/lib/gir_ffi/builders/property_builder.rb +1 -2
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
- data/lib/gir_ffi/builders/struct_builder.rb +34 -7
- data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
- data/lib/gir_ffi/callback_base.rb +7 -8
- data/lib/gir_ffi/class_base.rb +1 -0
- data/lib/gir_ffi/core.rb +17 -2
- data/lib/gir_ffi/glib_error.rb +1 -2
- data/lib/gir_ffi/in_pointer.rb +7 -0
- data/lib/gir_ffi/object_base.rb +27 -0
- data/lib/gir_ffi/return_value_info.rb +1 -2
- data/lib/gir_ffi/struct_base.rb +1 -9
- data/lib/gir_ffi/struct_like_base.rb +9 -5
- data/lib/gir_ffi/type_map.rb +1 -0
- data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
- data/lib/gir_ffi/union_base.rb +1 -9
- data/lib/gir_ffi/user_defined_object_info.rb +3 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -0
- metadata +106 -143
- data/Gemfile +0 -14
- data/Rakefile +0 -9
- data/tasks/test.rake +0 -204
- data/test/base_test_helper.rb +0 -70
- data/test/ffi-glib/array_test.rb +0 -203
- data/test/ffi-glib/byte_array_test.rb +0 -28
- data/test/ffi-glib/bytes_test.rb +0 -61
- data/test/ffi-glib/closure_test.rb +0 -38
- data/test/ffi-glib/destroy_notify_test.rb +0 -18
- data/test/ffi-glib/hash_table_test.rb +0 -68
- data/test/ffi-glib/list_test.rb +0 -86
- data/test/ffi-glib/main_loop_test.rb +0 -53
- data/test/ffi-glib/ptr_array_test.rb +0 -112
- data/test/ffi-glib/ruby_closure_test.rb +0 -62
- data/test/ffi-glib/s_list_test.rb +0 -76
- data/test/ffi-glib/strv_test.rb +0 -60
- data/test/ffi-glib/variant_test.rb +0 -12
- data/test/ffi-gobject/gobject_test.rb +0 -76
- data/test/ffi-gobject/object_class_test.rb +0 -31
- data/test/ffi-gobject/object_test.rb +0 -122
- data/test/ffi-gobject/param_spec_test.rb +0 -32
- data/test/ffi-gobject/value_test.rb +0 -390
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
- data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
- data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
- data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
- data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
- data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
- data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
- data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
- data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
- data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
- data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
- data/test/ffi-gobject_introspection/lib_test.rb +0 -13
- data/test/ffi-gobject_introspection/strv_test.rb +0 -46
- data/test/ffi-gobject_test.rb +0 -151
- data/test/gir_ffi/allocation_helper_test.rb +0 -36
- data/test/gir_ffi/arg_helper_test.rb +0 -139
- data/test/gir_ffi/boolean_test.rb +0 -43
- data/test/gir_ffi/boxed_base_test.rb +0 -65
- data/test/gir_ffi/builder_test.rb +0 -322
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -651
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -126
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -81
- data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
- data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
- data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
- data/test/gir_ffi/builders/field_builder_test.rb +0 -134
- data/test/gir_ffi/builders/function_builder_test.rb +0 -550
- data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
- data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
- data/test/gir_ffi/builders/module_builder_test.rb +0 -43
- data/test/gir_ffi/builders/object_builder_test.rb +0 -98
- data/test/gir_ffi/builders/property_builder_test.rb +0 -158
- data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -433
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -197
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
- data/test/gir_ffi/builders/union_builder_test.rb +0 -28
- data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
- data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -241
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -166
- data/test/gir_ffi/core_test.rb +0 -98
- data/test/gir_ffi/enum_base_test.rb +0 -43
- data/test/gir_ffi/error_type_info_test.rb +0 -50
- data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
- data/test/gir_ffi/g_type_test.rb +0 -31
- data/test/gir_ffi/in_pointer_test.rb +0 -203
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
- data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
- data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
- data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -711
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
- data/test/gir_ffi/interface_base_test.rb +0 -20
- data/test/gir_ffi/method_stubber_test.rb +0 -65
- data/test/gir_ffi/object_base_test.rb +0 -64
- data/test/gir_ffi/object_store_test.rb +0 -41
- data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
- data/test/gir_ffi/sized_array_test.rb +0 -206
- data/test/gir_ffi/struct_base_test.rb +0 -23
- data/test/gir_ffi/struct_like_base_test.rb +0 -167
- data/test/gir_ffi/type_map_test.rb +0 -17
- data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
- data/test/gir_ffi/union_base_test.rb +0 -23
- data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
- data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
- data/test/gir_ffi/variable_name_generator_test.rb +0 -18
- data/test/gir_ffi/version_test.rb +0 -9
- data/test/gir_ffi/zero_terminated_test.rb +0 -108
- data/test/gir_ffi_test_helper.rb +0 -84
- data/test/integration/callback_exceptions_test.rb +0 -59
- data/test/integration/derived_classes_test.rb +0 -53
- data/test/integration/generated_everything_test.rb +0 -452
- data/test/integration/generated_gimarshallingtests_test.rb +0 -3096
- data/test/integration/generated_gio_test.rb +0 -116
- data/test/integration/generated_glib_test.rb +0 -10
- data/test/integration/generated_gobject_test.rb +0 -124
- data/test/integration/generated_gst_test.rb +0 -38
- data/test/integration/generated_gtk_source_test.rb +0 -32
- data/test/integration/generated_gtop_test.rb +0 -22
- data/test/integration/generated_pango_ft2_test.rb +0 -17
- data/test/integration/generated_pango_test.rb +0 -24
- data/test/integration/generated_regress_test.rb +0 -4038
- data/test/integration/generated_secret_test.rb +0 -14
- data/test/integration/generated_utility_test.rb +0 -174
- data/test/integration/generated_warnlib_test.rb +0 -43
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -93
- data/test/lib/Makefile.am +0 -110
- data/test/lib/autogen.sh +0 -4
- data/test/lib/configure.ac +0 -34
- data/test/lib/m4/jhflags.m4 +0 -21
- data/test/minitest/stats_plugin.rb +0 -30
@@ -1,651 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "gir_ffi_test_helper"
|
4
|
-
|
5
|
-
describe GirFFI::Builders::ArgumentBuilder do
|
6
|
-
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
7
|
-
let(:builder) { GirFFI::Builders::ArgumentBuilder.new(var_gen, arg_info) }
|
8
|
-
|
9
|
-
describe "for an argument with direction :in" do
|
10
|
-
describe "for :c" do
|
11
|
-
describe "with full ownership transfer" do
|
12
|
-
let(:arg_info) do
|
13
|
-
get_introspection_data("GIMarshallingTests", "array_struct_take_in").args[0]
|
14
|
-
end
|
15
|
-
|
16
|
-
it "has the correct value for #pre_conversion" do
|
17
|
-
_(builder.pre_conversion)
|
18
|
-
.must_equal ["_v1 = GirFFI::SizedArray.copy_from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)"]
|
19
|
-
end
|
20
|
-
|
21
|
-
it "has the correct value for #post_conversion" do
|
22
|
-
_(builder.post_conversion).must_equal []
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "for :callback" do
|
28
|
-
let(:arg_info) do
|
29
|
-
get_introspection_data("Regress", "test_callback_destroy_notify").args[0]
|
30
|
-
end
|
31
|
-
|
32
|
-
it "has the correct value for #pre_conversion" do
|
33
|
-
_(builder.pre_conversion).must_equal ["_v1 = Regress::TestCallbackUserData.from(callback)"]
|
34
|
-
end
|
35
|
-
|
36
|
-
it "has the correct value for #post_conversion" do
|
37
|
-
_(builder.post_conversion).must_equal []
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "for :zero_terminated" do
|
42
|
-
let(:arg_info) do
|
43
|
-
get_introspection_data("GIMarshallingTests",
|
44
|
-
"array_in_len_zero_terminated").args[0]
|
45
|
-
end
|
46
|
-
|
47
|
-
it "has the correct value for #pre_conversion" do
|
48
|
-
_(builder.pre_conversion).must_equal ["_v1 = GirFFI::ZeroTerminated.from(:gint32, ints)"]
|
49
|
-
end
|
50
|
-
|
51
|
-
it "has the correct value for #post_conversion" do
|
52
|
-
_(builder.post_conversion).must_equal []
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "for :void" do
|
57
|
-
let(:arg_info) { get_introspection_data("Regress", "test_callback_user_data").args[1] }
|
58
|
-
|
59
|
-
describe "when it is a regular argument" do
|
60
|
-
it "has the correct value for method_argument_name" do
|
61
|
-
_(builder.method_argument_name).must_equal arg_info.name
|
62
|
-
end
|
63
|
-
|
64
|
-
it "has the correct value for #pre_conversion" do
|
65
|
-
_(builder.pre_conversion).must_equal ["_v1 = user_data"]
|
66
|
-
end
|
67
|
-
|
68
|
-
it "has the correct value for #post_conversion" do
|
69
|
-
_(builder.post_conversion).must_equal []
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "when it is a closure" do
|
74
|
-
before do
|
75
|
-
callback = Object.new
|
76
|
-
allow(callback).to receive(:call_argument_name).and_return "foo"
|
77
|
-
builder.mark_as_user_data callback
|
78
|
-
end
|
79
|
-
|
80
|
-
it "has the correct value for method_argument_name" do
|
81
|
-
_(builder.method_argument_name).must_be_nil
|
82
|
-
end
|
83
|
-
|
84
|
-
it "has the correct value for #pre_conversion" do
|
85
|
-
_(builder.pre_conversion).must_equal ["_v1 = GirFFI::ArgHelper.store(foo)"]
|
86
|
-
end
|
87
|
-
|
88
|
-
it "has the correct value for #post_conversion" do
|
89
|
-
_(builder.post_conversion).must_equal []
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
describe "for an argument with direction :out" do
|
96
|
-
describe "for :enum" do
|
97
|
-
let(:arg_info) { get_introspection_data("GIMarshallingTests", "genum_out").args[0] }
|
98
|
-
|
99
|
-
it "has the correct value for #pre_conversion" do
|
100
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new GIMarshallingTests::GEnum"]
|
101
|
-
end
|
102
|
-
|
103
|
-
it "has the correct value for #post_conversion" do
|
104
|
-
_(builder.post_conversion).must_equal ["_v2 = GIMarshallingTests::GEnum.get_value_from_pointer(_v1, 0)"]
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
describe "for :flags" do
|
109
|
-
let(:arg_info) do
|
110
|
-
get_introspection_data("GIMarshallingTests", "flags_out").args[0]
|
111
|
-
end
|
112
|
-
|
113
|
-
it "has the correct value for #pre_conversion" do
|
114
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new GIMarshallingTests::Flags"]
|
115
|
-
end
|
116
|
-
|
117
|
-
it "has the correct value for #post_conversion" do
|
118
|
-
_(builder.post_conversion).must_equal ["_v2 = GIMarshallingTests::Flags.get_value_from_pointer(_v1, 0)"]
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
describe "for :object" do
|
123
|
-
describe "with full ownership transfer" do
|
124
|
-
let(:arg_info) do
|
125
|
-
get_method_introspection_data("Regress", "TestObj", "null_out").args[0]
|
126
|
-
end
|
127
|
-
|
128
|
-
it "has the correct value for #pre_conversion" do
|
129
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
130
|
-
end
|
131
|
-
|
132
|
-
it "has the correct value for #post_conversion" do
|
133
|
-
_(builder.post_conversion).must_equal ["_v2 = Regress::TestObj.wrap(_v1.get_pointer(0))"]
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
describe "with no ownership transfer" do
|
138
|
-
let(:arg_info) do
|
139
|
-
get_method_introspection_data("GIMarshallingTests", "Object", "none_out").args[0]
|
140
|
-
end
|
141
|
-
|
142
|
-
it "has the correct value for #pre_conversion" do
|
143
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
144
|
-
end
|
145
|
-
|
146
|
-
it "has the correct value for #post_conversion" do
|
147
|
-
_(builder.post_conversion)
|
148
|
-
.must_equal ["_v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }"]
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
describe "for :struct" do
|
154
|
-
describe "when not allocated by the caller" do
|
155
|
-
let(:arg_info) do
|
156
|
-
get_introspection_data("GIMarshallingTests", "boxed_struct_out").args[0]
|
157
|
-
end
|
158
|
-
|
159
|
-
it "has the correct value for #pre_conversion" do
|
160
|
-
_(builder.pre_conversion).must_equal [
|
161
|
-
"_v1 = FFI::MemoryPointer.new :pointer"
|
162
|
-
]
|
163
|
-
end
|
164
|
-
|
165
|
-
it "has the correct value for #post_conversion" do
|
166
|
-
_(builder.post_conversion)
|
167
|
-
.must_equal ["_v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1.get_pointer(0))"]
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
describe "when allocated by the caller" do
|
172
|
-
let(:arg_info) do
|
173
|
-
get_method_introspection_data("Regress", "TestStructA", "clone").args[0]
|
174
|
-
end
|
175
|
-
|
176
|
-
it "has the correct value for #pre_conversion" do
|
177
|
-
_(builder.pre_conversion).must_equal ["_v1 = Regress::TestStructA.new"]
|
178
|
-
end
|
179
|
-
|
180
|
-
it "has empty #post_conversion" do
|
181
|
-
_(builder.post_conversion).must_equal []
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
describe "for :strv" do
|
187
|
-
let(:arg_info) do
|
188
|
-
get_introspection_data("GIMarshallingTests", "gstrv_out").args[0]
|
189
|
-
end
|
190
|
-
|
191
|
-
it "has the correct value for #pre_conversion" do
|
192
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
193
|
-
end
|
194
|
-
|
195
|
-
it "has the correct value for #post_conversion" do
|
196
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::Strv.wrap(_v1.get_pointer(0))"]
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
describe "for :array" do
|
201
|
-
describe "when allocated by the callee" do
|
202
|
-
let(:arg_info) do
|
203
|
-
get_introspection_data("GIMarshallingTests", "garray_utf8_none_out").args[0]
|
204
|
-
end
|
205
|
-
|
206
|
-
it "has the correct value for #pre_conversion" do
|
207
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
208
|
-
end
|
209
|
-
|
210
|
-
it "has the correct value for #post_conversion" do
|
211
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::Array.wrap(:utf8, _v1.get_pointer(0))"]
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
describe "when allocated by the caller" do
|
216
|
-
let(:function_info) do
|
217
|
-
get_introspection_data("GIMarshallingTests", "garray_utf8_full_out_caller_allocated")
|
218
|
-
end
|
219
|
-
|
220
|
-
let(:arg_info) { function_info.args[0] }
|
221
|
-
|
222
|
-
it "has the correct value for #pre_conversion" do
|
223
|
-
_(builder.pre_conversion).must_equal ["_v1 = GLib::Array.new :utf8"]
|
224
|
-
end
|
225
|
-
|
226
|
-
it "has empty #post_conversion" do
|
227
|
-
_(builder.post_conversion).must_equal []
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
describe "for :ptr_array" do
|
233
|
-
let(:arg_info) do
|
234
|
-
get_introspection_data("GIMarshallingTests", "gptrarray_utf8_none_out").args[0]
|
235
|
-
end
|
236
|
-
|
237
|
-
it "has the correct value for #pre_conversion" do
|
238
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
239
|
-
end
|
240
|
-
|
241
|
-
it "has the correct value for #post_conversion" do
|
242
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::PtrArray.wrap(:utf8, _v1.get_pointer(0))"]
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
describe "for :error" do
|
247
|
-
let(:arg_info) do
|
248
|
-
get_introspection_data("GIMarshallingTests", "gerror_out").args[0]
|
249
|
-
end
|
250
|
-
|
251
|
-
it "has the correct value for #pre_conversion" do
|
252
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
253
|
-
end
|
254
|
-
|
255
|
-
it "has the correct value for #post_conversion" do
|
256
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::Error.wrap(_v1.get_pointer(0))"]
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
describe "for :c" do
|
261
|
-
describe "with fixed size" do
|
262
|
-
let(:arg_info) do
|
263
|
-
get_introspection_data("GIMarshallingTests", "array_fixed_out").args[0]
|
264
|
-
end
|
265
|
-
|
266
|
-
it "has the correct value for #pre_conversion" do
|
267
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
268
|
-
end
|
269
|
-
|
270
|
-
it "has the correct value for #post_conversion" do
|
271
|
-
_(builder.post_conversion).must_equal ["_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.get_pointer(0))"]
|
272
|
-
end
|
273
|
-
end
|
274
|
-
|
275
|
-
describe "with separate size parameter" do
|
276
|
-
let(:arg_info) do
|
277
|
-
get_introspection_data("GIMarshallingTests", "array_out").args[0]
|
278
|
-
end
|
279
|
-
|
280
|
-
let(:length_argument) { Object.new }
|
281
|
-
before do
|
282
|
-
allow(length_argument).to receive(:post_converted_name).and_return "bar"
|
283
|
-
builder.length_arg = length_argument
|
284
|
-
end
|
285
|
-
|
286
|
-
it "has the correct value for #pre_conversion" do
|
287
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
288
|
-
end
|
289
|
-
|
290
|
-
it "has the correct value for #post_conversion" do
|
291
|
-
_(builder.post_conversion).must_equal ["_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1.get_pointer(0))"]
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
describe "for :glist" do
|
297
|
-
let(:arg_info) do
|
298
|
-
get_introspection_data("GIMarshallingTests", "glist_utf8_none_out").args[0]
|
299
|
-
end
|
300
|
-
|
301
|
-
it "has the correct value for #pre_conversion" do
|
302
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
303
|
-
end
|
304
|
-
|
305
|
-
it "has the correct value for #post_conversion" do
|
306
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::List.wrap(:utf8, _v1.get_pointer(0))"]
|
307
|
-
end
|
308
|
-
end
|
309
|
-
|
310
|
-
describe "for :gslist" do
|
311
|
-
let(:arg_info) do
|
312
|
-
get_introspection_data("GIMarshallingTests", "gslist_utf8_none_out").args[0]
|
313
|
-
end
|
314
|
-
|
315
|
-
it "has the correct value for #pre_conversion" do
|
316
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
317
|
-
end
|
318
|
-
|
319
|
-
it "has the correct value for #post_conversion" do
|
320
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::SList.wrap(:utf8, _v1.get_pointer(0))"]
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
describe "for :ghash" do
|
325
|
-
let(:arg_info) do
|
326
|
-
get_introspection_data("GIMarshallingTests", "ghashtable_utf8_none_out").args[0]
|
327
|
-
end
|
328
|
-
|
329
|
-
it "has the correct value for #pre_conversion" do
|
330
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
331
|
-
end
|
332
|
-
|
333
|
-
it "has the correct value for #post_conversion" do
|
334
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::HashTable.wrap([:utf8, :utf8], _v1.get_pointer(0))"]
|
335
|
-
end
|
336
|
-
end
|
337
|
-
|
338
|
-
describe "for :utf8" do
|
339
|
-
describe "with full ownership transfer" do
|
340
|
-
let(:arg_info) do
|
341
|
-
get_introspection_data("GIMarshallingTests", "utf8_full_out").args[0]
|
342
|
-
end
|
343
|
-
|
344
|
-
it "has the correct value for #pre_conversion" do
|
345
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
346
|
-
end
|
347
|
-
|
348
|
-
it "has the correct value for #post_conversion" do
|
349
|
-
_(builder.post_conversion).must_equal [
|
350
|
-
"_v2 = GirFFI::AllocationHelper.free_after _v1.get_pointer(0), &:to_utf8"
|
351
|
-
]
|
352
|
-
end
|
353
|
-
|
354
|
-
it "has the correct value for #return_value_name" do
|
355
|
-
builder.post_conversion
|
356
|
-
_(builder.return_value_name).must_equal "_v2"
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
describe "with no ownership transfer" do
|
361
|
-
let(:arg_info) do
|
362
|
-
get_introspection_data("GIMarshallingTests", "utf8_none_out").args[0]
|
363
|
-
end
|
364
|
-
|
365
|
-
it "has the correct value for #pre_conversion" do
|
366
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
367
|
-
end
|
368
|
-
|
369
|
-
it "has the correct value for #post_conversion" do
|
370
|
-
_(builder.post_conversion).must_equal ["_v2 = _v1.get_pointer(0).to_utf8"]
|
371
|
-
end
|
372
|
-
end
|
373
|
-
end
|
374
|
-
|
375
|
-
describe "for :void" do
|
376
|
-
let(:function_info) do
|
377
|
-
get_introspection_data("Everything", "one_outparam_gpointer")
|
378
|
-
end
|
379
|
-
let(:arg_info) { function_info.args[0] }
|
380
|
-
|
381
|
-
before { skip_below "1.47.1" }
|
382
|
-
|
383
|
-
it "has the correct value for #pre_conversion" do
|
384
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer"]
|
385
|
-
end
|
386
|
-
|
387
|
-
it "has the correct value for #post_conversion" do
|
388
|
-
_(builder.post_conversion).must_equal ["_v2 = _v1.get_pointer(0)"]
|
389
|
-
end
|
390
|
-
end
|
391
|
-
end
|
392
|
-
|
393
|
-
describe "for an argument with direction :inout" do
|
394
|
-
describe "for :enum" do
|
395
|
-
let(:arg_info) do
|
396
|
-
get_introspection_data("GIMarshallingTests", "enum_inout").args[0]
|
397
|
-
end
|
398
|
-
|
399
|
-
it "has the correct value for #pre_conversion" do
|
400
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new GIMarshallingTests::Enum",
|
401
|
-
"GIMarshallingTests::Enum.copy_value_to_pointer(#{arg_info.name}, _v1)"]
|
402
|
-
end
|
403
|
-
|
404
|
-
it "has the correct value for #post_conversion" do
|
405
|
-
_(builder.post_conversion).must_equal ["_v2 = GIMarshallingTests::Enum.get_value_from_pointer(_v1, 0)"]
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
describe "for :flags" do
|
410
|
-
let(:arg_info) do
|
411
|
-
get_introspection_data("GIMarshallingTests", "no_type_flags_inout").args[0]
|
412
|
-
end
|
413
|
-
|
414
|
-
it "has the correct value for #pre_conversion" do
|
415
|
-
_(builder.pre_conversion)
|
416
|
-
.must_equal ["_v1 = FFI::MemoryPointer.new GIMarshallingTests::NoTypeFlags",
|
417
|
-
"GIMarshallingTests::NoTypeFlags.copy_value_to_pointer(#{arg_info.name}, _v1)"]
|
418
|
-
end
|
419
|
-
|
420
|
-
it "has the correct value for #post_conversion" do
|
421
|
-
_(builder.post_conversion).must_equal ["_v2 = GIMarshallingTests::NoTypeFlags.get_value_from_pointer(_v1, 0)"]
|
422
|
-
end
|
423
|
-
end
|
424
|
-
|
425
|
-
describe "for :gint32" do
|
426
|
-
let(:arg_info) do
|
427
|
-
get_introspection_data("GIMarshallingTests", "int32_inout_min_max").args[0]
|
428
|
-
end
|
429
|
-
|
430
|
-
it "has the correct value for method_argument_name" do
|
431
|
-
_(builder.method_argument_name).must_equal arg_info.name
|
432
|
-
end
|
433
|
-
|
434
|
-
it "has the correct value for #pre_conversion" do
|
435
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :int32",
|
436
|
-
"_v1.put_int32 0, #{arg_info.name}"]
|
437
|
-
end
|
438
|
-
|
439
|
-
it "has the correct value for #post_conversion" do
|
440
|
-
_(builder.post_conversion).must_equal ["_v2 = _v1.get_int32(0)"]
|
441
|
-
end
|
442
|
-
end
|
443
|
-
|
444
|
-
describe "for an array length" do
|
445
|
-
let(:function_info) do
|
446
|
-
get_introspection_data("Regress", "test_array_int_inout")
|
447
|
-
end
|
448
|
-
let(:arg_info) { function_info.args[0] }
|
449
|
-
let(:array_arg_info) { function_info.args[1] }
|
450
|
-
let(:array_arg_builder) do
|
451
|
-
GirFFI::Builders::ArgumentBuilder.new(var_gen, array_arg_info)
|
452
|
-
end
|
453
|
-
|
454
|
-
before do
|
455
|
-
builder.array_arg = array_arg_builder
|
456
|
-
end
|
457
|
-
|
458
|
-
it "has the correct value for #pre_conversion" do
|
459
|
-
_(builder.pre_conversion).must_equal ["n_ints = ints.nil? ? 0 : ints.length",
|
460
|
-
"_v1 = FFI::MemoryPointer.new :int32",
|
461
|
-
"_v1.put_int32 0, n_ints"]
|
462
|
-
end
|
463
|
-
|
464
|
-
it "has the correct value for #post_conversion" do
|
465
|
-
_(builder.post_conversion).must_equal ["_v2 = _v1.get_int32(0)"]
|
466
|
-
end
|
467
|
-
end
|
468
|
-
|
469
|
-
describe "for :strv" do
|
470
|
-
let(:arg_info) do
|
471
|
-
get_introspection_data("GIMarshallingTests", "gstrv_inout").args[0]
|
472
|
-
end
|
473
|
-
|
474
|
-
it "has the correct value for #pre_conversion" do
|
475
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer",
|
476
|
-
"_v1.put_pointer 0, GLib::Strv.from(g_strv)"]
|
477
|
-
end
|
478
|
-
|
479
|
-
it "has the correct value for #post_conversion" do
|
480
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::Strv.wrap(_v1.get_pointer(0))"]
|
481
|
-
end
|
482
|
-
end
|
483
|
-
|
484
|
-
describe "for :ptr_array" do
|
485
|
-
let(:arg_info) do
|
486
|
-
get_introspection_data("GIMarshallingTests", "gptrarray_utf8_none_inout").args[0]
|
487
|
-
end
|
488
|
-
|
489
|
-
it "has the correct value for #pre_conversion" do
|
490
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer",
|
491
|
-
"_v1.put_pointer 0, GLib::PtrArray.from(:utf8, parray_)"]
|
492
|
-
end
|
493
|
-
|
494
|
-
it "has the correct value for #post_conversion" do
|
495
|
-
_(builder.post_conversion).must_equal ["_v2 = GLib::PtrArray.wrap(:utf8, _v1.get_pointer(0))"]
|
496
|
-
end
|
497
|
-
end
|
498
|
-
|
499
|
-
describe "for :utf8" do
|
500
|
-
let(:arg_info) do
|
501
|
-
get_introspection_data("GIMarshallingTests", "utf8_none_inout").args[0]
|
502
|
-
end
|
503
|
-
|
504
|
-
it "has the correct value for #pre_conversion" do
|
505
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :pointer",
|
506
|
-
"_v1.put_pointer 0, GirFFI::InPointer.from_utf8(utf8)"]
|
507
|
-
end
|
508
|
-
|
509
|
-
it "has the correct value for #post_conversion" do
|
510
|
-
_(builder.post_conversion).must_equal ["_v2 = _v1.get_pointer(0).to_utf8"]
|
511
|
-
end
|
512
|
-
end
|
513
|
-
|
514
|
-
describe "for :struct" do
|
515
|
-
describe "with full ownership transfer" do
|
516
|
-
let(:arg_info) do
|
517
|
-
get_introspection_data("GIMarshallingTests", "boxed_struct_inout").args[0]
|
518
|
-
end
|
519
|
-
|
520
|
-
it "has the correct value for #pre_conversion" do
|
521
|
-
_(builder.pre_conversion).must_equal [
|
522
|
-
"_v1 = FFI::MemoryPointer.new :pointer",
|
523
|
-
"_v1.put_pointer 0, GIMarshallingTests::BoxedStruct.copy_from(struct_)"
|
524
|
-
]
|
525
|
-
end
|
526
|
-
|
527
|
-
it "has the correct value for #post_conversion" do
|
528
|
-
_(builder.post_conversion)
|
529
|
-
.must_equal ["_v2 = GIMarshallingTests::BoxedStruct.wrap_own(_v1.get_pointer(0))"]
|
530
|
-
end
|
531
|
-
end
|
532
|
-
end
|
533
|
-
|
534
|
-
describe "for :c" do
|
535
|
-
describe "with fixed size" do
|
536
|
-
let(:arg_info) do
|
537
|
-
get_introspection_data("GIMarshallingTests", "array_fixed_inout").args[0]
|
538
|
-
end
|
539
|
-
|
540
|
-
it "has the correct value for #pre_conversion" do
|
541
|
-
_(builder.pre_conversion).must_equal [
|
542
|
-
'GirFFI::ArgHelper.check_fixed_array_size 4, ints, "ints"',
|
543
|
-
"_v1 = FFI::MemoryPointer.new :pointer",
|
544
|
-
"_v1.put_pointer 0, GirFFI::SizedArray.from(:gint32, 4, ints)"
|
545
|
-
]
|
546
|
-
end
|
547
|
-
|
548
|
-
it "has the correct value for #post_conversion" do
|
549
|
-
_(builder.post_conversion).must_equal ["_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.get_pointer(0))"]
|
550
|
-
end
|
551
|
-
end
|
552
|
-
|
553
|
-
describe "with separate size parameter" do
|
554
|
-
let(:function_info) do
|
555
|
-
get_introspection_data("Regress", "test_array_int_inout")
|
556
|
-
end
|
557
|
-
let(:length_arg_info) { function_info.args[0] }
|
558
|
-
let(:arg_info) { function_info.args[1] }
|
559
|
-
let(:length_arg_builder) do
|
560
|
-
GirFFI::Builders::ArgumentBuilder.new(var_gen, length_arg_info)
|
561
|
-
end
|
562
|
-
|
563
|
-
before do
|
564
|
-
builder.length_arg = length_arg_builder
|
565
|
-
end
|
566
|
-
|
567
|
-
it "has the correct value for #pre_conversion" do
|
568
|
-
_(builder.pre_conversion).must_equal [
|
569
|
-
"_v1 = FFI::MemoryPointer.new :pointer",
|
570
|
-
"_v1.put_pointer 0, GirFFI::SizedArray.copy_from(:gint32, -1, ints)"
|
571
|
-
]
|
572
|
-
end
|
573
|
-
|
574
|
-
it "has the correct value for #post_conversion" do
|
575
|
-
_(builder.post_conversion).must_equal ["_v3 = GirFFI::SizedArray.wrap(:gint32, _v2, _v1.get_pointer(0))"]
|
576
|
-
end
|
577
|
-
end
|
578
|
-
end
|
579
|
-
end
|
580
|
-
|
581
|
-
describe "for a skipped argument with direction :in" do
|
582
|
-
let(:arg_info) do
|
583
|
-
get_method_introspection_data("Regress", "TestObj", "skip_param").args[2]
|
584
|
-
end
|
585
|
-
|
586
|
-
it "has the correct value for method_argument_name" do
|
587
|
-
_(builder.method_argument_name).must_be_nil
|
588
|
-
end
|
589
|
-
|
590
|
-
it "has the correct value for #pre_conversion" do
|
591
|
-
_(builder.pre_conversion).must_equal ["_v1 = 0"]
|
592
|
-
end
|
593
|
-
|
594
|
-
it "has the correct value for #post_conversion" do
|
595
|
-
_(builder.post_conversion).must_equal []
|
596
|
-
end
|
597
|
-
end
|
598
|
-
|
599
|
-
describe "for a skipped argument with direction :inout" do
|
600
|
-
let(:arg_info) do
|
601
|
-
get_method_introspection_data("Regress", "TestObj", "skip_inout_param").args[3]
|
602
|
-
end
|
603
|
-
|
604
|
-
it "has the correct value for method_argument_name" do
|
605
|
-
_(builder.method_argument_name).must_be_nil
|
606
|
-
end
|
607
|
-
|
608
|
-
it "has the correct value for #pre_conversion" do
|
609
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :int32",
|
610
|
-
"_v1.put_int32 0, 0"]
|
611
|
-
end
|
612
|
-
|
613
|
-
it "has the correct value for #post_conversion" do
|
614
|
-
_(builder.post_conversion).must_equal []
|
615
|
-
end
|
616
|
-
end
|
617
|
-
|
618
|
-
describe "for a skipped argument with direction :out" do
|
619
|
-
let(:arg_info) do
|
620
|
-
get_method_introspection_data("Regress", "TestObj", "skip_out_param").args[1]
|
621
|
-
end
|
622
|
-
|
623
|
-
it "has the correct value for method_argument_name" do
|
624
|
-
_(builder.method_argument_name).must_be_nil
|
625
|
-
end
|
626
|
-
|
627
|
-
it "has the correct value for #pre_conversion" do
|
628
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new :int32"]
|
629
|
-
end
|
630
|
-
|
631
|
-
it "has the correct value for #post_conversion" do
|
632
|
-
_(builder.post_conversion).must_equal []
|
633
|
-
end
|
634
|
-
end
|
635
|
-
|
636
|
-
describe "for an argument with direction :error" do
|
637
|
-
let(:arg_info) { GirFFI::ErrorArgumentInfo.new }
|
638
|
-
|
639
|
-
it "has the correct value for #pre_conversion" do
|
640
|
-
_(builder.pre_conversion).must_equal [
|
641
|
-
"_v1 = FFI::MemoryPointer.new(:pointer).write_pointer nil"
|
642
|
-
]
|
643
|
-
end
|
644
|
-
|
645
|
-
it "has the correct value for #post_conversion" do
|
646
|
-
_(builder.post_conversion).must_equal [
|
647
|
-
"GirFFI::ArgHelper.check_error(_v1)"
|
648
|
-
]
|
649
|
-
end
|
650
|
-
end
|
651
|
-
end
|