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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +16 -0
  3. data/README.md +24 -11
  4. data/TODO.md +10 -2
  5. data/gir_ffi.gemspec +2 -2
  6. data/lib/ffi-glib/array.rb +1 -1
  7. data/lib/ffi-glib/hash_table.rb +0 -4
  8. data/lib/ffi-gobject.rb +10 -6
  9. data/lib/ffi-gobject/object.rb +17 -0
  10. data/lib/ffi-gobject/ruby_closure.rb +1 -1
  11. data/lib/ffi-gobject/value.rb +28 -4
  12. data/lib/ffi-gobject_introspection.rb +4 -0
  13. data/lib/ffi-gobject_introspection/g_error.rb +2 -2
  14. data/lib/ffi-gobject_introspection/i_base_info.rb +1 -3
  15. data/lib/ffi-gobject_introspection/i_callable_info.rb +8 -0
  16. data/lib/ffi-gobject_introspection/i_registered_type_info.rb +2 -0
  17. data/lib/ffi-gobject_introspection/i_repository.rb +4 -4
  18. data/lib/ffi-gobject_introspection/lib.rb +57 -32
  19. data/lib/gir_ffi.rb +1 -1
  20. data/lib/gir_ffi/boxed_base.rb +40 -0
  21. data/lib/gir_ffi/builders/argument_builder.rb +11 -3
  22. data/lib/gir_ffi/builders/base_argument_builder.rb +4 -0
  23. data/lib/gir_ffi/builders/boxed_builder.rb +29 -0
  24. data/lib/gir_ffi/builders/callback_builder.rb +3 -1
  25. data/lib/gir_ffi/builders/callback_return_value_builder.rb +9 -1
  26. data/lib/gir_ffi/builders/field_builder.rb +68 -18
  27. data/lib/gir_ffi/builders/function_builder.rb +12 -2
  28. data/lib/gir_ffi/builders/mapping_method_builder.rb +7 -5
  29. data/lib/gir_ffi/builders/marshalling_method_builder.rb +1 -1
  30. data/lib/gir_ffi/builders/module_builder.rb +1 -1
  31. data/lib/gir_ffi/builders/registered_type_builder.rb +0 -9
  32. data/lib/gir_ffi/builders/return_value_builder.rb +0 -1
  33. data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -1
  34. data/lib/gir_ffi/builders/struct_builder.rb +4 -16
  35. data/lib/gir_ffi/builders/union_builder.rb +2 -13
  36. data/lib/gir_ffi/builders/user_defined_builder.rb +6 -6
  37. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +44 -0
  38. data/lib/gir_ffi/builders/vfunc_builder.rb +3 -1
  39. data/lib/gir_ffi/callback_base.rb +5 -2
  40. data/lib/gir_ffi/class_base.rb +6 -7
  41. data/lib/gir_ffi/enum_base.rb +5 -0
  42. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -0
  43. data/lib/gir_ffi/field_argument_info.rb +4 -0
  44. data/lib/gir_ffi/in_out_pointer.rb +1 -1
  45. data/lib/gir_ffi/in_pointer.rb +2 -2
  46. data/lib/gir_ffi/info_ext/i_arg_info.rb +12 -2
  47. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  48. data/lib/gir_ffi/info_ext/i_callback_info.rb +7 -2
  49. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  50. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  51. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +7 -2
  52. data/lib/gir_ffi/info_ext/i_type_info.rb +21 -9
  53. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +5 -0
  54. data/lib/gir_ffi/interface_base.rb +5 -0
  55. data/lib/gir_ffi/object_base.rb +5 -0
  56. data/lib/gir_ffi/receiver_argument_info.rb +5 -0
  57. data/lib/gir_ffi/registered_type_base.rb +5 -0
  58. data/lib/gir_ffi/return_value_info.rb +3 -1
  59. data/lib/gir_ffi/sized_array.rb +1 -1
  60. data/lib/gir_ffi/struct_base.rb +2 -24
  61. data/lib/gir_ffi/type_map.rb +5 -1
  62. data/lib/gir_ffi/union_base.rb +2 -2
  63. data/lib/gir_ffi/version.rb +1 -1
  64. data/lib/gir_ffi/zero_terminated.rb +1 -1
  65. data/test/base_test_helper.rb +6 -6
  66. data/test/ffi-glib/hash_table_test.rb +7 -7
  67. data/test/ffi-glib/iconv_test.rb +2 -3
  68. data/test/ffi-glib/main_loop_test.rb +2 -2
  69. data/test/ffi-gobject/gobject_test.rb +1 -1
  70. data/test/ffi-gobject/object_test.rb +5 -14
  71. data/test/ffi-gobject/value_test.rb +30 -6
  72. data/test/ffi-gobject_introspection/i_base_info_test.rb +6 -6
  73. data/test/ffi-gobject_introspection/i_repository_test.rb +2 -4
  74. data/test/gir_ffi/arg_helper_test.rb +1 -1
  75. data/test/gir_ffi/builder_test.rb +18 -12
  76. data/test/gir_ffi/builders/argument_builder_test.rb +2 -5
  77. data/test/gir_ffi/builders/callback_builder_test.rb +1 -1
  78. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +11 -10
  79. data/test/gir_ffi/builders/field_builder_test.rb +0 -2
  80. data/test/gir_ffi/builders/function_builder_test.rb +156 -147
  81. data/test/gir_ffi/builders/interface_builder_test.rb +1 -1
  82. data/test/gir_ffi/builders/module_builder_test.rb +2 -2
  83. data/test/gir_ffi/builders/object_builder_test.rb +2 -2
  84. data/test/gir_ffi/builders/property_builder_test.rb +5 -5
  85. data/test/gir_ffi/builders/return_value_builder_test.rb +30 -30
  86. data/test/gir_ffi/builders/struct_builder_test.rb +14 -14
  87. data/test/gir_ffi/builders/user_defined_builder_test.rb +21 -22
  88. data/test/gir_ffi/builders/vfunc_builder_test.rb +57 -0
  89. data/test/gir_ffi/class_base_test.rb +8 -8
  90. data/test/gir_ffi/ffi_ext/pointer_test.rb +4 -4
  91. data/test/gir_ffi/g_type_test.rb +1 -1
  92. data/test/gir_ffi/in_pointer_test.rb +2 -2
  93. data/test/gir_ffi/info_ext/i_callable_info_test.rb +3 -3
  94. data/test/gir_ffi/info_ext/i_callback_info_test.rb +2 -2
  95. data/test/gir_ffi/info_ext/i_field_info_test.rb +8 -8
  96. data/test/gir_ffi/info_ext/i_function_info_test.rb +13 -13
  97. data/test/gir_ffi/info_ext/i_type_info_test.rb +131 -132
  98. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +2 -2
  99. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
  100. data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
  101. data/test/gir_ffi/interface_base_test.rb +3 -3
  102. data/test/gir_ffi/object_base_test.rb +3 -3
  103. data/test/gir_ffi/sized_array_test.rb +2 -2
  104. data/test/gir_ffi/type_map_test.rb +3 -3
  105. data/test/gir_ffi/unintrospectable_type_info_test.rb +14 -14
  106. data/test/gir_ffi/user_defined_property_info_test.rb +1 -1
  107. data/test/gir_ffi/user_defined_type_info_test.rb +25 -12
  108. data/test/gir_ffi/zero_terminated_test.rb +0 -1
  109. data/test/gir_ffi_test.rb +3 -3
  110. data/test/gir_ffi_test_helper.rb +4 -0
  111. data/test/integration/generated_gimarshallingtests_test.rb +31 -25
  112. data/test/integration/generated_gio_test.rb +1 -1
  113. data/test/integration/generated_gobject_test.rb +1 -1
  114. data/test/integration/generated_regress_test.rb +18 -22
  115. metadata +11 -8
@@ -6,7 +6,12 @@ module GirFFI
6
6
  module RegisteredTypeBase
7
7
  include TypeBase
8
8
 
9
+ # @deprecated Use #gtype. Will be removed in 0.8.0.
9
10
  def get_gtype
11
+ gtype
12
+ end
13
+
14
+ def gtype
10
15
  self::G_TYPE
11
16
  end
12
17
  end
@@ -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 = false
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
 
@@ -45,7 +45,7 @@ module GirFFI
45
45
  private
46
46
 
47
47
  def element_ffi_type
48
- @element_ffi_type ||= GirFFI::TypeMap.type_specification_to_ffitype element_type
48
+ @element_ffi_type ||= GirFFI::TypeMap.type_specification_to_ffi_type element_type
49
49
  end
50
50
 
51
51
  def element_size
@@ -1,29 +1,7 @@
1
- require 'gir_ffi/class_base'
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 < ClassBase
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
@@ -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.to_ffitype
53
+ type.to_ffi_type
50
54
  when Array
51
55
  type[0]
52
56
  else
@@ -1,7 +1,7 @@
1
- require 'gir_ffi/struct_base'
1
+ require 'gir_ffi/boxed_base'
2
2
 
3
3
  module GirFFI
4
4
  # Base class for generated classes representing GLib unions.
5
- class UnionBase < StructBase
5
+ class UnionBase < BoxedBase
6
6
  end
7
7
  end
@@ -1,4 +1,4 @@
1
1
  # Current GirFFI version
2
2
  module GirFFI
3
- VERSION = '0.7.8'
3
+ VERSION = '0.7.9'
4
4
  end
@@ -58,7 +58,7 @@ module GirFFI
58
58
  end
59
59
 
60
60
  def ffi_type
61
- @ffi_type ||= TypeMap.type_specification_to_ffitype element_type
61
+ @ffi_type ||= TypeMap.type_specification_to_ffi_type element_type
62
62
  end
63
63
 
64
64
  def ffi_type_size
@@ -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
- begin
12
- require 'coveralls'
13
- Coveralls.wear!
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
- 'foo' => 23, 'bar' => 32
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
- 'foo' => 'bar',
55
- 'baz' => 'bat',
56
- 'qux' => 'quux'
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
- 'foo' => 'bar',
62
- 'baz' => 'bat',
63
- 'qux' => 'quux'
61
+ 'foo' => 'bar',
62
+ 'baz' => 'bat',
63
+ 'qux' => 'quux'
64
64
  end
65
65
  end
66
66
  end
@@ -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, 100,
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.last.must_equal 'After run'
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.get_gtype
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
- assert_equal 1,
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
- mock(GObject).signal_connect(subject, 'some-event', nil)
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
- mock(GObject).signal_connect(subject, 'some-event', 'data')
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
- mock(GObject).signal_connect_after(subject, 'some-event', nil)
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
- mock(GObject).signal_connect_after(subject, 'some-event', 'data')
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.get_gtype
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.get_gtype
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.get_gtype
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.get_gtype
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.get_gtype)
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
- mock(ptr = Object.new).null? { true }
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
- mock(ptr = Object.new).null? { false }
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
- mock(ptr = Object.new).null? { false }
39
- mock(lib = Object.new).g_base_info_unref(ptr) { nil }
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
- stub(ptr2 = Object.new).null? { false }
46
- stub(lib).g_base_info_unref(ptr2) { nil }
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
- mock(klass).wrap(:pointer_value) { :wrapped_value }
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
- mock(lib).
22
- attach_function('regress_test_callback_destroy_notify',
23
- [Regress::TestCallbackUserData, :pointer, GLib::DestroyNotify],
24
- :int32) { true }
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
- mock(lib).
33
- attach_function('regress_test_obj_torture_signature_0',
34
- [:pointer, :int32, :pointer, :pointer, :pointer, :pointer, :uint32],
35
- :void) { true }
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
- mock(lib).attach_function('regress_test_obj_instance_method',
43
- [:pointer], :int32) { true }
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
- mock(lib).attach_function('regress_test_array_gint32_in',
50
- [:int32, :pointer], :int32) { true }
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