gir_ffi 0.13.0 → 0.13.1
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 +10 -0
- data/lib/ffi-glib/array.rb +2 -2
- data/lib/ffi-glib/array_methods.rb +1 -0
- data/lib/ffi-glib/list_methods.rb +3 -2
- data/lib/ffi-glib/main_loop.rb +2 -0
- data/lib/ffi-glib/ptr_array.rb +2 -2
- data/lib/ffi-gobject.rb +3 -11
- data/lib/ffi-gobject/closure.rb +1 -0
- data/lib/ffi-gobject/object.rb +30 -16
- data/lib/ffi-gobject/object_class.rb +2 -2
- data/lib/ffi-gobject/ruby_closure.rb +2 -2
- data/lib/ffi-gobject/value.rb +2 -1
- data/lib/ffi-gobject_introspection/i_arg_info.rb +11 -11
- data/lib/ffi-gobject_introspection/i_base_info.rb +12 -10
- data/lib/ffi-gobject_introspection/i_callable_info.rb +8 -8
- data/lib/ffi-gobject_introspection/i_enum_info.rb +5 -5
- data/lib/ffi-gobject_introspection/i_field_info.rb +4 -4
- data/lib/ffi-gobject_introspection/i_function_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_interface_info.rb +15 -15
- data/lib/ffi-gobject_introspection/i_object_info.rb +22 -22
- data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +3 -3
- data/lib/ffi-gobject_introspection/i_repository.rb +16 -10
- data/lib/ffi-gobject_introspection/i_struct_info.rb +11 -7
- data/lib/ffi-gobject_introspection/i_type_info.rb +8 -8
- data/lib/ffi-gobject_introspection/i_union_info.rb +7 -7
- data/lib/ffi-gobject_introspection/i_value_info.rb +1 -1
- data/lib/ffi-gobject_introspection/strv.rb +1 -0
- data/lib/gir_ffi-base/gobject.rb +5 -0
- data/lib/gir_ffi-base/gobject/lib.rb +4 -0
- data/lib/gir_ffi/boolean.rb +2 -2
- data/lib/gir_ffi/builders/argument_builder.rb +41 -14
- data/lib/gir_ffi/builders/argument_builder_collection.rb +17 -4
- data/lib/gir_ffi/builders/base_argument_builder.rb +12 -16
- data/lib/gir_ffi/builders/callback_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/callback_builder.rb +1 -1
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +2 -9
- data/lib/gir_ffi/builders/field_builder.rb +11 -9
- data/lib/gir_ffi/builders/module_builder.rb +2 -1
- data/lib/gir_ffi/builders/object_builder.rb +21 -12
- data/lib/gir_ffi/builders/pointer_value_convertor.rb +8 -6
- data/lib/gir_ffi/builders/property_builder.rb +4 -2
- data/lib/gir_ffi/builders/registered_type_builder.rb +30 -19
- data/lib/gir_ffi/builders/return_value_builder.rb +2 -2
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +2 -0
- data/lib/gir_ffi/builders/signal_closure_builder.rb +1 -1
- data/lib/gir_ffi/builders/struct_builder.rb +7 -8
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +4 -1
- data/lib/gir_ffi/builders/user_defined_builder.rb +31 -95
- data/lib/gir_ffi/builders/vfunc_builder.rb +1 -1
- data/lib/gir_ffi/builders/with_layout.rb +3 -1
- data/lib/gir_ffi/callback_base.rb +3 -2
- data/lib/gir_ffi/class_base.rb +5 -0
- data/lib/gir_ffi/enum_like_base.rb +9 -5
- data/lib/gir_ffi/error_argument_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -4
- data/lib/gir_ffi/field_argument_info.rb +1 -1
- data/lib/gir_ffi/in_pointer.rb +36 -23
- data/lib/gir_ffi/info_ext/i_arg_info.rb +2 -0
- data/lib/gir_ffi/info_ext/i_callback_info.rb +4 -0
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -0
- data/lib/gir_ffi/info_ext/i_type_info.rb +3 -27
- data/lib/gir_ffi/info_ext/safe_function_name.rb +1 -0
- data/lib/gir_ffi/interface_base.rb +5 -0
- data/lib/gir_ffi/module_base.rb +1 -0
- data/lib/gir_ffi/object_base.rb +10 -0
- data/lib/gir_ffi/object_store.rb +2 -0
- data/lib/gir_ffi/receiver_argument_info.rb +1 -1
- data/lib/gir_ffi/return_value_info.rb +1 -1
- data/lib/gir_ffi/sized_array.rb +7 -14
- data/lib/gir_ffi/struct_like_base.rb +3 -0
- data/lib/gir_ffi/type_map.rb +21 -0
- data/lib/gir_ffi/user_defined_object_info.rb +6 -2
- data/lib/gir_ffi/user_defined_property_info.rb +113 -71
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +26 -1
- data/tasks/test.rake +1 -0
- data/test/ffi-gobject_introspection/i_repository_test.rb +1 -2
- data/test/gir_ffi/builder_test.rb +13 -7
- data/test/gir_ffi/builders/argument_builder_test.rb +1 -5
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +1 -1
- data/test/gir_ffi/builders/field_builder_test.rb +20 -20
- data/test/gir_ffi/builders/return_value_builder_test.rb +1 -1
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +1 -1
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +1 -1
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +2 -2
- data/test/gir_ffi/builders/vfunc_builder_test.rb +1 -1
- data/test/gir_ffi/enum_base_test.rb +43 -0
- data/test/gir_ffi/info_ext/i_type_info_test.rb +3 -9
- data/test/gir_ffi/object_base_test.rb +30 -0
- data/test/gir_ffi/sized_array_test.rb +0 -9
- data/test/gir_ffi/user_defined_object_info_test.rb +4 -6
- data/test/gir_ffi/user_defined_property_info_test.rb +6 -5
- data/test/gir_ffi/zero_terminated_test.rb +22 -0
- data/test/gir_ffi_test_helper.rb +2 -0
- data/test/integration/generated_gimarshallingtests_test.rb +1 -0
- data/test/integration/generated_gio_test.rb +5 -6
- data/test/integration/generated_gobject_test.rb +1 -1
- data/test/integration/generated_gtop_test.rb +3 -1
- data/test/integration/generated_regress_test.rb +3 -4
- metadata +3 -2
@@ -39,12 +39,14 @@ module GirFFI
|
|
39
39
|
# Create an unowned copy of the struct represented by val
|
40
40
|
def copy_from(val)
|
41
41
|
return unless val
|
42
|
+
|
42
43
|
disown copy from(val)
|
43
44
|
end
|
44
45
|
|
45
46
|
# Wrap an owned copy of the struct represented by val
|
46
47
|
def wrap_copy(val)
|
47
48
|
return unless val
|
49
|
+
|
48
50
|
own copy(val)
|
49
51
|
end
|
50
52
|
|
@@ -52,6 +54,7 @@ module GirFFI
|
|
52
54
|
def wrap_own(val)
|
53
55
|
return unless val
|
54
56
|
return if val.null?
|
57
|
+
|
55
58
|
own wrap(val)
|
56
59
|
end
|
57
60
|
|
data/lib/gir_ffi/type_map.rb
CHANGED
@@ -58,5 +58,26 @@ module GirFFI
|
|
58
58
|
map_basic_type(type)
|
59
59
|
end
|
60
60
|
end
|
61
|
+
|
62
|
+
FLATTENED_TAG_TO_GTYPE_MAP = {
|
63
|
+
[:array, true] => GObject::TYPE_ARRAY,
|
64
|
+
[:c, true] => GObject::TYPE_POINTER,
|
65
|
+
[:gboolean, false] => GObject::TYPE_BOOLEAN,
|
66
|
+
[:ghash, true] => GObject::TYPE_HASH_TABLE,
|
67
|
+
[:glist, true] => GObject::TYPE_POINTER,
|
68
|
+
[:gint32, false] => GObject::TYPE_INT,
|
69
|
+
[:gint64, false] => GObject::TYPE_INT64,
|
70
|
+
[:guint64, false] => GObject::TYPE_UINT64,
|
71
|
+
[:strv, true] => GObject::TYPE_STRV,
|
72
|
+
[:utf8, true] => GObject::TYPE_STRING,
|
73
|
+
[:void, true] => GObject::TYPE_POINTER,
|
74
|
+
[:void, false] => GObject::TYPE_NONE
|
75
|
+
}.freeze
|
76
|
+
|
77
|
+
def self.type_info_to_gtype(type_info)
|
78
|
+
return type_info.interface.gtype if type_info.tag == :interface
|
79
|
+
|
80
|
+
FLATTENED_TAG_TO_GTYPE_MAP.fetch [type_info.flattened_tag, type_info.pointer?]
|
81
|
+
end
|
61
82
|
end
|
62
83
|
end
|
@@ -20,8 +20,8 @@ module GirFFI
|
|
20
20
|
@klass
|
21
21
|
end
|
22
22
|
|
23
|
-
def install_property(
|
24
|
-
@properties <<
|
23
|
+
def install_property(param_spec)
|
24
|
+
@properties << param_spec
|
25
25
|
end
|
26
26
|
|
27
27
|
def install_vfunc_implementation(name, implementation = nil)
|
@@ -58,6 +58,10 @@ module GirFFI
|
|
58
58
|
nil
|
59
59
|
end
|
60
60
|
|
61
|
+
def abstract?
|
62
|
+
false
|
63
|
+
end
|
64
|
+
|
61
65
|
attr_writer :g_name
|
62
66
|
|
63
67
|
def g_name
|
@@ -1,95 +1,137 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module GirFFI
|
4
|
-
# Represents a property of a user defined type.
|
4
|
+
# Represents a property of a user defined type. Wraps a GParamSpec with
|
5
|
+
# useful helper methods for building property accessors etc.
|
5
6
|
class UserDefinedPropertyInfo
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
# Type info for user-defined property
|
8
|
+
class UserDefinedTypeInfo
|
9
|
+
include InfoExt::ITypeInfo
|
9
10
|
|
10
|
-
|
11
|
+
def initialize(param_spec)
|
12
|
+
@param_spec = param_spec
|
13
|
+
end
|
11
14
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
+
# TODO: Unify with InfoExt::ITypeInfo.flattened_tag_to_gtype_map
|
16
|
+
G_TYPE_TAG_MAP = {
|
17
|
+
GObject::TYPE_BOOLEAN => :gboolean,
|
18
|
+
GObject::TYPE_CHAR => :gint8,
|
19
|
+
GObject::TYPE_UCHAR => :guint8,
|
20
|
+
GObject::TYPE_FLOAT => :gfloat,
|
21
|
+
GObject::TYPE_DOUBLE => :gdouble,
|
22
|
+
GObject::TYPE_INT => :gint,
|
23
|
+
GObject::TYPE_UINT => :guint,
|
24
|
+
GObject::TYPE_LONG => :glong,
|
25
|
+
GObject::TYPE_ULONG => :gulong,
|
26
|
+
GObject::TYPE_INT64 => :gint64,
|
27
|
+
GObject::TYPE_UINT64 => :guint64,
|
28
|
+
GObject::TYPE_ENUM => :interface,
|
29
|
+
GObject::TYPE_FLAGS => :interface,
|
30
|
+
GObject::TYPE_STRING => :utf8,
|
31
|
+
GObject::TYPE_BOXED => :interface,
|
32
|
+
GObject::TYPE_OBJECT => :interface
|
33
|
+
}.freeze
|
15
34
|
|
16
|
-
|
17
|
-
|
18
|
-
|
35
|
+
def tag
|
36
|
+
@tag ||= G_TYPE_TAG_MAP.fetch(fundamental_value_type)
|
37
|
+
end
|
19
38
|
|
20
|
-
|
21
|
-
|
22
|
-
|
39
|
+
# TODO: Unify with InfoExt::ITypeInfo.flattened_tag_to_gtype_map
|
40
|
+
G_TYPE_POINTER_MAP = {
|
41
|
+
GObject::TYPE_BOOLEAN => false,
|
42
|
+
GObject::TYPE_CHAR => false,
|
43
|
+
GObject::TYPE_UCHAR => false,
|
44
|
+
GObject::TYPE_FLOAT => false,
|
45
|
+
GObject::TYPE_DOUBLE => false,
|
46
|
+
GObject::TYPE_INT => false,
|
47
|
+
GObject::TYPE_UINT => false,
|
48
|
+
GObject::TYPE_LONG => false,
|
49
|
+
GObject::TYPE_ULONG => false,
|
50
|
+
GObject::TYPE_INT64 => false,
|
51
|
+
GObject::TYPE_UINT64 => false,
|
52
|
+
GObject::TYPE_ENUM => false,
|
53
|
+
GObject::TYPE_FLAGS => false,
|
54
|
+
GObject::TYPE_STRING => true,
|
55
|
+
GObject::TYPE_BOXED => true,
|
56
|
+
GObject::TYPE_OBJECT => true
|
57
|
+
}.freeze
|
58
|
+
|
59
|
+
def pointer?
|
60
|
+
G_TYPE_POINTER_MAP.fetch(fundamental_value_type)
|
61
|
+
end
|
62
|
+
|
63
|
+
G_TYPE_INTERFACE_TAG_MAP = {
|
64
|
+
GObject::TYPE_ENUM => :enum,
|
65
|
+
GObject::TYPE_FLAGS => :flags,
|
66
|
+
GObject::TYPE_BOXED => :struct,
|
67
|
+
GObject::TYPE_OBJECT => :object
|
68
|
+
}.freeze
|
69
|
+
|
70
|
+
def interface_type
|
71
|
+
G_TYPE_INTERFACE_TAG_MAP.fetch(fundamental_value_type) if interface?
|
72
|
+
end
|
73
|
+
|
74
|
+
def hidden_struct_type?
|
75
|
+
false
|
76
|
+
end
|
77
|
+
|
78
|
+
def interface_class
|
79
|
+
@interface_class ||= Builder.build_by_gtype @param_spec.value_type if interface?
|
80
|
+
end
|
23
81
|
|
24
|
-
|
25
|
-
|
82
|
+
def interface_class_name
|
83
|
+
interface_class.name if interface?
|
84
|
+
end
|
85
|
+
|
86
|
+
def ffi_type
|
87
|
+
GirFFI::TypeMap.map_basic_type(tag)
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def value_type
|
93
|
+
@param_spec.value_type
|
94
|
+
end
|
95
|
+
|
96
|
+
def fundamental_value_type
|
97
|
+
@fundamental_value_type ||= GObject.type_fundamental value_type
|
98
|
+
end
|
99
|
+
|
100
|
+
def interface?
|
101
|
+
tag == :interface
|
102
|
+
end
|
26
103
|
end
|
27
104
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
GObject::TYPE_UCHAR => false,
|
33
|
-
GObject::TYPE_FLOAT => false,
|
34
|
-
GObject::TYPE_DOUBLE => false,
|
35
|
-
GObject::TYPE_INT => false,
|
36
|
-
GObject::TYPE_UINT => false,
|
37
|
-
GObject::TYPE_LONG => false,
|
38
|
-
GObject::TYPE_ULONG => false,
|
39
|
-
GObject::TYPE_INT64 => false,
|
40
|
-
GObject::TYPE_UINT64 => false,
|
41
|
-
GObject::TYPE_ENUM => false,
|
42
|
-
GObject::TYPE_FLAGS => false,
|
43
|
-
GObject::TYPE_STRING => true,
|
44
|
-
GObject::TYPE_BOXED => true,
|
45
|
-
GObject::TYPE_OBJECT => true
|
46
|
-
}.freeze
|
47
|
-
|
48
|
-
def pointer_type?
|
49
|
-
G_TYPE_POINTER_MAP.fetch(fundamental_value_type)
|
105
|
+
def initialize(param_spec, container, offset)
|
106
|
+
@param_spec = param_spec
|
107
|
+
@container = container
|
108
|
+
@offset = offset
|
50
109
|
end
|
51
110
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
GObject::TYPE_UCHAR => :guint8,
|
57
|
-
GObject::TYPE_FLOAT => :gfloat,
|
58
|
-
GObject::TYPE_DOUBLE => :gdouble,
|
59
|
-
GObject::TYPE_INT => :gint,
|
60
|
-
GObject::TYPE_UINT => :guint,
|
61
|
-
GObject::TYPE_LONG => :glong,
|
62
|
-
GObject::TYPE_ULONG => :gulong,
|
63
|
-
GObject::TYPE_INT64 => :gint64,
|
64
|
-
GObject::TYPE_UINT64 => :guint64,
|
65
|
-
GObject::TYPE_ENUM => :interface,
|
66
|
-
GObject::TYPE_FLAGS => :interface,
|
67
|
-
GObject::TYPE_STRING => :utf8,
|
68
|
-
GObject::TYPE_BOXED => :interface,
|
69
|
-
GObject::TYPE_OBJECT => :interface
|
70
|
-
}.freeze
|
71
|
-
|
72
|
-
def type_tag
|
73
|
-
G_TYPE_TAG_MAP.fetch(fundamental_value_type)
|
111
|
+
attr_reader :container, :offset, :param_spec
|
112
|
+
|
113
|
+
def name
|
114
|
+
@param_spec.accessor_name
|
74
115
|
end
|
75
116
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
GObject::TYPE_BOXED => :struct,
|
80
|
-
GObject::TYPE_OBJECT => :object
|
81
|
-
}.freeze
|
117
|
+
def field_type
|
118
|
+
@field_type ||= UserDefinedTypeInfo.new @param_spec
|
119
|
+
end
|
82
120
|
|
83
|
-
def
|
84
|
-
|
121
|
+
def related_array_length_field
|
122
|
+
nil
|
85
123
|
end
|
86
124
|
|
87
|
-
def
|
88
|
-
|
125
|
+
def writable?
|
126
|
+
param_spec.flags[:writable]
|
89
127
|
end
|
90
128
|
|
91
129
|
def ffi_type
|
92
|
-
|
130
|
+
field_type.ffi_type
|
131
|
+
end
|
132
|
+
|
133
|
+
def field_symbol
|
134
|
+
name.to_sym
|
93
135
|
end
|
94
136
|
end
|
95
137
|
end
|
data/lib/gir_ffi/version.rb
CHANGED
@@ -26,6 +26,7 @@ module GirFFI
|
|
26
26
|
|
27
27
|
def each
|
28
28
|
return if @ptr.null?
|
29
|
+
|
29
30
|
offset = 0
|
30
31
|
while (val = read_value(offset))
|
31
32
|
offset += ffi_type_size
|
@@ -41,7 +42,7 @@ module GirFFI
|
|
41
42
|
|
42
43
|
def read_value(offset)
|
43
44
|
val = fetch_value(offset)
|
44
|
-
val unless val
|
45
|
+
val unless null_value? val
|
45
46
|
end
|
46
47
|
|
47
48
|
def getter_method
|
@@ -77,5 +78,29 @@ module GirFFI
|
|
77
78
|
def ffi_type_size
|
78
79
|
@ffi_type_size ||= FFI.type_size(ffi_type)
|
79
80
|
end
|
81
|
+
|
82
|
+
def null_check_strategy
|
83
|
+
@null_check_strategy ||=
|
84
|
+
if ffi_type == :pointer
|
85
|
+
:pointer
|
86
|
+
elsif ffi_type.is_a? Symbol
|
87
|
+
:numeric
|
88
|
+
elsif ffi_type < GirFFI::ClassBase
|
89
|
+
:pointer
|
90
|
+
elsif ffi_type.singleton_class.include? GirFFI::EnumBase
|
91
|
+
:enum
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def null_value?(val)
|
96
|
+
case null_check_strategy
|
97
|
+
when :pointer
|
98
|
+
val.null?
|
99
|
+
when :enum
|
100
|
+
ffi_type.to_native(val, nil) == 0
|
101
|
+
else
|
102
|
+
val == 0
|
103
|
+
end
|
104
|
+
end
|
80
105
|
end
|
81
106
|
end
|
data/tasks/test.rake
CHANGED
@@ -69,14 +69,13 @@ describe GObjectIntrospection::IRepository do
|
|
69
69
|
|
70
70
|
it 'passes its struct pointer to the c function just in case' do
|
71
71
|
gir.require 'GObject', '2.0'
|
72
|
-
ptr = gir.instance_variable_get(:@gobj)
|
73
72
|
allow(GObjectIntrospection::Lib).to receive(:g_irepository_get_dependencies).
|
74
73
|
and_call_original
|
75
74
|
|
76
75
|
gir.dependencies('GObject')
|
77
76
|
|
78
77
|
expect(GObjectIntrospection::Lib).to have_received(:g_irepository_get_dependencies).
|
79
|
-
with(
|
78
|
+
with(gir, 'GObject')
|
80
79
|
end
|
81
80
|
end
|
82
81
|
end
|
@@ -87,7 +87,7 @@ describe GirFFI::Builder do
|
|
87
87
|
|
88
88
|
found_klass = GirFFI::Builder.build_by_gtype gtype
|
89
89
|
found_klass.name.must_be_nil
|
90
|
-
found_klass.
|
90
|
+
found_klass.superclass.must_equal GirFFI::BoxedBase
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
@@ -136,6 +136,14 @@ describe GirFFI::Builder do
|
|
136
136
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
137
137
|
end
|
138
138
|
|
139
|
+
it 'calls attach_function with the correct types for Regress.test_enum_param' do
|
140
|
+
info = get_introspection_data 'Regress', 'test_enum_param'
|
141
|
+
expect(lib).to receive(:attach_function).
|
142
|
+
with('regress_test_enum_param', [Regress::TestEnum], :pointer).
|
143
|
+
and_return true
|
144
|
+
GirFFI::Builder.attach_ffi_function(lib, info)
|
145
|
+
end
|
146
|
+
|
139
147
|
it 'does not attach the function if it is already defined' do
|
140
148
|
info = get_introspection_data 'Regress', 'test_array_gint32_in'
|
141
149
|
allow(lib).to receive(:method_defined?).and_return true
|
@@ -275,12 +283,10 @@ describe GirFFI::Builder do
|
|
275
283
|
end
|
276
284
|
|
277
285
|
it 'sets up the inheritance chain' do
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
GObject::Object
|
283
|
-
], ancestors[0..2]
|
286
|
+
Regress::TestSubObj.registered_ancestors.
|
287
|
+
must_equal [Regress::TestSubObj,
|
288
|
+
Regress::TestObj,
|
289
|
+
GObject::Object]
|
284
290
|
end
|
285
291
|
|
286
292
|
it 'creates a Regress::TestSubObj#to_ptr method' do
|
@@ -57,10 +57,6 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
57
57
|
let(:arg_info) { get_introspection_data('Regress', 'test_callback_user_data').args[1] }
|
58
58
|
|
59
59
|
describe 'when it is a regular argument' do
|
60
|
-
before do
|
61
|
-
builder.closure = false
|
62
|
-
end
|
63
|
-
|
64
60
|
it 'has the correct value for method_argument_name' do
|
65
61
|
builder.method_argument_name.must_equal arg_info.name
|
66
62
|
end
|
@@ -78,7 +74,7 @@ describe GirFFI::Builders::ArgumentBuilder do
|
|
78
74
|
before do
|
79
75
|
callback = Object.new
|
80
76
|
allow(callback).to receive(:call_argument_name).and_return 'foo'
|
81
|
-
builder.
|
77
|
+
builder.mark_as_user_data callback
|
82
78
|
end
|
83
79
|
|
84
80
|
it 'has the correct value for method_argument_name' do
|
@@ -55,7 +55,7 @@ describe GirFFI::Builders::CallbackReturnValueBuilder do
|
|
55
55
|
it 'converts the result' do
|
56
56
|
# Ensure variable names are generated in order
|
57
57
|
builder.capture_variable_name.must_equal '_v1'
|
58
|
-
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Enum.
|
58
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Enum.to_int(_v1)']
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'returns the result of the conversion' do
|
@@ -11,8 +11,8 @@ describe GirFFI::Builders::FieldBuilder do
|
|
11
11
|
it 'creates the right getter method' do
|
12
12
|
expected = <<-CODE.reset_indentation
|
13
13
|
def some_int8
|
14
|
-
_v1 = @struct.to_ptr
|
15
|
-
_v2 = _v1.get_int8(
|
14
|
+
_v1 = @struct.to_ptr
|
15
|
+
_v2 = _v1.get_int8(#{field_info.offset})
|
16
16
|
_v2
|
17
17
|
end
|
18
18
|
CODE
|
@@ -22,9 +22,9 @@ describe GirFFI::Builders::FieldBuilder do
|
|
22
22
|
it 'creates the right setter method' do
|
23
23
|
expected = <<-CODE.reset_indentation
|
24
24
|
def some_int8= value
|
25
|
-
_v1 = @struct.to_ptr
|
25
|
+
_v1 = @struct.to_ptr
|
26
26
|
_v2 = value
|
27
|
-
_v1.put_int8
|
27
|
+
_v1.put_int8 #{field_info.offset}, _v2
|
28
28
|
end
|
29
29
|
CODE
|
30
30
|
instance.setter_def.must_equal expected
|
@@ -36,8 +36,8 @@ describe GirFFI::Builders::FieldBuilder do
|
|
36
36
|
it 'creates the right getter method' do
|
37
37
|
expected = <<-CODE.reset_indentation
|
38
38
|
def nested_a
|
39
|
-
_v1 = @struct.to_ptr
|
40
|
-
_v2 = Regress::TestSimpleBoxedA.get_value_from_pointer(_v1,
|
39
|
+
_v1 = @struct.to_ptr
|
40
|
+
_v2 = Regress::TestSimpleBoxedA.get_value_from_pointer(_v1, #{field_info.offset})
|
41
41
|
_v3 = Regress::TestSimpleBoxedA.wrap(_v2)
|
42
42
|
_v3
|
43
43
|
end
|
@@ -48,9 +48,9 @@ describe GirFFI::Builders::FieldBuilder do
|
|
48
48
|
it 'creates the right setter method' do
|
49
49
|
expected = <<-CODE.reset_indentation
|
50
50
|
def nested_a= value
|
51
|
-
_v1 = @struct.to_ptr
|
51
|
+
_v1 = @struct.to_ptr
|
52
52
|
_v2 = Regress::TestSimpleBoxedA.copy_from(value)
|
53
|
-
Regress::TestSimpleBoxedA.copy_value_to_pointer(_v2, _v1)
|
53
|
+
Regress::TestSimpleBoxedA.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
|
54
54
|
end
|
55
55
|
CODE
|
56
56
|
instance.setter_def.must_equal expected
|
@@ -62,8 +62,8 @@ describe GirFFI::Builders::FieldBuilder do
|
|
62
62
|
it 'creates the right getter method' do
|
63
63
|
expected = <<-CODE.reset_indentation
|
64
64
|
def some_enum
|
65
|
-
_v1 = @struct.to_ptr
|
66
|
-
_v2 = Regress::TestEnum.get_value_from_pointer(_v1,
|
65
|
+
_v1 = @struct.to_ptr
|
66
|
+
_v2 = Regress::TestEnum.get_value_from_pointer(_v1, #{field_info.offset})
|
67
67
|
_v2
|
68
68
|
end
|
69
69
|
CODE
|
@@ -76,8 +76,8 @@ describe GirFFI::Builders::FieldBuilder do
|
|
76
76
|
it 'creates the right getter method' do
|
77
77
|
expected = <<-CODE.reset_indentation
|
78
78
|
def some_union
|
79
|
-
_v1 = @struct.to_ptr
|
80
|
-
_v2 = GirFFI::SizedArray.get_value_from_pointer(_v1,
|
79
|
+
_v1 = @struct.to_ptr
|
80
|
+
_v2 = GirFFI::SizedArray.get_value_from_pointer(_v1, #{field_info.offset})
|
81
81
|
_v3 = GirFFI::SizedArray.wrap(Regress::TestStructE__some_union__union, 2, _v2)
|
82
82
|
_v3
|
83
83
|
end
|
@@ -88,10 +88,10 @@ describe GirFFI::Builders::FieldBuilder do
|
|
88
88
|
it 'creates the right setter method' do
|
89
89
|
expected = <<-CODE.reset_indentation
|
90
90
|
def some_union= value
|
91
|
-
_v1 = @struct.to_ptr
|
91
|
+
_v1 = @struct.to_ptr
|
92
92
|
GirFFI::ArgHelper.check_fixed_array_size 2, value, \"value\"
|
93
93
|
_v2 = GirFFI::SizedArray.copy_from(Regress::TestStructE__some_union__union, 2, value)
|
94
|
-
GirFFI::SizedArray.copy_value_to_pointer(_v2, _v1)
|
94
|
+
GirFFI::SizedArray.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
|
95
95
|
end
|
96
96
|
CODE
|
97
97
|
instance.setter_def.must_equal expected
|
@@ -103,9 +103,9 @@ describe GirFFI::Builders::FieldBuilder do
|
|
103
103
|
it 'creates the right setter method' do
|
104
104
|
expected = <<-CODE.reset_indentation
|
105
105
|
def class_init= value
|
106
|
-
_v1 = @struct.to_ptr
|
106
|
+
_v1 = @struct.to_ptr
|
107
107
|
_v2 = GObject::ClassInitFunc.from(value)
|
108
|
-
GObject::ClassInitFunc.copy_value_to_pointer(_v2, _v1)
|
108
|
+
GObject::ClassInitFunc.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
|
109
109
|
end
|
110
110
|
CODE
|
111
111
|
instance.setter_def.must_equal expected
|
@@ -120,10 +120,10 @@ describe GirFFI::Builders::FieldBuilder do
|
|
120
120
|
skip if field_info.field_type.array_length < 0
|
121
121
|
expected = <<-CODE.reset_indentation
|
122
122
|
def param_types
|
123
|
-
_v1 = @struct.to_ptr
|
124
|
-
_v2 = _v1.get_uint32(
|
125
|
-
_v3 = @struct.to_ptr
|
126
|
-
_v4 = _v3.get_pointer(
|
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
127
|
_v5 = GirFFI::SizedArray.wrap(:GType, _v2, _v4)
|
128
128
|
_v5
|
129
129
|
end
|