gir_ffi 0.7.8 → 0.7.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|