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,538 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::FunctionBuilder do
|
6
|
-
describe '#method_definition' do
|
7
|
-
let(:builder) { GirFFI::Builders::FunctionBuilder.new function_info }
|
8
|
-
let(:code) { builder.method_definition }
|
9
|
-
|
10
|
-
describe 'generally' do
|
11
|
-
let(:function_info) { get_method_introspection_data 'GObject', 'Object', 'get_property' }
|
12
|
-
|
13
|
-
it 'returns the same result when called twice' do
|
14
|
-
original = builder.method_definition
|
15
|
-
copy = builder.method_definition
|
16
|
-
copy.must_equal original
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe 'for Regress:test_array_fixed_out_objects' do
|
21
|
-
let(:function_info) { get_introspection_data 'Regress', 'test_array_fixed_out_objects' }
|
22
|
-
it 'builds a correct definition' do
|
23
|
-
skip unless function_info
|
24
|
-
code.must_equal <<-CODE.reset_indentation
|
25
|
-
def self.test_array_fixed_out_objects
|
26
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
27
|
-
Regress::Lib.regress_test_array_fixed_out_objects _v1
|
28
|
-
_v2 = GirFFI::SizedArray.wrap([:pointer, Regress::TestObj], 2, _v1.get_pointer(0))
|
29
|
-
return _v2
|
30
|
-
end
|
31
|
-
CODE
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe 'for functions having a linked length argument' do
|
36
|
-
let(:function_info) { get_introspection_data 'Regress', 'test_array_gint16_in' }
|
37
|
-
it 'builds a correct definition' do
|
38
|
-
code.must_equal <<-CODE.reset_indentation
|
39
|
-
def self.test_array_gint16_in(ints)
|
40
|
-
n_ints = ints.nil? ? 0 : ints.length
|
41
|
-
_v1 = n_ints
|
42
|
-
_v2 = GirFFI::SizedArray.from(:gint16, -1, ints)
|
43
|
-
_v3 = Regress::Lib.regress_test_array_gint16_in _v1, _v2
|
44
|
-
return _v3
|
45
|
-
end
|
46
|
-
CODE
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe 'for methods taking a zero-terminated array with length argument' do
|
51
|
-
let(:function_info) { get_method_introspection_data 'Regress', 'AnnotationObject', 'parse_args' }
|
52
|
-
it 'builds a correct definition' do
|
53
|
-
skip unless function_info
|
54
|
-
code.must_equal <<-CODE.reset_indentation
|
55
|
-
def parse_args(argv)
|
56
|
-
argc = argv.nil? ? 0 : argv.length
|
57
|
-
_v1 = FFI::MemoryPointer.new :int32
|
58
|
-
_v1.put_int32 0, argc
|
59
|
-
_v2 = FFI::MemoryPointer.new :pointer
|
60
|
-
_v2.put_pointer 0, GLib::Strv.from(argv)
|
61
|
-
Regress::Lib.regress_annotation_object_parse_args self, _v1, _v2
|
62
|
-
_v3 = GLib::Strv.wrap(_v2.get_pointer(0))
|
63
|
-
return _v3
|
64
|
-
end
|
65
|
-
CODE
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe 'for functions with callbacks' do
|
70
|
-
let(:function_info) { get_introspection_data 'Regress', 'test_callback_destroy_notify' }
|
71
|
-
it 'builds a correct definition' do
|
72
|
-
code.must_equal <<-CODE.reset_indentation
|
73
|
-
def self.test_callback_destroy_notify(&callback)
|
74
|
-
_v1 = Regress::TestCallbackUserData.from(callback)
|
75
|
-
_v2 = GirFFI::ArgHelper.store(_v1)
|
76
|
-
_v3 = GLib::DestroyNotify.default
|
77
|
-
_v4 = Regress::Lib.regress_test_callback_destroy_notify _v1, _v2, _v3
|
78
|
-
return _v4
|
79
|
-
end
|
80
|
-
CODE
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe 'for functions that take a GValue' do
|
85
|
-
let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_in' }
|
86
|
-
it 'creates a call to GObject::Value#from' do
|
87
|
-
code.must_equal <<-CODE.reset_indentation
|
88
|
-
def self.gvalue_in(value)
|
89
|
-
_v1 = GObject::Value.from(value)
|
90
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_in _v1
|
91
|
-
end
|
92
|
-
CODE
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe 'for functions that return a GValue' do
|
97
|
-
let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_return' }
|
98
|
-
it 'creates a call to #get_value' do
|
99
|
-
code.must_equal <<-CODE.reset_indentation
|
100
|
-
def self.gvalue_return
|
101
|
-
_v1 = GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_return
|
102
|
-
_v2 = GObject::Value.wrap(_v1).get_value
|
103
|
-
return _v2
|
104
|
-
end
|
105
|
-
CODE
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe 'for functions that have a GValue out argument' do
|
110
|
-
let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_out' }
|
111
|
-
it 'creates a call to #get_value' do
|
112
|
-
code.must_equal <<-CODE.reset_indentation
|
113
|
-
def self.gvalue_out
|
114
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
115
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_out _v1
|
116
|
-
_v2 = GObject::Value.wrap(_v1.get_pointer(0)).get_value
|
117
|
-
return _v2
|
118
|
-
end
|
119
|
-
CODE
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe 'for functions that have a caller-allocated GValue out argument' do
|
124
|
-
let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_out_caller_allocates' }
|
125
|
-
|
126
|
-
it 'creates a call to #get_value' do
|
127
|
-
skip unless function_info
|
128
|
-
code.must_equal <<-CODE.reset_indentation
|
129
|
-
def self.gvalue_out_caller_allocates
|
130
|
-
_v1 = GObject::Value.new
|
131
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_out_caller_allocates _v1
|
132
|
-
_v2 = _v1.get_value
|
133
|
-
return _v2
|
134
|
-
end
|
135
|
-
CODE
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
describe 'for functions with a nullable input array' do
|
140
|
-
let(:function_info) { get_introspection_data 'Regress', 'test_array_int_null_in' }
|
141
|
-
it 'builds correct definition' do
|
142
|
-
code.must_equal <<-CODE.reset_indentation
|
143
|
-
def self.test_array_int_null_in(arr = nil)
|
144
|
-
len = arr.nil? ? 0 : arr.length
|
145
|
-
_v1 = len
|
146
|
-
_v2 = GirFFI::SizedArray.from(:gint32, -1, arr)
|
147
|
-
Regress::Lib.regress_test_array_int_null_in _v2, _v1
|
148
|
-
end
|
149
|
-
CODE
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
describe 'for functions with a nullable output array' do
|
154
|
-
let(:function_info) { get_introspection_data 'Regress', 'test_array_int_null_out' }
|
155
|
-
it 'builds correct definition' do
|
156
|
-
code.must_equal <<-CODE.reset_indentation
|
157
|
-
def self.test_array_int_null_out
|
158
|
-
_v1 = FFI::MemoryPointer.new :int32
|
159
|
-
_v2 = FFI::MemoryPointer.new :pointer
|
160
|
-
Regress::Lib.regress_test_array_int_null_out _v2, _v1
|
161
|
-
_v3 = _v1.get_int32(0)
|
162
|
-
_v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.get_pointer(0))
|
163
|
-
return _v4
|
164
|
-
end
|
165
|
-
CODE
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
describe 'for a method with an inout array with size argument' do
|
170
|
-
let(:function_info) { get_method_introspection_data 'GIMarshallingTests', 'Object', 'method_array_inout' }
|
171
|
-
it 'builds the correct definition' do
|
172
|
-
code.must_equal <<-CODE.reset_indentation
|
173
|
-
def method_array_inout(ints)
|
174
|
-
length = ints.nil? ? 0 : ints.length
|
175
|
-
_v1 = FFI::MemoryPointer.new :int32
|
176
|
-
_v1.put_int32 0, length
|
177
|
-
_v2 = FFI::MemoryPointer.new :pointer
|
178
|
-
_v2.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, ints)
|
179
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_object_method_array_inout self, _v2, _v1
|
180
|
-
_v3 = _v1.get_int32(0)
|
181
|
-
_v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.get_pointer(0))
|
182
|
-
return _v4
|
183
|
-
end
|
184
|
-
CODE
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
describe 'for a simple method' do
|
189
|
-
let(:function_info) { get_method_introspection_data 'Regress', 'TestObj', 'instance_method' }
|
190
|
-
|
191
|
-
it 'builds a correct definition' do
|
192
|
-
code.must_equal <<-CODE.reset_indentation
|
193
|
-
def instance_method
|
194
|
-
_v1 = Regress::Lib.regress_test_obj_instance_method self
|
195
|
-
return _v1
|
196
|
-
end
|
197
|
-
CODE
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
describe 'for GLib::Variant.get_strv' do
|
202
|
-
let(:function_info) { get_method_introspection_data 'GLib', 'Variant', 'get_strv' }
|
203
|
-
it 'builds a correct definition' do
|
204
|
-
size_type = ":uint#{FFI.type_size(:size_t) * 8}"
|
205
|
-
code.must_equal <<-CODE.reset_indentation
|
206
|
-
def get_strv
|
207
|
-
_v1 = FFI::MemoryPointer.new #{size_type}
|
208
|
-
_v2 = GLib::Lib.g_variant_get_strv self, _v1
|
209
|
-
_v3 = GLib::Strv.wrap(_v2)
|
210
|
-
return _v3
|
211
|
-
end
|
212
|
-
CODE
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
describe 'for Regress.has_parameter_named_attrs' do
|
217
|
-
let(:function_info) { get_introspection_data 'Regress', 'has_parameter_named_attrs' }
|
218
|
-
|
219
|
-
it 'builds a correct definition' do
|
220
|
-
skip unless function_info
|
221
|
-
code.must_equal <<-CODE.reset_indentation
|
222
|
-
def self.has_parameter_named_attrs(foo, attributes)
|
223
|
-
_v1 = foo
|
224
|
-
GirFFI::ArgHelper.check_fixed_array_size 32, attributes, \"attributes\"
|
225
|
-
_v2 = GirFFI::SizedArray.from([:pointer, :guint32], 32, attributes)
|
226
|
-
Regress::Lib.regress_has_parameter_named_attrs _v1, _v2
|
227
|
-
end
|
228
|
-
CODE
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
describe 'for GIMarshallingTests::Object#method_int8_arg_and_out_callee' do
|
233
|
-
let(:function_info) do
|
234
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
235
|
-
'method_int8_arg_and_out_callee')
|
236
|
-
end
|
237
|
-
|
238
|
-
it 'builds a correct definition' do
|
239
|
-
skip unless function_info
|
240
|
-
code.must_equal <<-CODE.reset_indentation
|
241
|
-
def method_int8_arg_and_out_callee(arg)
|
242
|
-
_v1 = arg
|
243
|
-
_v2 = FFI::MemoryPointer.new :pointer
|
244
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_object_method_int8_arg_and_out_callee self, _v1, _v2
|
245
|
-
_v3 = _v2.get_pointer(0).get_int8(0)
|
246
|
-
return _v3
|
247
|
-
end
|
248
|
-
CODE
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
describe 'object ownership transfer' do
|
253
|
-
describe 'for GIMarshallingTests::Object#full_in' do
|
254
|
-
let(:function_info) do
|
255
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
256
|
-
'full_in')
|
257
|
-
end
|
258
|
-
|
259
|
-
# NOTE: This method is transfer-ownership: none, despite the name.
|
260
|
-
it 'builds a correct definition' do
|
261
|
-
code.must_equal <<-CODE.reset_indentation
|
262
|
-
def full_in
|
263
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_object_full_in self
|
264
|
-
end
|
265
|
-
CODE
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
describe 'for GIMarshallingTests::Object.full_inout' do
|
270
|
-
let(:function_info) do
|
271
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
272
|
-
'full_inout')
|
273
|
-
end
|
274
|
-
|
275
|
-
it 'builds a correct definition' do
|
276
|
-
code.must_equal <<-CODE.reset_indentation
|
277
|
-
def self.full_inout(object)
|
278
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
279
|
-
_v1.put_pointer 0, GIMarshallingTests::Object.from(object && object.ref)
|
280
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_object_full_inout _v1
|
281
|
-
_v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0))
|
282
|
-
return _v2
|
283
|
-
end
|
284
|
-
CODE
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
describe 'for GIMarshallingTests::Object.full_out' do
|
289
|
-
let(:function_info) do
|
290
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
291
|
-
'full_out')
|
292
|
-
end
|
293
|
-
|
294
|
-
it 'builds a correct definition' do
|
295
|
-
code.must_equal <<-CODE.reset_indentation
|
296
|
-
def self.full_out
|
297
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
298
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_object_full_out _v1
|
299
|
-
_v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0))
|
300
|
-
return _v2
|
301
|
-
end
|
302
|
-
CODE
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
describe 'for GIMarshallingTests::Object.full_return' do
|
307
|
-
let(:function_info) do
|
308
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
309
|
-
'full_return')
|
310
|
-
end
|
311
|
-
|
312
|
-
it 'builds a correct definition' do
|
313
|
-
code.must_equal <<-CODE.reset_indentation
|
314
|
-
def self.full_return
|
315
|
-
_v1 = GIMarshallingTests::Lib.gi_marshalling_tests_object_full_return
|
316
|
-
_v2 = GIMarshallingTests::Object.wrap(_v1)
|
317
|
-
return _v2
|
318
|
-
end
|
319
|
-
CODE
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
describe 'for GIMarshallingTests::Object#none_in' do
|
324
|
-
let(:function_info) do
|
325
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
326
|
-
'none_in')
|
327
|
-
end
|
328
|
-
|
329
|
-
it 'builds a correct definition' do
|
330
|
-
code.must_equal <<-CODE.reset_indentation
|
331
|
-
def none_in
|
332
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_object_none_in self
|
333
|
-
end
|
334
|
-
CODE
|
335
|
-
end
|
336
|
-
end
|
337
|
-
|
338
|
-
describe 'for GIMarshallingTests::Object.none_inout' do
|
339
|
-
let(:function_info) do
|
340
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
341
|
-
'none_inout')
|
342
|
-
end
|
343
|
-
|
344
|
-
it 'builds a correct definition' do
|
345
|
-
code.must_equal <<-CODE.reset_indentation
|
346
|
-
def self.none_inout(object)
|
347
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
348
|
-
_v1.put_pointer 0, GIMarshallingTests::Object.from(object)
|
349
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_object_none_inout _v1
|
350
|
-
_v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }
|
351
|
-
return _v2
|
352
|
-
end
|
353
|
-
CODE
|
354
|
-
end
|
355
|
-
end
|
356
|
-
|
357
|
-
describe 'for GIMarshallingTests::Object.none_out' do
|
358
|
-
let(:function_info) do
|
359
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
360
|
-
'none_out')
|
361
|
-
end
|
362
|
-
|
363
|
-
it 'builds a correct definition' do
|
364
|
-
code.must_equal <<-CODE.reset_indentation
|
365
|
-
def self.none_out
|
366
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
367
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_object_none_out _v1
|
368
|
-
_v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }
|
369
|
-
return _v2
|
370
|
-
end
|
371
|
-
CODE
|
372
|
-
end
|
373
|
-
end
|
374
|
-
|
375
|
-
describe 'for GIMarshallingTests::Object.none_return' do
|
376
|
-
let(:function_info) do
|
377
|
-
get_method_introspection_data('GIMarshallingTests', 'Object',
|
378
|
-
'none_return')
|
379
|
-
end
|
380
|
-
|
381
|
-
it 'builds a correct definition' do
|
382
|
-
code.must_equal <<-CODE.reset_indentation
|
383
|
-
def self.none_return
|
384
|
-
_v1 = GIMarshallingTests::Lib.gi_marshalling_tests_object_none_return
|
385
|
-
_v2 = GIMarshallingTests::Object.wrap(_v1).tap { |it| it && it.ref }
|
386
|
-
return _v2
|
387
|
-
end
|
388
|
-
CODE
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
describe 'for Regress::TestObj#instance_method_full' do
|
393
|
-
let(:function_info) do
|
394
|
-
get_method_introspection_data('Regress', 'TestObj',
|
395
|
-
'instance_method_full')
|
396
|
-
end
|
397
|
-
|
398
|
-
it 'builds a correct definition including self.ref' do
|
399
|
-
skip unless function_info
|
400
|
-
code.must_equal <<-CODE.reset_indentation
|
401
|
-
def instance_method_full
|
402
|
-
Regress::Lib.regress_test_obj_instance_method_full self.ref
|
403
|
-
end
|
404
|
-
CODE
|
405
|
-
end
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
describe 'struct ownership transfer' do
|
410
|
-
describe 'for GIMarshallingTests::BoxedStruct.inout' do
|
411
|
-
let(:function_info) do
|
412
|
-
get_method_introspection_data('GIMarshallingTests', 'BoxedStruct', 'inout')
|
413
|
-
end
|
414
|
-
|
415
|
-
it 'builds a correct definition' do
|
416
|
-
code.must_equal <<-CODE.reset_indentation
|
417
|
-
def self.inout(struct_)
|
418
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
419
|
-
_v1.put_pointer 0, GIMarshallingTests::BoxedStruct.copy_from(struct_)
|
420
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_inout _v1
|
421
|
-
_v2 = GIMarshallingTests::BoxedStruct.wrap_own(_v1.get_pointer(0))
|
422
|
-
return _v2
|
423
|
-
end
|
424
|
-
CODE
|
425
|
-
end
|
426
|
-
end
|
427
|
-
|
428
|
-
describe 'for GIMarshallingTests::BoxedStruct.out' do
|
429
|
-
let(:function_info) do
|
430
|
-
get_method_introspection_data('GIMarshallingTests', 'BoxedStruct', 'out')
|
431
|
-
end
|
432
|
-
|
433
|
-
it 'builds a correct definition' do
|
434
|
-
code.must_equal <<-CODE.reset_indentation
|
435
|
-
def self.out
|
436
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
437
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_out _v1
|
438
|
-
_v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1.get_pointer(0))
|
439
|
-
return _v2
|
440
|
-
end
|
441
|
-
CODE
|
442
|
-
end
|
443
|
-
end
|
444
|
-
|
445
|
-
describe 'for GIMarshallingTests::BoxedStruct.returnv' do
|
446
|
-
let(:function_info) do
|
447
|
-
get_method_introspection_data('GIMarshallingTests', 'BoxedStruct', 'returnv')
|
448
|
-
end
|
449
|
-
|
450
|
-
it 'builds a correct definition' do
|
451
|
-
code.must_equal <<-CODE.reset_indentation
|
452
|
-
def self.returnv
|
453
|
-
_v1 = GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_returnv
|
454
|
-
_v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1)
|
455
|
-
return _v2
|
456
|
-
end
|
457
|
-
CODE
|
458
|
-
end
|
459
|
-
end
|
460
|
-
end
|
461
|
-
|
462
|
-
describe 'string ownership transfer' do
|
463
|
-
describe 'for Regress.test_utf8_out' do
|
464
|
-
let(:function_info) { get_introspection_data 'Regress', 'test_utf8_out' }
|
465
|
-
|
466
|
-
it 'builds a correct definition' do
|
467
|
-
code.must_equal <<-CODE.reset_indentation
|
468
|
-
def self.test_utf8_out
|
469
|
-
_v1 = FFI::MemoryPointer.new :pointer
|
470
|
-
Regress::Lib.regress_test_utf8_out _v1
|
471
|
-
_v2 = GirFFI::AllocationHelper.free_after _v1.get_pointer(0), &:to_utf8
|
472
|
-
return _v2
|
473
|
-
end
|
474
|
-
CODE
|
475
|
-
end
|
476
|
-
end
|
477
|
-
end
|
478
|
-
|
479
|
-
describe 'for functions with an allow-none ingoing parameter' do
|
480
|
-
let(:function_info) { get_introspection_data 'Regress', 'test_utf8_null_in' }
|
481
|
-
it 'builds correct definition with default parameter value' do
|
482
|
-
code.must_equal <<-CODE.reset_indentation
|
483
|
-
def self.test_utf8_null_in(in_ = nil)
|
484
|
-
_v1 = GirFFI::InPointer.from_utf8(in_)
|
485
|
-
Regress::Lib.regress_test_utf8_null_in _v1
|
486
|
-
end
|
487
|
-
CODE
|
488
|
-
end
|
489
|
-
end
|
490
|
-
|
491
|
-
describe 'for functions where some allow-none cannot be honored' do
|
492
|
-
let(:function_info) { get_introspection_data 'GIMarshallingTests', 'array_in_utf8_two_in_out_of_order' }
|
493
|
-
it 'builds correct definition with default parameter value on the later arguments' do
|
494
|
-
code.must_equal <<-CODE.reset_indentation
|
495
|
-
def self.array_in_utf8_two_in_out_of_order(a, ints, b = nil)
|
496
|
-
length = ints.nil? ? 0 : ints.length
|
497
|
-
_v1 = length
|
498
|
-
_v2 = GirFFI::InPointer.from_utf8(a)
|
499
|
-
_v3 = GirFFI::InPointer.from_utf8(b)
|
500
|
-
_v4 = GirFFI::SizedArray.from(:gint32, -1, ints)
|
501
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_array_in_utf8_two_in_out_of_order _v1, _v2, _v4, _v3
|
502
|
-
end
|
503
|
-
CODE
|
504
|
-
end
|
505
|
-
end
|
506
|
-
|
507
|
-
describe 'ownership transfer for an ingoing array of structs' do
|
508
|
-
describe 'with no ownership transfer of the elements' do
|
509
|
-
let(:function_info) { get_introspection_data 'GIMarshallingTests', 'array_struct_in' }
|
510
|
-
|
511
|
-
it 'builds a correct definition' do
|
512
|
-
code.must_equal <<-CODE.reset_indentation
|
513
|
-
def self.array_struct_in(structs)
|
514
|
-
length = structs.nil? ? 0 : structs.length
|
515
|
-
_v1 = length
|
516
|
-
_v2 = GirFFI::SizedArray.from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)
|
517
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_array_struct_in _v2, _v1
|
518
|
-
end
|
519
|
-
CODE
|
520
|
-
end
|
521
|
-
end
|
522
|
-
describe 'with ownership transfer of the elements' do
|
523
|
-
let(:function_info) { get_introspection_data 'GIMarshallingTests', 'array_struct_take_in' }
|
524
|
-
|
525
|
-
it 'builds a correct definition' do
|
526
|
-
code.must_equal <<-CODE.reset_indentation
|
527
|
-
def self.array_struct_take_in(structs)
|
528
|
-
length = structs.nil? ? 0 : structs.length
|
529
|
-
_v1 = length
|
530
|
-
_v2 = GirFFI::SizedArray.copy_from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)
|
531
|
-
GIMarshallingTests::Lib.gi_marshalling_tests_array_struct_take_in _v2, _v1
|
532
|
-
end
|
533
|
-
CODE
|
534
|
-
end
|
535
|
-
end
|
536
|
-
end
|
537
|
-
end
|
538
|
-
end
|