gir_ffi 0.14.1 → 0.15.0
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 +21 -0
- data/Gemfile +6 -4
- data/README.md +4 -4
- data/Rakefile +5 -5
- data/lib/ffi-glib/array.rb +14 -4
- data/lib/ffi-glib/byte_array.rb +7 -2
- data/lib/ffi-glib/container_class_methods.rb +1 -1
- data/lib/ffi-glib/error.rb +1 -1
- data/lib/ffi-glib/hash_table.rb +3 -3
- data/lib/ffi-glib/list.rb +1 -1
- data/lib/ffi-glib/list_methods.rb +1 -1
- data/lib/ffi-glib/main_loop.rb +3 -3
- data/lib/ffi-glib/ptr_array.rb +30 -8
- data/lib/ffi-glib/s_list.rb +1 -1
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-glib.rb +16 -16
- data/lib/ffi-gobject/object.rb +23 -32
- data/lib/ffi-gobject/param_spec.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +2 -2
- data/lib/ffi-gobject/value.rb +37 -28
- data/lib/ffi-gobject.rb +13 -13
- data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
- data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_base_info.rb +27 -17
- data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
- data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
- data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
- data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
- data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
- data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
- data/lib/ffi-gobject_introspection/lib.rb +30 -19
- data/lib/ffi-gobject_introspection/strv.rb +1 -1
- data/lib/ffi-gobject_introspection.rb +20 -20
- data/lib/gir_ffi/allocation_helper.rb +1 -1
- data/lib/gir_ffi/arg_helper.rb +4 -4
- data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -23
- data/lib/gir_ffi/boolean.rb +1 -1
- data/lib/gir_ffi/boxed_base.rb +1 -1
- data/lib/gir_ffi/builder.rb +18 -10
- data/lib/gir_ffi/builders/argument_builder.rb +17 -17
- data/lib/gir_ffi/builders/base_argument_builder.rb +1 -0
- data/lib/gir_ffi/builders/base_method_builder.rb +7 -7
- data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
- data/lib/gir_ffi/builders/callback_argument_builder.rb +8 -8
- data/lib/gir_ffi/builders/callback_builder.rb +3 -3
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -2
- data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/constant_builder.rb +1 -1
- data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
- data/lib/gir_ffi/builders/enum_builder.rb +2 -2
- data/lib/gir_ffi/builders/field_builder.rb +16 -15
- data/lib/gir_ffi/builders/flags_builder.rb +2 -2
- data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +11 -5
- data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
- data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
- data/lib/gir_ffi/builders/interface_builder.rb +2 -2
- data/lib/gir_ffi/builders/mapping_method_builder.rb +9 -9
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +7 -7
- data/lib/gir_ffi/builders/method_template.rb +1 -1
- data/lib/gir_ffi/builders/module_builder.rb +4 -6
- data/lib/gir_ffi/builders/object_builder.rb +6 -6
- data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/property_builder.rb +13 -12
- data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
- data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
- data/lib/gir_ffi/builders/signal_closure_builder.rb +2 -2
- data/lib/gir_ffi/builders/struct_builder.rb +4 -4
- data/lib/gir_ffi/builders/struct_like.rb +1 -1
- data/lib/gir_ffi/builders/type_builder.rb +12 -12
- data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
- data/lib/gir_ffi/builders/union_builder.rb +4 -4
- data/lib/gir_ffi/builders/user_defined_builder.rb +2 -2
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/vfunc_builder.rb +6 -6
- data/lib/gir_ffi/builders/with_layout.rb +2 -2
- data/lib/gir_ffi/callback_base.rb +1 -1
- data/lib/gir_ffi/class_base.rb +5 -5
- data/lib/gir_ffi/core.rb +19 -20
- data/lib/gir_ffi/enum_base.rb +1 -1
- data/lib/gir_ffi/enum_like_base.rb +2 -2
- data/lib/gir_ffi/error_argument_info.rb +2 -2
- data/lib/gir_ffi/error_type_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
- data/lib/gir_ffi/ffi_ext.rb +1 -1
- data/lib/gir_ffi/flags_base.rb +1 -1
- data/lib/gir_ffi/in_pointer.rb +10 -0
- data/lib/gir_ffi/info_ext/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/info_ext.rb +15 -15
- data/lib/gir_ffi/interface_base.rb +3 -3
- data/lib/gir_ffi/lib_c.rb +1 -1
- data/lib/gir_ffi/method_stubber.rb +1 -1
- data/lib/gir_ffi/module_base.rb +1 -1
- data/lib/gir_ffi/object_base.rb +3 -4
- data/lib/gir_ffi/receiver_argument_info.rb +1 -1
- data/lib/gir_ffi/receiver_type_info.rb +2 -2
- data/lib/gir_ffi/registered_type_base.rb +1 -1
- data/lib/gir_ffi/sized_array.rb +4 -2
- data/lib/gir_ffi/struct.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +1 -1
- data/lib/gir_ffi/type_map.rb +2 -23
- data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
- data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
- data/lib/gir_ffi/union.rb +1 -1
- data/lib/gir_ffi/union_base.rb +1 -1
- data/lib/gir_ffi/user_defined_object_info.rb +6 -2
- data/lib/gir_ffi/user_defined_property_info.rb +33 -33
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +3 -2
- data/lib/gir_ffi-base/gobject.rb +26 -25
- data/lib/gir_ffi-base.rb +1 -1
- data/lib/gir_ffi.rb +3 -3
- data/tasks/test.rake +3 -2
- data/test/base_test_helper.rb +16 -9
- data/test/ffi-glib/array_test.rb +71 -56
- data/test/ffi-glib/byte_array_test.rb +13 -7
- data/test/ffi-glib/bytes_test.rb +24 -19
- data/test/ffi-glib/closure_test.rb +11 -11
- data/test/ffi-glib/destroy_notify_test.rb +6 -6
- data/test/ffi-glib/hash_table_test.rb +27 -27
- data/test/ffi-glib/list_test.rb +22 -22
- data/test/ffi-glib/main_loop_test.rb +12 -12
- data/test/ffi-glib/ptr_array_test.rb +39 -39
- data/test/ffi-glib/ruby_closure_test.rb +10 -10
- data/test/ffi-glib/s_list_test.rb +20 -20
- data/test/ffi-glib/strv_test.rb +19 -19
- data/test/ffi-glib/variant_test.rb +5 -5
- data/test/ffi-gobject/gobject_test.rb +48 -44
- data/test/ffi-gobject/object_class_test.rb +8 -8
- data/test/ffi-gobject/object_test.rb +49 -67
- data/test/ffi-gobject/param_spec_test.rb +12 -12
- data/test/ffi-gobject/value_test.rb +145 -125
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +8 -8
- data/test/ffi-gobject_introspection/i_base_info_test.rb +15 -16
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +9 -13
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +7 -7
- data/test/ffi-gobject_introspection/i_function_info_test.rb +1 -1
- data/test/ffi-gobject_introspection/i_interface_info_test.rb +10 -10
- data/test/ffi-gobject_introspection/i_object_info_test.rb +23 -23
- data/test/ffi-gobject_introspection/i_property_info_test.rb +19 -19
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +10 -10
- data/test/ffi-gobject_introspection/i_repository_test.rb +31 -31
- data/test/ffi-gobject_introspection/i_struct_info_test.rb +10 -10
- data/test/ffi-gobject_introspection/i_type_info_test.rb +12 -15
- data/test/ffi-gobject_introspection/i_union_info_test.rb +7 -7
- data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +16 -16
- data/test/ffi-gobject_introspection/lib_test.rb +3 -3
- data/test/ffi-gobject_introspection/strv_test.rb +9 -9
- data/test/ffi-gobject_test.rb +44 -44
- data/test/gir_ffi/allocation_helper_test.rb +13 -13
- data/test/gir_ffi/arg_helper_test.rb +63 -64
- data/test/gir_ffi/boolean_test.rb +20 -20
- data/test/gir_ffi/boxed_base_test.rb +18 -18
- data/test/gir_ffi/builder_test.rb +115 -93
- data/test/gir_ffi/builders/argument_builder_test.rb +280 -286
- data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +53 -56
- data/test/gir_ffi/builders/callback_builder_test.rb +71 -72
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +36 -40
- data/test/gir_ffi/builders/constant_builder_test.rb +1 -1
- data/test/gir_ffi/builders/constructor_builder_test.rb +10 -10
- data/test/gir_ffi/builders/enum_builder_test.rb +10 -10
- data/test/gir_ffi/builders/field_builder_test.rb +42 -42
- data/test/gir_ffi/builders/function_builder_test.rb +236 -224
- data/test/gir_ffi/builders/initializer_builder_test.rb +14 -14
- data/test/gir_ffi/builders/interface_builder_test.rb +9 -9
- data/test/gir_ffi/builders/module_builder_test.rb +18 -18
- data/test/gir_ffi/builders/object_builder_test.rb +38 -38
- data/test/gir_ffi/builders/property_builder_test.rb +91 -94
- data/test/gir_ffi/builders/registered_type_builder_test.rb +35 -11
- data/test/gir_ffi/builders/return_value_builder_test.rb +215 -222
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +122 -113
- data/test/gir_ffi/builders/struct_builder_test.rb +32 -32
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +8 -14
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +23 -23
- data/test/gir_ffi/builders/union_builder_test.rb +12 -15
- data/test/gir_ffi/builders/user_defined_builder_test.rb +147 -147
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +40 -40
- data/test/gir_ffi/builders/vfunc_builder_test.rb +145 -157
- data/test/gir_ffi/callback_base_test.rb +9 -9
- data/test/gir_ffi/class_base_test.rb +49 -51
- data/test/gir_ffi/core_test.rb +32 -32
- data/test/gir_ffi/enum_base_test.rb +19 -19
- data/test/gir_ffi/error_type_info_test.rb +23 -23
- data/test/gir_ffi/ffi_ext/pointer_test.rb +5 -5
- data/test/gir_ffi/g_type_test.rb +11 -11
- data/test/gir_ffi/in_pointer_test.rb +70 -50
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +5 -5
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +4 -4
- data/test/gir_ffi/info_ext/i_field_info_test.rb +6 -6
- data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -17
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -8
- data/test/gir_ffi/info_ext/i_type_info_test.rb +229 -215
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +4 -4
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +8 -8
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +8 -8
- data/test/gir_ffi/interface_base_test.rb +8 -8
- data/test/gir_ffi/method_stubber_test.rb +19 -19
- data/test/gir_ffi/object_base_test.rb +19 -19
- data/test/gir_ffi/object_store_test.rb +13 -13
- data/test/gir_ffi/receiver_argument_info_test.rb +15 -15
- data/test/gir_ffi/sized_array_test.rb +68 -68
- data/test/gir_ffi/struct_base_test.rb +8 -8
- data/test/gir_ffi/struct_like_base_test.rb +64 -64
- data/test/gir_ffi/type_map_test.rb +6 -6
- data/test/gir_ffi/unintrospectable_type_info_test.rb +33 -33
- data/test/gir_ffi/union_base_test.rb +8 -8
- data/test/gir_ffi/user_defined_object_info_test.rb +34 -34
- data/test/gir_ffi/user_defined_property_info_test.rb +16 -16
- data/test/gir_ffi/variable_name_generator_test.rb +8 -8
- data/test/gir_ffi/version_test.rb +4 -4
- data/test/gir_ffi/zero_terminated_test.rb +34 -34
- data/test/gir_ffi_test_helper.rb +3 -3
- data/test/integration/callback_exceptions_test.rb +17 -21
- data/test/integration/derived_classes_test.rb +13 -13
- data/test/integration/generated_everything_test.rb +224 -224
- data/test/integration/generated_gimarshallingtests_test.rb +1118 -1017
- data/test/integration/generated_gio_test.rb +36 -36
- data/test/integration/generated_glib_test.rb +4 -6
- data/test/integration/generated_gobject_test.rb +43 -35
- data/test/integration/generated_gst_test.rb +16 -16
- data/test/integration/generated_gtk_source_test.rb +22 -17
- data/test/integration/generated_gtop_test.rb +8 -15
- data/test/integration/generated_pango_ft2_test.rb +2 -2
- data/test/integration/generated_pango_test.rb +4 -4
- data/test/integration/generated_regress_test.rb +1809 -1621
- data/test/integration/generated_secret_test.rb +8 -11
- data/test/integration/generated_utility_test.rb +81 -81
- data/test/integration/generated_warnlib_test.rb +13 -19
- data/test/integration/method_lookup_test.rb +6 -6
- data/test/introspection_test_helper.rb +48 -7
- data/test/minitest/stats_plugin.rb +1 -1
- metadata +11 -28
- data/lib/ffi-glib/array_methods.rb +0 -16
- data/test/gir_ffi/in_out_pointer_test.rb +0 -56
@@ -1,140 +1,139 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "gir_ffi_test_helper"
|
4
4
|
|
5
5
|
describe GirFFI::ArgHelper do
|
6
|
-
describe
|
7
|
-
it
|
6
|
+
describe ".cast_from_pointer" do
|
7
|
+
it "handles class types" do
|
8
8
|
klass = Class.new
|
9
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
|
10
|
+
_(GirFFI::ArgHelper.cast_from_pointer(klass, :pointer_value)).must_equal :wrapped_value
|
11
11
|
end
|
12
12
|
|
13
|
-
describe
|
14
|
-
it
|
13
|
+
describe "for :gint8" do
|
14
|
+
it "handles negative :gint8" do
|
15
15
|
ptr = FFI::Pointer.new(-127)
|
16
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr).must_equal(-127)
|
16
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr)).must_equal(-127)
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
19
|
+
it "handles positive :gint8" do
|
20
20
|
ptr = FFI::Pointer.new(128)
|
21
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr).must_equal(128)
|
21
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr)).must_equal(128)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
25
|
+
it "handles :guint32" do
|
26
26
|
ptr = FFI::Pointer.new(0xffffffff)
|
27
|
-
GirFFI::ArgHelper.cast_from_pointer(:guint32, ptr).must_equal(0xffffffff)
|
27
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:guint32, ptr)).must_equal(0xffffffff)
|
28
28
|
end
|
29
29
|
|
30
|
-
describe
|
31
|
-
it
|
30
|
+
describe "for :gint32" do
|
31
|
+
it "handles positive :gint32" do
|
32
32
|
ptr = FFI::Pointer.new(1)
|
33
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(1)
|
33
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(1)
|
34
34
|
end
|
35
35
|
|
36
|
-
it
|
36
|
+
it "handles negative :gint32" do
|
37
37
|
ptr = FFI::Pointer.new(0xffffffff)
|
38
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(-1)
|
38
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(-1)
|
39
39
|
end
|
40
40
|
|
41
|
-
it
|
41
|
+
it "handles largest negative :gint32" do
|
42
42
|
ptr = FFI::Pointer.new(0x80000000)
|
43
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(-0x80000000)
|
43
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(-0x80000000)
|
44
44
|
end
|
45
45
|
|
46
|
-
it
|
46
|
+
it "handles largest positive :gint32" do
|
47
47
|
ptr = FFI::Pointer.new(0x7fffffff)
|
48
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(0x7fffffff)
|
48
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(0x7fffffff)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
it
|
53
|
-
ptr = FFI::MemoryPointer.from_string
|
54
|
-
GirFFI::ArgHelper.cast_from_pointer(:utf8, ptr).must_equal
|
52
|
+
it "handles :utf8" do
|
53
|
+
ptr = FFI::MemoryPointer.from_string "foo"
|
54
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:utf8, ptr)).must_equal "foo"
|
55
55
|
end
|
56
56
|
|
57
|
-
it
|
58
|
-
ptr = FFI::MemoryPointer.from_string
|
59
|
-
GirFFI::ArgHelper.cast_from_pointer(:filename, ptr).must_equal
|
57
|
+
it "handles :filename" do
|
58
|
+
ptr = FFI::MemoryPointer.from_string "foo"
|
59
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:filename, ptr)).must_equal "foo"
|
60
60
|
end
|
61
61
|
|
62
|
-
it
|
63
|
-
hash = GLib::HashTable.from [:utf8, :gint32],
|
62
|
+
it "handles GHashTable" do
|
63
|
+
hash = GLib::HashTable.from [:utf8, :gint32], "foo" => 1, "bar" => 2
|
64
64
|
ptr = hash.to_ptr
|
65
65
|
result = GirFFI::ArgHelper.cast_from_pointer([:pointer, [:ghash, :utf8, :gint32]], ptr)
|
66
|
-
result.to_hash.must_equal hash.to_hash
|
66
|
+
_(result.to_hash).must_equal hash.to_hash
|
67
67
|
end
|
68
68
|
|
69
|
-
describe
|
70
|
-
it
|
69
|
+
describe "when passing a broken typespec" do
|
70
|
+
it "raises on unknown symbol" do
|
71
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"
|
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
74
|
end
|
75
75
|
|
76
|
-
it
|
76
|
+
it "raises on unexpected main type for complex type" do
|
77
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]"
|
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
80
|
end
|
81
81
|
|
82
|
-
it
|
82
|
+
it "raises on unexpected sub type for complex type" do
|
83
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]"
|
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
86
|
end
|
87
87
|
|
88
|
-
it
|
88
|
+
it "raises on unexpected container type for complex type" do
|
89
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]]"
|
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
92
|
end
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
describe
|
97
|
-
describe
|
98
|
-
it
|
99
|
-
GirFFI::ArgHelper.store(nil).must_be :null?
|
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
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
describe
|
104
|
-
it
|
105
|
-
str =
|
103
|
+
describe "when called with a string" do
|
104
|
+
it "stores the string in GirFFI::ArgHelper::OBJECT_STORE" do
|
105
|
+
str = "Foo"
|
106
106
|
ptr = GirFFI::ArgHelper.store(str)
|
107
107
|
result = GirFFI::ArgHelper::OBJECT_STORE.fetch(ptr)
|
108
|
-
result.must_equal str
|
108
|
+
_(result).must_equal str
|
109
109
|
end
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
|
-
describe
|
114
|
-
it
|
115
|
-
GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2, 3],
|
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
116
|
pass
|
117
117
|
end
|
118
118
|
|
119
|
-
it
|
120
|
-
result =
|
121
|
-
|
122
|
-
|
123
|
-
result.message.must_equal 'foo should have size 3'
|
119
|
+
it "raises if array does not have the correct size" do
|
120
|
+
result = _(-> { GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2], "foo") }).
|
121
|
+
must_raise ArgumentError
|
122
|
+
_(result.message).must_equal "foo should have size 3"
|
124
123
|
end
|
125
124
|
end
|
126
125
|
|
127
|
-
describe
|
128
|
-
it
|
129
|
-
err_ptr = double(
|
126
|
+
describe ".check_error" do
|
127
|
+
it "does nothing if there is no error" do
|
128
|
+
err_ptr = double("err_ptr", read_pointer: nil)
|
130
129
|
GirFFI::ArgHelper.check_error err_ptr
|
131
130
|
pass
|
132
131
|
end
|
133
132
|
|
134
|
-
it
|
133
|
+
it "raises an exception if there is an error" do
|
135
134
|
err = GLib::Error.new
|
136
|
-
err_ptr = double(
|
137
|
-
-> { GirFFI::ArgHelper.check_error err_ptr }.must_raise GirFFI::GLibError
|
135
|
+
err_ptr = double("err_ptr", read_pointer: err.to_ptr)
|
136
|
+
_(-> { GirFFI::ArgHelper.check_error err_ptr }).must_raise GirFFI::GLibError
|
138
137
|
end
|
139
138
|
end
|
140
139
|
end
|
@@ -1,43 +1,43 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "gir_ffi_test_helper"
|
4
4
|
|
5
5
|
describe GirFFI::Boolean do
|
6
|
-
it
|
7
|
-
FFI.type_size(GirFFI::Boolean).must_equal FFI.type_size :int
|
6
|
+
it "has the same native size as an int" do
|
7
|
+
_(FFI.type_size(GirFFI::Boolean)).must_equal FFI.type_size :int
|
8
8
|
end
|
9
9
|
|
10
|
-
describe
|
11
|
-
it
|
12
|
-
GirFFI::Boolean.from_native(0,
|
10
|
+
describe ".from_native" do
|
11
|
+
it "converts 0 to false" do
|
12
|
+
_(GirFFI::Boolean.from_native(0, "whatever")).must_equal false
|
13
13
|
end
|
14
14
|
|
15
|
-
it
|
16
|
-
GirFFI::Boolean.from_native(1,
|
15
|
+
it "converts 1 to true" do
|
16
|
+
_(GirFFI::Boolean.from_native(1, "whatever")).must_equal true
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
describe
|
21
|
-
it
|
22
|
-
GirFFI::Boolean.to_native(false,
|
20
|
+
describe ".to_native" do
|
21
|
+
it "converts false to 0" do
|
22
|
+
_(GirFFI::Boolean.to_native(false, "whatever")).must_equal 0
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
26
|
-
GirFFI::Boolean.to_native(true,
|
25
|
+
it "converts true to 1" do
|
26
|
+
_(GirFFI::Boolean.to_native(true, "whatever")).must_equal 1
|
27
27
|
end
|
28
28
|
|
29
|
-
it
|
30
|
-
GirFFI::Boolean.to_native(nil,
|
29
|
+
it "converts nil to 0" do
|
30
|
+
_(GirFFI::Boolean.to_native(nil, "whatever")).must_equal 0
|
31
31
|
end
|
32
32
|
|
33
|
-
it
|
34
|
-
GirFFI::Boolean.to_native(
|
33
|
+
it "converts truthy value to 1" do
|
34
|
+
_(GirFFI::Boolean.to_native("i am truth!", "whatever")).must_equal 1
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
describe
|
39
|
-
it
|
40
|
-
GirFFI::Boolean.size.must_equal FFI.type_size :int
|
38
|
+
describe ".size" do
|
39
|
+
it "returns the correct type size" do
|
40
|
+
_(GirFFI::Boolean.size).must_equal FFI.type_size :int
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -1,44 +1,44 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "gir_ffi_test_helper"
|
4
4
|
|
5
5
|
GirFFI.setup :GIMarshallingTests
|
6
6
|
|
7
7
|
describe GirFFI::BoxedBase do
|
8
|
-
describe
|
9
|
-
it
|
8
|
+
describe "initialize" do
|
9
|
+
it "sets up the held struct pointer" do
|
10
10
|
# NOTE: GObject::Value uses the generic constructor, unlike
|
11
11
|
# GIMarshallingTests::BoxedStruct, which has its own constructor.
|
12
12
|
value = GObject::Value.new
|
13
|
-
value.to_ptr.wont_be_nil
|
13
|
+
_(value.to_ptr).wont_be_nil
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
describe
|
18
|
-
it
|
17
|
+
describe "copy_from" do
|
18
|
+
it "returns a copy with owned false" do
|
19
19
|
original = GIMarshallingTests::BoxedStruct.new
|
20
20
|
copy = GIMarshallingTests::BoxedStruct.copy_from(original)
|
21
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?
|
22
|
+
_(ptr).wont_be :==, original.to_ptr
|
23
|
+
_(ptr).wont_be :autorelease? if ptr.respond_to? :autorelease?
|
24
|
+
_(copy.struct).wont_be :owned?
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
describe
|
29
|
-
it
|
28
|
+
describe "wrap_own" do
|
29
|
+
it "wraps and owns the supplied pointer" do
|
30
30
|
original = GIMarshallingTests::BoxedStruct.new
|
31
31
|
copy = GIMarshallingTests::BoxedStruct.wrap_own(original.to_ptr)
|
32
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?
|
33
|
+
_(ptr).must_equal original.to_ptr
|
34
|
+
_(ptr).wont_be :autorelease? if ptr.respond_to? :autorelease?
|
35
|
+
_(copy.struct).must_be :owned?
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
describe
|
40
|
-
it
|
41
|
-
skip
|
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
42
|
|
43
43
|
allow(GObject).to receive(:boxed_free)
|
44
44
|
gtype = GIMarshallingTests::BoxedStruct.gtype
|
@@ -59,7 +59,7 @@ describe GirFFI::BoxedBase do
|
|
59
59
|
|
60
60
|
expect(GObject).to have_received(:boxed_free).with(gtype, owned_ptr)
|
61
61
|
expect(GObject).not_to have_received(:boxed_free).with(gtype, unowned_ptr)
|
62
|
-
owned_struct.wont_be :owned?
|
62
|
+
_(owned_struct).wont_be :owned?
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "gir_ffi_test_helper"
|
4
4
|
|
5
5
|
GirFFI.setup :Regress
|
6
6
|
GirFFI.setup :GIMarshallingTests
|
@@ -8,29 +8,29 @@ GirFFI.setup :GIMarshallingTests
|
|
8
8
|
describe GirFFI::Builder do
|
9
9
|
let(:gir) { GObjectIntrospection::IRepository.default }
|
10
10
|
|
11
|
-
describe
|
12
|
-
it
|
11
|
+
describe ".build_class" do
|
12
|
+
it "does not replace existing classes" do
|
13
13
|
oldclass = GObject::Object
|
14
|
-
GirFFI::Builder.build_class get_introspection_data(
|
15
|
-
GObject::Object.must_equal oldclass
|
14
|
+
GirFFI::Builder.build_class get_introspection_data("GObject", "Object")
|
15
|
+
_(GObject::Object).must_equal oldclass
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
describe
|
20
|
-
it
|
21
|
-
result = -> { GirFFI::Builder.build_module(
|
22
|
-
result.message.must_equal
|
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
23
|
end
|
24
24
|
|
25
|
-
describe
|
25
|
+
describe "building a module for the first time" do
|
26
26
|
before do
|
27
27
|
save_module :Regress
|
28
|
-
GirFFI::Builder.build_module
|
28
|
+
GirFFI::Builder.build_module "Regress"
|
29
29
|
end
|
30
30
|
|
31
|
-
it
|
31
|
+
it "creates a Lib module ready to attach functions from the shared library" do
|
32
32
|
gir = GObjectIntrospection::IRepository.default
|
33
|
-
expected = [gir.shared_library(
|
33
|
+
expected = [gir.shared_library("Regress")]
|
34
34
|
assert_equal expected, Regress::Lib.ffi_libraries.map(&:name)
|
35
35
|
end
|
36
36
|
|
@@ -39,67 +39,81 @@ describe GirFFI::Builder do
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
describe
|
43
|
-
it
|
42
|
+
describe "building a module that already exists" do
|
43
|
+
it "does not replace the existing module" do
|
44
44
|
oldmodule = Regress
|
45
|
-
GirFFI::Builder.build_module
|
45
|
+
GirFFI::Builder.build_module "Regress"
|
46
46
|
assert_equal oldmodule, Regress
|
47
47
|
end
|
48
48
|
|
49
|
-
it
|
49
|
+
it "does not replace the existing Lib module" do
|
50
50
|
oldmodule = Regress::Lib
|
51
|
-
GirFFI::Builder.build_module
|
51
|
+
GirFFI::Builder.build_module "Regress"
|
52
52
|
assert_equal oldmodule, Regress::Lib
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
it
|
56
|
+
it "passes the version on to ModuleBuilder" do
|
57
57
|
builder = double(generate: nil)
|
58
58
|
expect(GirFFI::Builders::ModuleBuilder).to receive(:new).
|
59
|
-
with(
|
59
|
+
with("Foo", namespace: "Foo", version: "1.0").
|
60
60
|
and_return builder
|
61
61
|
|
62
|
-
GirFFI::Builder.build_module
|
62
|
+
GirFFI::Builder.build_module "Foo", "1.0"
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
describe
|
67
|
-
it
|
66
|
+
describe ".build_by_gtype" do
|
67
|
+
it "returns the class types known to the GIR" do
|
68
68
|
result = GirFFI::Builder.build_by_gtype GObject::Object.gtype
|
69
|
-
result.must_equal GObject::Object
|
69
|
+
_(result).must_equal GObject::Object
|
70
70
|
end
|
71
71
|
|
72
|
-
it
|
72
|
+
it "returns the class for user-defined types" do
|
73
73
|
klass = Class.new GIMarshallingTests::OverridesObject
|
74
74
|
Object.const_set "Derived#{Sequence.next}", klass
|
75
75
|
gtype = GirFFI.define_type klass
|
76
76
|
|
77
77
|
found_klass = GirFFI::Builder.build_by_gtype gtype
|
78
|
-
found_klass.must_equal klass
|
78
|
+
_(found_klass).must_equal klass
|
79
79
|
end
|
80
80
|
|
81
|
-
it
|
81
|
+
it "returns the class for user-defined types not derived from GObject" do
|
82
|
+
klass = Class.new Regress::TestFundamentalObject
|
83
|
+
Object.const_set "Derived#{Sequence.next}", klass
|
84
|
+
gtype = GirFFI.define_type klass
|
85
|
+
|
86
|
+
found_klass = GirFFI::Builder.build_by_gtype gtype
|
87
|
+
_(found_klass).must_equal klass
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns a valid class for boxed classes unknown to GIR" do
|
82
91
|
object_class = GIMarshallingTests::PropertiesObject.object_class
|
83
|
-
property = object_class.find_property
|
92
|
+
property = object_class.find_property "some-boxed-glist"
|
84
93
|
gtype = property.value_type
|
85
94
|
|
86
|
-
gtype.wont_equal GObject::TYPE_NONE
|
95
|
+
_(gtype).wont_equal GObject::TYPE_NONE
|
87
96
|
|
88
97
|
found_klass = GirFFI::Builder.build_by_gtype gtype
|
89
|
-
found_klass.name.must_be_nil
|
90
|
-
found_klass.superclass.must_equal GirFFI::BoxedBase
|
98
|
+
_(found_klass.name).must_be_nil
|
99
|
+
_(found_klass.superclass).must_equal GirFFI::BoxedBase
|
100
|
+
end
|
101
|
+
|
102
|
+
it "refuse to build classes for base types" do
|
103
|
+
_(-> { GirFFI::Builder.build_by_gtype GObject::TYPE_INT }).
|
104
|
+
must_raise RuntimeError, "Unable to handle type gint"
|
91
105
|
end
|
92
106
|
end
|
93
107
|
|
94
|
-
describe
|
108
|
+
describe ".attach_ffi_function" do
|
95
109
|
let(:lib) { Module.new }
|
96
110
|
|
97
|
-
it
|
98
|
-
function_info = get_introspection_data
|
111
|
+
it "calls attach_function with the correct types for Regress.test_callback_destroy_notify" do
|
112
|
+
function_info = get_introspection_data "Regress", "test_callback_destroy_notify"
|
99
113
|
|
100
114
|
expect(lib).
|
101
115
|
to receive(:attach_function).
|
102
|
-
with(
|
116
|
+
with("regress_test_callback_destroy_notify",
|
103
117
|
[Regress::TestCallbackUserData, :pointer, GLib::DestroyNotify],
|
104
118
|
:int32).
|
105
119
|
and_return true
|
@@ -107,12 +121,12 @@ describe GirFFI::Builder do
|
|
107
121
|
GirFFI::Builder.attach_ffi_function(lib, function_info)
|
108
122
|
end
|
109
123
|
|
110
|
-
it
|
111
|
-
info = get_method_introspection_data
|
124
|
+
it "calls attach_function with the correct types for Regress::TestObj#torture_signature_0" do
|
125
|
+
info = get_method_introspection_data "Regress", "TestObj", "torture_signature_0"
|
112
126
|
|
113
127
|
expect(lib).
|
114
128
|
to receive(:attach_function).
|
115
|
-
with(
|
129
|
+
with("regress_test_obj_torture_signature_0",
|
116
130
|
[:pointer, :int32, :pointer, :pointer, :pointer, :pointer, :uint32],
|
117
131
|
:void).
|
118
132
|
and_return true
|
@@ -120,32 +134,32 @@ describe GirFFI::Builder do
|
|
120
134
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
121
135
|
end
|
122
136
|
|
123
|
-
it
|
124
|
-
info = get_method_introspection_data
|
137
|
+
it "calls attach_function with the correct types for Regress::TestObj#instance_method" do
|
138
|
+
info = get_method_introspection_data "Regress", "TestObj", "instance_method"
|
125
139
|
expect(lib).to receive(:attach_function).
|
126
|
-
with(
|
140
|
+
with("regress_test_obj_instance_method", [:pointer], :int32).
|
127
141
|
and_return true
|
128
142
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
129
143
|
end
|
130
144
|
|
131
|
-
it
|
132
|
-
info = get_introspection_data
|
145
|
+
it "calls attach_function with the correct types for Regress.test_array_gint32_in" do
|
146
|
+
info = get_introspection_data "Regress", "test_array_gint32_in"
|
133
147
|
expect(lib).to receive(:attach_function).
|
134
|
-
with(
|
148
|
+
with("regress_test_array_gint32_in", [:int32, :pointer], :int32).
|
135
149
|
and_return true
|
136
150
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
137
151
|
end
|
138
152
|
|
139
|
-
it
|
140
|
-
info = get_introspection_data
|
153
|
+
it "calls attach_function with the correct types for Regress.test_enum_param" do
|
154
|
+
info = get_introspection_data "Regress", "test_enum_param"
|
141
155
|
expect(lib).to receive(:attach_function).
|
142
|
-
with(
|
156
|
+
with("regress_test_enum_param", [Regress::TestEnum], :pointer).
|
143
157
|
and_return true
|
144
158
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
145
159
|
end
|
146
160
|
|
147
|
-
it
|
148
|
-
info = get_introspection_data
|
161
|
+
it "does not attach the function if it is already defined" do
|
162
|
+
info = get_introspection_data "Regress", "test_array_gint32_in"
|
149
163
|
allow(lib).to receive(:method_defined?).and_return true
|
150
164
|
expect(lib).not_to receive(:attach_function)
|
151
165
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
@@ -156,17 +170,17 @@ describe GirFFI::Builder do
|
|
156
170
|
# NOTE: Legacy tests below.
|
157
171
|
#
|
158
172
|
|
159
|
-
describe
|
173
|
+
describe "looking at Regress.test_callback_destroy_notify" do
|
160
174
|
before do
|
161
175
|
save_module :GObject
|
162
176
|
save_module :Regress
|
163
|
-
GirFFI::Builder.build_module
|
164
|
-
GirFFI::Builder.build_module
|
165
|
-
@go = get_introspection_data
|
177
|
+
GirFFI::Builder.build_module "GObject"
|
178
|
+
GirFFI::Builder.build_module "Regress"
|
179
|
+
@go = get_introspection_data "Regress", "test_callback_destroy_notify"
|
166
180
|
end
|
167
181
|
|
168
|
-
it
|
169
|
-
Regress.setup_method!
|
182
|
+
it "defines ffi callback types :Callback and :ClosureNotify" do
|
183
|
+
Regress.setup_method! "test_callback_destroy_notify"
|
170
184
|
tcud = Regress::Lib.find_type :TestCallbackUserData
|
171
185
|
dn = GLib::Lib.find_type :DestroyNotify
|
172
186
|
|
@@ -182,40 +196,40 @@ describe GirFFI::Builder do
|
|
182
196
|
end
|
183
197
|
end
|
184
198
|
|
185
|
-
describe
|
199
|
+
describe "building Regress::TestBoxed" do
|
186
200
|
before do
|
187
|
-
GirFFI::Builder.build_class get_introspection_data(
|
201
|
+
GirFFI::Builder.build_class get_introspection_data("Regress", "TestBoxed")
|
188
202
|
end
|
189
203
|
|
190
|
-
it
|
191
|
-
assert Regress::TestBoxed.respond_to?
|
204
|
+
it "sets up #wrap" do
|
205
|
+
assert Regress::TestBoxed.respond_to? "wrap"
|
192
206
|
end
|
193
207
|
|
194
|
-
it
|
195
|
-
assert Regress::TestBoxed.respond_to?
|
208
|
+
it "sets up #allocate" do
|
209
|
+
assert Regress::TestBoxed.respond_to? "allocate"
|
196
210
|
end
|
197
211
|
end
|
198
212
|
|
199
|
-
describe
|
213
|
+
describe "built Regress module" do
|
200
214
|
before do
|
201
215
|
save_module :Regress
|
202
|
-
GirFFI::Builder.build_module
|
216
|
+
GirFFI::Builder.build_module "Regress"
|
203
217
|
end
|
204
218
|
|
205
|
-
it
|
219
|
+
it "autocreates singleton methods" do
|
206
220
|
refute_defines_singleton_method Regress, :test_uint
|
207
221
|
Regress.test_uint 31
|
208
222
|
assert_defines_singleton_method Regress, :test_uint
|
209
223
|
end
|
210
224
|
|
211
|
-
it
|
225
|
+
it "autocreates the TestObj class on first access" do
|
212
226
|
assert !Regress.const_defined?(:TestObj)
|
213
|
-
Regress::TestObj.must_be_instance_of Class
|
227
|
+
_(Regress::TestObj).must_be_instance_of Class
|
214
228
|
assert Regress.const_defined? :TestObj
|
215
229
|
end
|
216
230
|
|
217
|
-
it
|
218
|
-
Regress.gir_ffi_builder.must_be_instance_of GirFFI::Builders::ModuleBuilder
|
231
|
+
it "knows its own module builder" do
|
232
|
+
_(Regress.gir_ffi_builder).must_be_instance_of GirFFI::Builders::ModuleBuilder
|
219
233
|
end
|
220
234
|
|
221
235
|
after do
|
@@ -223,73 +237,81 @@ describe GirFFI::Builder do
|
|
223
237
|
end
|
224
238
|
end
|
225
239
|
|
226
|
-
describe
|
240
|
+
describe "having built Regress::TestObj" do
|
227
241
|
before do
|
228
|
-
GirFFI::Builder.build_class get_introspection_data(
|
242
|
+
GirFFI::Builder.build_class get_introspection_data("Regress", "TestObj")
|
229
243
|
end
|
230
244
|
|
231
|
-
it
|
232
|
-
o = Regress::TestObj.new_from_file(
|
245
|
+
it "C functions for called instance methods get attached to Regress::Lib" do
|
246
|
+
o = Regress::TestObj.new_from_file("foo")
|
233
247
|
o.instance_method
|
234
|
-
Regress::Lib.must_respond_to :regress_test_obj_instance_method
|
248
|
+
_(Regress::Lib).must_respond_to :regress_test_obj_instance_method
|
235
249
|
end
|
236
250
|
|
237
|
-
it
|
238
|
-
Regress::TestObj.gir_info.name.must_equal
|
251
|
+
it "the built class knows its own GIR info" do
|
252
|
+
_(Regress::TestObj.gir_info.name).must_equal "TestObj"
|
239
253
|
end
|
240
254
|
|
241
|
-
it
|
242
|
-
Regress::TestObj.gir_ffi_builder.must_be_instance_of GirFFI::Builders::ObjectBuilder
|
255
|
+
it "the built class knows its own class builder" do
|
256
|
+
_(Regress::TestObj.gir_ffi_builder).must_be_instance_of GirFFI::Builders::ObjectBuilder
|
243
257
|
end
|
244
258
|
end
|
245
259
|
|
246
|
-
describe
|
247
|
-
it
|
260
|
+
describe "built Regress::TestSubObj" do
|
261
|
+
it "inherits #set_bare from its superclass" do
|
248
262
|
o1 = Regress::TestSubObj.new
|
249
263
|
o1.set_bare(nil)
|
250
264
|
pass
|
251
265
|
end
|
252
266
|
|
253
|
-
it
|
254
|
-
obj = Regress::TestObj.new_from_file(
|
267
|
+
it "overrides #instance_method" do
|
268
|
+
obj = Regress::TestObj.new_from_file("foo")
|
255
269
|
subobj = Regress::TestSubObj.new
|
256
270
|
|
257
|
-
obj.instance_method.must_equal(-1)
|
258
|
-
subobj.instance_method.must_equal 0
|
271
|
+
_(obj.instance_method).must_equal(-1)
|
272
|
+
_(subobj.instance_method).must_equal 0
|
259
273
|
end
|
260
274
|
end
|
261
275
|
|
262
|
-
describe
|
276
|
+
describe "building Regress::TestSubObj" do
|
263
277
|
before do
|
264
278
|
save_module :Regress
|
265
|
-
GirFFI::Builder.build_class get_introspection_data(
|
279
|
+
GirFFI::Builder.build_class get_introspection_data("Regress", "TestSubObj")
|
266
280
|
end
|
267
281
|
|
268
|
-
it
|
282
|
+
it "sets up the Regress namespace" do
|
269
283
|
assert Regress.const_defined? :Lib
|
270
284
|
assert Regress.respond_to? :gir_ffi_builder
|
271
285
|
assert Regress.const_defined? :GIR_FFI_BUILDER
|
272
286
|
end
|
273
287
|
|
274
|
-
it
|
275
|
-
expected = [gir.shared_library(
|
288
|
+
it "creates the Regress::Lib module ready to attach functions from the shared library" do
|
289
|
+
expected = [gir.shared_library("Regress")]
|
276
290
|
assert_equal expected, Regress::Lib.ffi_libraries.map(&:name)
|
277
291
|
end
|
278
292
|
|
279
|
-
it
|
293
|
+
it "builds parent classes also" do
|
280
294
|
assert Regress.const_defined? :TestObj
|
281
295
|
assert Object.const_defined? :GObject
|
282
296
|
assert GObject.const_defined? :Object
|
283
297
|
end
|
284
298
|
|
285
|
-
it
|
286
|
-
|
287
|
-
|
299
|
+
it "sets up the inheritance chain" do
|
300
|
+
# Introduced in version 1.59.1
|
301
|
+
expected = if Regress::TestSubObj.find_property :boolean
|
302
|
+
[Regress::TestSubObj,
|
303
|
+
Regress::TestInterface,
|
304
|
+
Regress::TestObj,
|
305
|
+
GObject::Object]
|
306
|
+
else
|
307
|
+
[Regress::TestSubObj,
|
288
308
|
Regress::TestObj,
|
289
309
|
GObject::Object]
|
310
|
+
end
|
311
|
+
_(Regress::TestSubObj.registered_ancestors).must_equal expected
|
290
312
|
end
|
291
313
|
|
292
|
-
it
|
314
|
+
it "creates a Regress::TestSubObj#to_ptr method" do
|
293
315
|
assert Regress::TestSubObj.public_method_defined? :to_ptr
|
294
316
|
end
|
295
317
|
|