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
data/test/ffi-gobject_test.rb
DELETED
@@ -1,151 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GObject do
|
6
|
-
before do
|
7
|
-
GirFFI.setup :Regress
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '::signal_emit' do
|
11
|
-
it 'emits a signal' do
|
12
|
-
a = 1
|
13
|
-
o = Regress::TestSubObj.new
|
14
|
-
prc = proc { a = 2 }
|
15
|
-
callback = GObject::Callback.from prc
|
16
|
-
::GObject::Lib.g_signal_connect_data o, 'test', callback, nil, nil, 0
|
17
|
-
GObject.signal_emit o, 'test'
|
18
|
-
assert_equal 2, a
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'handles return values' do
|
22
|
-
s = Gio::SocketService.new
|
23
|
-
|
24
|
-
argtypes = [:pointer, :pointer, :pointer, :pointer]
|
25
|
-
callback = FFI::Function.new(:bool, argtypes) { |_a, _b, _c, _d| true }
|
26
|
-
::GObject::Lib.g_signal_connect_data s, 'incoming', callback, nil, nil, 0
|
27
|
-
rv = GObject.signal_emit s, 'incoming'
|
28
|
-
assert_equal true, rv
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'passes in extra arguments' do
|
32
|
-
o = Regress::TestSubObj.new
|
33
|
-
sb = Regress::TestSimpleBoxedA.new
|
34
|
-
sb.some_int8 = 31
|
35
|
-
sb.some_double = 2.42
|
36
|
-
sb.some_enum = :value2
|
37
|
-
b2 = nil
|
38
|
-
|
39
|
-
argtypes = [:pointer, :pointer, :pointer]
|
40
|
-
callback = FFI::Function.new(:void, argtypes) do |_a, b, _c|
|
41
|
-
b2 = b
|
42
|
-
end
|
43
|
-
::GObject::Lib.g_signal_connect_data o, 'test-with-static-scope-arg', callback, nil, nil, 0
|
44
|
-
GObject.signal_emit o, 'test-with-static-scope-arg', sb
|
45
|
-
|
46
|
-
sb2 = Regress::TestSimpleBoxedA.wrap b2
|
47
|
-
assert sb.equals(sb2)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'allows specifying signal detail' do
|
51
|
-
a = 1
|
52
|
-
o = Regress::TestSubObj.new
|
53
|
-
|
54
|
-
callback = FFI::Function.new(:void, [:pointer, :pointer, :pointer]) { a = 2 }
|
55
|
-
::GObject::Lib.g_signal_connect_data o, 'notify::detail', callback, nil, nil, 0
|
56
|
-
|
57
|
-
GObject.signal_emit o, 'notify::detail'
|
58
|
-
|
59
|
-
a.must_equal 2
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe '::signal_connect' do
|
64
|
-
it 'installs a signal handler' do
|
65
|
-
a = 1
|
66
|
-
o = Regress::TestSubObj.new
|
67
|
-
GObject.signal_connect(o, 'test') { a = 2 }
|
68
|
-
GObject.signal_emit o, 'test'
|
69
|
-
assert_equal 2, a
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'passes user data to handler' do
|
73
|
-
a = 1
|
74
|
-
o = Regress::TestSubObj.new
|
75
|
-
GObject.signal_connect(o, 'test', 2) { |_i, d| a = d }
|
76
|
-
GObject.signal_emit o, 'test'
|
77
|
-
assert_equal 2, a
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'passes object to handler' do
|
81
|
-
o = Regress::TestSubObj.new
|
82
|
-
o2 = nil
|
83
|
-
GObject.signal_connect(o, 'test') { |i, _d| o2 = i }
|
84
|
-
GObject.signal_emit o, 'test'
|
85
|
-
assert_instance_of Regress::TestSubObj, o2
|
86
|
-
assert_equal o.to_ptr, o2.to_ptr
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'does not allow connecting an invalid signal' do
|
90
|
-
o = Regress::TestSubObj.new
|
91
|
-
proc { GObject.signal_connect(o, 'not-really-a-signal') {} }.
|
92
|
-
must_raise GirFFI::SignalNotFoundError
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'handles return values' do
|
96
|
-
s = Gio::SocketService.new
|
97
|
-
GObject.signal_connect(s, 'incoming') { true }
|
98
|
-
rv = GObject.signal_emit s, 'incoming'
|
99
|
-
assert_equal true, rv
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'requires a block' do
|
103
|
-
o = Regress::TestSubObj.new
|
104
|
-
proc { GObject.signal_connect o, 'test' }.must_raise ArgumentError
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'allows specifying signal detail' do
|
108
|
-
a = 1
|
109
|
-
o = Regress::TestSubObj.new
|
110
|
-
GObject.signal_connect(o, 'notify::detail', 2) { |_i, _, d| a = d }
|
111
|
-
GObject.signal_emit o, 'notify::detail'
|
112
|
-
assert_equal 2, a
|
113
|
-
end
|
114
|
-
|
115
|
-
describe 'connecting a signal with extra arguments' do
|
116
|
-
before do
|
117
|
-
@a = nil
|
118
|
-
@b = 2
|
119
|
-
|
120
|
-
o = Regress::TestSubObj.new
|
121
|
-
sb = Regress::TestSimpleBoxedA.new
|
122
|
-
sb.some_int = 23
|
123
|
-
|
124
|
-
GObject.signal_connect(o, 'test-with-static-scope-arg', 2) do |_instance, object, user_data|
|
125
|
-
@a = user_data
|
126
|
-
@b = object
|
127
|
-
end
|
128
|
-
GObject.signal_emit o, 'test-with-static-scope-arg', sb
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'passes on the user data argument' do
|
132
|
-
assert_equal 2, @a
|
133
|
-
end
|
134
|
-
|
135
|
-
it 'passes on the extra arguments' do
|
136
|
-
assert_instance_of Regress::TestSimpleBoxedA, @b
|
137
|
-
assert_equal 23, @b.some_int
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
describe '::signal_connect_after' do
|
143
|
-
it 'installs a signal handler' do
|
144
|
-
a = 1
|
145
|
-
o = Regress::TestSubObj.new
|
146
|
-
GObject.signal_connect_after(o, 'test') { a = 2 }
|
147
|
-
GObject.signal_emit o, 'test'
|
148
|
-
assert_equal 2, a
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::AllocationHelper do
|
6
|
-
describe '.free_after' do
|
7
|
-
before do
|
8
|
-
allow(GirFFI::LibC).to receive(:free)
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'frees the passed-in pointer' do
|
12
|
-
ptr = double('pointer', null?: false)
|
13
|
-
GirFFI::AllocationHelper.free_after(ptr) {}
|
14
|
-
expect(GirFFI::LibC).to have_received(:free).with(ptr)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'does not free a passed-in null pointer' do
|
18
|
-
ptr = double('pointer', null?: true)
|
19
|
-
GirFFI::AllocationHelper.free_after(ptr) {}
|
20
|
-
expect(GirFFI::LibC).not_to have_received(:free)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'yields ptr to the block' do
|
24
|
-
ptr = double('pointer', null?: false)
|
25
|
-
foo = nil
|
26
|
-
GirFFI::AllocationHelper.free_after(ptr) { |it| foo = it }
|
27
|
-
foo.must_equal ptr
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'returns the result of the block' do
|
31
|
-
ptr = double('pointer', null?: false)
|
32
|
-
result = GirFFI::AllocationHelper.free_after(ptr) { 'bar' }
|
33
|
-
result.must_equal 'bar'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,140 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::ArgHelper do
|
6
|
-
describe '.cast_from_pointer' do
|
7
|
-
it 'handles class types' do
|
8
|
-
klass = Class.new
|
9
|
-
expect(klass).to receive(:wrap).with(:pointer_value).and_return :wrapped_value
|
10
|
-
GirFFI::ArgHelper.cast_from_pointer(klass, :pointer_value).must_equal :wrapped_value
|
11
|
-
end
|
12
|
-
|
13
|
-
describe 'for :gint8' do
|
14
|
-
it 'handles negative :gint8' do
|
15
|
-
ptr = FFI::Pointer.new(-127)
|
16
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr).must_equal(-127)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'handles positive :gint8' do
|
20
|
-
ptr = FFI::Pointer.new(128)
|
21
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr).must_equal(128)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'handles :guint32' do
|
26
|
-
ptr = FFI::Pointer.new(0xffffffff)
|
27
|
-
GirFFI::ArgHelper.cast_from_pointer(:guint32, ptr).must_equal(0xffffffff)
|
28
|
-
end
|
29
|
-
|
30
|
-
describe 'for :gint32' do
|
31
|
-
it 'handles positive :gint32' do
|
32
|
-
ptr = FFI::Pointer.new(1)
|
33
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(1)
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'handles negative :gint32' do
|
37
|
-
ptr = FFI::Pointer.new(0xffffffff)
|
38
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(-1)
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'handles largest negative :gint32' do
|
42
|
-
ptr = FFI::Pointer.new(0x80000000)
|
43
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(-0x80000000)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'handles largest positive :gint32' do
|
47
|
-
ptr = FFI::Pointer.new(0x7fffffff)
|
48
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(0x7fffffff)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'handles :utf8' do
|
53
|
-
ptr = FFI::MemoryPointer.from_string 'foo'
|
54
|
-
GirFFI::ArgHelper.cast_from_pointer(:utf8, ptr).must_equal 'foo'
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'handles :filename' do
|
58
|
-
ptr = FFI::MemoryPointer.from_string 'foo'
|
59
|
-
GirFFI::ArgHelper.cast_from_pointer(:filename, ptr).must_equal 'foo'
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'handles GHashTable' do
|
63
|
-
hash = GLib::HashTable.from [:utf8, :gint32], 'foo' => 1, 'bar' => 2
|
64
|
-
ptr = hash.to_ptr
|
65
|
-
result = GirFFI::ArgHelper.cast_from_pointer([:pointer, [:ghash, :utf8, :gint32]], ptr)
|
66
|
-
result.to_hash.must_equal hash.to_hash
|
67
|
-
end
|
68
|
-
|
69
|
-
describe 'when passing a broken typespec' do
|
70
|
-
it 'raises on unknown symbol' do
|
71
|
-
ptr = FFI::Pointer.new(0xffffffff)
|
72
|
-
exception = -> { GirFFI::ArgHelper.cast_from_pointer(:foo, ptr) }.must_raise RuntimeError
|
73
|
-
exception.message.must_equal "Don't know how to cast foo"
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'raises on unexpected main type for complex type' do
|
77
|
-
ptr = FFI::Pointer.new(0xffffffff)
|
78
|
-
exception = -> { GirFFI::ArgHelper.cast_from_pointer([:utf8], ptr) }.must_raise RuntimeError
|
79
|
-
exception.message.must_equal "Don't know how to cast [:utf8]"
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'raises on unexpected sub type for complex type' do
|
83
|
-
ptr = FFI::Pointer.new(0xffffffff)
|
84
|
-
exception = -> { GirFFI::ArgHelper.cast_from_pointer([:pointer, :utf8], ptr) }.must_raise RuntimeError
|
85
|
-
exception.message.must_equal "Don't know how to cast [:pointer, :utf8]"
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'raises on unexpected container type for complex type' do
|
89
|
-
ptr = FFI::Pointer.new(0xffffffff)
|
90
|
-
exception = -> { GirFFI::ArgHelper.cast_from_pointer([:pointer, [:gint32]], ptr) }.must_raise RuntimeError
|
91
|
-
exception.message.must_equal "Don't know how to cast [:pointer, [:gint32]]"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe '.store' do
|
97
|
-
describe 'when called with nil' do
|
98
|
-
it 'returns a null pointer' do
|
99
|
-
GirFFI::ArgHelper.store(nil).must_be :null?
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe 'when called with a string' do
|
104
|
-
it 'stores the string in GirFFI::ArgHelper::OBJECT_STORE' do
|
105
|
-
str = 'Foo'
|
106
|
-
ptr = GirFFI::ArgHelper.store(str)
|
107
|
-
result = GirFFI::ArgHelper::OBJECT_STORE.fetch(ptr)
|
108
|
-
result.must_equal str
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe '.check_fixed_array_size' do
|
114
|
-
it 'passes if array has the correct size' do
|
115
|
-
GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2, 3], 'foo')
|
116
|
-
pass
|
117
|
-
end
|
118
|
-
|
119
|
-
it 'raises if array does not have the correct size' do
|
120
|
-
result = lambda do
|
121
|
-
GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2], 'foo')
|
122
|
-
end.must_raise ArgumentError
|
123
|
-
result.message.must_equal 'foo should have size 3'
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
describe '.check_error' do
|
128
|
-
it 'does nothing if there is no error' do
|
129
|
-
err_ptr = double('err_ptr', read_pointer: nil)
|
130
|
-
GirFFI::ArgHelper.check_error err_ptr
|
131
|
-
pass
|
132
|
-
end
|
133
|
-
|
134
|
-
it 'raises an exception if there is an error' do
|
135
|
-
err = GLib::Error.new
|
136
|
-
err_ptr = double('err_ptr', read_pointer: err.to_ptr)
|
137
|
-
-> { GirFFI::ArgHelper.check_error err_ptr }.must_raise GirFFI::GLibError
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
describe GirFFI::Boolean do
|
6
|
-
it 'has the same native size as an int' do
|
7
|
-
FFI.type_size(GirFFI::Boolean).must_equal FFI.type_size :int
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '.from_native' do
|
11
|
-
it 'converts 0 to false' do
|
12
|
-
GirFFI::Boolean.from_native(0, 'whatever').must_equal false
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'converts 1 to true' do
|
16
|
-
GirFFI::Boolean.from_native(1, 'whatever').must_equal true
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '.to_native' do
|
21
|
-
it 'converts false to 0' do
|
22
|
-
GirFFI::Boolean.to_native(false, 'whatever').must_equal 0
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'converts true to 1' do
|
26
|
-
GirFFI::Boolean.to_native(true, 'whatever').must_equal 1
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'converts nil to 0' do
|
30
|
-
GirFFI::Boolean.to_native(nil, 'whatever').must_equal 0
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'converts truthy value to 1' do
|
34
|
-
GirFFI::Boolean.to_native('i am truth!', 'whatever').must_equal 1
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe '.size' do
|
39
|
-
it 'returns the correct type size' do
|
40
|
-
GirFFI::Boolean.size.must_equal FFI.type_size :int
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
GirFFI.setup :GIMarshallingTests
|
6
|
-
|
7
|
-
describe GirFFI::BoxedBase do
|
8
|
-
describe 'initialize' do
|
9
|
-
it 'sets up the held struct pointer' do
|
10
|
-
# NOTE: GObject::Value uses the generic constructor, unlike
|
11
|
-
# GIMarshallingTests::BoxedStruct, which has its own constructor.
|
12
|
-
value = GObject::Value.new
|
13
|
-
value.to_ptr.wont_be_nil
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe 'copy_from' do
|
18
|
-
it 'returns a copy with owned false' do
|
19
|
-
original = GIMarshallingTests::BoxedStruct.new
|
20
|
-
copy = GIMarshallingTests::BoxedStruct.copy_from(original)
|
21
|
-
ptr = copy.to_ptr
|
22
|
-
ptr.wont_be :==, original.to_ptr
|
23
|
-
ptr.wont_be :autorelease? if ptr.respond_to? :autorelease?
|
24
|
-
copy.struct.wont_be :owned?
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe 'wrap_own' do
|
29
|
-
it 'wraps and owns the supplied pointer' do
|
30
|
-
original = GIMarshallingTests::BoxedStruct.new
|
31
|
-
copy = GIMarshallingTests::BoxedStruct.wrap_own(original.to_ptr)
|
32
|
-
ptr = copy.to_ptr
|
33
|
-
ptr.must_equal original.to_ptr
|
34
|
-
ptr.wont_be :autorelease? if ptr.respond_to? :autorelease?
|
35
|
-
copy.struct.must_be :owned?
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe 'upon garbage collection' do
|
40
|
-
it 'frees and disowns the underlying struct if it is owned' do
|
41
|
-
skip 'cannot be reliably tested on JRuby and Rubinius' if jruby? || rubinius?
|
42
|
-
|
43
|
-
allow(GObject).to receive(:boxed_free)
|
44
|
-
gtype = GIMarshallingTests::BoxedStruct.gtype
|
45
|
-
|
46
|
-
owned_struct = GIMarshallingTests::BoxedStruct.new.struct
|
47
|
-
owned_ptr = owned_struct.to_ptr
|
48
|
-
|
49
|
-
unowned_struct = GIMarshallingTests::BoxedStruct.new.struct
|
50
|
-
unowned_struct.owned = false
|
51
|
-
unowned_ptr = unowned_struct.to_ptr
|
52
|
-
|
53
|
-
GC.start
|
54
|
-
# Creating a new object is sometimes needed to trigger enough garbage collection.
|
55
|
-
GIMarshallingTests::BoxedStruct.new
|
56
|
-
sleep 1
|
57
|
-
GC.start
|
58
|
-
GC.start
|
59
|
-
|
60
|
-
expect(GObject).to have_received(:boxed_free).with(gtype, owned_ptr)
|
61
|
-
expect(GObject).not_to have_received(:boxed_free).with(gtype, unowned_ptr)
|
62
|
-
owned_struct.wont_be :owned?
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,300 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gir_ffi_test_helper'
|
4
|
-
|
5
|
-
GirFFI.setup :Regress
|
6
|
-
GirFFI.setup :GIMarshallingTests
|
7
|
-
|
8
|
-
describe GirFFI::Builder do
|
9
|
-
let(:gir) { GObjectIntrospection::IRepository.default }
|
10
|
-
|
11
|
-
describe '.build_class' do
|
12
|
-
it 'does not replace existing classes' do
|
13
|
-
oldclass = GObject::Object
|
14
|
-
GirFFI::Builder.build_class get_introspection_data('GObject', 'Object')
|
15
|
-
GObject::Object.must_equal oldclass
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '.build_module' do
|
20
|
-
it 'refuses to build existing modules defined elsewhere' do
|
21
|
-
result = -> { GirFFI::Builder.build_module('Array') }.must_raise RuntimeError
|
22
|
-
result.message.must_equal 'The module Array was already defined elsewhere'
|
23
|
-
end
|
24
|
-
|
25
|
-
describe 'building a module for the first time' do
|
26
|
-
before do
|
27
|
-
save_module :Regress
|
28
|
-
GirFFI::Builder.build_module 'Regress'
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'creates a Lib module ready to attach functions from the shared library' do
|
32
|
-
gir = GObjectIntrospection::IRepository.default
|
33
|
-
expected = [gir.shared_library('Regress')]
|
34
|
-
assert_equal expected, Regress::Lib.ffi_libraries.map(&:name)
|
35
|
-
end
|
36
|
-
|
37
|
-
after do
|
38
|
-
restore_module :Regress
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe 'building a module that already exists' do
|
43
|
-
it 'does not replace the existing module' do
|
44
|
-
oldmodule = Regress
|
45
|
-
GirFFI::Builder.build_module 'Regress'
|
46
|
-
assert_equal oldmodule, Regress
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'does not replace the existing Lib module' do
|
50
|
-
oldmodule = Regress::Lib
|
51
|
-
GirFFI::Builder.build_module 'Regress'
|
52
|
-
assert_equal oldmodule, Regress::Lib
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'passes the version on to ModuleBuilder' do
|
57
|
-
builder = double(generate: nil)
|
58
|
-
expect(GirFFI::Builders::ModuleBuilder).to receive(:new).
|
59
|
-
with('Foo', namespace: 'Foo', version: '1.0').
|
60
|
-
and_return builder
|
61
|
-
|
62
|
-
GirFFI::Builder.build_module 'Foo', '1.0'
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe '.build_by_gtype' do
|
67
|
-
it 'returns the class types known to the GIR' do
|
68
|
-
result = GirFFI::Builder.build_by_gtype GObject::Object.gtype
|
69
|
-
result.must_equal GObject::Object
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'returns the class for user-defined types' do
|
73
|
-
klass = Class.new GIMarshallingTests::OverridesObject
|
74
|
-
Object.const_set "Derived#{Sequence.next}", klass
|
75
|
-
gtype = GirFFI.define_type klass
|
76
|
-
|
77
|
-
found_klass = GirFFI::Builder.build_by_gtype gtype
|
78
|
-
found_klass.must_equal klass
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'returns a valid class for boxed classes unknown to GIR' do
|
82
|
-
object_class = GIMarshallingTests::PropertiesObject.object_class
|
83
|
-
property = object_class.find_property 'some-boxed-glist'
|
84
|
-
gtype = property.value_type
|
85
|
-
|
86
|
-
gtype.wont_equal GObject::TYPE_NONE
|
87
|
-
|
88
|
-
found_klass = GirFFI::Builder.build_by_gtype gtype
|
89
|
-
found_klass.name.must_be_nil
|
90
|
-
found_klass.superclass.must_equal GirFFI::BoxedBase
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '.attach_ffi_function' do
|
95
|
-
let(:lib) { Module.new }
|
96
|
-
|
97
|
-
it 'calls attach_function with the correct types for Regress.test_callback_destroy_notify' do
|
98
|
-
function_info = get_introspection_data 'Regress', 'test_callback_destroy_notify'
|
99
|
-
|
100
|
-
expect(lib).
|
101
|
-
to receive(:attach_function).
|
102
|
-
with('regress_test_callback_destroy_notify',
|
103
|
-
[Regress::TestCallbackUserData, :pointer, GLib::DestroyNotify],
|
104
|
-
:int32).
|
105
|
-
and_return true
|
106
|
-
|
107
|
-
GirFFI::Builder.attach_ffi_function(lib, function_info)
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'calls attach_function with the correct types for Regress::TestObj#torture_signature_0' do
|
111
|
-
info = get_method_introspection_data 'Regress', 'TestObj', 'torture_signature_0'
|
112
|
-
|
113
|
-
expect(lib).
|
114
|
-
to receive(:attach_function).
|
115
|
-
with('regress_test_obj_torture_signature_0',
|
116
|
-
[:pointer, :int32, :pointer, :pointer, :pointer, :pointer, :uint32],
|
117
|
-
:void).
|
118
|
-
and_return true
|
119
|
-
|
120
|
-
GirFFI::Builder.attach_ffi_function(lib, info)
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'calls attach_function with the correct types for Regress::TestObj#instance_method' do
|
124
|
-
info = get_method_introspection_data 'Regress', 'TestObj', 'instance_method'
|
125
|
-
expect(lib).to receive(:attach_function).
|
126
|
-
with('regress_test_obj_instance_method', [:pointer], :int32).
|
127
|
-
and_return true
|
128
|
-
GirFFI::Builder.attach_ffi_function(lib, info)
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'calls attach_function with the correct types for Regress.test_array_gint32_in' do
|
132
|
-
info = get_introspection_data 'Regress', 'test_array_gint32_in'
|
133
|
-
expect(lib).to receive(:attach_function).
|
134
|
-
with('regress_test_array_gint32_in', [:int32, :pointer], :int32).
|
135
|
-
and_return true
|
136
|
-
GirFFI::Builder.attach_ffi_function(lib, info)
|
137
|
-
end
|
138
|
-
|
139
|
-
it 'calls attach_function with the correct types for Regress.test_enum_param' do
|
140
|
-
info = get_introspection_data 'Regress', 'test_enum_param'
|
141
|
-
expect(lib).to receive(:attach_function).
|
142
|
-
with('regress_test_enum_param', [Regress::TestEnum], :pointer).
|
143
|
-
and_return true
|
144
|
-
GirFFI::Builder.attach_ffi_function(lib, info)
|
145
|
-
end
|
146
|
-
|
147
|
-
it 'does not attach the function if it is already defined' do
|
148
|
-
info = get_introspection_data 'Regress', 'test_array_gint32_in'
|
149
|
-
allow(lib).to receive(:method_defined?).and_return true
|
150
|
-
expect(lib).not_to receive(:attach_function)
|
151
|
-
GirFFI::Builder.attach_ffi_function(lib, info)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
#
|
156
|
-
# NOTE: Legacy tests below.
|
157
|
-
#
|
158
|
-
|
159
|
-
describe 'looking at Regress.test_callback_destroy_notify' do
|
160
|
-
before do
|
161
|
-
save_module :GObject
|
162
|
-
save_module :Regress
|
163
|
-
GirFFI::Builder.build_module 'GObject'
|
164
|
-
GirFFI::Builder.build_module 'Regress'
|
165
|
-
@go = get_introspection_data 'Regress', 'test_callback_destroy_notify'
|
166
|
-
end
|
167
|
-
|
168
|
-
it 'defines ffi callback types :Callback and :ClosureNotify' do
|
169
|
-
Regress.setup_method! 'test_callback_destroy_notify'
|
170
|
-
tcud = Regress::Lib.find_type :TestCallbackUserData
|
171
|
-
dn = GLib::Lib.find_type :DestroyNotify
|
172
|
-
|
173
|
-
assert_equal FFI.find_type(:int32), tcud.result_type
|
174
|
-
assert_equal FFI.find_type(:void), dn.result_type
|
175
|
-
assert_equal [FFI.find_type(:pointer)], tcud.param_types
|
176
|
-
assert_equal [FFI.find_type(:pointer)], dn.param_types
|
177
|
-
end
|
178
|
-
|
179
|
-
after do
|
180
|
-
restore_module :Regress
|
181
|
-
restore_module :GObject
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
describe 'building Regress::TestBoxed' do
|
186
|
-
before do
|
187
|
-
GirFFI::Builder.build_class get_introspection_data('Regress', 'TestBoxed')
|
188
|
-
end
|
189
|
-
|
190
|
-
it 'sets up #wrap' do
|
191
|
-
assert Regress::TestBoxed.respond_to? 'wrap'
|
192
|
-
end
|
193
|
-
|
194
|
-
it 'sets up #allocate' do
|
195
|
-
assert Regress::TestBoxed.respond_to? 'allocate'
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
describe 'built Regress module' do
|
200
|
-
before do
|
201
|
-
save_module :Regress
|
202
|
-
GirFFI::Builder.build_module 'Regress'
|
203
|
-
end
|
204
|
-
|
205
|
-
it 'autocreates singleton methods' do
|
206
|
-
refute_defines_singleton_method Regress, :test_uint
|
207
|
-
Regress.test_uint 31
|
208
|
-
assert_defines_singleton_method Regress, :test_uint
|
209
|
-
end
|
210
|
-
|
211
|
-
it 'autocreates the TestObj class on first access' do
|
212
|
-
assert !Regress.const_defined?(:TestObj)
|
213
|
-
Regress::TestObj.must_be_instance_of Class
|
214
|
-
assert Regress.const_defined? :TestObj
|
215
|
-
end
|
216
|
-
|
217
|
-
it 'knows its own module builder' do
|
218
|
-
Regress.gir_ffi_builder.must_be_instance_of GirFFI::Builders::ModuleBuilder
|
219
|
-
end
|
220
|
-
|
221
|
-
after do
|
222
|
-
restore_module :Regress
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
describe 'having built Regress::TestObj' do
|
227
|
-
before do
|
228
|
-
GirFFI::Builder.build_class get_introspection_data('Regress', 'TestObj')
|
229
|
-
end
|
230
|
-
|
231
|
-
it 'C functions for called instance methods get attached to Regress::Lib' do
|
232
|
-
o = Regress::TestObj.new_from_file('foo')
|
233
|
-
o.instance_method
|
234
|
-
Regress::Lib.must_respond_to :regress_test_obj_instance_method
|
235
|
-
end
|
236
|
-
|
237
|
-
it 'the built class knows its own GIR info' do
|
238
|
-
Regress::TestObj.gir_info.name.must_equal 'TestObj'
|
239
|
-
end
|
240
|
-
|
241
|
-
it 'the built class knows its own class builder' do
|
242
|
-
Regress::TestObj.gir_ffi_builder.must_be_instance_of GirFFI::Builders::ObjectBuilder
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
describe 'built Regress::TestSubObj' do
|
247
|
-
it 'inherits #set_bare from its superclass' do
|
248
|
-
o1 = Regress::TestSubObj.new
|
249
|
-
o1.set_bare(nil)
|
250
|
-
pass
|
251
|
-
end
|
252
|
-
|
253
|
-
it 'overrides #instance_method' do
|
254
|
-
obj = Regress::TestObj.new_from_file('foo')
|
255
|
-
subobj = Regress::TestSubObj.new
|
256
|
-
|
257
|
-
obj.instance_method.must_equal(-1)
|
258
|
-
subobj.instance_method.must_equal 0
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
describe 'building Regress::TestSubObj' do
|
263
|
-
before do
|
264
|
-
save_module :Regress
|
265
|
-
GirFFI::Builder.build_class get_introspection_data('Regress', 'TestSubObj')
|
266
|
-
end
|
267
|
-
|
268
|
-
it 'sets up the Regress namespace' do
|
269
|
-
assert Regress.const_defined? :Lib
|
270
|
-
assert Regress.respond_to? :gir_ffi_builder
|
271
|
-
assert Regress.const_defined? :GIR_FFI_BUILDER
|
272
|
-
end
|
273
|
-
|
274
|
-
it 'creates the Regress::Lib module ready to attach functions from the shared library' do
|
275
|
-
expected = [gir.shared_library('Regress')]
|
276
|
-
assert_equal expected, Regress::Lib.ffi_libraries.map(&:name)
|
277
|
-
end
|
278
|
-
|
279
|
-
it 'builds parent classes also' do
|
280
|
-
assert Regress.const_defined? :TestObj
|
281
|
-
assert Object.const_defined? :GObject
|
282
|
-
assert GObject.const_defined? :Object
|
283
|
-
end
|
284
|
-
|
285
|
-
it 'sets up the inheritance chain' do
|
286
|
-
Regress::TestSubObj.registered_ancestors.
|
287
|
-
must_equal [Regress::TestSubObj,
|
288
|
-
Regress::TestObj,
|
289
|
-
GObject::Object]
|
290
|
-
end
|
291
|
-
|
292
|
-
it 'creates a Regress::TestSubObj#to_ptr method' do
|
293
|
-
assert Regress::TestSubObj.public_method_defined? :to_ptr
|
294
|
-
end
|
295
|
-
|
296
|
-
after do
|
297
|
-
restore_module :Regress
|
298
|
-
end
|
299
|
-
end
|
300
|
-
end
|