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