gir_ffi 0.14.0 → 0.15.3
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 +45 -0
- data/Gemfile +6 -4
- data/README.md +11 -10
- data/Rakefile +5 -5
- data/lib/ffi-glib.rb +16 -16
- 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-gobject.rb +13 -13
- 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 +40 -29
- 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 +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/gir_ffi-base.rb +1 -1
- data/lib/gir_ffi-base/gobject.rb +26 -25
- data/lib/gir_ffi-base/gobject/lib.rb +3 -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 -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/builder_helper.rb +6 -1
- 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 +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 +16 -4
- 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 +16 -3
- 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 +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 +7 -7
- 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 +6 -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 +8 -8
- data/lib/gir_ffi/builders/with_layout.rb +2 -2
- data/lib/gir_ffi/callback_base.rb +4 -6
- data/lib/gir_ffi/class_base.rb +6 -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.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/in_pointer.rb +10 -0
- data/lib/gir_ffi/info_ext.rb +15 -14
- 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 +25 -0
- 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 +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 +5 -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/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 +51 -68
- 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 +9 -9
- 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 +34 -34
- 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 +47 -45
- data/test/gir_ffi/allocation_helper_test.rb +13 -13
- data/test/gir_ffi/arg_helper_test.rb +71 -65
- 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 +81 -213
- data/test/gir_ffi/builders/argument_builder_test.rb +321 -287
- data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +57 -56
- data/test/gir_ffi/builders/callback_builder_test.rb +71 -72
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +40 -41
- data/test/gir_ffi/builders/constant_builder_test.rb +1 -1
- data/test/gir_ffi/builders/constructor_builder_test.rb +12 -10
- data/test/gir_ffi/builders/enum_builder_test.rb +12 -11
- data/test/gir_ffi/builders/field_builder_test.rb +48 -42
- data/test/gir_ffi/builders/function_builder_test.rb +256 -224
- data/test/gir_ffi/builders/initializer_builder_test.rb +16 -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 +41 -41
- data/test/gir_ffi/builders/property_builder_test.rb +94 -94
- data/test/gir_ffi/builders/registered_type_builder_test.rb +35 -11
- data/test/gir_ffi/builders/return_value_builder_test.rb +227 -223
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +124 -113
- data/test/gir_ffi/builders/struct_builder_test.rb +38 -35
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +8 -14
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +34 -23
- data/test/gir_ffi/builders/union_builder_test.rb +12 -15
- data/test/gir_ffi/builders/user_defined_builder_test.rb +152 -148
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +46 -40
- data/test/gir_ffi/builders/vfunc_builder_test.rb +149 -157
- data/test/gir_ffi/callback_base_test.rb +9 -9
- data/test/gir_ffi/class_base_test.rb +56 -53
- data/test/gir_ffi/core_test.rb +36 -35
- 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 +9 -7
- 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 +6 -5
- 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 +231 -216
- 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 +21 -19
- data/test/gir_ffi/object_base_test.rb +23 -23
- 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 +8 -8
- 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 +14 -13
- data/test/integration/generated_everything_test.rb +225 -224
- data/test/integration/generated_gimarshallingtests_test.rb +1174 -1060
- 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 +20 -16
- data/test/integration/generated_gtk_source_test.rb +9 -15
- 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 +1858 -1632
- 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 +17 -21
- data/test/integration/method_lookup_test.rb +6 -6
- data/test/introspection_test_helper.rb +49 -7
- data/test/minitest/stats_plugin.rb +1 -1
- metadata +21 -23
- data/lib/ffi-glib/array_methods.rb +0 -16
- data/test/gir_ffi/in_out_pointer_test.rb +0 -56
@@ -1,140 +1,146 @@
|
|
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)
|
10
|
+
_(GirFFI::ArgHelper.cast_from_pointer(klass, :pointer_value))
|
11
|
+
.must_equal :wrapped_value
|
11
12
|
end
|
12
13
|
|
13
|
-
describe
|
14
|
-
it
|
14
|
+
describe "for :gint8" do
|
15
|
+
it "handles negative :gint8" do
|
15
16
|
ptr = FFI::Pointer.new(-127)
|
16
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr).must_equal(-127)
|
17
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr)).must_equal(-127)
|
17
18
|
end
|
18
19
|
|
19
|
-
it
|
20
|
+
it "handles positive :gint8" do
|
20
21
|
ptr = FFI::Pointer.new(128)
|
21
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr).must_equal(128)
|
22
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr)).must_equal(128)
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
it
|
26
|
+
it "handles :guint32" do
|
26
27
|
ptr = FFI::Pointer.new(0xffffffff)
|
27
|
-
GirFFI::ArgHelper.cast_from_pointer(:guint32, ptr).must_equal(0xffffffff)
|
28
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:guint32, ptr)).must_equal(0xffffffff)
|
28
29
|
end
|
29
30
|
|
30
|
-
describe
|
31
|
-
it
|
31
|
+
describe "for :gint32" do
|
32
|
+
it "handles positive :gint32" do
|
32
33
|
ptr = FFI::Pointer.new(1)
|
33
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(1)
|
34
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(1)
|
34
35
|
end
|
35
36
|
|
36
|
-
it
|
37
|
+
it "handles negative :gint32" do
|
37
38
|
ptr = FFI::Pointer.new(0xffffffff)
|
38
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(-1)
|
39
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(-1)
|
39
40
|
end
|
40
41
|
|
41
|
-
it
|
42
|
+
it "handles largest negative :gint32" do
|
42
43
|
ptr = FFI::Pointer.new(0x80000000)
|
43
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(-0x80000000)
|
44
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(-0x80000000)
|
44
45
|
end
|
45
46
|
|
46
|
-
it
|
47
|
+
it "handles largest positive :gint32" do
|
47
48
|
ptr = FFI::Pointer.new(0x7fffffff)
|
48
|
-
GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr).must_equal(0x7fffffff)
|
49
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(0x7fffffff)
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
52
|
-
it
|
53
|
-
ptr = FFI::MemoryPointer.from_string
|
54
|
-
GirFFI::ArgHelper.cast_from_pointer(:utf8, ptr).must_equal
|
53
|
+
it "handles :utf8" do
|
54
|
+
ptr = FFI::MemoryPointer.from_string "foo"
|
55
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:utf8, ptr)).must_equal "foo"
|
55
56
|
end
|
56
57
|
|
57
|
-
it
|
58
|
-
ptr = FFI::MemoryPointer.from_string
|
59
|
-
GirFFI::ArgHelper.cast_from_pointer(:filename, ptr).must_equal
|
58
|
+
it "handles :filename" do
|
59
|
+
ptr = FFI::MemoryPointer.from_string "foo"
|
60
|
+
_(GirFFI::ArgHelper.cast_from_pointer(:filename, ptr)).must_equal "foo"
|
60
61
|
end
|
61
62
|
|
62
|
-
it
|
63
|
-
hash = GLib::HashTable.from [:utf8, :gint32],
|
63
|
+
it "handles GHashTable" do
|
64
|
+
hash = GLib::HashTable.from [:utf8, :gint32], "foo" => 1, "bar" => 2
|
64
65
|
ptr = hash.to_ptr
|
65
|
-
result = GirFFI::ArgHelper.cast_from_pointer([:pointer, [:ghash, :utf8, :gint32]],
|
66
|
-
|
66
|
+
result = GirFFI::ArgHelper.cast_from_pointer([:pointer, [:ghash, :utf8, :gint32]],
|
67
|
+
ptr)
|
68
|
+
_(result.to_hash).must_equal hash.to_hash
|
67
69
|
end
|
68
70
|
|
69
|
-
describe
|
70
|
-
it
|
71
|
+
describe "when passing a broken typespec" do
|
72
|
+
it "raises on unknown symbol" do
|
71
73
|
ptr = FFI::Pointer.new(0xffffffff)
|
72
|
-
exception = -> { GirFFI::ArgHelper.cast_from_pointer(:foo, ptr) }
|
73
|
-
|
74
|
+
exception = _(-> { GirFFI::ArgHelper.cast_from_pointer(:foo, ptr) })
|
75
|
+
.must_raise RuntimeError
|
76
|
+
_(exception.message).must_equal "Don't know how to cast foo"
|
74
77
|
end
|
75
78
|
|
76
|
-
it
|
79
|
+
it "raises on unexpected main type for complex type" do
|
77
80
|
ptr = FFI::Pointer.new(0xffffffff)
|
78
|
-
exception = -> { GirFFI::ArgHelper.cast_from_pointer([:utf8], ptr) }
|
79
|
-
|
81
|
+
exception = _(-> { GirFFI::ArgHelper.cast_from_pointer([:utf8], ptr) })
|
82
|
+
.must_raise RuntimeError
|
83
|
+
_(exception.message).must_equal "Don't know how to cast [:utf8]"
|
80
84
|
end
|
81
85
|
|
82
|
-
it
|
86
|
+
it "raises on unexpected sub type for complex type" do
|
83
87
|
ptr = FFI::Pointer.new(0xffffffff)
|
84
|
-
exception = -> { GirFFI::ArgHelper.cast_from_pointer([:pointer, :utf8], ptr) }
|
85
|
-
|
88
|
+
exception = _(-> { GirFFI::ArgHelper.cast_from_pointer([:pointer, :utf8], ptr) })
|
89
|
+
.must_raise RuntimeError
|
90
|
+
_(exception.message).must_equal "Don't know how to cast [:pointer, :utf8]"
|
86
91
|
end
|
87
92
|
|
88
|
-
it
|
93
|
+
it "raises on unexpected container type for complex type" do
|
89
94
|
ptr = FFI::Pointer.new(0xffffffff)
|
90
|
-
exception =
|
91
|
-
|
95
|
+
exception =
|
96
|
+
_(-> { GirFFI::ArgHelper.cast_from_pointer([:pointer, [:gint32]], ptr) })
|
97
|
+
.must_raise RuntimeError
|
98
|
+
_(exception.message).must_equal "Don't know how to cast [:pointer, [:gint32]]"
|
92
99
|
end
|
93
100
|
end
|
94
101
|
end
|
95
102
|
|
96
|
-
describe
|
97
|
-
describe
|
98
|
-
it
|
99
|
-
GirFFI::ArgHelper.store(nil).must_be :null?
|
103
|
+
describe ".store" do
|
104
|
+
describe "when called with nil" do
|
105
|
+
it "returns a null pointer" do
|
106
|
+
_(GirFFI::ArgHelper.store(nil)).must_be :null?
|
100
107
|
end
|
101
108
|
end
|
102
109
|
|
103
|
-
describe
|
104
|
-
it
|
105
|
-
str =
|
110
|
+
describe "when called with a string" do
|
111
|
+
it "stores the string in GirFFI::ArgHelper::OBJECT_STORE" do
|
112
|
+
str = "Foo"
|
106
113
|
ptr = GirFFI::ArgHelper.store(str)
|
107
114
|
result = GirFFI::ArgHelper::OBJECT_STORE.fetch(ptr)
|
108
|
-
result.must_equal str
|
115
|
+
_(result).must_equal str
|
109
116
|
end
|
110
117
|
end
|
111
118
|
end
|
112
119
|
|
113
|
-
describe
|
114
|
-
it
|
115
|
-
GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2, 3],
|
120
|
+
describe ".check_fixed_array_size" do
|
121
|
+
it "passes if array has the correct size" do
|
122
|
+
GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2, 3], "foo")
|
116
123
|
pass
|
117
124
|
end
|
118
125
|
|
119
|
-
it
|
120
|
-
result =
|
121
|
-
|
122
|
-
|
123
|
-
result.message.must_equal 'foo should have size 3'
|
126
|
+
it "raises if array does not have the correct size" do
|
127
|
+
result = _(-> { GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2], "foo") })
|
128
|
+
.must_raise ArgumentError
|
129
|
+
_(result.message).must_equal "foo should have size 3"
|
124
130
|
end
|
125
131
|
end
|
126
132
|
|
127
|
-
describe
|
128
|
-
it
|
129
|
-
err_ptr = double(
|
133
|
+
describe ".check_error" do
|
134
|
+
it "does nothing if there is no error" do
|
135
|
+
err_ptr = double("err_ptr", read_pointer: nil)
|
130
136
|
GirFFI::ArgHelper.check_error err_ptr
|
131
137
|
pass
|
132
138
|
end
|
133
139
|
|
134
|
-
it
|
140
|
+
it "raises an exception if there is an error" do
|
135
141
|
err = GLib::Error.new
|
136
|
-
err_ptr = double(
|
137
|
-
-> { GirFFI::ArgHelper.check_error err_ptr }.must_raise GirFFI::GLibError
|
142
|
+
err_ptr = double("err_ptr", read_pointer: err.to_ptr)
|
143
|
+
_(-> { GirFFI::ArgHelper.check_error err_ptr }).must_raise GirFFI::GLibError
|
138
144
|
end
|
139
145
|
end
|
140
146
|
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" if jruby?
|
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,262 +39,130 @@ 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
|
-
expect(GirFFI::Builders::ModuleBuilder).to receive(:new)
|
59
|
-
with(
|
60
|
-
and_return builder
|
58
|
+
expect(GirFFI::Builders::ModuleBuilder).to receive(:new)
|
59
|
+
.with("Foo", namespace: "Foo", version: "1.0")
|
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 "attaches regress_test_callback_destroy_notify with the correct types" do
|
112
|
+
function_info = get_introspection_data "Regress", "test_callback_destroy_notify"
|
99
113
|
|
100
|
-
expect(lib)
|
101
|
-
to receive(:attach_function)
|
102
|
-
with(
|
103
|
-
|
104
|
-
|
105
|
-
and_return true
|
114
|
+
expect(lib)
|
115
|
+
.to receive(:attach_function)
|
116
|
+
.with("regress_test_callback_destroy_notify",
|
117
|
+
[Regress::TestCallbackUserData, :pointer, GLib::DestroyNotify],
|
118
|
+
:int32)
|
119
|
+
.and_return true
|
106
120
|
|
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 "attaches regress_test_obj_torture_signature_0 with the correct types" do
|
125
|
+
info = get_method_introspection_data "Regress", "TestObj", "torture_signature_0"
|
112
126
|
|
113
|
-
expect(lib)
|
114
|
-
to receive(:attach_function)
|
115
|
-
with(
|
116
|
-
|
117
|
-
|
118
|
-
and_return true
|
127
|
+
expect(lib)
|
128
|
+
.to receive(:attach_function)
|
129
|
+
.with("regress_test_obj_torture_signature_0",
|
130
|
+
[:pointer, :int32, :pointer, :pointer, :pointer, :pointer, :uint32],
|
131
|
+
:void)
|
132
|
+
.and_return true
|
119
133
|
|
120
134
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
121
135
|
end
|
122
136
|
|
123
|
-
it
|
124
|
-
info = get_method_introspection_data
|
125
|
-
expect(lib).to receive(:attach_function)
|
126
|
-
with(
|
127
|
-
and_return true
|
137
|
+
it "attaches regress_test_obj_instance_method with the correct types" do
|
138
|
+
info = get_method_introspection_data "Regress", "TestObj", "instance_method"
|
139
|
+
expect(lib).to receive(:attach_function)
|
140
|
+
.with("regress_test_obj_instance_method", [:pointer], :int32)
|
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
|
133
|
-
expect(lib).to receive(:attach_function)
|
134
|
-
with(
|
135
|
-
and_return true
|
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"
|
147
|
+
expect(lib).to receive(:attach_function)
|
148
|
+
.with("regress_test_array_gint32_in", [:int32, :pointer], :int32)
|
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
|
141
|
-
expect(lib).to receive(:attach_function)
|
142
|
-
with(
|
143
|
-
and_return true
|
153
|
+
it "calls attach_function with the correct types for Regress.test_enum_param" do
|
154
|
+
info = get_introspection_data "Regress", "test_enum_param"
|
155
|
+
expect(lib).to receive(:attach_function)
|
156
|
+
.with("regress_test_enum_param", [Regress::TestEnum], :pointer)
|
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)
|
152
166
|
end
|
153
167
|
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
168
|
end
|