gir_ffi 0.14.1 → 0.15.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 +56 -0
- data/README.md +12 -12
- data/TODO.md +14 -35
- data/docs/Documentation.md +6 -0
- data/docs/Subclassing.md +38 -0
- data/lib/ffi-glib.rb +26 -21
- data/lib/ffi-glib/array.rb +14 -4
- data/lib/ffi-glib/byte_array.rb +9 -3
- data/lib/ffi-glib/container_class_methods.rb +1 -1
- data/lib/ffi-glib/destroy_notify.rb +2 -2
- data/lib/ffi-glib/error.rb +1 -1
- data/lib/ffi-glib/hash_table.rb +4 -5
- data/lib/ffi-glib/list.rb +12 -6
- data/lib/ffi-glib/list_methods.rb +13 -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 +11 -5
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-gobject.rb +13 -16
- data/lib/ffi-gobject/object.rb +82 -87
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/param_spec.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +2 -2
- data/lib/ffi-gobject/value.rb +136 -126
- 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 +34 -23
- 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 +7 -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 -24
- data/lib/gir_ffi/boolean.rb +1 -1
- data/lib/gir_ffi/boxed_base.rb +2 -6
- data/lib/gir_ffi/builder.rb +19 -11
- data/lib/gir_ffi/builder_helper.rb +10 -2
- 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 +2 -1
- data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
- data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
- data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
- data/lib/gir_ffi/builders/callback_builder.rb +28 -14
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
- data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
- 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 +11 -7
- 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 +5 -3
- data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
- data/lib/gir_ffi/builders/method_template.rb +5 -5
- data/lib/gir_ffi/builders/module_builder.rb +7 -7
- 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 +22 -12
- data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/property_builder.rb +14 -14
- 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 +5 -7
- data/lib/gir_ffi/builders/struct_builder.rb +8 -6
- 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 +10 -3
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
- 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 +7 -9
- data/lib/gir_ffi/class_base.rb +6 -5
- data/lib/gir_ffi/core.rb +36 -22
- 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/glib_error.rb +1 -2
- data/lib/gir_ffi/in_pointer.rb +17 -0
- data/lib/gir_ffi/info_ext.rb +15 -15
- 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 +2 -2
- 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 +30 -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/return_value_info.rb +1 -2
- data/lib/gir_ffi/sized_array.rb +4 -2
- data/lib/gir_ffi/struct.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +2 -10
- data/lib/gir_ffi/struct_like_base.rb +9 -5
- 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 +6 -2
- data/lib/gir_ffi/union.rb +1 -1
- data/lib/gir_ffi/union_base.rb +2 -10
- data/lib/gir_ffi/user_defined_object_info.rb +9 -4
- data/lib/gir_ffi/user_defined_property_info.rb +33 -33
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -0
- metadata +102 -155
- data/Gemfile +0 -12
- data/Rakefile +0 -9
- data/lib/ffi-glib/array_methods.rb +0 -16
- data/tasks/test.rake +0 -203
- data/test/base_test_helper.rb +0 -63
- data/test/ffi-glib/array_test.rb +0 -188
- data/test/ffi-glib/byte_array_test.rb +0 -22
- data/test/ffi-glib/bytes_test.rb +0 -56
- 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 -72
- data/test/ffi-gobject/object_class_test.rb +0 -31
- data/test/ffi-gobject/object_test.rb +0 -140
- data/test/ffi-gobject/param_spec_test.rb +0 -32
- data/test/ffi-gobject/value_test.rb +0 -370
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
- data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
- 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 -33
- 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 -140
- 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 -300
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
- 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 -538
- 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 -161
- data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
- data/test/gir_ffi/builders/union_builder_test.rb +0 -31
- 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 -253
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -168
- 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_out_pointer_test.rb +0 -56
- data/test/gir_ffi/in_pointer_test.rb +0 -183
- 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 -697
- 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 -63
- 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 -2995
- data/test/integration/generated_gio_test.rb +0 -116
- data/test/integration/generated_glib_test.rb +0 -12
- data/test/integration/generated_gobject_test.rb +0 -116
- data/test/integration/generated_gst_test.rb +0 -34
- data/test/integration/generated_gtk_source_test.rb +0 -27
- data/test/integration/generated_gtop_test.rb +0 -29
- 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 -3850
- data/test/integration/generated_secret_test.rb +0 -17
- data/test/integration/generated_utility_test.rb +0 -174
- data/test/integration/generated_warnlib_test.rb +0 -49
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -52
- 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,101 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::VFuncArgumentBuilder do
|
6
|
-
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
7
|
-
let(:builder) { GirFFI::Builders::VFuncArgumentBuilder.new(var_gen, arg_info) }
|
8
|
-
|
9
|
-
describe 'for a plain in argument' do
|
10
|
-
let(:vfunc_info) do
|
11
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'method_int8_in'
|
12
|
-
end
|
13
|
-
let(:arg_info) { vfunc_info.args[0] }
|
14
|
-
|
15
|
-
it 'has the correct value for #pre_conversion' do
|
16
|
-
builder.pre_conversion.must_equal ['_v1 = in_']
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'has the correct value for #post_conversion' do
|
20
|
-
builder.post_conversion.must_equal []
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe 'for a transfer-none in argument' do
|
25
|
-
let(:vfunc_info) do
|
26
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_in_object_transfer_none'
|
27
|
-
end
|
28
|
-
let(:arg_info) { vfunc_info.args[0] }
|
29
|
-
|
30
|
-
it 'has the correct value for #pre_conversion' do
|
31
|
-
builder.pre_conversion.must_equal ['_v1 = GObject::Object.wrap(object)', '_v1.ref']
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'has the correct value for #post_conversion' do
|
35
|
-
builder.post_conversion.must_equal []
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe 'for a transfer-none outgoing object argument' do
|
40
|
-
let(:vfunc_info) do
|
41
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_out_object_transfer_none'
|
42
|
-
end
|
43
|
-
let(:arg_info) { vfunc_info.args[0] }
|
44
|
-
|
45
|
-
it 'has the correct value for #pre_conversion' do
|
46
|
-
builder.pre_conversion.must_equal ['_v1 = object']
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'has the correct value for #post_conversion' do
|
50
|
-
builder.post_conversion.must_equal ['_v1.put_pointer 0, GObject::Object.from(_v2)']
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe 'for a full-transfer outgoing object argument' do
|
55
|
-
let(:vfunc_info) do
|
56
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_out_object_transfer_full'
|
57
|
-
end
|
58
|
-
let(:arg_info) { vfunc_info.args[0] }
|
59
|
-
|
60
|
-
it 'has the correct value for #pre_conversion' do
|
61
|
-
builder.pre_conversion.must_equal ['_v1 = object']
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'has the correct value for #post_conversion' do
|
65
|
-
builder.pre_conversion
|
66
|
-
builder.post_conversion.must_equal ['_v2.ref', '_v1.put_pointer 0, GObject::Object.from(_v2)']
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe 'for a full-transfer outgoing non-object argument' do
|
71
|
-
let(:vfunc_info) do
|
72
|
-
get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
73
|
-
'method_int8_arg_and_out_callee')
|
74
|
-
end
|
75
|
-
let(:arg_info) { vfunc_info.args[1] }
|
76
|
-
|
77
|
-
it 'has the correct value for #pre_conversion' do
|
78
|
-
builder.pre_conversion.
|
79
|
-
must_equal ['_v1 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }']
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'has the correct value for #post_conversion' do
|
83
|
-
builder.post_conversion.must_equal ['_v1.put_int8 0, _v2']
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe 'for a receiver argument' do
|
88
|
-
let(:object_info) { get_introspection_data('GIMarshallingTests', 'Object') }
|
89
|
-
let(:type_info) { GirFFI::ReceiverTypeInfo.new(object_info) }
|
90
|
-
let(:arg_info) { GirFFI::ReceiverArgumentInfo.new(type_info) }
|
91
|
-
|
92
|
-
it 'has the correct value for #pre_conversion' do
|
93
|
-
builder.pre_conversion.
|
94
|
-
must_equal ['_v1 = GIMarshallingTests::Object.wrap(_instance)']
|
95
|
-
end
|
96
|
-
|
97
|
-
it 'has the correct value for #post_conversion' do
|
98
|
-
builder.post_conversion.must_equal []
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
@@ -1,253 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::VFuncBuilder do
|
6
|
-
let(:builder) { GirFFI::Builders::VFuncBuilder.new vfunc_info }
|
7
|
-
|
8
|
-
describe '#mapping_method_definition' do
|
9
|
-
let(:result) { builder.mapping_method_definition }
|
10
|
-
|
11
|
-
before do
|
12
|
-
skip unless vfunc_info
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'for a vfunc with only one argument' do
|
16
|
-
let(:vfunc_info) do
|
17
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'method_int8_in'
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns a valid mapping method including receiver' do
|
21
|
-
expected = <<-CODE.reset_indentation
|
22
|
-
def self.call_with_argument_mapping(_proc, _instance, in_)
|
23
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
24
|
-
_v2 = in_
|
25
|
-
_proc.call(_v1, _v2)
|
26
|
-
end
|
27
|
-
CODE
|
28
|
-
|
29
|
-
result.must_equal expected
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe 'for a vfunc returning an enum' do
|
34
|
-
let(:vfunc_info) do
|
35
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_return_enum'
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'returns a valid mapping method including receiver' do
|
39
|
-
expected = <<-CODE.reset_indentation
|
40
|
-
def self.call_with_argument_mapping(_proc, _instance)
|
41
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
42
|
-
_v2 = _proc.call(_v1)
|
43
|
-
_v3 = GIMarshallingTests::Enum.to_int(_v2)
|
44
|
-
return _v3
|
45
|
-
end
|
46
|
-
CODE
|
47
|
-
|
48
|
-
result.must_equal expected
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe 'for a vfunc with a callback argument' do
|
53
|
-
let(:vfunc_info) do
|
54
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_with_callback'
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'returns a valid mapping method including receiver' do
|
58
|
-
expected = <<-CODE.reset_indentation
|
59
|
-
def self.call_with_argument_mapping(_proc, _instance, callback, callback_data)
|
60
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
61
|
-
_v2 = GIMarshallingTests::CallbackIntInt.wrap(callback)
|
62
|
-
_v3 = GirFFI::ArgHelper::OBJECT_STORE.fetch(callback_data)
|
63
|
-
_proc.call(_v1, _v2, _v3)
|
64
|
-
end
|
65
|
-
CODE
|
66
|
-
|
67
|
-
result.must_equal expected
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe 'for a vfunc with an out argument allocated by them, the caller' do
|
72
|
-
let(:vfunc_info) do
|
73
|
-
get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
74
|
-
'method_int8_arg_and_out_caller')
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'returns a valid mapping method including receiver' do
|
78
|
-
expected = <<-CODE.reset_indentation
|
79
|
-
def self.call_with_argument_mapping(_proc, _instance, arg, out)
|
80
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
81
|
-
_v2 = arg
|
82
|
-
_v3 = out
|
83
|
-
_v4 = _proc.call(_v1, _v2)
|
84
|
-
_v3.put_int8 0, _v4
|
85
|
-
end
|
86
|
-
CODE
|
87
|
-
|
88
|
-
result.must_equal expected
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe 'for a vfunc with an out argument allocated by us, the callee' do
|
93
|
-
let(:vfunc_info) do
|
94
|
-
get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
95
|
-
'method_int8_arg_and_out_callee')
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'returns a valid mapping method including receiver' do
|
99
|
-
expected = <<-CODE.reset_indentation
|
100
|
-
def self.call_with_argument_mapping(_proc, _instance, arg, out)
|
101
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
102
|
-
_v2 = arg
|
103
|
-
_v3 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }
|
104
|
-
_v4 = _proc.call(_v1, _v2)
|
105
|
-
_v3.put_int8 0, _v4
|
106
|
-
end
|
107
|
-
CODE
|
108
|
-
|
109
|
-
result.must_equal expected
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe 'for a vfunc with a GObject::Value out argument allocated by them, the caller' do
|
114
|
-
let(:vfunc_info) do
|
115
|
-
get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
116
|
-
'vfunc_caller_allocated_out_parameter')
|
117
|
-
end
|
118
|
-
|
119
|
-
it 'returns a valid mapping method including receiver' do
|
120
|
-
expected = <<-CODE.reset_indentation
|
121
|
-
def self.call_with_argument_mapping(_proc, _instance, a)
|
122
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
123
|
-
_v2 = a
|
124
|
-
_v3 = _proc.call(_v1)
|
125
|
-
GObject::Value.copy_value_to_pointer(GObject::Value.from(_v3), _v2)
|
126
|
-
end
|
127
|
-
CODE
|
128
|
-
|
129
|
-
result.must_equal expected
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
describe 'for a vfunc with an error argument' do
|
134
|
-
let(:vfunc_info) do
|
135
|
-
get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
136
|
-
'vfunc_meth_with_err')
|
137
|
-
end
|
138
|
-
|
139
|
-
it 'returns a valid mapping method including receiver' do
|
140
|
-
expected = <<-CODE.reset_indentation
|
141
|
-
def self.call_with_argument_mapping(_proc, _instance, x, _error)
|
142
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
143
|
-
_v2 = x
|
144
|
-
_v3 = _error
|
145
|
-
begin
|
146
|
-
_v4 = _proc.call(_v1, _v2)
|
147
|
-
rescue => _v5
|
148
|
-
_v3.put_pointer 0, GLib::Error.from(_v5)
|
149
|
-
end
|
150
|
-
return _v4
|
151
|
-
end
|
152
|
-
CODE
|
153
|
-
|
154
|
-
result.must_equal expected
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
describe 'for a vfunc with a full-transfer return value' do
|
159
|
-
let(:vfunc_info) do
|
160
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_return_object_transfer_full'
|
161
|
-
end
|
162
|
-
|
163
|
-
it 'returns a valid mapping method' do
|
164
|
-
expected = <<-CODE.reset_indentation
|
165
|
-
def self.call_with_argument_mapping(_proc, _instance)
|
166
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
167
|
-
_v2 = _proc.call(_v1)
|
168
|
-
_v2.ref
|
169
|
-
_v3 = GObject::Object.from(_v2).to_ptr
|
170
|
-
return _v3
|
171
|
-
end
|
172
|
-
CODE
|
173
|
-
|
174
|
-
result.must_equal expected
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
describe 'for a vfunc with a transfer-none in argument' do
|
179
|
-
let(:vfunc_info) do
|
180
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_in_object_transfer_none'
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'returns a valid mapping method' do
|
184
|
-
expected = <<-CODE.reset_indentation
|
185
|
-
def self.call_with_argument_mapping(_proc, _instance, object)
|
186
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
187
|
-
_v2 = GObject::Object.wrap(object)
|
188
|
-
_v2.ref
|
189
|
-
_proc.call(_v1, _v2)
|
190
|
-
end
|
191
|
-
CODE
|
192
|
-
|
193
|
-
result.must_equal expected
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
describe 'for a vfunc with a full-transfer outgoing argument' do
|
198
|
-
let(:vfunc_info) do
|
199
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_out_object_transfer_full'
|
200
|
-
end
|
201
|
-
|
202
|
-
it 'returns a valid mapping method' do
|
203
|
-
expected = <<-CODE.reset_indentation
|
204
|
-
def self.call_with_argument_mapping(_proc, _instance, object)
|
205
|
-
_v1 = GIMarshallingTests::Object.wrap(_instance)
|
206
|
-
_v2 = object
|
207
|
-
_v3 = _proc.call(_v1)
|
208
|
-
_v3.ref
|
209
|
-
_v2.put_pointer 0, GObject::Object.from(_v3)
|
210
|
-
end
|
211
|
-
CODE
|
212
|
-
|
213
|
-
result.must_equal expected
|
214
|
-
end
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
describe '#argument_ffi_types' do
|
219
|
-
let(:result) { builder.argument_ffi_types }
|
220
|
-
|
221
|
-
before do
|
222
|
-
skip unless vfunc_info
|
223
|
-
end
|
224
|
-
|
225
|
-
describe 'for a vfunc with only one argument' do
|
226
|
-
let(:vfunc_info) do
|
227
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'method_int8_in'
|
228
|
-
end
|
229
|
-
|
230
|
-
it 'returns the correct FFI types including :pointer for the receiver' do
|
231
|
-
result.must_equal [:pointer, :int8]
|
232
|
-
end
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
describe '#return_ffi_type' do
|
237
|
-
let(:result) { builder.return_ffi_type }
|
238
|
-
|
239
|
-
before do
|
240
|
-
skip unless vfunc_info
|
241
|
-
end
|
242
|
-
|
243
|
-
describe 'for a vfunc returning an object' do
|
244
|
-
let(:vfunc_info) do
|
245
|
-
get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_return_object_transfer_full'
|
246
|
-
end
|
247
|
-
|
248
|
-
it 'returns :pointer' do
|
249
|
-
result.must_equal :pointer
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
253
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::CallbackBase do
|
6
|
-
describe '.store_callback' do
|
7
|
-
it 'stores the passed in proc in CALLBACKS' do
|
8
|
-
dummy_proc = 'some-callback'
|
9
|
-
GirFFI::CallbackBase.store_callback dummy_proc
|
10
|
-
GirFFI::CallbackBase::CALLBACKS[dummy_proc.object_id].must_equal dummy_proc
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.drop_callback' do
|
15
|
-
it 'removes the corresponding proc from CALLBACKS' do
|
16
|
-
dummy_proc = 'some-callback'
|
17
|
-
GirFFI::CallbackBase.store_callback dummy_proc
|
18
|
-
GirFFI::CallbackBase.drop_callback dummy_proc
|
19
|
-
GirFFI::CallbackBase::CALLBACKS[dummy_proc.object_id].must_be_nil
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,168 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::ClassBase do
|
6
|
-
describe 'a simple descendant' do
|
7
|
-
let(:object_class) do
|
8
|
-
Class.new(GirFFI::ClassBase) do
|
9
|
-
self::Struct = Class.new(GirFFI::Struct) do
|
10
|
-
layout :foo, :int32
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
let(:object) { object_class.wrap FFI::MemoryPointer.new(:int32) }
|
15
|
-
|
16
|
-
it 'has #from as a pass-through method' do
|
17
|
-
result = object_class.from :foo
|
18
|
-
result.must_equal :foo
|
19
|
-
end
|
20
|
-
|
21
|
-
describe '#==' do
|
22
|
-
it 'returns true when comparing to an object of the same class and pointer' do
|
23
|
-
other = object_class.wrap object.to_ptr
|
24
|
-
|
25
|
-
object.must_be :==, other
|
26
|
-
other.must_be :==, object
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'returns true when comparing to an object of the same class and a pointer with the same address' do
|
30
|
-
ptr = FFI::Pointer.new object.to_ptr
|
31
|
-
other = object_class.wrap ptr
|
32
|
-
|
33
|
-
object.must_be :==, other
|
34
|
-
other.must_be :==, object
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'returns false when comparing to an object of a sub/superclass and the same pointer' do
|
38
|
-
subclass = Class.new(object_class)
|
39
|
-
other = subclass.wrap object.to_ptr
|
40
|
-
|
41
|
-
object.wont_be :==, other
|
42
|
-
other.wont_be :==, object
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'returns false when comparing to an object of the same class and different pointer' do
|
46
|
-
other = object_class.wrap FFI::MemoryPointer.new(:int32)
|
47
|
-
|
48
|
-
object.wont_be :==, other
|
49
|
-
other.wont_be :==, object
|
50
|
-
end
|
51
|
-
|
52
|
-
it "returns false when comparing to an object that doesn't respond to #to_ptr" do
|
53
|
-
other = Object.new
|
54
|
-
|
55
|
-
object.wont_be :==, other
|
56
|
-
other.wont_be :==, object
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'returns false when comparing to an object of a different class and same pointer' do
|
60
|
-
allow(other = Object.new).to receive(:to_ptr).and_return object.to_ptr
|
61
|
-
|
62
|
-
object.wont_be :==, other
|
63
|
-
other.wont_be :==, object
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'returns false when comparing to an object of a different class and different pointer' do
|
67
|
-
allow(other = Object.new).to receive(:to_ptr).and_return FFI::MemoryPointer.new(:int32)
|
68
|
-
|
69
|
-
object.wont_be :==, other
|
70
|
-
other.wont_be :==, object
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe '.setup_and_call' do
|
76
|
-
it 'looks up class methods in all builders' do
|
77
|
-
expect(builder = Object.new).to receive(:setup_method).with('foo').and_return 'foo'
|
78
|
-
klass = Class.new GirFFI::ClassBase
|
79
|
-
klass.const_set :GIR_FFI_BUILDER, builder
|
80
|
-
|
81
|
-
expect(sub_builder = Object.new).to receive(:setup_method).with('foo').and_return nil
|
82
|
-
sub_klass = Class.new klass do
|
83
|
-
def self.foo; end
|
84
|
-
end
|
85
|
-
sub_klass.const_set :GIR_FFI_BUILDER, sub_builder
|
86
|
-
|
87
|
-
sub_klass.setup_and_call :foo, []
|
88
|
-
end
|
89
|
-
|
90
|
-
it 'calls the method given by the result of .setup_method' do
|
91
|
-
expect(builder = Object.new).to receive(:setup_method).with('foo').and_return 'bar'
|
92
|
-
klass = Class.new GirFFI::ClassBase do
|
93
|
-
def self.bar
|
94
|
-
'correct-result'
|
95
|
-
end
|
96
|
-
|
97
|
-
def initialize; end
|
98
|
-
end
|
99
|
-
klass.const_set :GIR_FFI_BUILDER, builder
|
100
|
-
|
101
|
-
result = klass.setup_and_call :foo, []
|
102
|
-
result.must_equal 'correct-result'
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'raises a sensible error if the method is not found' do
|
106
|
-
expect(builder = Object.new).to receive(:setup_method).with('foo').and_return nil
|
107
|
-
klass = Class.new GirFFI::ClassBase do
|
108
|
-
def initialize; end
|
109
|
-
end
|
110
|
-
klass.const_set :GIR_FFI_BUILDER, builder
|
111
|
-
|
112
|
-
proc { klass.setup_and_call :foo, [] }.
|
113
|
-
must_raise(NoMethodError).message.
|
114
|
-
must_match(/^undefined method `foo' for/)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe '#setup_and_call' do
|
119
|
-
it 'looks up instance methods in all builders' do
|
120
|
-
expect(builder = Object.new).to receive(:setup_instance_method).with('foo').and_return 'foo'
|
121
|
-
klass = Class.new GirFFI::ClassBase
|
122
|
-
klass.const_set :GIR_FFI_BUILDER, builder
|
123
|
-
|
124
|
-
expect(sub_builder = Object.new).to receive(:setup_instance_method).with('foo').and_return nil
|
125
|
-
sub_klass = Class.new klass do
|
126
|
-
def foo; end
|
127
|
-
|
128
|
-
def initialize; end
|
129
|
-
end
|
130
|
-
sub_klass.const_set :GIR_FFI_BUILDER, sub_builder
|
131
|
-
|
132
|
-
obj = sub_klass.new
|
133
|
-
|
134
|
-
obj.setup_and_call :foo, []
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'calls the method given by the result of .setup_instance_method' do
|
138
|
-
expect(builder = Object.new).to receive(:setup_instance_method).with('foo').and_return 'bar'
|
139
|
-
klass = Class.new GirFFI::ClassBase do
|
140
|
-
def bar
|
141
|
-
'correct-result'
|
142
|
-
end
|
143
|
-
|
144
|
-
def initialize; end
|
145
|
-
end
|
146
|
-
klass.const_set :GIR_FFI_BUILDER, builder
|
147
|
-
|
148
|
-
obj = klass.new
|
149
|
-
|
150
|
-
result = obj.setup_and_call :foo, []
|
151
|
-
result.must_equal 'correct-result'
|
152
|
-
end
|
153
|
-
|
154
|
-
it 'raises a sensible error if the method is not found' do
|
155
|
-
expect(builder = Object.new).to receive(:setup_instance_method).with('foo').and_return nil
|
156
|
-
klass = Class.new GirFFI::ClassBase do
|
157
|
-
def initialize; end
|
158
|
-
end
|
159
|
-
klass.const_set :GIR_FFI_BUILDER, builder
|
160
|
-
|
161
|
-
obj = klass.new
|
162
|
-
|
163
|
-
proc { obj.setup_and_call :foo, [] }.
|
164
|
-
must_raise(NoMethodError).message.
|
165
|
-
must_match(/^undefined method `foo' for/)
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|