gir_ffi 0.10.2 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +13 -0
- data/Gemfile +9 -4
- data/README.md +3 -2
- data/Rakefile +2 -1
- data/lib/ffi-glib/byte_array.rb +1 -1
- data/lib/ffi-glib/main_loop.rb +2 -1
- data/lib/ffi-glib/strv.rb +5 -2
- data/lib/ffi-glib/variant.rb +3 -5
- data/lib/ffi-glib.rb +4 -0
- data/lib/ffi-gobject/closure.rb +8 -10
- data/lib/ffi-gobject/object.rb +9 -6
- data/lib/ffi-gobject/param_spec.rb +4 -0
- data/lib/ffi-gobject/value.rb +13 -16
- data/lib/ffi-gobject_introspection/gobject_type_init.rb +18 -0
- data/lib/ffi-gobject_introspection/i_callable_info.rb +1 -5
- data/lib/ffi-gobject_introspection/i_constant_info.rb +3 -3
- data/lib/ffi-gobject_introspection/i_repository.rb +3 -47
- data/lib/ffi-gobject_introspection/i_vfunc_info.rb +3 -11
- data/lib/ffi-gobject_introspection/lib.rb +8 -31
- data/lib/{gir_ffi-base/glib → ffi-gobject_introspection}/strv.rb +9 -13
- data/lib/ffi-gobject_introspection.rb +47 -2
- data/lib/gir_ffi/allocation_helper.rb +1 -19
- data/lib/gir_ffi/arg_helper.rb +36 -26
- data/lib/{gir_ffi-base/glib → gir_ffi}/boolean.rb +7 -5
- data/lib/gir_ffi/boxed_base.rb +5 -23
- data/lib/gir_ffi/builder.rb +3 -3
- data/lib/gir_ffi/builders/argument_builder.rb +7 -8
- data/lib/gir_ffi/builders/base_argument_builder.rb +0 -1
- data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +21 -13
- data/lib/gir_ffi/builders/field_builder.rb +4 -10
- data/lib/gir_ffi/builders/module_builder.rb +6 -4
- data/lib/gir_ffi/builders/object_builder.rb +16 -16
- data/lib/gir_ffi/builders/struct_builder.rb +4 -6
- data/lib/gir_ffi/builders/struct_like.rb +1 -1
- data/lib/gir_ffi/builders/user_defined_builder.rb +83 -23
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +12 -17
- data/lib/gir_ffi/class_base.rb +0 -4
- data/lib/gir_ffi/core.rb +16 -13
- data/lib/gir_ffi/enum_base.rb +2 -41
- data/lib/gir_ffi/enum_like_base.rb +48 -0
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
- data/lib/gir_ffi/flags_base.rb +2 -41
- data/lib/gir_ffi/in_out_pointer.rb +1 -1
- data/lib/gir_ffi/in_pointer.rb +4 -4
- data/lib/gir_ffi/info_ext/i_type_info.rb +14 -5
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +8 -0
- data/lib/gir_ffi/module_base.rb +4 -0
- data/lib/gir_ffi/receiver_argument_info.rb +1 -1
- data/lib/gir_ffi/sized_array.rb +6 -6
- data/lib/gir_ffi/struct_base.rb +1 -6
- data/lib/gir_ffi/struct_like_base.rb +54 -45
- data/lib/gir_ffi/type_map.rb +6 -7
- data/lib/gir_ffi/union_base.rb +1 -1
- data/lib/gir_ffi/{user_defined_type_info.rb → user_defined_object_info.rb} +1 -2
- data/lib/gir_ffi/user_defined_property_info.rb +80 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +0 -1
- data/lib/gir_ffi-base/gobject.rb +3 -5
- data/lib/gir_ffi-base.rb +3 -8
- data/tasks/test.rake +17 -3
- data/test/base_test_helper.rb +39 -23
- data/test/ffi-glib/closure_test.rb +37 -0
- data/test/ffi-glib/main_loop_test.rb +24 -0
- data/test/ffi-glib/ruby_closure_test.rb +0 -5
- data/test/ffi-gobject/object_test.rb +6 -10
- data/test/ffi-gobject/param_spec_test.rb +17 -5
- data/test/ffi-gobject/value_test.rb +15 -6
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +25 -0
- data/test/ffi-gobject_introspection/i_base_info_test.rb +1 -1
- data/test/ffi-gobject_introspection/i_repository_test.rb +18 -0
- data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +40 -0
- data/test/{gir_ffi-base/glib → ffi-gobject_introspection}/strv_test.rb +8 -8
- data/test/gir_ffi/allocation_helper_test.rb +35 -0
- data/test/gir_ffi/arg_helper_test.rb +102 -7
- data/test/gir_ffi/boolean_test.rb +34 -0
- data/test/gir_ffi/boxed_base_test.rb +46 -6
- data/test/gir_ffi/builder_test.rb +88 -29
- data/test/gir_ffi/builders/argument_builder_test.rb +19 -0
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +17 -0
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +1 -1
- data/test/gir_ffi/builders/field_builder_test.rb +2 -1
- data/test/gir_ffi/builders/struct_builder_test.rb +42 -25
- data/test/gir_ffi/builders/user_defined_builder_test.rb +365 -17
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +100 -0
- data/test/gir_ffi/builders/vfunc_builder_test.rb +5 -3
- data/test/{gir_ffi_test.rb → gir_ffi/core_test.rb} +8 -6
- data/test/gir_ffi/in_out_pointer_test.rb +1 -1
- data/test/gir_ffi/receiver_argument_info_test.rb +32 -0
- data/test/gir_ffi/sized_array_test.rb +34 -0
- data/test/gir_ffi/struct_base_test.rb +4 -32
- data/test/gir_ffi/struct_like_base_test.rb +164 -0
- data/test/gir_ffi/union_base_test.rb +4 -20
- data/test/gir_ffi/{user_defined_type_info_test.rb → user_defined_object_info_test.rb} +10 -10
- data/test/gir_ffi/user_defined_property_info_test.rb +22 -5
- data/test/gir_ffi/version_test.rb +1 -1
- data/test/integration/callback_exceptions_test.rb +2 -0
- data/test/integration/derived_classes_test.rb +2 -0
- data/test/integration/generated_everything_test.rb +22 -0
- data/test/integration/generated_gimarshallingtests_test.rb +23 -21
- data/test/integration/generated_gio_test.rb +2 -0
- data/test/integration/generated_glib_test.rb +2 -0
- data/test/integration/generated_gst_test.rb +2 -0
- data/test/integration/generated_gtop_test.rb +2 -0
- data/test/integration/generated_regress_test.rb +113 -29
- data/test/integration/generated_secret_test.rb +2 -0
- data/test/integration/generated_warnlib_test.rb +2 -0
- data/test/integration/method_lookup_test.rb +2 -0
- data/test/introspection_test_helper.rb +15 -0
- metadata +21 -27
- data/lib/gir_ffi-base/glib.rb +0 -8
- data/test/gir_ffi-base/glib/boolean_test.rb +0 -34
@@ -4,6 +4,10 @@ require 'gir_ffi_test_helper'
|
|
4
4
|
GirFFI.setup :GIMarshallingTests
|
5
5
|
|
6
6
|
describe GirFFI::StructBase do
|
7
|
+
it 'inherits from StructLikeBase' do
|
8
|
+
GirFFI::StructBase.must_include GirFFI::StructLikeBase
|
9
|
+
end
|
10
|
+
|
7
11
|
describe 'new' do
|
8
12
|
it 'creates an instance with an owned struct' do
|
9
13
|
instance = GIMarshallingTests::SimpleStruct.new
|
@@ -15,36 +19,4 @@ describe GirFFI::StructBase do
|
|
15
19
|
instance.to_ptr.wont_be :autorelease?
|
16
20
|
end
|
17
21
|
end
|
18
|
-
|
19
|
-
describe 'wrap_copy' do
|
20
|
-
it 'returns a wrapped owned copy' do
|
21
|
-
original = GIMarshallingTests::SimpleStruct.new
|
22
|
-
copy = GIMarshallingTests::SimpleStruct.wrap_copy(original.to_ptr)
|
23
|
-
copy.to_ptr.wont_equal original.to_ptr
|
24
|
-
copy.to_ptr.wont_be :autorelease?
|
25
|
-
copy.struct.must_be :owned?
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe 'copy_from' do
|
30
|
-
it 'returns an unowned copy' do
|
31
|
-
original = GIMarshallingTests::SimpleStruct.new
|
32
|
-
copy = GIMarshallingTests::SimpleStruct.copy_from(original)
|
33
|
-
copy.to_ptr.wont_equal original.to_ptr
|
34
|
-
copy.to_ptr.wont_be :autorelease?
|
35
|
-
copy.struct.wont_be :owned?
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe 'wrap_own' do
|
40
|
-
it 'wraps and owns the supplied value' do
|
41
|
-
original = GIMarshallingTests::SimpleStruct.new
|
42
|
-
original.struct.owned = false
|
43
|
-
|
44
|
-
copy = GIMarshallingTests::SimpleStruct.wrap_own(original.to_ptr)
|
45
|
-
copy.to_ptr.must_equal original.to_ptr
|
46
|
-
copy.to_ptr.wont_be :autorelease?
|
47
|
-
copy.struct.must_be :owned?
|
48
|
-
end
|
49
|
-
end
|
50
22
|
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'gir_ffi_test_helper'
|
3
|
+
|
4
|
+
GirFFI.setup :GIMarshallingTests
|
5
|
+
|
6
|
+
describe GirFFI::StructLikeBase do
|
7
|
+
describe 'wrap_copy' do
|
8
|
+
it 'returns a wrapped owned copy of structs' do
|
9
|
+
original = GIMarshallingTests::SimpleStruct.new
|
10
|
+
copy = GIMarshallingTests::SimpleStruct.wrap_copy(original.to_ptr)
|
11
|
+
copy.to_ptr.wont_equal original.to_ptr
|
12
|
+
copy.to_ptr.wont_be :autorelease?
|
13
|
+
copy.struct.must_be :owned?
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a wrapped owned copy of unions' do
|
17
|
+
original = GIMarshallingTests::Union.new
|
18
|
+
copy = GIMarshallingTests::Union.wrap_copy(original.to_ptr)
|
19
|
+
copy.to_ptr.wont_equal original.to_ptr
|
20
|
+
copy.to_ptr.wont_be :autorelease?
|
21
|
+
copy.struct.must_be :owned?
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'returns a wrapped owned copy of boxed types' do
|
25
|
+
original = GIMarshallingTests::BoxedStruct.new
|
26
|
+
copy = GIMarshallingTests::BoxedStruct.wrap_copy(original.to_ptr)
|
27
|
+
copy.to_ptr.wont_equal original.to_ptr
|
28
|
+
copy.to_ptr.wont_be :autorelease?
|
29
|
+
copy.struct.must_be :owned?
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'returns nil when passed nil' do
|
33
|
+
GIMarshallingTests::SimpleStruct.wrap_copy(nil).must_be_nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'copy_from' do
|
38
|
+
it 'returns an unowned copy of unions' do
|
39
|
+
original = GIMarshallingTests::Union.new
|
40
|
+
original.long_ = 42
|
41
|
+
copy = GIMarshallingTests::Union.copy_from(original)
|
42
|
+
copy.long_.must_equal 42
|
43
|
+
copy.to_ptr.wont_equal original.to_ptr
|
44
|
+
copy.to_ptr.wont_be :autorelease?
|
45
|
+
copy.struct.wont_be :owned?
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'returns an unowned copy of structs' do
|
49
|
+
original = GIMarshallingTests::SimpleStruct.new
|
50
|
+
copy = GIMarshallingTests::SimpleStruct.copy_from(original)
|
51
|
+
copy.to_ptr.wont_equal original.to_ptr
|
52
|
+
copy.to_ptr.wont_be :autorelease?
|
53
|
+
copy.struct.wont_be :owned?
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'returns nil when passed nil' do
|
57
|
+
GIMarshallingTests::SimpleStruct.copy_from(nil).must_be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'converts its argument if that is possible' do
|
61
|
+
GObject::Value.copy_from(4).must_be_instance_of GObject::Value
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe 'wrap_own' do
|
66
|
+
it 'wraps and owns the supplied pointer for structs' do
|
67
|
+
original = GIMarshallingTests::SimpleStruct.new
|
68
|
+
original.struct.owned = false
|
69
|
+
|
70
|
+
copy = GIMarshallingTests::SimpleStruct.wrap_own(original.to_ptr)
|
71
|
+
copy.to_ptr.must_equal original.to_ptr
|
72
|
+
copy.to_ptr.wont_be :autorelease?
|
73
|
+
copy.struct.must_be :owned?
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'wraps and owns the supplied pointer for unions' do
|
77
|
+
original = GIMarshallingTests::Union.new
|
78
|
+
original.struct.owned = false
|
79
|
+
|
80
|
+
copy = GIMarshallingTests::Union.wrap_own(original.to_ptr)
|
81
|
+
copy.to_ptr.must_equal original.to_ptr
|
82
|
+
copy.to_ptr.wont_be :autorelease?
|
83
|
+
copy.struct.must_be :owned?
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'returns nil when passed nil' do
|
87
|
+
GIMarshallingTests::SimpleStruct.wrap_own(nil).must_be_nil
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '.native_type' do
|
92
|
+
let(:type) { GIMarshallingTests::SimpleStruct.native_type }
|
93
|
+
|
94
|
+
it 'is a struct by value' do
|
95
|
+
type.must_be_instance_of FFI::StructByValue
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'wraps the types nested struct class' do
|
99
|
+
type.struct_class.must_equal GIMarshallingTests::SimpleStruct::Struct
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '.to_native' do
|
104
|
+
it "returns the supplied value's struct" do
|
105
|
+
object = GIMarshallingTests::SimpleStruct.new
|
106
|
+
result = object.class.to_native(object, 'some-context')
|
107
|
+
result.must_equal object.struct
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '.to_ffi_type' do
|
112
|
+
it 'returns the class itself' do
|
113
|
+
klass = GIMarshallingTests::SimpleStruct
|
114
|
+
ffi_type = klass.to_ffi_type
|
115
|
+
ffi_type.must_equal klass
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '.get_value_from_pointer' do
|
120
|
+
let(:klass) { GIMarshallingTests::SimpleStruct }
|
121
|
+
|
122
|
+
it 'returns just a pointer' do
|
123
|
+
object = klass.new
|
124
|
+
ptr = object.to_ptr
|
125
|
+
klass.get_value_from_pointer(ptr, 0).must_equal ptr
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'uses offset correctly' do
|
129
|
+
struct1 = klass.new.tap { |it| it.long_ = 42 }
|
130
|
+
struct2 = klass.new.tap { |it| it.long_ = 24 }
|
131
|
+
array_ptr = GirFFI::InPointer.from_array(klass, [struct1, struct2])
|
132
|
+
ptr = klass.get_value_from_pointer(array_ptr, klass.size)
|
133
|
+
result = klass.wrap(ptr)
|
134
|
+
result.long_.must_equal 24
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe '.copy_value_to_pointer' do
|
139
|
+
let(:klass) { GIMarshallingTests::SimpleStruct }
|
140
|
+
let(:struct) { klass.new }
|
141
|
+
|
142
|
+
it 'copies data correctly' do
|
143
|
+
struct.long_ = 42
|
144
|
+
target = FFI::MemoryPointer.new klass.size
|
145
|
+
klass.copy_value_to_pointer(struct, target)
|
146
|
+
result = klass.wrap(target)
|
147
|
+
result.long_.must_equal 42
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'uses offset correctly' do
|
151
|
+
struct.long_ = 42
|
152
|
+
target = FFI::MemoryPointer.new klass.size + 10
|
153
|
+
klass.copy_value_to_pointer(struct, target, 10)
|
154
|
+
result = klass.wrap(target + 10)
|
155
|
+
result.long_.must_equal 42
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'adds its class methods to classes that include it' do
|
160
|
+
klass = Class.new
|
161
|
+
klass.send :include, GirFFI::StructLikeBase
|
162
|
+
klass.singleton_class.must_include GirFFI::StructLikeBase::ClassMethods
|
163
|
+
end
|
164
|
+
end
|
@@ -4,6 +4,10 @@ require 'gir_ffi_test_helper'
|
|
4
4
|
GirFFI.setup :GIMarshallingTests
|
5
5
|
|
6
6
|
describe GirFFI::UnionBase do
|
7
|
+
it 'inherits from StructLikeBase' do
|
8
|
+
GirFFI::StructBase.must_include GirFFI::StructLikeBase
|
9
|
+
end
|
10
|
+
|
7
11
|
describe 'new' do
|
8
12
|
it 'creates an instance with an owned struct' do
|
9
13
|
instance = GIMarshallingTests::Union.new
|
@@ -15,24 +19,4 @@ describe GirFFI::UnionBase do
|
|
15
19
|
instance.to_ptr.wont_be :autorelease?
|
16
20
|
end
|
17
21
|
end
|
18
|
-
|
19
|
-
describe 'wrap_copy' do
|
20
|
-
it 'returns a wrapped owned copy' do
|
21
|
-
original = GIMarshallingTests::Union.new
|
22
|
-
copy = GIMarshallingTests::Union.wrap_copy(original.to_ptr)
|
23
|
-
copy.to_ptr.wont_equal original.to_ptr
|
24
|
-
copy.to_ptr.wont_be :autorelease?
|
25
|
-
copy.struct.must_be :owned?
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe 'copy_from' do
|
30
|
-
it 'returns an unowned copy' do
|
31
|
-
original = GIMarshallingTests::Union.new
|
32
|
-
copy = GIMarshallingTests::Union.copy_from(original)
|
33
|
-
copy.to_ptr.wont_equal original.to_ptr
|
34
|
-
copy.to_ptr.wont_be :autorelease?
|
35
|
-
copy.struct.wont_be :owned?
|
36
|
-
end
|
37
|
-
end
|
38
22
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'gir_ffi_test_helper'
|
3
|
-
require 'gir_ffi/
|
3
|
+
require 'gir_ffi/user_defined_object_info'
|
4
4
|
|
5
5
|
GirFFI.setup :GIMarshallingTests
|
6
6
|
|
7
|
-
describe GirFFI::
|
7
|
+
describe GirFFI::UserDefinedObjectInfo do
|
8
8
|
describe '#described_class' do
|
9
|
-
let(:info) { GirFFI::
|
9
|
+
let(:info) { GirFFI::UserDefinedObjectInfo.new :some_class }
|
10
10
|
|
11
11
|
it 'returns the class passed to #initialize' do
|
12
12
|
info.described_class.must_equal :some_class
|
@@ -14,7 +14,7 @@ describe GirFFI::UserDefinedTypeInfo do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
describe '#install_property' do
|
17
|
-
let(:info) { GirFFI::
|
17
|
+
let(:info) { GirFFI::UserDefinedObjectInfo.new :some_class }
|
18
18
|
let(:foo_spec) { Object.new }
|
19
19
|
|
20
20
|
it 'adds the passed in property to the list of properties' do
|
@@ -26,7 +26,7 @@ describe GirFFI::UserDefinedTypeInfo do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
describe '#install_vfunc_implementation' do
|
29
|
-
let(:info) { GirFFI::
|
29
|
+
let(:info) { GirFFI::UserDefinedObjectInfo.new :some_class }
|
30
30
|
let(:implementation) { Object.new }
|
31
31
|
|
32
32
|
it 'adds to the list of vfunc implementations' do
|
@@ -46,7 +46,7 @@ describe GirFFI::UserDefinedTypeInfo do
|
|
46
46
|
let(:foo_spec) { Object.new }
|
47
47
|
let(:bar_spec) { Object.new }
|
48
48
|
let(:info) do
|
49
|
-
GirFFI::
|
49
|
+
GirFFI::UserDefinedObjectInfo.new :some_class do |inf|
|
50
50
|
inf.install_property foo_spec
|
51
51
|
inf.install_property bar_spec
|
52
52
|
end
|
@@ -64,7 +64,7 @@ describe GirFFI::UserDefinedTypeInfo do
|
|
64
64
|
|
65
65
|
describe '#g_name' do
|
66
66
|
let(:klass) { Object.new }
|
67
|
-
let(:info) { GirFFI::
|
67
|
+
let(:info) { GirFFI::UserDefinedObjectInfo.new klass }
|
68
68
|
|
69
69
|
before do
|
70
70
|
allow(klass).to receive(:name).and_return 'foo'
|
@@ -82,7 +82,7 @@ describe GirFFI::UserDefinedTypeInfo do
|
|
82
82
|
|
83
83
|
describe '#find_method' do
|
84
84
|
let(:klass) { Object.new }
|
85
|
-
let(:info) { GirFFI::
|
85
|
+
let(:info) { GirFFI::UserDefinedObjectInfo.new klass }
|
86
86
|
|
87
87
|
it 'finds no methods' do
|
88
88
|
info.find_method('foo').must_equal nil
|
@@ -91,7 +91,7 @@ describe GirFFI::UserDefinedTypeInfo do
|
|
91
91
|
|
92
92
|
describe '#find_signal' do
|
93
93
|
let(:klass) { Object.new }
|
94
|
-
let(:info) { GirFFI::
|
94
|
+
let(:info) { GirFFI::UserDefinedObjectInfo.new klass }
|
95
95
|
|
96
96
|
it 'finds no signals' do
|
97
97
|
info.find_signal('foo').must_equal nil
|
@@ -101,7 +101,7 @@ describe GirFFI::UserDefinedTypeInfo do
|
|
101
101
|
describe '#interfaces' do
|
102
102
|
let(:modul) { GIMarshallingTests::Interface }
|
103
103
|
let(:klass) { Class.new GIMarshallingTests::Object }
|
104
|
-
let(:info) { GirFFI::
|
104
|
+
let(:info) { GirFFI::UserDefinedObjectInfo.new klass }
|
105
105
|
|
106
106
|
before do
|
107
107
|
klass.send :include, modul
|
@@ -3,18 +3,35 @@ require 'gir_ffi_test_helper'
|
|
3
3
|
require 'gir_ffi/user_defined_property_info'
|
4
4
|
|
5
5
|
describe GirFFI::UserDefinedPropertyInfo do
|
6
|
+
let(:pspec) do
|
7
|
+
GObject.param_spec_int('foo-bar', 'foo bar',
|
8
|
+
'Foo Bar',
|
9
|
+
1, 3, 2,
|
10
|
+
readable: true, writable: true)
|
11
|
+
end
|
12
|
+
let(:info) { GirFFI::UserDefinedPropertyInfo.new pspec }
|
13
|
+
|
6
14
|
describe '#param_spec' do
|
7
15
|
it 'returns the passed in parameter specification' do
|
8
|
-
info
|
9
|
-
info.param_spec.must_equal :some_param_spec
|
16
|
+
info.param_spec.must_equal pspec
|
10
17
|
end
|
11
18
|
end
|
12
19
|
|
13
20
|
describe '#name' do
|
14
21
|
it 'returns the name retrieved from the parameter specification' do
|
15
|
-
|
16
|
-
|
17
|
-
|
22
|
+
info.name.must_equal 'foo-bar'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#ffi_type' do
|
27
|
+
it 'returns the ffi type corresponding to the type tag' do
|
28
|
+
info.ffi_type.must_equal :int
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#type_tag' do
|
33
|
+
it 'returns the mapped type symbol' do
|
34
|
+
info.type_tag.must_equal :gint
|
18
35
|
end
|
19
36
|
end
|
20
37
|
end
|
@@ -56,6 +56,11 @@ describe Everything do
|
|
56
56
|
Everything.const_return_glong.must_equal 0
|
57
57
|
end
|
58
58
|
|
59
|
+
it 'has a working function #const_return_gpointer' do
|
60
|
+
skip unless get_introspection_data 'Everything', 'const_return_gpointer'
|
61
|
+
Everything.const_return_gpointer.must_be :null?
|
62
|
+
end
|
63
|
+
|
59
64
|
it 'has a working function #const_return_gshort' do
|
60
65
|
Everything.const_return_gshort.must_equal 0
|
61
66
|
end
|
@@ -166,6 +171,11 @@ describe Everything do
|
|
166
171
|
Everything.one_outparam_glong.must_equal 0
|
167
172
|
end
|
168
173
|
|
174
|
+
it 'has a working function #one_outparam_gpointer' do
|
175
|
+
skip unless get_introspection_data 'Everything', 'one_outparam_gpointer'
|
176
|
+
Everything.one_outparam_gpointer.must_be :null?
|
177
|
+
end
|
178
|
+
|
169
179
|
it 'has a working function #one_outparam_gshort' do
|
170
180
|
Everything.one_outparam_gshort.must_equal 0
|
171
181
|
end
|
@@ -271,6 +281,11 @@ describe Everything do
|
|
271
281
|
Everything.oneparam_glong(0).must_be_nil
|
272
282
|
end
|
273
283
|
|
284
|
+
it 'has a working function #oneparam_gpointer' do
|
285
|
+
skip unless get_introspection_data 'Everything', 'oneparam_gpointer'
|
286
|
+
Everything.oneparam_gpointer(FFI::MemoryPointer.new(:int)).must_be_nil
|
287
|
+
end
|
288
|
+
|
274
289
|
it 'has a working function #oneparam_gshort' do
|
275
290
|
Everything.oneparam_gshort(0).must_be_nil
|
276
291
|
end
|
@@ -375,6 +390,13 @@ describe Everything do
|
|
375
390
|
Everything.passthrough_one_glong(42).must_equal 42
|
376
391
|
end
|
377
392
|
|
393
|
+
it 'has a working function #passthrough_one_gpointer' do
|
394
|
+
skip unless get_introspection_data 'Everything', 'passthrough_one_gpointer'
|
395
|
+
ptr = FFI::MemoryPointer.new(:int)
|
396
|
+
result = Everything.passthrough_one_gpointer(ptr)
|
397
|
+
result.must_equal ptr
|
398
|
+
end
|
399
|
+
|
378
400
|
it 'has a working function #passthrough_one_gshort' do
|
379
401
|
Everything.passthrough_one_gshort(42).must_equal 42
|
380
402
|
end
|
@@ -221,7 +221,7 @@ describe GIMarshallingTests do
|
|
221
221
|
skip unless get_introspection_data 'GIMarshallingTests', 'Interface3'
|
222
222
|
derived_klass.class_eval { include GIMarshallingTests::Interface3 }
|
223
223
|
derived_instance = make_derived_instance do |info|
|
224
|
-
info.install_vfunc_implementation :test_variant_array_in, proc {|obj, in_|
|
224
|
+
info.install_vfunc_implementation :test_variant_array_in, proc { |obj, in_|
|
225
225
|
obj.int = in_.to_a.first.get_byte
|
226
226
|
}
|
227
227
|
end
|
@@ -325,10 +325,6 @@ describe GIMarshallingTests do
|
|
325
325
|
res.ref_count.must_equal 1
|
326
326
|
end
|
327
327
|
|
328
|
-
it 'has a working function #inout_same' do
|
329
|
-
skip 'This function is defined in the header but not implemented'
|
330
|
-
end
|
331
|
-
|
332
328
|
it 'has a working function #none_inout' do
|
333
329
|
ob = GIMarshallingTests::Object.new 42
|
334
330
|
ob.ref_count.must_equal 1
|
@@ -394,7 +390,7 @@ describe GIMarshallingTests do
|
|
394
390
|
'vfunc_in_object_transfer_full')
|
395
391
|
obj = nil
|
396
392
|
derived_instance = make_derived_instance do |info|
|
397
|
-
info.install_vfunc_implementation :vfunc_in_object_transfer_full, proc {|_this, object|
|
393
|
+
info.install_vfunc_implementation :vfunc_in_object_transfer_full, proc { |_this, object|
|
398
394
|
obj = object
|
399
395
|
}
|
400
396
|
end
|
@@ -409,7 +405,7 @@ describe GIMarshallingTests do
|
|
409
405
|
'vfunc_in_object_transfer_none')
|
410
406
|
obj = nil
|
411
407
|
derived_instance = make_derived_instance do |info|
|
412
|
-
info.install_vfunc_implementation :vfunc_in_object_transfer_none, proc {|_this, object|
|
408
|
+
info.install_vfunc_implementation :vfunc_in_object_transfer_none, proc { |_this, object|
|
413
409
|
obj = object
|
414
410
|
}
|
415
411
|
end
|
@@ -425,7 +421,7 @@ describe GIMarshallingTests do
|
|
425
421
|
'vfunc_out_object_transfer_full')
|
426
422
|
obj = nil
|
427
423
|
derived_instance = make_derived_instance do |info|
|
428
|
-
info.install_vfunc_implementation :vfunc_out_object_transfer_full, proc {|_obj|
|
424
|
+
info.install_vfunc_implementation :vfunc_out_object_transfer_full, proc { |_obj|
|
429
425
|
obj = GIMarshallingTests::Object.new(42)
|
430
426
|
}
|
431
427
|
end
|
@@ -439,7 +435,7 @@ describe GIMarshallingTests do
|
|
439
435
|
skip unless get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
440
436
|
'vfunc_out_object_transfer_none')
|
441
437
|
derived_instance = make_derived_instance do |info|
|
442
|
-
info.install_vfunc_implementation :vfunc_out_object_transfer_none, proc {|_obj|
|
438
|
+
info.install_vfunc_implementation :vfunc_out_object_transfer_none, proc { |_obj|
|
443
439
|
GIMarshallingTests::Object.new 42
|
444
440
|
}
|
445
441
|
end
|
@@ -451,7 +447,7 @@ describe GIMarshallingTests do
|
|
451
447
|
skip unless get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
452
448
|
'vfunc_return_object_transfer_full')
|
453
449
|
derived_instance = make_derived_instance do |info|
|
454
|
-
info.install_vfunc_implementation :vfunc_return_object_transfer_full, proc {|_obj|
|
450
|
+
info.install_vfunc_implementation :vfunc_return_object_transfer_full, proc { |_obj|
|
455
451
|
GIMarshallingTests::Object.new 42
|
456
452
|
}
|
457
453
|
end
|
@@ -463,7 +459,7 @@ describe GIMarshallingTests do
|
|
463
459
|
skip unless get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
464
460
|
'vfunc_return_object_transfer_none')
|
465
461
|
derived_instance = make_derived_instance do |info|
|
466
|
-
info.install_vfunc_implementation :vfunc_return_object_transfer_none, proc {|_obj|
|
462
|
+
info.install_vfunc_implementation :vfunc_return_object_transfer_none, proc { |_obj|
|
467
463
|
GIMarshallingTests::Object.new 42
|
468
464
|
}
|
469
465
|
end
|
@@ -479,10 +475,15 @@ describe GIMarshallingTests do
|
|
479
475
|
derived_instance.int.must_equal 23
|
480
476
|
end
|
481
477
|
|
482
|
-
# TODO: Check if this is fixed
|
483
|
-
# See https://bugzilla.gnome.org/show_bug.cgi?id=727665
|
484
478
|
it 'has a working method #int8_out' do
|
485
|
-
|
479
|
+
# GLib minor version and GObjectIntrospection minor version should be in sync
|
480
|
+
skip 'Introspection data is not generated correctly' if GLib::MINOR_VERSION < 42
|
481
|
+
|
482
|
+
derived_instance = make_derived_instance do |info|
|
483
|
+
info.install_vfunc_implementation :method_int8_out, proc { |_obj| 42 }
|
484
|
+
end
|
485
|
+
|
486
|
+
derived_instance.int8_out.must_equal 42
|
486
487
|
end
|
487
488
|
|
488
489
|
it 'has a working method #method' do
|
@@ -582,7 +583,7 @@ describe GIMarshallingTests do
|
|
582
583
|
skip unless get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
583
584
|
'vfunc_array_out_parameter')
|
584
585
|
derived_instance = make_derived_instance do |info|
|
585
|
-
info.install_vfunc_implementation :vfunc_array_out_parameter, proc {|_obj|
|
586
|
+
info.install_vfunc_implementation :vfunc_array_out_parameter, proc { |_obj|
|
586
587
|
[1.1, 2.2, 3.3]
|
587
588
|
}
|
588
589
|
end
|
@@ -598,7 +599,7 @@ describe GIMarshallingTests do
|
|
598
599
|
skip unless get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
599
600
|
'vfunc_caller_allocated_out_parameter')
|
600
601
|
derived_instance = make_derived_instance do |info|
|
601
|
-
info.install_vfunc_implementation :vfunc_caller_allocated_out_parameter, proc {|_obj|
|
602
|
+
info.install_vfunc_implementation :vfunc_caller_allocated_out_parameter, proc { |_obj|
|
602
603
|
'Hello!'
|
603
604
|
}
|
604
605
|
end
|
@@ -608,7 +609,7 @@ describe GIMarshallingTests do
|
|
608
609
|
|
609
610
|
it 'has a working method #vfunc_meth_with_error' do
|
610
611
|
derived_instance = make_derived_instance do |info|
|
611
|
-
info.install_vfunc_implementation :vfunc_meth_with_err, proc {|_object, x|
|
612
|
+
info.install_vfunc_implementation :vfunc_meth_with_err, proc { |_object, x|
|
612
613
|
raise 'This is not the answer!' unless x == 42
|
613
614
|
true
|
614
615
|
}
|
@@ -1841,7 +1842,7 @@ describe GIMarshallingTests do
|
|
1841
1842
|
it 'has a working function #gclosure_return' do
|
1842
1843
|
cl = GIMarshallingTests.gclosure_return
|
1843
1844
|
gv = GObject::Value.wrap_ruby_value 0
|
1844
|
-
result = cl.invoke gv,
|
1845
|
+
result = cl.invoke gv, []
|
1845
1846
|
assert_equal 42, gv.get_value
|
1846
1847
|
result.must_equal 42
|
1847
1848
|
end
|
@@ -2610,12 +2611,13 @@ describe GIMarshallingTests do
|
|
2610
2611
|
res.must_be_instance_of GIMarshallingTests::OverridesStruct
|
2611
2612
|
end
|
2612
2613
|
|
2613
|
-
# TODO: Wait for fixed version of param_spec_in_bool to land in Debian/Ubuntu
|
2614
|
-
# See https://bugzilla.gnome.org/show_bug.cgi?id=728409
|
2615
2614
|
it 'has a working function #param_spec_in_bool' do
|
2616
|
-
|
2615
|
+
# GLib minor version and GObjectIntrospection minor version should be in sync
|
2616
|
+
skip 'param_spec_in_bool tests the wrong type' if GLib::MINOR_VERSION < 42
|
2617
|
+
|
2617
2618
|
ps = GObject.param_spec_boolean 'mybool', 'nick', 'blurb', true, :readable
|
2618
2619
|
GIMarshallingTests.param_spec_in_bool ps
|
2620
|
+
pass
|
2619
2621
|
end
|
2620
2622
|
|
2621
2623
|
it 'has a working function #param_spec_out' do
|
@@ -5,6 +5,8 @@ GirFFI.setup :Gio
|
|
5
5
|
|
6
6
|
# Tests generated methods and functions in the Gio namespace.
|
7
7
|
describe 'The generated Gio module' do
|
8
|
+
cover 'Gio'
|
9
|
+
|
8
10
|
describe 'File#new_for_path, a method returning an interface,' do
|
9
11
|
it 'returns an object of a more specific class' do
|
10
12
|
file = Gio::File.new_for_path('/')
|