gir_ffi 0.7.8 → 0.7.9
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 +16 -0
- data/README.md +24 -11
- data/TODO.md +10 -2
- data/gir_ffi.gemspec +2 -2
- data/lib/ffi-glib/array.rb +1 -1
- data/lib/ffi-glib/hash_table.rb +0 -4
- data/lib/ffi-gobject.rb +10 -6
- data/lib/ffi-gobject/object.rb +17 -0
- data/lib/ffi-gobject/ruby_closure.rb +1 -1
- data/lib/ffi-gobject/value.rb +28 -4
- data/lib/ffi-gobject_introspection.rb +4 -0
- data/lib/ffi-gobject_introspection/g_error.rb +2 -2
- data/lib/ffi-gobject_introspection/i_base_info.rb +1 -3
- data/lib/ffi-gobject_introspection/i_callable_info.rb +8 -0
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +2 -0
- data/lib/ffi-gobject_introspection/i_repository.rb +4 -4
- data/lib/ffi-gobject_introspection/lib.rb +57 -32
- data/lib/gir_ffi.rb +1 -1
- data/lib/gir_ffi/boxed_base.rb +40 -0
- data/lib/gir_ffi/builders/argument_builder.rb +11 -3
- data/lib/gir_ffi/builders/base_argument_builder.rb +4 -0
- data/lib/gir_ffi/builders/boxed_builder.rb +29 -0
- data/lib/gir_ffi/builders/callback_builder.rb +3 -1
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +9 -1
- data/lib/gir_ffi/builders/field_builder.rb +68 -18
- data/lib/gir_ffi/builders/function_builder.rb +12 -2
- data/lib/gir_ffi/builders/mapping_method_builder.rb +7 -5
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/module_builder.rb +1 -1
- data/lib/gir_ffi/builders/registered_type_builder.rb +0 -9
- data/lib/gir_ffi/builders/return_value_builder.rb +0 -1
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -1
- data/lib/gir_ffi/builders/struct_builder.rb +4 -16
- data/lib/gir_ffi/builders/union_builder.rb +2 -13
- data/lib/gir_ffi/builders/user_defined_builder.rb +6 -6
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +44 -0
- data/lib/gir_ffi/builders/vfunc_builder.rb +3 -1
- data/lib/gir_ffi/callback_base.rb +5 -2
- data/lib/gir_ffi/class_base.rb +6 -7
- data/lib/gir_ffi/enum_base.rb +5 -0
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -0
- data/lib/gir_ffi/field_argument_info.rb +4 -0
- data/lib/gir_ffi/in_out_pointer.rb +1 -1
- data/lib/gir_ffi/in_pointer.rb +2 -2
- data/lib/gir_ffi/info_ext/i_arg_info.rb +12 -2
- data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_callback_info.rb +7 -2
- 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_registered_type_info.rb +7 -2
- data/lib/gir_ffi/info_ext/i_type_info.rb +21 -9
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +5 -0
- data/lib/gir_ffi/interface_base.rb +5 -0
- data/lib/gir_ffi/object_base.rb +5 -0
- data/lib/gir_ffi/receiver_argument_info.rb +5 -0
- data/lib/gir_ffi/registered_type_base.rb +5 -0
- data/lib/gir_ffi/return_value_info.rb +3 -1
- data/lib/gir_ffi/sized_array.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +2 -24
- data/lib/gir_ffi/type_map.rb +5 -1
- data/lib/gir_ffi/union_base.rb +2 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +1 -1
- data/test/base_test_helper.rb +6 -6
- data/test/ffi-glib/hash_table_test.rb +7 -7
- data/test/ffi-glib/iconv_test.rb +2 -3
- data/test/ffi-glib/main_loop_test.rb +2 -2
- data/test/ffi-gobject/gobject_test.rb +1 -1
- data/test/ffi-gobject/object_test.rb +5 -14
- data/test/ffi-gobject/value_test.rb +30 -6
- data/test/ffi-gobject_introspection/i_base_info_test.rb +6 -6
- data/test/ffi-gobject_introspection/i_repository_test.rb +2 -4
- data/test/gir_ffi/arg_helper_test.rb +1 -1
- data/test/gir_ffi/builder_test.rb +18 -12
- data/test/gir_ffi/builders/argument_builder_test.rb +2 -5
- data/test/gir_ffi/builders/callback_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +11 -10
- data/test/gir_ffi/builders/field_builder_test.rb +0 -2
- data/test/gir_ffi/builders/function_builder_test.rb +156 -147
- data/test/gir_ffi/builders/interface_builder_test.rb +1 -1
- data/test/gir_ffi/builders/module_builder_test.rb +2 -2
- data/test/gir_ffi/builders/object_builder_test.rb +2 -2
- data/test/gir_ffi/builders/property_builder_test.rb +5 -5
- data/test/gir_ffi/builders/return_value_builder_test.rb +30 -30
- data/test/gir_ffi/builders/struct_builder_test.rb +14 -14
- data/test/gir_ffi/builders/user_defined_builder_test.rb +21 -22
- data/test/gir_ffi/builders/vfunc_builder_test.rb +57 -0
- data/test/gir_ffi/class_base_test.rb +8 -8
- data/test/gir_ffi/ffi_ext/pointer_test.rb +4 -4
- data/test/gir_ffi/g_type_test.rb +1 -1
- data/test/gir_ffi/in_pointer_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +3 -3
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_field_info_test.rb +8 -8
- data/test/gir_ffi/info_ext/i_function_info_test.rb +13 -13
- data/test/gir_ffi/info_ext/i_type_info_test.rb +131 -132
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
- data/test/gir_ffi/interface_base_test.rb +3 -3
- data/test/gir_ffi/object_base_test.rb +3 -3
- data/test/gir_ffi/sized_array_test.rb +2 -2
- data/test/gir_ffi/type_map_test.rb +3 -3
- data/test/gir_ffi/unintrospectable_type_info_test.rb +14 -14
- data/test/gir_ffi/user_defined_property_info_test.rb +1 -1
- data/test/gir_ffi/user_defined_type_info_test.rb +25 -12
- data/test/gir_ffi/zero_terminated_test.rb +0 -1
- data/test/gir_ffi_test.rb +3 -3
- data/test/gir_ffi_test_helper.rb +4 -0
- data/test/integration/generated_gimarshallingtests_test.rb +31 -25
- data/test/integration/generated_gio_test.rb +1 -1
- data/test/integration/generated_gobject_test.rb +1 -1
- data/test/integration/generated_regress_test.rb +18 -22
- metadata +11 -8
@@ -2,9 +2,11 @@ module GirFFI
|
|
2
2
|
# Represents a return value with the same interface as IArgumentInfo
|
3
3
|
class ReturnValueInfo
|
4
4
|
attr_reader :argument_type
|
5
|
+
attr_reader :ownership_transfer
|
5
6
|
|
6
|
-
def initialize type, skip
|
7
|
+
def initialize type, ownership_transfer, skip
|
7
8
|
@argument_type = type
|
9
|
+
@ownership_transfer = ownership_transfer
|
8
10
|
@skip = skip
|
9
11
|
end
|
10
12
|
|
data/lib/gir_ffi/sized_array.rb
CHANGED
data/lib/gir_ffi/struct_base.rb
CHANGED
@@ -1,29 +1,7 @@
|
|
1
|
-
require 'gir_ffi/
|
1
|
+
require 'gir_ffi/boxed_base'
|
2
2
|
|
3
3
|
module GirFFI
|
4
4
|
# Base class for generated classes representing GLib structs.
|
5
|
-
class StructBase <
|
6
|
-
extend FFI::DataConverter
|
7
|
-
|
8
|
-
def self.native_type
|
9
|
-
FFI::Type::Struct.new(self::Struct)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.to_ffitype
|
13
|
-
self
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.to_native value, _context
|
17
|
-
value.struct
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.get_value_from_pointer pointer
|
21
|
-
pointer.to_ptr
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.copy_value_to_pointer value, pointer, offset = 0
|
25
|
-
size = self::Struct.size
|
26
|
-
pointer.put_bytes offset, value.to_ptr.read_bytes(size), 0, size
|
27
|
-
end
|
5
|
+
class StructBase < BoxedBase
|
28
6
|
end
|
29
7
|
end
|
data/lib/gir_ffi/type_map.rb
CHANGED
@@ -44,9 +44,13 @@ module GirFFI
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def self.type_specification_to_ffitype type
|
47
|
+
type_specification_to_ffi_type type
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.type_specification_to_ffi_type type
|
47
51
|
case type
|
48
52
|
when Module
|
49
|
-
type.
|
53
|
+
type.to_ffi_type
|
50
54
|
when Array
|
51
55
|
type[0]
|
52
56
|
else
|
data/lib/gir_ffi/union_base.rb
CHANGED
data/lib/gir_ffi/version.rb
CHANGED
data/test/base_test_helper.rb
CHANGED
@@ -5,17 +5,16 @@ begin
|
|
5
5
|
SimpleCov.start do
|
6
6
|
add_filter '/test/'
|
7
7
|
end
|
8
|
-
rescue LoadError
|
9
|
-
end
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
if ENV['CI']
|
10
|
+
require 'coveralls'
|
11
|
+
Coveralls.wear!
|
12
|
+
end
|
14
13
|
rescue LoadError
|
15
14
|
end
|
16
15
|
|
16
|
+
require 'minitest/rspec_mocks'
|
17
17
|
require 'minitest/autorun'
|
18
|
-
require 'rr'
|
19
18
|
|
20
19
|
require 'gir_ffi-base'
|
21
20
|
require 'ffi-gobject_introspection'
|
@@ -83,3 +82,4 @@ module BaseTestExtensions
|
|
83
82
|
end
|
84
83
|
|
85
84
|
Minitest::Test.send :include, BaseTestExtensions
|
85
|
+
Minitest::Test.send :include, Minitest::RSpecMocks
|
@@ -10,7 +10,7 @@ describe GLib::HashTable do
|
|
10
10
|
describe '::from' do
|
11
11
|
it 'creates a GHashTable from a Ruby hash' do
|
12
12
|
hsh = GLib::HashTable.from [:utf8, :gint32],
|
13
|
-
|
13
|
+
'foo' => 23, 'bar' => 32
|
14
14
|
assert_equal({ 'foo' => 23, 'bar' => 32 }, hsh.to_hash)
|
15
15
|
end
|
16
16
|
|
@@ -51,16 +51,16 @@ describe GLib::HashTable do
|
|
51
51
|
a = {}
|
52
52
|
@hash.each { |k, v| a[k] = v }
|
53
53
|
a.must_be :==,
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
'foo' => 'bar',
|
55
|
+
'baz' => 'bat',
|
56
|
+
'qux' => 'quux'
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'has a working #to_hash method' do
|
60
60
|
@hash.to_hash.must_be :==,
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
'foo' => 'bar',
|
62
|
+
'baz' => 'bat',
|
63
|
+
'qux' => 'quux'
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
data/test/ffi-glib/iconv_test.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GLib::IConv do
|
4
|
+
let(:instance) { GLib::IConv.open('ascii', 'utf-8') }
|
5
|
+
|
4
6
|
describe '.open' do
|
5
7
|
it 'creates a new instance of GLib::Iconv' do
|
6
|
-
instance = GLib::IConv.open('ascii', 'utf-8')
|
7
8
|
instance.must_be_instance_of GLib::IConv
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
11
|
-
let(:instance) { GLib::IConv.open('ascii', 'utf-8') }
|
12
|
-
|
13
12
|
describe '#setup_and_call' do
|
14
13
|
it "works for the method called ''" do
|
15
14
|
instance.setup_and_call :'', [nil, nil, nil, nil]
|
@@ -6,7 +6,7 @@ describe GLib::MainLoop do
|
|
6
6
|
main_loop = GLib::MainLoop.new nil, false
|
7
7
|
|
8
8
|
a = []
|
9
|
-
GLib.timeout_add(GLib::PRIORITY_DEFAULT,
|
9
|
+
GLib.timeout_add(GLib::PRIORITY_DEFAULT, 150,
|
10
10
|
proc { main_loop.quit },
|
11
11
|
nil, nil)
|
12
12
|
|
@@ -21,7 +21,7 @@ describe GLib::MainLoop do
|
|
21
21
|
|
22
22
|
slow_thread.join
|
23
23
|
|
24
|
-
a.
|
24
|
+
a.must_equal ['Before run', 'During run', 'After run']
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -49,7 +49,7 @@ describe GObject do
|
|
49
49
|
gtype = object_class.g_type_class.g_type
|
50
50
|
|
51
51
|
object_class.must_be_instance_of GObject::ObjectClass
|
52
|
-
gtype.must_equal GIMarshallingTests::OverridesObject.
|
52
|
+
gtype.must_equal GIMarshallingTests::OverridesObject.gtype
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -5,8 +5,7 @@ require 'ffi-gobject'
|
|
5
5
|
describe GObject::Object do
|
6
6
|
describe '#get_property' do
|
7
7
|
it 'is overridden to have arity 1' do
|
8
|
-
|
9
|
-
GObject::Object.instance_method('get_property').arity
|
8
|
+
GObject::Object.instance_method('get_property').arity.must_equal 1
|
10
9
|
end
|
11
10
|
end
|
12
11
|
|
@@ -38,21 +37,17 @@ describe GObject::Object do
|
|
38
37
|
subject { GObject::Object.new GObject::TYPE_OBJECT, nil }
|
39
38
|
|
40
39
|
it 'delegates to GObject' do
|
41
|
-
|
40
|
+
expect(GObject).to receive(:signal_connect).with(subject, 'some-event', nil)
|
42
41
|
subject.signal_connect('some-event') do
|
43
42
|
nothing
|
44
43
|
end
|
45
|
-
|
46
|
-
RR.verify
|
47
44
|
end
|
48
45
|
|
49
46
|
it 'delegates to GObject if an optional data argument is passed' do
|
50
|
-
|
47
|
+
expect(GObject).to receive(:signal_connect).with(subject, 'some-event', 'data')
|
51
48
|
subject.signal_connect('some-event', 'data') do
|
52
49
|
nothing
|
53
50
|
end
|
54
|
-
|
55
|
-
RR.verify
|
56
51
|
end
|
57
52
|
end
|
58
53
|
|
@@ -60,21 +55,17 @@ describe GObject::Object do
|
|
60
55
|
subject { GObject::Object.new GObject::TYPE_OBJECT, nil }
|
61
56
|
|
62
57
|
it 'delegates to GObject' do
|
63
|
-
|
58
|
+
expect(GObject).to receive(:signal_connect_after).with(subject, 'some-event', nil)
|
64
59
|
subject.signal_connect_after('some-event') do
|
65
60
|
nothing
|
66
61
|
end
|
67
|
-
|
68
|
-
RR.verify
|
69
62
|
end
|
70
63
|
|
71
64
|
it 'delegates to GObject if an optional data argument is passed' do
|
72
|
-
|
65
|
+
expect(GObject).to receive(:signal_connect_after).with(subject, 'some-event', 'data')
|
73
66
|
subject.signal_connect_after('some-event', 'data') do
|
74
67
|
nothing
|
75
68
|
end
|
76
|
-
|
77
|
-
RR.verify
|
78
69
|
end
|
79
70
|
end
|
80
71
|
end
|
@@ -52,14 +52,14 @@ describe GObject::Value do
|
|
52
52
|
|
53
53
|
it 'handles enum values presented as symbols' do
|
54
54
|
value = :value2
|
55
|
-
gv = GObject::Value.for_g_type Regress::TestEnum.
|
55
|
+
gv = GObject::Value.for_g_type Regress::TestEnum.gtype
|
56
56
|
gv.set_value value
|
57
57
|
gv.get_value.must_equal value
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'handles enum values presented as numbers' do
|
61
61
|
value = :value2
|
62
|
-
gv = GObject::Value.for_g_type Regress::TestEnum.
|
62
|
+
gv = GObject::Value.for_g_type Regress::TestEnum.gtype
|
63
63
|
gv.set_value Regress::TestEnum[value]
|
64
64
|
gv.get_value.must_equal value
|
65
65
|
end
|
@@ -119,7 +119,6 @@ describe GObject::Value do
|
|
119
119
|
gv.set_value value
|
120
120
|
gv.get_variant.must_equal value
|
121
121
|
end
|
122
|
-
|
123
122
|
end
|
124
123
|
|
125
124
|
describe '#get_value' do
|
@@ -144,14 +143,14 @@ describe GObject::Value do
|
|
144
143
|
|
145
144
|
it 'unwraps an enum value' do
|
146
145
|
value = :value2
|
147
|
-
gv = GObject::Value.for_g_type Regress::TestEnum.
|
146
|
+
gv = GObject::Value.for_g_type Regress::TestEnum.gtype
|
148
147
|
gv.set_enum Regress::TestEnum[value]
|
149
148
|
gv.get_value.must_equal value
|
150
149
|
end
|
151
150
|
|
152
151
|
it 'unwraps a flags value' do
|
153
152
|
value = Regress::TestFlags[:flag1] | Regress::TestFlags[:flag3]
|
154
|
-
gv = GObject::Value.for_g_type Regress::TestFlags.
|
153
|
+
gv = GObject::Value.for_g_type Regress::TestFlags.gtype
|
155
154
|
gv.set_flags value
|
156
155
|
gv.get_value.must_equal value
|
157
156
|
end
|
@@ -257,7 +256,7 @@ describe GObject::Value do
|
|
257
256
|
|
258
257
|
it 'raises an error when setting an incompatible object type' do
|
259
258
|
o = GIMarshallingTests::Object.new 1
|
260
|
-
v = GObject::Value.new.init(GIMarshallingTests::OverridesObject.
|
259
|
+
v = GObject::Value.new.init(GIMarshallingTests::OverridesObject.gtype)
|
261
260
|
proc { v.set_value o }.must_raise ArgumentError
|
262
261
|
end
|
263
262
|
|
@@ -268,4 +267,29 @@ describe GObject::Value do
|
|
268
267
|
v.get_value.to_string.must_equal 'some bytes'
|
269
268
|
end
|
270
269
|
end
|
270
|
+
|
271
|
+
describe 'upon garbage collection' do
|
272
|
+
before do
|
273
|
+
GirFFI.setup :GIMarshallingTests
|
274
|
+
end
|
275
|
+
|
276
|
+
it 'restores the underlying GValue to its pristine state' do
|
277
|
+
if defined?(RUBY_ENGINE) && %w(jruby rbx).include?(RUBY_ENGINE)
|
278
|
+
skip 'cannot be reliably tested on JRuby and Rubinius'
|
279
|
+
end
|
280
|
+
|
281
|
+
value = GObject::Value.from 42
|
282
|
+
|
283
|
+
# Drop reference to original GObject::Value
|
284
|
+
value = GObject::Value.wrap value.to_ptr
|
285
|
+
value.current_gtype_name.must_equal 'gint'
|
286
|
+
|
287
|
+
GC.start
|
288
|
+
sleep 1
|
289
|
+
GC.start
|
290
|
+
GC.start
|
291
|
+
|
292
|
+
value.current_gtype_name.wont_equal 'gint'
|
293
|
+
end
|
294
|
+
end
|
271
295
|
end
|
@@ -4,12 +4,12 @@ describe GObjectIntrospection::IBaseInfo do
|
|
4
4
|
let(:described_class) { GObjectIntrospection::IBaseInfo }
|
5
5
|
describe '#initialize' do
|
6
6
|
it 'raises an error if a null pointer is passed' do
|
7
|
-
|
7
|
+
expect(ptr = Object.new).to receive(:null?).and_return true
|
8
8
|
proc { described_class.new ptr }.must_raise ArgumentError
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'raises no error if a non-null pointer is passed' do
|
12
|
-
|
12
|
+
expect(ptr = Object.new).to receive(:null?).and_return false
|
13
13
|
described_class.new ptr
|
14
14
|
pass
|
15
15
|
end
|
@@ -35,15 +35,15 @@ describe GObjectIntrospection::IBaseInfo do
|
|
35
35
|
skip 'cannot be reliably tested on JRuby and Rubinius'
|
36
36
|
end
|
37
37
|
|
38
|
-
|
39
|
-
|
38
|
+
expect(ptr = Object.new).to receive(:null?).and_return false
|
39
|
+
expect(lib = Object.new).to receive(:g_base_info_unref).with(ptr).and_return nil
|
40
40
|
described_class.new ptr, lib
|
41
41
|
|
42
42
|
GC.start
|
43
43
|
|
44
44
|
# Yes, the next three lines are needed. https://gist.github.com/4277829
|
45
|
-
|
46
|
-
|
45
|
+
allow(ptr2 = Object.new).to receive(:null?).and_return false
|
46
|
+
allow(lib).to receive(:g_base_info_unref).with(ptr2).and_return nil
|
47
47
|
described_class.new ptr2, lib
|
48
48
|
|
49
49
|
GC.start
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'introspection_test_helper'
|
2
2
|
|
3
3
|
describe GObjectIntrospection::IRepository do
|
4
|
+
let(:gir) { GObjectIntrospection::IRepository.default }
|
5
|
+
|
4
6
|
describe 'an instance' do
|
5
7
|
it 'is not created by calling new()' do
|
6
8
|
assert_raises NoMethodError do
|
@@ -9,19 +11,15 @@ describe GObjectIntrospection::IRepository do
|
|
9
11
|
end
|
10
12
|
|
11
13
|
it 'is created by calling default()' do
|
12
|
-
gir = GObjectIntrospection::IRepository.default
|
13
14
|
assert_kind_of GObjectIntrospection::IRepository, gir
|
14
15
|
end
|
15
16
|
|
16
17
|
it 'is a singleton' do
|
17
|
-
gir = GObjectIntrospection::IRepository.default
|
18
18
|
gir2 = GObjectIntrospection::IRepository.default
|
19
19
|
assert_equal gir, gir2
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
let(:gir) { GObjectIntrospection::IRepository.default }
|
24
|
-
|
25
23
|
describe '#require' do
|
26
24
|
it "raises an error if the namespace doesn't exist" do
|
27
25
|
assert_raises RuntimeError do
|
@@ -4,7 +4,7 @@ describe GirFFI::ArgHelper do
|
|
4
4
|
describe '.cast_from_pointer' do
|
5
5
|
it 'handles class types' do
|
6
6
|
klass = Class.new
|
7
|
-
|
7
|
+
expect(klass).to receive(:wrap).with(:pointer_value).and_return :wrapped_value
|
8
8
|
GirFFI::ArgHelper.cast_from_pointer(klass, :pointer_value).must_equal :wrapped_value
|
9
9
|
end
|
10
10
|
|
@@ -18,10 +18,12 @@ describe GirFFI::Builder do
|
|
18
18
|
it 'calls attach_function with the correct types for Regress.test_callback_destroy_notify' do
|
19
19
|
function_info = get_introspection_data 'Regress', 'test_callback_destroy_notify'
|
20
20
|
|
21
|
-
|
22
|
-
attach_function
|
23
|
-
|
24
|
-
|
21
|
+
expect(lib).
|
22
|
+
to receive(:attach_function).
|
23
|
+
with('regress_test_callback_destroy_notify',
|
24
|
+
[Regress::TestCallbackUserData, :pointer, GLib::DestroyNotify],
|
25
|
+
:int32).
|
26
|
+
and_return true
|
25
27
|
|
26
28
|
GirFFI::Builder.attach_ffi_function(lib, function_info)
|
27
29
|
end
|
@@ -29,25 +31,29 @@ describe GirFFI::Builder do
|
|
29
31
|
it 'calls attach_function with the correct types for Regress::TestObj#torture_signature_0' do
|
30
32
|
info = get_method_introspection_data 'Regress', 'TestObj', 'torture_signature_0'
|
31
33
|
|
32
|
-
|
33
|
-
attach_function
|
34
|
-
|
35
|
-
|
34
|
+
expect(lib).
|
35
|
+
to receive(:attach_function).
|
36
|
+
with('regress_test_obj_torture_signature_0',
|
37
|
+
[:pointer, :int32, :pointer, :pointer, :pointer, :pointer, :uint32],
|
38
|
+
:void).
|
39
|
+
and_return true
|
36
40
|
|
37
41
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
38
42
|
end
|
39
43
|
|
40
44
|
it 'calls attach_function with the correct types for Regress::TestObj#instance_method' do
|
41
45
|
info = get_method_introspection_data 'Regress', 'TestObj', 'instance_method'
|
42
|
-
|
43
|
-
|
46
|
+
expect(lib).to receive(:attach_function).
|
47
|
+
with('regress_test_obj_instance_method', [:pointer], :int32).
|
48
|
+
and_return true
|
44
49
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
45
50
|
end
|
46
51
|
|
47
52
|
it 'calls attach_function with the correct types for Regress.test_array_gint32_in' do
|
48
53
|
info = get_introspection_data 'Regress', 'test_array_gint32_in'
|
49
|
-
|
50
|
-
|
54
|
+
expect(lib).to receive(:attach_function).
|
55
|
+
with('regress_test_array_gint32_in', [:int32, :pointer], :int32).
|
56
|
+
and_return true
|
51
57
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
52
58
|
end
|
53
59
|
end
|