gir_ffi 0.15.1 → 0.15.6
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 +42 -0
- data/README.md +10 -10
- data/TODO.md +14 -35
- data/docs/Documentation.md +6 -0
- data/docs/Subclassing.md +38 -0
- data/lib/ffi-glib.rb +8 -3
- data/lib/ffi-glib/byte_array.rb +2 -1
- data/lib/ffi-glib/container_class_methods.rb +1 -3
- data/lib/ffi-glib/destroy_notify.rb +2 -2
- data/lib/ffi-glib/hash_table.rb +1 -2
- data/lib/ffi-glib/list.rb +11 -5
- data/lib/ffi-glib/list_methods.rb +12 -0
- data/lib/ffi-glib/s_list.rb +10 -4
- data/lib/ffi-gobject.rb +2 -5
- data/lib/ffi-gobject/object.rb +102 -92
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +1 -1
- data/lib/ffi-gobject/value.rb +108 -117
- data/lib/ffi-gobject_introspection/i_base_info.rb +35 -27
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +4 -0
- data/lib/gir_ffi/array_element_convertor.rb +2 -3
- data/lib/gir_ffi/boxed_base.rb +13 -11
- data/lib/gir_ffi/builder.rb +3 -4
- data/lib/gir_ffi/builder_helper.rb +10 -2
- data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
- data/lib/gir_ffi/builders/callback_builder.rb +25 -11
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
- data/lib/gir_ffi/builders/enum_builder.rb +9 -5
- data/lib/gir_ffi/builders/field_builder.rb +2 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/interface_builder.rb +3 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
- data/lib/gir_ffi/builders/method_template.rb +4 -4
- data/lib/gir_ffi/builders/module_builder.rb +4 -2
- 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 +18 -6
- data/lib/gir_ffi/builders/property_builder.rb +1 -2
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
- data/lib/gir_ffi/builders/struct_builder.rb +34 -7
- data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
- data/lib/gir_ffi/callback_base.rb +7 -8
- data/lib/gir_ffi/class_base.rb +1 -0
- data/lib/gir_ffi/core.rb +17 -2
- data/lib/gir_ffi/glib_error.rb +1 -2
- data/lib/gir_ffi/in_pointer.rb +7 -0
- data/lib/gir_ffi/object_base.rb +27 -0
- data/lib/gir_ffi/return_value_info.rb +1 -2
- data/lib/gir_ffi/struct_base.rb +1 -9
- data/lib/gir_ffi/struct_like_base.rb +9 -5
- data/lib/gir_ffi/type_map.rb +1 -0
- data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
- data/lib/gir_ffi/union_base.rb +1 -9
- data/lib/gir_ffi/user_defined_object_info.rb +3 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -0
- metadata +106 -143
- data/Gemfile +0 -14
- data/Rakefile +0 -9
- data/tasks/test.rake +0 -204
- data/test/base_test_helper.rb +0 -70
- data/test/ffi-glib/array_test.rb +0 -203
- data/test/ffi-glib/byte_array_test.rb +0 -28
- data/test/ffi-glib/bytes_test.rb +0 -61
- 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 -76
- data/test/ffi-gobject/object_class_test.rb +0 -31
- data/test/ffi-gobject/object_test.rb +0 -122
- data/test/ffi-gobject/param_spec_test.rb +0 -32
- data/test/ffi-gobject/value_test.rb +0 -390
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
- data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
- 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 -30
- 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 -139
- 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 -322
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -651
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -126
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -81
- 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 -550
- 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 -158
- data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -433
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -197
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
- data/test/gir_ffi/builders/union_builder_test.rb +0 -28
- 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 -241
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -166
- 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_pointer_test.rb +0 -203
- 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 -711
- 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 -59
- 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 -3096
- data/test/integration/generated_gio_test.rb +0 -116
- data/test/integration/generated_glib_test.rb +0 -10
- data/test/integration/generated_gobject_test.rb +0 -124
- data/test/integration/generated_gst_test.rb +0 -38
- data/test/integration/generated_gtk_source_test.rb +0 -32
- data/test/integration/generated_gtop_test.rb +0 -22
- 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 -4038
- data/test/integration/generated_secret_test.rb +0 -14
- data/test/integration/generated_utility_test.rb +0 -174
- data/test/integration/generated_warnlib_test.rb +0 -43
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -93
- data/test/lib/Makefile.am +0 -110
- data/test/lib/autogen.sh +0 -4
- data/test/lib/configure.ac +0 -34
- data/test/lib/m4/jhflags.m4 +0 -21
- data/test/minitest/stats_plugin.rb +0 -30
@@ -1,126 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "gir_ffi_test_helper"
|
4
|
-
|
5
|
-
describe GirFFI::Builders::CallbackArgumentBuilder do
|
6
|
-
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
7
|
-
let(:builder) { GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, arg_info) }
|
8
|
-
|
9
|
-
describe "for an argument with direction :out" do
|
10
|
-
describe "for :zero_terminated" do
|
11
|
-
let(:vfunc_info) do
|
12
|
-
get_vfunc_introspection_data("GIMarshallingTests", "Object",
|
13
|
-
"vfunc_array_out_parameter")
|
14
|
-
end
|
15
|
-
let(:arg_info) { vfunc_info.args[0] }
|
16
|
-
|
17
|
-
it "has the correct value for #pre_conversion" do
|
18
|
-
_(builder.pre_conversion).must_equal ["_v1 = a"]
|
19
|
-
end
|
20
|
-
|
21
|
-
it "has the correct value for #post_conversion" do
|
22
|
-
_(builder.post_conversion).must_equal ["_v1.put_pointer 0, GirFFI::ZeroTerminated.from(:gfloat, _v2)"]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "when the argument is allocated by us, the callee" do
|
27
|
-
let(:vfunc_info) do
|
28
|
-
get_vfunc_introspection_data("GIMarshallingTests", "Object",
|
29
|
-
"method_int8_arg_and_out_callee")
|
30
|
-
end
|
31
|
-
|
32
|
-
let(:arg_info) { vfunc_info.args[1] }
|
33
|
-
|
34
|
-
it "has the correct value for #pre_conversion" do
|
35
|
-
_(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }"]
|
36
|
-
end
|
37
|
-
|
38
|
-
it "has the correct value for #post_conversion" do
|
39
|
-
_(builder.post_conversion).must_equal ["_v1.put_int8 0, _v2"]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "for an argument with direction :error" do
|
45
|
-
let(:arg_info) { GirFFI::ErrorArgumentInfo.new }
|
46
|
-
|
47
|
-
it "sets up a rescueing block in #pre_conversion" do
|
48
|
-
_(builder.pre_conversion).must_equal [
|
49
|
-
"_v1 = _error",
|
50
|
-
"begin"
|
51
|
-
]
|
52
|
-
end
|
53
|
-
|
54
|
-
it "converts any exceptions to GLib::Error in #post_conversion" do
|
55
|
-
_(builder.post_conversion).must_equal [
|
56
|
-
"rescue => _v1",
|
57
|
-
"_v2.put_pointer 0, GLib::Error.from(_v1)",
|
58
|
-
"end"
|
59
|
-
]
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "for an argument with direction :inout" do
|
64
|
-
let(:callback_info) do
|
65
|
-
get_introspection_data("Regress",
|
66
|
-
"TestCallbackArrayInOut")
|
67
|
-
end
|
68
|
-
let(:array_arg_info) { callback_info.args[0] }
|
69
|
-
let(:array_arg_builder) do
|
70
|
-
GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, array_arg_info)
|
71
|
-
end
|
72
|
-
let(:length_arg_info) { callback_info.args[1] }
|
73
|
-
let(:length_arg_builder) do
|
74
|
-
GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, length_arg_info)
|
75
|
-
end
|
76
|
-
|
77
|
-
before do
|
78
|
-
length_arg_builder.array_arg = array_arg_builder
|
79
|
-
array_arg_builder.length_arg = length_arg_builder
|
80
|
-
end
|
81
|
-
|
82
|
-
describe "for arrays with a length argument" do
|
83
|
-
it "provides a call argument name" do
|
84
|
-
_(array_arg_builder.call_argument_name).must_equal "_v1"
|
85
|
-
end
|
86
|
-
|
87
|
-
it "provides a capture variable name" do
|
88
|
-
_(array_arg_builder.capture_variable_name).must_equal "_v1"
|
89
|
-
end
|
90
|
-
|
91
|
-
it "has the correct value for #pre_conversion" do
|
92
|
-
_(array_arg_builder.pre_conversion)
|
93
|
-
.must_equal ["_v1 = ints",
|
94
|
-
"_v2 = GirFFI::SizedArray.wrap(:gint32, _v3, _v1.get_pointer(0))"]
|
95
|
-
end
|
96
|
-
|
97
|
-
it "has the correct value for #post_conversion" do
|
98
|
-
array_arg_builder.pre_conversion
|
99
|
-
_(array_arg_builder.post_conversion)
|
100
|
-
.must_equal ["_v1.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, _v4)"]
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
describe "for an array length argument" do
|
105
|
-
it "does not provide a call argument name" do
|
106
|
-
_(length_arg_builder.call_argument_name).must_be_nil
|
107
|
-
end
|
108
|
-
|
109
|
-
it "does not provide a capture variable name" do
|
110
|
-
_(length_arg_builder.capture_variable_name).must_be_nil
|
111
|
-
end
|
112
|
-
|
113
|
-
it "has the correct value for #pre_conversion" do
|
114
|
-
_(length_arg_builder.pre_conversion)
|
115
|
-
.must_equal ["_v1 = length",
|
116
|
-
"_v2 = _v1.get_int32(0)"]
|
117
|
-
end
|
118
|
-
|
119
|
-
it "has the correct value for #post_conversion" do
|
120
|
-
length_arg_builder.pre_conversion
|
121
|
-
_(length_arg_builder.post_conversion)
|
122
|
-
.must_equal ["_v1.put_int32 0, _v3.length"]
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
@@ -1,117 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "gir_ffi_test_helper"
|
4
|
-
|
5
|
-
describe GirFFI::Builders::CallbackBuilder do
|
6
|
-
let(:builder) { GirFFI::Builders::CallbackBuilder.new callback_info }
|
7
|
-
|
8
|
-
describe "#mapping_method_definition" do
|
9
|
-
describe "for a callback with arguments and return value" do
|
10
|
-
let(:callback_info) { get_introspection_data "Regress", "TestCallbackFull" }
|
11
|
-
it "returns a valid mapping method" do
|
12
|
-
expected = <<~CODE
|
13
|
-
def self.call_with_argument_mapping(_proc, foo, bar, path)
|
14
|
-
_v1 = foo
|
15
|
-
_v2 = bar
|
16
|
-
_v3 = path.to_utf8
|
17
|
-
_v4 = _proc.call(_v1, _v2, _v3)
|
18
|
-
return _v4
|
19
|
-
end
|
20
|
-
CODE
|
21
|
-
|
22
|
-
_(builder.mapping_method_definition).must_equal expected
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "for a callback with no arguments or return value" do
|
27
|
-
let(:callback_info) { get_introspection_data "Regress", "TestSimpleCallback" }
|
28
|
-
it "returns a valid mapping method" do
|
29
|
-
expected = <<~CODE
|
30
|
-
def self.call_with_argument_mapping(_proc)
|
31
|
-
_proc.call()
|
32
|
-
end
|
33
|
-
CODE
|
34
|
-
|
35
|
-
_(builder.mapping_method_definition).must_equal expected
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "for a callback with a closure argument" do
|
40
|
-
let(:callback_info) { get_introspection_data "Regress", "TestCallbackUserData" }
|
41
|
-
it "returns a valid mapping method" do
|
42
|
-
expected = <<~CODE
|
43
|
-
def self.call_with_argument_mapping(_proc, user_data)
|
44
|
-
_v1 = GirFFI::ArgHelper::OBJECT_STORE.fetch(user_data)
|
45
|
-
_v2 = _proc.call(_v1)
|
46
|
-
return _v2
|
47
|
-
end
|
48
|
-
CODE
|
49
|
-
|
50
|
-
_(builder.mapping_method_definition).must_equal expected
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "for a callback with one out argument" do
|
55
|
-
let(:callback_info) do
|
56
|
-
get_introspection_data("GIMarshallingTests",
|
57
|
-
"CallbackOneOutParameter")
|
58
|
-
end
|
59
|
-
it "returns a valid mapping method" do
|
60
|
-
expected = <<~CODE
|
61
|
-
def self.call_with_argument_mapping(_proc, a)
|
62
|
-
_v1 = a
|
63
|
-
_v2 = _proc.call()
|
64
|
-
_v1.put_float 0, _v2
|
65
|
-
end
|
66
|
-
CODE
|
67
|
-
|
68
|
-
_(builder.mapping_method_definition).must_equal expected
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "for a callback with an inout array argument" do
|
73
|
-
let(:callback_info) do
|
74
|
-
get_introspection_data("Regress",
|
75
|
-
"TestCallbackArrayInOut")
|
76
|
-
end
|
77
|
-
it "returns a valid mapping method" do
|
78
|
-
expected = <<~CODE
|
79
|
-
def self.call_with_argument_mapping(_proc, ints, length)
|
80
|
-
_v1 = length
|
81
|
-
_v2 = _v1.get_int32(0)
|
82
|
-
_v3 = ints
|
83
|
-
_v4 = GirFFI::SizedArray.wrap(:gint32, _v2, _v3.get_pointer(0))
|
84
|
-
_v5 = _proc.call(_v4)
|
85
|
-
_v1.put_int32 0, _v5.length
|
86
|
-
_v3.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, _v5)
|
87
|
-
end
|
88
|
-
CODE
|
89
|
-
|
90
|
-
_(builder.mapping_method_definition).must_equal expected
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe "for a callback with a value in argument" do
|
95
|
-
let(:field_info) do
|
96
|
-
get_field_introspection_data("GObject",
|
97
|
-
"ObjectClass", "get_property")
|
98
|
-
end
|
99
|
-
let(:callback_info) do
|
100
|
-
field_info.field_type.interface
|
101
|
-
end
|
102
|
-
it "returns a valid mapping method" do
|
103
|
-
expected = <<~CODE
|
104
|
-
def self.call_with_argument_mapping(_proc, object, property_id, value, pspec)
|
105
|
-
_v1 = GObject::Object.wrap(object)
|
106
|
-
_v2 = property_id
|
107
|
-
_v3 = GObject::Value.wrap(value)
|
108
|
-
_v4 = GObject::ParamSpec.wrap(pspec)
|
109
|
-
_proc.call(_v1, _v2, _v3, _v4)
|
110
|
-
end
|
111
|
-
CODE
|
112
|
-
|
113
|
-
_(builder.mapping_method_definition).must_equal expected
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "gir_ffi_test_helper"
|
4
|
-
|
5
|
-
describe GirFFI::Builders::CallbackReturnValueBuilder do
|
6
|
-
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
7
|
-
let(:return_value_info) { GirFFI::ReturnValueInfo.new(type_info, ownership_transfer, false) }
|
8
|
-
let(:type_info) { callback_info.return_type }
|
9
|
-
let(:ownership_transfer) { callback_info.caller_owns }
|
10
|
-
let(:builder) do
|
11
|
-
GirFFI::Builders::CallbackReturnValueBuilder.new(var_gen,
|
12
|
-
return_value_info)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "for :gint32" do
|
16
|
-
let(:callback_info) { get_introspection_data("GIMarshallingTests", "CallbackIntInt") }
|
17
|
-
|
18
|
-
it "has no statements in #post_conversion" do
|
19
|
-
_(builder.post_conversion).must_equal []
|
20
|
-
end
|
21
|
-
|
22
|
-
it "returns the result of the callback directly" do
|
23
|
-
_(builder.capture_variable_name).must_equal "_v1"
|
24
|
-
_(builder.return_value_name).must_equal "_v1"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "for :void" do
|
29
|
-
let(:callback_info) do
|
30
|
-
get_introspection_data("GIMarshallingTests",
|
31
|
-
"CallbackMultipleOutParameters")
|
32
|
-
end
|
33
|
-
|
34
|
-
it "has no statements in #post_conversion" do
|
35
|
-
_(builder.post_conversion).must_equal []
|
36
|
-
end
|
37
|
-
|
38
|
-
it "returns nothing" do
|
39
|
-
_(builder.capture_variable_name).must_be_nil
|
40
|
-
_(builder.return_value_name).must_be_nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "for :enum" do
|
45
|
-
let(:callback_info) do
|
46
|
-
get_vfunc_introspection_data("GIMarshallingTests",
|
47
|
-
"Object",
|
48
|
-
"vfunc_return_enum")
|
49
|
-
end
|
50
|
-
|
51
|
-
it "converts the result" do
|
52
|
-
# Ensure variable names are generated in order
|
53
|
-
_(builder.capture_variable_name).must_equal "_v1"
|
54
|
-
_(builder.post_conversion).must_equal ["_v2 = GIMarshallingTests::Enum.to_int(_v1)"]
|
55
|
-
end
|
56
|
-
|
57
|
-
it "returns the result of the conversion" do
|
58
|
-
_(builder.capture_variable_name).must_equal "_v1"
|
59
|
-
_(builder.return_value_name).must_equal "_v2"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "for :object with full transfer" do
|
64
|
-
let(:callback_info) do
|
65
|
-
get_vfunc_introspection_data("GIMarshallingTests",
|
66
|
-
"Object",
|
67
|
-
"vfunc_return_object_transfer_full")
|
68
|
-
end
|
69
|
-
|
70
|
-
it "increases the refcount of the result and converts it to a pointer" do
|
71
|
-
# Ensure variable names are generated in order
|
72
|
-
_(builder.capture_variable_name).must_equal "_v1"
|
73
|
-
_(builder.post_conversion).must_equal ["_v1.ref", "_v2 = GObject::Object.from(_v1).to_ptr"]
|
74
|
-
end
|
75
|
-
|
76
|
-
it "returns the result of the conversion" do
|
77
|
-
_(builder.capture_variable_name).must_equal "_v1"
|
78
|
-
_(builder.return_value_name).must_equal "_v2"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "gir_ffi_test_helper"
|
4
|
-
|
5
|
-
describe GirFFI::Builders::ConstructorBuilder do
|
6
|
-
describe "#method_definition" do
|
7
|
-
let(:builder) { GirFFI::Builders::ConstructorBuilder.new function_info }
|
8
|
-
let(:code) { builder.method_definition }
|
9
|
-
|
10
|
-
describe "for constructors with the default name" do
|
11
|
-
let(:function_info) { get_method_introspection_data "Regress", "TestObj", "new" }
|
12
|
-
it "builds a constructor" do
|
13
|
-
_(code).must_equal <<~CODE
|
14
|
-
def self.new(*args, &block)
|
15
|
-
obj = allocate
|
16
|
-
obj.__send__ :initialize, *args, &block
|
17
|
-
obj
|
18
|
-
end
|
19
|
-
CODE
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "for constructors with a custom name" do
|
24
|
-
let(:function_info) { get_method_introspection_data "Regress", "TestObj", "new_from_file" }
|
25
|
-
it "builds a custom constructor" do
|
26
|
-
_(code).must_equal <<~CODE
|
27
|
-
def self.new_from_file(*args, &block)
|
28
|
-
raise NoMethodError unless self == Regress::TestObj
|
29
|
-
obj = allocate
|
30
|
-
obj.__send__ :initialize_from_file, *args, &block
|
31
|
-
obj
|
32
|
-
end
|
33
|
-
CODE
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "gir_ffi_test_helper"
|
4
|
-
|
5
|
-
describe GirFFI::Builders::EnumBuilder do
|
6
|
-
describe "#build_class" do
|
7
|
-
let(:info) { get_introspection_data "Regress", "TestEnum" }
|
8
|
-
let(:builder) { GirFFI::Builders::EnumBuilder.new info }
|
9
|
-
|
10
|
-
it "makes the created type know its proper name" do
|
11
|
-
enum = builder.build_class
|
12
|
-
_(enum.inspect).must_equal "Regress::TestEnum"
|
13
|
-
end
|
14
|
-
|
15
|
-
it "adds constants for the values" do
|
16
|
-
enum = builder.build_class
|
17
|
-
_(enum::VALUE1).must_equal enum[:value1]
|
18
|
-
_(enum::VALUE2).must_equal enum[:value2]
|
19
|
-
_(enum::VALUE3).must_equal enum[:value3]
|
20
|
-
_(enum::VALUE4).must_equal enum[:value4]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,134 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "gir_ffi_test_helper"
|
4
|
-
|
5
|
-
describe GirFFI::Builders::FieldBuilder do
|
6
|
-
let(:target_class) { "dummy" }
|
7
|
-
let(:instance) { GirFFI::Builders::FieldBuilder.new field_info, target_class }
|
8
|
-
|
9
|
-
describe "for a field of type :gint8 with an offset" do
|
10
|
-
let(:field_info) { get_field_introspection_data "Regress", "TestSimpleBoxedA", "some_int8" }
|
11
|
-
it "creates the right getter method" do
|
12
|
-
expected = <<~CODE
|
13
|
-
def some_int8
|
14
|
-
_v1 = @struct.to_ptr
|
15
|
-
_v2 = _v1.get_int8(#{field_info.offset})
|
16
|
-
_v2
|
17
|
-
end
|
18
|
-
CODE
|
19
|
-
_(instance.getter_def).must_equal expected
|
20
|
-
end
|
21
|
-
|
22
|
-
it "creates the right setter method" do
|
23
|
-
expected = <<~CODE
|
24
|
-
def some_int8= value
|
25
|
-
_v1 = @struct.to_ptr
|
26
|
-
_v2 = value
|
27
|
-
_v1.put_int8 #{field_info.offset}, _v2
|
28
|
-
end
|
29
|
-
CODE
|
30
|
-
_(instance.setter_def).must_equal expected
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe "for a field of type :struct" do
|
35
|
-
let(:field_info) { get_field_introspection_data "Regress", "TestBoxed", "nested_a" }
|
36
|
-
it "creates the right getter method" do
|
37
|
-
expected = <<~CODE
|
38
|
-
def nested_a
|
39
|
-
_v1 = @struct.to_ptr
|
40
|
-
_v2 = Regress::TestSimpleBoxedA.get_value_from_pointer(_v1, #{field_info.offset})
|
41
|
-
_v3 = Regress::TestSimpleBoxedA.wrap(_v2)
|
42
|
-
_v3
|
43
|
-
end
|
44
|
-
CODE
|
45
|
-
_(instance.getter_def).must_equal expected
|
46
|
-
end
|
47
|
-
|
48
|
-
it "creates the right setter method" do
|
49
|
-
expected = <<~CODE
|
50
|
-
def nested_a= value
|
51
|
-
_v1 = @struct.to_ptr
|
52
|
-
_v2 = Regress::TestSimpleBoxedA.copy_from(value)
|
53
|
-
Regress::TestSimpleBoxedA.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
|
54
|
-
end
|
55
|
-
CODE
|
56
|
-
_(instance.setter_def).must_equal expected
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "for a field of type :enum" do
|
61
|
-
let(:field_info) { get_field_introspection_data "Regress", "TestStructA", "some_enum" }
|
62
|
-
it "creates the right getter method" do
|
63
|
-
expected = <<~CODE
|
64
|
-
def some_enum
|
65
|
-
_v1 = @struct.to_ptr
|
66
|
-
_v2 = Regress::TestEnum.get_value_from_pointer(_v1, #{field_info.offset})
|
67
|
-
_v2
|
68
|
-
end
|
69
|
-
CODE
|
70
|
-
_(instance.getter_def).must_equal expected
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe "for an inline fixed-size array field" do
|
75
|
-
let(:field_info) { get_field_introspection_data "Regress", "TestStructE", "some_union" }
|
76
|
-
it "creates the right getter method" do
|
77
|
-
expected = <<~CODE
|
78
|
-
def some_union
|
79
|
-
_v1 = @struct.to_ptr
|
80
|
-
_v2 = GirFFI::SizedArray.get_value_from_pointer(_v1, #{field_info.offset})
|
81
|
-
_v3 = GirFFI::SizedArray.wrap(Regress::TestStructE__some_union__union, 2, _v2)
|
82
|
-
_v3
|
83
|
-
end
|
84
|
-
CODE
|
85
|
-
_(instance.getter_def).must_equal expected
|
86
|
-
end
|
87
|
-
|
88
|
-
it "creates the right setter method" do
|
89
|
-
expected = <<~CODE
|
90
|
-
def some_union= value
|
91
|
-
_v1 = @struct.to_ptr
|
92
|
-
GirFFI::ArgHelper.check_fixed_array_size 2, value, \"value\"
|
93
|
-
_v2 = GirFFI::SizedArray.copy_from(Regress::TestStructE__some_union__union, 2, value)
|
94
|
-
GirFFI::SizedArray.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
|
95
|
-
end
|
96
|
-
CODE
|
97
|
-
_(instance.setter_def).must_equal expected
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
describe "for a field of type :callback" do
|
102
|
-
let(:field_info) { get_field_introspection_data "GObject", "TypeInfo", "class_init" }
|
103
|
-
it "creates the right setter method" do
|
104
|
-
expected = <<~CODE
|
105
|
-
def class_init= value
|
106
|
-
_v1 = @struct.to_ptr
|
107
|
-
_v2 = GObject::ClassInitFunc.from(value)
|
108
|
-
GObject::ClassInitFunc.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
|
109
|
-
end
|
110
|
-
CODE
|
111
|
-
_(instance.setter_def).must_equal expected
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe "for a field with a related array length field" do
|
116
|
-
let(:field_info) { get_field_introspection_data "GObject", "SignalQuery", "param_types" }
|
117
|
-
let(:n_params_field_info) { get_field_introspection_data "GObject", "SignalQuery", "n_params" }
|
118
|
-
|
119
|
-
it "creates the right getter method" do
|
120
|
-
skip if field_info.field_type.array_length < 0
|
121
|
-
expected = <<~CODE
|
122
|
-
def param_types
|
123
|
-
_v1 = @struct.to_ptr
|
124
|
-
_v2 = _v1.get_uint32(#{n_params_field_info.offset})
|
125
|
-
_v3 = @struct.to_ptr
|
126
|
-
_v4 = _v3.get_pointer(#{field_info.offset})
|
127
|
-
_v5 = GirFFI::SizedArray.wrap(:GType, _v2, _v4)
|
128
|
-
_v5
|
129
|
-
end
|
130
|
-
CODE
|
131
|
-
_(instance.getter_def).must_equal expected
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|