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.
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