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,54 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::InitializerBuilder do
|
6
|
-
describe '#method_definition' do
|
7
|
-
let(:builder) { GirFFI::Builders::InitializerBuilder.new function_info }
|
8
|
-
let(:code) { builder.method_definition }
|
9
|
-
|
10
|
-
describe 'for constructors with the default name' do
|
11
|
-
let(:function_info) { get_method_introspection_data 'Regress', 'TestObj', 'new' }
|
12
|
-
it 'builds an initializer' do
|
13
|
-
code.must_equal <<-CODE.reset_indentation
|
14
|
-
def initialize(obj)
|
15
|
-
_v1 = Regress::TestObj.from(obj)
|
16
|
-
_v2 = Regress::Lib.regress_test_obj_new _v1
|
17
|
-
store_pointer(_v2)
|
18
|
-
end
|
19
|
-
CODE
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe 'for constructors with a custom name' do
|
24
|
-
let(:function_info) { get_method_introspection_data 'Regress', 'TestObj', 'new_from_file' }
|
25
|
-
it 'builds a custom initializer' do
|
26
|
-
code.must_equal <<-CODE.reset_indentation
|
27
|
-
def initialize_from_file(x)
|
28
|
-
_v1 = GirFFI::InPointer.from_utf8(x)
|
29
|
-
_v2 = FFI::MemoryPointer.new(:pointer).write_pointer nil
|
30
|
-
_v3 = Regress::Lib.regress_test_obj_new_from_file _v1, _v2
|
31
|
-
GirFFI::ArgHelper.check_error(_v2)
|
32
|
-
store_pointer(_v3)
|
33
|
-
end
|
34
|
-
CODE
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe 'for constructors for boxed types' do
|
39
|
-
let(:function_info) do
|
40
|
-
get_method_introspection_data 'GIMarshallingTests', 'BoxedStruct', 'new'
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'builds an initializer that sets owned to true' do
|
44
|
-
code.must_equal <<-CODE.reset_indentation
|
45
|
-
def initialize
|
46
|
-
_v1 = GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_new
|
47
|
-
store_pointer(_v1)
|
48
|
-
@struct.owned = true
|
49
|
-
end
|
50
|
-
CODE
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::InterfaceBuilder do
|
6
|
-
let(:interface_builder) do
|
7
|
-
GirFFI::Builders::InterfaceBuilder.new(
|
8
|
-
get_introspection_data('Regress', 'TestInterface'))
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '#build_class' do
|
12
|
-
before do
|
13
|
-
info = get_introspection_data 'GObject', 'TypePlugin'
|
14
|
-
@bldr = GirFFI::Builders::InterfaceBuilder.new info
|
15
|
-
@iface = @bldr.build_class
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'builds an interface as a module' do
|
19
|
-
assert_instance_of Module, @iface
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'creates methods on the interface' do
|
23
|
-
assert_defines_instance_method @iface, :complete_interface_info
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '#interface_struct' do
|
28
|
-
it 'returns the interface struct type' do
|
29
|
-
interface_builder.interface_struct.must_equal Regress::TestInterfaceIface
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::ModuleBuilder do
|
6
|
-
let(:gir) { GObjectIntrospection::IRepository.default }
|
7
|
-
|
8
|
-
describe '#find_namespaced_class_info' do
|
9
|
-
it 'finds the info in the GIR' do
|
10
|
-
allow(gir).to receive(:require).with('Foo', nil)
|
11
|
-
|
12
|
-
builder = GirFFI::Builders::ModuleBuilder.new 'Foo'
|
13
|
-
|
14
|
-
expect(gir).to receive(:find_by_name).with('Foo', 'Bar').and_return 'gir info'
|
15
|
-
|
16
|
-
builder.find_namespaced_class_info(:Bar).must_equal 'gir info'
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'checks downcased class name as an alternative' do
|
20
|
-
allow(gir).to receive(:require).with('Foo', nil)
|
21
|
-
|
22
|
-
builder = GirFFI::Builders::ModuleBuilder.new 'Foo'
|
23
|
-
|
24
|
-
expect(gir).to receive(:find_by_name).with('Foo', 'Bar').and_return nil
|
25
|
-
expect(gir).to receive(:find_by_name).with('Foo', 'bar').and_return 'gir info'
|
26
|
-
|
27
|
-
builder.find_namespaced_class_info(:Bar).must_equal 'gir info'
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'raises a clear error if the named class does not exist' do
|
31
|
-
allow(gir).to receive(:require).with('Foo', nil)
|
32
|
-
|
33
|
-
builder = GirFFI::Builders::ModuleBuilder.new 'Foo'
|
34
|
-
|
35
|
-
expect(gir).to receive(:find_by_name).with('Foo', 'Bar').and_return nil
|
36
|
-
expect(gir).to receive(:find_by_name).with('Foo', 'bar').and_return nil
|
37
|
-
|
38
|
-
assert_raises NameError do
|
39
|
-
builder.find_namespaced_class_info :Bar
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::ObjectBuilder do
|
6
|
-
let(:obj_builder) do
|
7
|
-
GirFFI::Builders::ObjectBuilder.new(
|
8
|
-
get_introspection_data('Regress', 'TestObj'))
|
9
|
-
end
|
10
|
-
let(:sub_obj_builder) do
|
11
|
-
GirFFI::Builders::ObjectBuilder.new(
|
12
|
-
get_introspection_data('Regress', 'TestSubObj'))
|
13
|
-
end
|
14
|
-
let(:param_spec_builder) do
|
15
|
-
GirFFI::Builders::ObjectBuilder.new(
|
16
|
-
get_introspection_data('GObject', 'ParamSpec'))
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#find_signal' do
|
20
|
-
it 'finds the signal "test" for TestObj' do
|
21
|
-
sig = obj_builder.find_signal 'test'
|
22
|
-
sig.name.must_equal 'test'
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'finds the signal "test" for TestSubObj' do
|
26
|
-
sig = sub_obj_builder.find_signal 'test'
|
27
|
-
sig.name.must_equal 'test'
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'finds the signal "changed" for Gtk::Entry' do
|
31
|
-
builder = GirFFI::Builders::ObjectBuilder.new get_introspection_data('Gtk', 'Entry')
|
32
|
-
sig = builder.find_signal 'changed'
|
33
|
-
sig.name.must_equal 'changed'
|
34
|
-
end
|
35
|
-
|
36
|
-
it "returns nil for a signal that doesn't exist" do
|
37
|
-
obj_builder.find_signal('foo').must_be_nil
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe '#find_property' do
|
42
|
-
it 'finds a property specified on the class itself' do
|
43
|
-
prop = obj_builder.find_property('int')
|
44
|
-
prop.name.must_equal 'int'
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'finds a property specified on the parent class' do
|
48
|
-
prop = sub_obj_builder.find_property('int')
|
49
|
-
prop.name.must_equal 'int'
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'returns nil if the property is not found' do
|
53
|
-
sub_obj_builder.find_property('this-property-does-not-exist').must_be_nil
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe '#object_class_struct' do
|
58
|
-
it 'returns the class struct type' do
|
59
|
-
obj_builder.object_class_struct.must_equal Regress::TestObjClass
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'returns the parent struct type for classes without their own struct' do
|
63
|
-
binding_info = get_introspection_data 'GObject', 'Binding'
|
64
|
-
builder = GirFFI::Builders::ObjectBuilder.new binding_info
|
65
|
-
builder.object_class_struct.must_equal GObject::ObjectClass
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe 'for a struct without defined fields' do
|
70
|
-
let(:info) { get_introspection_data 'GObject', 'Binding' }
|
71
|
-
|
72
|
-
it 'uses a single field of the parent struct type as the default layout' do
|
73
|
-
info.n_fields.must_equal 0
|
74
|
-
|
75
|
-
builder = GirFFI::Builders::ObjectBuilder.new info
|
76
|
-
|
77
|
-
spec = builder.send :layout_specification
|
78
|
-
assert_equal [:parent, GObject::Object::Struct, 0], spec
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe '#eligible_properties' do
|
83
|
-
let(:wi_builder) do
|
84
|
-
GirFFI::Builders::ObjectBuilder.new(
|
85
|
-
get_introspection_data('Regress', 'TestWi8021x'))
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'includes properties that do not have a matching getter method' do
|
89
|
-
result = obj_builder.eligible_properties
|
90
|
-
result.map(&:name).must_include 'double'
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'skips properties that have a matching getter method' do
|
94
|
-
result = wi_builder.eligible_properties
|
95
|
-
result.map(&:name).wont_include 'testbool'
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
@@ -1,161 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::PropertyBuilder do
|
6
|
-
let(:builder) { GirFFI::Builders::PropertyBuilder.new property_info }
|
7
|
-
|
8
|
-
describe 'for a property of type :glist' do
|
9
|
-
let(:property_info) { get_property_introspection_data('Regress', 'TestObj', 'list') }
|
10
|
-
it 'generates the correct getter definition' do
|
11
|
-
expected = <<-CODE.reset_indentation
|
12
|
-
def list
|
13
|
-
_v1 = get_property('list')
|
14
|
-
_v2 = GLib::List.wrap(:utf8, _v1)
|
15
|
-
_v2
|
16
|
-
end
|
17
|
-
CODE
|
18
|
-
|
19
|
-
builder.getter_def.must_equal expected
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'generates the correct setter definition' do
|
23
|
-
expected = <<-CODE.reset_indentation
|
24
|
-
def list= value
|
25
|
-
_v1 = GLib::List.from(:utf8, value)
|
26
|
-
set_property("list", _v1)
|
27
|
-
end
|
28
|
-
CODE
|
29
|
-
|
30
|
-
builder.setter_def.must_equal expected
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe 'for a property of type :ghash' do
|
35
|
-
let(:property_info) { get_property_introspection_data('Regress', 'TestObj', 'hash-table') }
|
36
|
-
it 'generates the correct getter definition' do
|
37
|
-
expected = <<-CODE.reset_indentation
|
38
|
-
def hash_table
|
39
|
-
_v1 = get_property('hash-table')
|
40
|
-
_v2 = GLib::HashTable.wrap([:utf8, :gint8], _v1)
|
41
|
-
_v2
|
42
|
-
end
|
43
|
-
CODE
|
44
|
-
|
45
|
-
builder.getter_def.must_equal expected
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'generates the correct setter definition' do
|
49
|
-
expected = <<-CODE.reset_indentation
|
50
|
-
def hash_table= value
|
51
|
-
_v1 = GLib::HashTable.from([:utf8, :gint8], value)
|
52
|
-
set_property("hash-table", _v1)
|
53
|
-
end
|
54
|
-
CODE
|
55
|
-
|
56
|
-
builder.setter_def.must_equal expected
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe 'for a property of type :strv' do
|
61
|
-
let(:property_info) do
|
62
|
-
get_property_introspection_data('GIMarshallingTests',
|
63
|
-
'PropertiesObject',
|
64
|
-
'some-strv')
|
65
|
-
end
|
66
|
-
before do
|
67
|
-
skip unless property_info
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'generates the correct getter definition' do
|
71
|
-
expected = <<-CODE.reset_indentation
|
72
|
-
def some_strv
|
73
|
-
_v1 = get_property('some-strv')
|
74
|
-
_v1
|
75
|
-
end
|
76
|
-
CODE
|
77
|
-
|
78
|
-
builder.getter_def.must_equal expected
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'generates the correct setter definition' do
|
82
|
-
expected = <<-CODE.reset_indentation
|
83
|
-
def some_strv= value
|
84
|
-
_v1 = GLib::Strv.from(value)
|
85
|
-
set_property("some-strv", _v1)
|
86
|
-
end
|
87
|
-
CODE
|
88
|
-
|
89
|
-
builder.setter_def.must_equal expected
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
describe 'for a property of type :utf8' do
|
94
|
-
let(:property_info) { get_property_introspection_data('Regress', 'TestObj', 'string') }
|
95
|
-
it 'generates the correct getter definition' do
|
96
|
-
expected = <<-CODE.reset_indentation
|
97
|
-
def string
|
98
|
-
_v1 = get_property('string')
|
99
|
-
_v1
|
100
|
-
end
|
101
|
-
CODE
|
102
|
-
|
103
|
-
builder.getter_def.must_equal expected
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'generates the correct setter definition' do
|
107
|
-
expected = <<-CODE.reset_indentation
|
108
|
-
def string= value
|
109
|
-
_v1 = value
|
110
|
-
set_property("string", _v1)
|
111
|
-
end
|
112
|
-
CODE
|
113
|
-
|
114
|
-
builder.setter_def.must_equal expected
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe 'for a property of a callback type' do
|
119
|
-
let(:property_info) do
|
120
|
-
get_property_introspection_data('Regress', 'AnnotationObject', 'function-property')
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'generates the correct getter definition' do
|
124
|
-
expected = <<-CODE.reset_indentation
|
125
|
-
def function_property
|
126
|
-
_v1 = get_property('function-property')
|
127
|
-
_v2 = Regress::AnnotationCallback.wrap(_v1)
|
128
|
-
_v2
|
129
|
-
end
|
130
|
-
CODE
|
131
|
-
|
132
|
-
builder.getter_def.must_equal expected
|
133
|
-
end
|
134
|
-
|
135
|
-
it 'generates the correct setter definition' do
|
136
|
-
expected = <<-CODE.reset_indentation
|
137
|
-
def function_property= value
|
138
|
-
_v1 = Regress::AnnotationCallback.from(value)
|
139
|
-
set_property("function-property", _v1)
|
140
|
-
end
|
141
|
-
CODE
|
142
|
-
|
143
|
-
builder.setter_def.must_equal expected
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
describe '#container_defines_getter_method?' do
|
148
|
-
let(:property_info) { Object.new.tap { |o| o.extend GirFFI::InfoExt::IPropertyInfo } }
|
149
|
-
let(:container_info) { Object.new }
|
150
|
-
|
151
|
-
before do
|
152
|
-
allow(property_info).to receive(:container).and_return container_info
|
153
|
-
allow(property_info).to receive(:name).and_return 'foo-bar'
|
154
|
-
allow(container_info).to receive(:find_instance_method).with('foo_bar').and_return true
|
155
|
-
end
|
156
|
-
|
157
|
-
it 'finds methods with underscores for properties with dashes' do
|
158
|
-
builder.container_defines_getter_method?.must_equal true
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
GirFFI.setup :Regress
|
6
|
-
|
7
|
-
describe GirFFI::Builders::RegisteredTypeBuilder do
|
8
|
-
describe '#setup_instance_method' do
|
9
|
-
it 'restores a method that was removed' do
|
10
|
-
Regress::TestObj.class_eval { remove_method 'instance_method' }
|
11
|
-
|
12
|
-
builder = Regress::TestObj.gir_ffi_builder
|
13
|
-
|
14
|
-
builder.setup_instance_method 'instance_method'
|
15
|
-
|
16
|
-
obj = Regress::TestObj.constructor
|
17
|
-
obj.must_respond_to 'instance_method'
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns the name of the generated method' do
|
21
|
-
builder = Regress::TestObj.gir_ffi_builder
|
22
|
-
result = builder.setup_instance_method 'instance_method'
|
23
|
-
result.must_equal 'instance_method'
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'returns the name of the generated method if different from the info name' do
|
27
|
-
skip 'Need some way to test this now that GLib::IConv is gone'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,440 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Builders::ReturnValueBuilder do
|
6
|
-
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
7
|
-
let(:type_info) { method_info.return_type }
|
8
|
-
let(:ownership_transfer) { method_info.caller_owns }
|
9
|
-
let(:return_type_info) { GirFFI::ReturnValueInfo.new(type_info, ownership_transfer, false) }
|
10
|
-
let(:builder) do
|
11
|
-
GirFFI::Builders::ReturnValueBuilder.new(var_gen, return_type_info)
|
12
|
-
end
|
13
|
-
|
14
|
-
describe 'for :gint32' do
|
15
|
-
let(:method_info) do
|
16
|
-
get_introspection_data('GIMarshallingTests',
|
17
|
-
'int_return_min')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'has no statements in #post_conversion' do
|
21
|
-
builder.post_conversion.must_equal []
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'returns the result of the c function directly' do
|
25
|
-
builder.capture_variable_name.must_equal '_v1'
|
26
|
-
builder.return_value_name.must_equal '_v1'
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe 'for :struct' do
|
31
|
-
describe 'with transfer :nothing' do
|
32
|
-
let(:method_info) do
|
33
|
-
get_method_introspection_data('GIMarshallingTests',
|
34
|
-
'BoxedStruct',
|
35
|
-
'returnv')
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'wraps and copies the result in #post_conversion' do
|
39
|
-
builder.capture_variable_name.must_equal '_v1'
|
40
|
-
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1)']
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'returns the copied result' do
|
44
|
-
builder.capture_variable_name.must_equal '_v1'
|
45
|
-
builder.return_value_name.must_equal '_v2'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe 'for :union' do
|
51
|
-
let(:method_info) do
|
52
|
-
get_method_introspection_data('GIMarshallingTests',
|
53
|
-
'Union',
|
54
|
-
'returnv')
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'wraps the result in #post_conversion' do
|
58
|
-
builder.capture_variable_name.must_equal '_v1'
|
59
|
-
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Union.wrap_copy(_v1)']
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'returns the wrapped result' do
|
63
|
-
builder.capture_variable_name.must_equal '_v1'
|
64
|
-
builder.return_value_name.must_equal '_v2'
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe 'for :interface' do
|
69
|
-
let(:method_info) do
|
70
|
-
get_method_introspection_data('Gio',
|
71
|
-
'File',
|
72
|
-
'new_for_commandline_arg')
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'wraps the result in #post_conversion' do
|
76
|
-
builder.capture_variable_name.must_equal '_v1'
|
77
|
-
builder.post_conversion.must_equal ['_v2 = Gio::File.wrap(_v1)']
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'returns the wrapped result' do
|
81
|
-
builder.capture_variable_name.must_equal '_v1'
|
82
|
-
builder.return_value_name.must_equal '_v2'
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe 'for :object' do
|
87
|
-
describe 'with full ownership transfer' do
|
88
|
-
let(:method_info) do
|
89
|
-
get_method_introspection_data('GIMarshallingTests',
|
90
|
-
'Object',
|
91
|
-
'full_return')
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'wraps the result in #post_conversion' do
|
95
|
-
builder.capture_variable_name.must_equal '_v1'
|
96
|
-
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Object.wrap(_v1)']
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'returns the wrapped result' do
|
100
|
-
builder.capture_variable_name.must_equal '_v1'
|
101
|
-
builder.return_value_name.must_equal '_v2'
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
describe 'with no ownership transfer' do
|
106
|
-
let(:method_info) do
|
107
|
-
get_method_introspection_data('GIMarshallingTests',
|
108
|
-
'Object',
|
109
|
-
'none_return')
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'wraps the result in #post_conversion' do
|
113
|
-
builder.capture_variable_name.must_equal '_v1'
|
114
|
-
builder.post_conversion.
|
115
|
-
must_equal ['_v2 = GIMarshallingTests::Object.wrap(_v1).tap { |it| it && it.ref }']
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'returns the wrapped result' do
|
119
|
-
builder.capture_variable_name.must_equal '_v1'
|
120
|
-
builder.return_value_name.must_equal '_v2'
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
describe 'for :strv' do
|
126
|
-
let(:method_info) do
|
127
|
-
get_method_introspection_data('GLib',
|
128
|
-
'KeyFile',
|
129
|
-
'get_locale_string_list')
|
130
|
-
end
|
131
|
-
|
132
|
-
it 'wraps the result in #post_conversion' do
|
133
|
-
builder.capture_variable_name.must_equal '_v1'
|
134
|
-
builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1)']
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'returns the wrapped result' do
|
138
|
-
builder.capture_variable_name.must_equal '_v1'
|
139
|
-
builder.return_value_name.must_equal '_v2'
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
describe 'for :zero_terminated' do
|
144
|
-
let(:method_info) do
|
145
|
-
get_method_introspection_data('GLib',
|
146
|
-
'Variant',
|
147
|
-
'dup_bytestring')
|
148
|
-
end
|
149
|
-
before do
|
150
|
-
skip unless type_info.zero_terminated?
|
151
|
-
end
|
152
|
-
|
153
|
-
it 'wraps the result in #post_conversion' do
|
154
|
-
builder.capture_variable_name.must_equal '_v1'
|
155
|
-
builder.post_conversion.must_equal ['_v2 = GirFFI::ZeroTerminated.wrap(:guint8, _v1)']
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'returns the wrapped result' do
|
159
|
-
builder.capture_variable_name.must_equal '_v1'
|
160
|
-
builder.return_value_name.must_equal '_v2'
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
describe 'for :byte_array' do
|
165
|
-
let(:method_info) do
|
166
|
-
get_introspection_data('GIMarshallingTests',
|
167
|
-
'bytearray_full_return')
|
168
|
-
end
|
169
|
-
|
170
|
-
it 'wraps the result in #post_conversion' do
|
171
|
-
builder.capture_variable_name.must_equal '_v1'
|
172
|
-
builder.post_conversion.must_equal ['_v2 = GLib::ByteArray.wrap(_v1)']
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'returns the wrapped result' do
|
176
|
-
builder.capture_variable_name.must_equal '_v1'
|
177
|
-
builder.return_value_name.must_equal '_v2'
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
describe 'for :ptr_array' do
|
182
|
-
let(:method_info) do
|
183
|
-
get_introspection_data('GIMarshallingTests',
|
184
|
-
'gptrarray_utf8_none_return')
|
185
|
-
end
|
186
|
-
|
187
|
-
it 'wraps the result in #post_conversion' do
|
188
|
-
builder.capture_variable_name.must_equal '_v1'
|
189
|
-
builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1)']
|
190
|
-
end
|
191
|
-
|
192
|
-
it 'returns the wrapped result' do
|
193
|
-
builder.capture_variable_name.must_equal '_v1'
|
194
|
-
builder.return_value_name.must_equal '_v2'
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
describe 'for :glist' do
|
199
|
-
let(:method_info) do
|
200
|
-
get_introspection_data('GIMarshallingTests',
|
201
|
-
'glist_int_none_return')
|
202
|
-
end
|
203
|
-
|
204
|
-
it 'wraps the result in #post_conversion' do
|
205
|
-
builder.capture_variable_name.must_equal '_v1'
|
206
|
-
builder.post_conversion.must_equal ['_v2 = GLib::List.wrap(:gint32, _v1)']
|
207
|
-
end
|
208
|
-
|
209
|
-
it 'returns the wrapped result' do
|
210
|
-
builder.capture_variable_name.must_equal '_v1'
|
211
|
-
builder.return_value_name.must_equal '_v2'
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
describe 'for :gslist' do
|
216
|
-
let(:method_info) do
|
217
|
-
get_introspection_data('GIMarshallingTests',
|
218
|
-
'gslist_int_none_return')
|
219
|
-
end
|
220
|
-
|
221
|
-
it 'wraps the result in #post_conversion' do
|
222
|
-
builder.capture_variable_name.must_equal '_v1'
|
223
|
-
builder.post_conversion.must_equal ['_v2 = GLib::SList.wrap(:gint32, _v1)']
|
224
|
-
end
|
225
|
-
|
226
|
-
it 'returns the wrapped result' do
|
227
|
-
builder.capture_variable_name.must_equal '_v1'
|
228
|
-
builder.return_value_name.must_equal '_v2'
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
describe 'for :ghash' do
|
233
|
-
let(:method_info) do
|
234
|
-
get_introspection_data('GIMarshallingTests',
|
235
|
-
'ghashtable_int_none_return')
|
236
|
-
end
|
237
|
-
|
238
|
-
it 'wraps the result in #post_conversion' do
|
239
|
-
builder.capture_variable_name.must_equal '_v1'
|
240
|
-
builder.post_conversion.must_equal ['_v2 = GLib::HashTable.wrap([:gint32, :gint32], _v1)']
|
241
|
-
end
|
242
|
-
|
243
|
-
it 'returns the wrapped result' do
|
244
|
-
builder.capture_variable_name.must_equal '_v1'
|
245
|
-
builder.return_value_name.must_equal '_v2'
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
describe 'for :array' do
|
250
|
-
let(:method_info) do
|
251
|
-
get_introspection_data('GIMarshallingTests',
|
252
|
-
'garray_int_none_return')
|
253
|
-
end
|
254
|
-
|
255
|
-
it 'wraps the result in #post_conversion' do
|
256
|
-
builder.capture_variable_name.must_equal '_v1'
|
257
|
-
builder.post_conversion.must_equal ['_v2 = GLib::Array.wrap(:gint32, _v1)']
|
258
|
-
end
|
259
|
-
|
260
|
-
it 'returns the wrapped result' do
|
261
|
-
builder.capture_variable_name.must_equal '_v1'
|
262
|
-
builder.return_value_name.must_equal '_v2'
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
describe 'for :error' do
|
267
|
-
let(:method_info) do
|
268
|
-
get_introspection_data('GIMarshallingTests',
|
269
|
-
'gerror_return')
|
270
|
-
end
|
271
|
-
|
272
|
-
it 'wraps the result in #post_conversion' do
|
273
|
-
builder.capture_variable_name.must_equal '_v1'
|
274
|
-
builder.post_conversion.must_equal ['_v2 = GLib::Error.wrap(_v1)']
|
275
|
-
end
|
276
|
-
|
277
|
-
it 'returns the wrapped result' do
|
278
|
-
builder.capture_variable_name.must_equal '_v1'
|
279
|
-
builder.return_value_name.must_equal '_v2'
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
describe 'for :c' do
|
284
|
-
describe 'with fixed size' do
|
285
|
-
let(:method_info) do
|
286
|
-
get_introspection_data('GIMarshallingTests',
|
287
|
-
'array_fixed_int_return')
|
288
|
-
end
|
289
|
-
|
290
|
-
it 'converts the result in #post_conversion' do
|
291
|
-
builder.capture_variable_name.must_equal '_v1'
|
292
|
-
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1)']
|
293
|
-
end
|
294
|
-
|
295
|
-
it 'returns the wrapped result' do
|
296
|
-
builder.capture_variable_name.must_equal '_v1'
|
297
|
-
builder.return_value_name.must_equal '_v2'
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
|
-
describe 'with separate size parameter' do
|
302
|
-
let(:length_argument) { Object.new }
|
303
|
-
let(:method_info) do
|
304
|
-
get_method_introspection_data('GIMarshallingTests',
|
305
|
-
'Object',
|
306
|
-
'method_array_return')
|
307
|
-
end
|
308
|
-
|
309
|
-
before do
|
310
|
-
allow(length_argument).to receive(:post_converted_name).and_return 'bar'
|
311
|
-
builder.length_arg = length_argument
|
312
|
-
end
|
313
|
-
|
314
|
-
it 'converts the result in #post_conversion' do
|
315
|
-
builder.capture_variable_name.must_equal '_v1'
|
316
|
-
builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1)']
|
317
|
-
end
|
318
|
-
|
319
|
-
it 'returns the wrapped result' do
|
320
|
-
builder.capture_variable_name.must_equal '_v1'
|
321
|
-
builder.return_value_name.must_equal '_v2'
|
322
|
-
end
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
|
-
describe 'for :utf8' do
|
327
|
-
describe 'with no transfer' do
|
328
|
-
let(:method_info) do
|
329
|
-
get_introspection_data('GIMarshallingTests', 'utf8_none_return')
|
330
|
-
end
|
331
|
-
|
332
|
-
it 'converts the result in #post_conversion' do
|
333
|
-
builder.capture_variable_name.must_equal '_v1'
|
334
|
-
builder.post_conversion.must_equal ['_v2 = _v1.to_utf8']
|
335
|
-
end
|
336
|
-
|
337
|
-
it 'returns the converted result' do
|
338
|
-
builder.capture_variable_name.must_equal '_v1'
|
339
|
-
builder.return_value_name.must_equal '_v2'
|
340
|
-
end
|
341
|
-
end
|
342
|
-
|
343
|
-
describe 'with full transfer' do
|
344
|
-
let(:method_info) do
|
345
|
-
get_introspection_data('GIMarshallingTests', 'utf8_full_return')
|
346
|
-
end
|
347
|
-
|
348
|
-
it 'autoreleases and converts the result in #post_conversion' do
|
349
|
-
builder.capture_variable_name.must_equal '_v1'
|
350
|
-
builder.post_conversion.
|
351
|
-
must_equal ['_v2 = GirFFI::AllocationHelper.free_after _v1, &:to_utf8']
|
352
|
-
end
|
353
|
-
|
354
|
-
it 'returns the converted result' do
|
355
|
-
builder.capture_variable_name.must_equal '_v1'
|
356
|
-
builder.return_value_name.must_equal '_v2'
|
357
|
-
end
|
358
|
-
end
|
359
|
-
end
|
360
|
-
|
361
|
-
describe 'for :void pointer' do
|
362
|
-
let(:ownership_transfer) { :nothing }
|
363
|
-
let(:callback_info) do
|
364
|
-
get_introspection_data('GIMarshallingTests', 'CallbackIntInt')
|
365
|
-
end
|
366
|
-
let(:type_info) { callback_info.args[1].argument_type }
|
367
|
-
|
368
|
-
before do
|
369
|
-
skip unless callback_info
|
370
|
-
end
|
371
|
-
|
372
|
-
it 'has no statements in #post_conversion' do
|
373
|
-
builder.post_conversion.must_equal []
|
374
|
-
end
|
375
|
-
|
376
|
-
it 'returns the result of the c function directly' do
|
377
|
-
builder.capture_variable_name.must_equal '_v1'
|
378
|
-
builder.return_value_name.must_equal '_v1'
|
379
|
-
end
|
380
|
-
end
|
381
|
-
|
382
|
-
describe 'for :void' do
|
383
|
-
let(:method_info) do
|
384
|
-
get_method_introspection_data('Regress', 'TestObj', 'null_out')
|
385
|
-
end
|
386
|
-
|
387
|
-
it 'has no statements in #post_conversion' do
|
388
|
-
builder.post_conversion.must_equal []
|
389
|
-
end
|
390
|
-
|
391
|
-
it 'marks itself as irrelevant' do
|
392
|
-
builder.relevant?.must_equal false
|
393
|
-
end
|
394
|
-
|
395
|
-
it 'returns nothing' do
|
396
|
-
builder.return_value_name.must_be_nil
|
397
|
-
end
|
398
|
-
end
|
399
|
-
|
400
|
-
describe 'for a closure argument' do
|
401
|
-
let(:ownership_transfer) { :nothing }
|
402
|
-
let(:callback_info) do
|
403
|
-
get_introspection_data('Regress', 'TestCallbackUserData')
|
404
|
-
end
|
405
|
-
let(:type_info) { callback_info.args[0].argument_type }
|
406
|
-
|
407
|
-
before do
|
408
|
-
builder.mark_as_user_data :dummy
|
409
|
-
end
|
410
|
-
|
411
|
-
it 'fetches the stored object in #post_conversion' do
|
412
|
-
builder.capture_variable_name.must_equal '_v1'
|
413
|
-
builder.post_conversion.must_equal ['_v2 = GirFFI::ArgHelper::OBJECT_STORE.fetch(_v1)']
|
414
|
-
end
|
415
|
-
|
416
|
-
it 'returns the stored object' do
|
417
|
-
builder.capture_variable_name.must_equal '_v1'
|
418
|
-
builder.return_value_name.must_equal '_v2'
|
419
|
-
end
|
420
|
-
end
|
421
|
-
|
422
|
-
describe 'for a skipped return value' do
|
423
|
-
let(:method_info) do
|
424
|
-
get_method_introspection_data('Regress', 'TestObj', 'skip_return_val')
|
425
|
-
end
|
426
|
-
let(:return_type_info) { GirFFI::ReturnValueInfo.new(type_info, :nothing, true) }
|
427
|
-
|
428
|
-
it 'has no statements in #post_conversion' do
|
429
|
-
builder.post_conversion.must_equal []
|
430
|
-
end
|
431
|
-
|
432
|
-
it 'marks itself as irrelevant' do
|
433
|
-
builder.relevant?.must_equal false
|
434
|
-
end
|
435
|
-
|
436
|
-
it 'returns nothing' do
|
437
|
-
builder.return_value_name.must_be_nil
|
438
|
-
end
|
439
|
-
end
|
440
|
-
end
|