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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +13 -0
  3. data/Gemfile +9 -4
  4. data/README.md +3 -2
  5. data/Rakefile +2 -1
  6. data/lib/ffi-glib/byte_array.rb +1 -1
  7. data/lib/ffi-glib/main_loop.rb +2 -1
  8. data/lib/ffi-glib/strv.rb +5 -2
  9. data/lib/ffi-glib/variant.rb +3 -5
  10. data/lib/ffi-glib.rb +4 -0
  11. data/lib/ffi-gobject/closure.rb +8 -10
  12. data/lib/ffi-gobject/object.rb +9 -6
  13. data/lib/ffi-gobject/param_spec.rb +4 -0
  14. data/lib/ffi-gobject/value.rb +13 -16
  15. data/lib/ffi-gobject_introspection/gobject_type_init.rb +18 -0
  16. data/lib/ffi-gobject_introspection/i_callable_info.rb +1 -5
  17. data/lib/ffi-gobject_introspection/i_constant_info.rb +3 -3
  18. data/lib/ffi-gobject_introspection/i_repository.rb +3 -47
  19. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +3 -11
  20. data/lib/ffi-gobject_introspection/lib.rb +8 -31
  21. data/lib/{gir_ffi-base/glib → ffi-gobject_introspection}/strv.rb +9 -13
  22. data/lib/ffi-gobject_introspection.rb +47 -2
  23. data/lib/gir_ffi/allocation_helper.rb +1 -19
  24. data/lib/gir_ffi/arg_helper.rb +36 -26
  25. data/lib/{gir_ffi-base/glib → gir_ffi}/boolean.rb +7 -5
  26. data/lib/gir_ffi/boxed_base.rb +5 -23
  27. data/lib/gir_ffi/builder.rb +3 -3
  28. data/lib/gir_ffi/builders/argument_builder.rb +7 -8
  29. data/lib/gir_ffi/builders/base_argument_builder.rb +0 -1
  30. data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -2
  31. data/lib/gir_ffi/builders/callback_return_value_builder.rb +21 -13
  32. data/lib/gir_ffi/builders/field_builder.rb +4 -10
  33. data/lib/gir_ffi/builders/module_builder.rb +6 -4
  34. data/lib/gir_ffi/builders/object_builder.rb +16 -16
  35. data/lib/gir_ffi/builders/struct_builder.rb +4 -6
  36. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  37. data/lib/gir_ffi/builders/user_defined_builder.rb +83 -23
  38. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +12 -17
  39. data/lib/gir_ffi/class_base.rb +0 -4
  40. data/lib/gir_ffi/core.rb +16 -13
  41. data/lib/gir_ffi/enum_base.rb +2 -41
  42. data/lib/gir_ffi/enum_like_base.rb +48 -0
  43. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  44. data/lib/gir_ffi/flags_base.rb +2 -41
  45. data/lib/gir_ffi/in_out_pointer.rb +1 -1
  46. data/lib/gir_ffi/in_pointer.rb +4 -4
  47. data/lib/gir_ffi/info_ext/i_type_info.rb +14 -5
  48. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +8 -0
  49. data/lib/gir_ffi/module_base.rb +4 -0
  50. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  51. data/lib/gir_ffi/sized_array.rb +6 -6
  52. data/lib/gir_ffi/struct_base.rb +1 -6
  53. data/lib/gir_ffi/struct_like_base.rb +54 -45
  54. data/lib/gir_ffi/type_map.rb +6 -7
  55. data/lib/gir_ffi/union_base.rb +1 -1
  56. data/lib/gir_ffi/{user_defined_type_info.rb → user_defined_object_info.rb} +1 -2
  57. data/lib/gir_ffi/user_defined_property_info.rb +80 -2
  58. data/lib/gir_ffi/version.rb +1 -1
  59. data/lib/gir_ffi-base/gobject/lib.rb +0 -1
  60. data/lib/gir_ffi-base/gobject.rb +3 -5
  61. data/lib/gir_ffi-base.rb +3 -8
  62. data/tasks/test.rake +17 -3
  63. data/test/base_test_helper.rb +39 -23
  64. data/test/ffi-glib/closure_test.rb +37 -0
  65. data/test/ffi-glib/main_loop_test.rb +24 -0
  66. data/test/ffi-glib/ruby_closure_test.rb +0 -5
  67. data/test/ffi-gobject/object_test.rb +6 -10
  68. data/test/ffi-gobject/param_spec_test.rb +17 -5
  69. data/test/ffi-gobject/value_test.rb +15 -6
  70. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +25 -0
  71. data/test/ffi-gobject_introspection/i_base_info_test.rb +1 -1
  72. data/test/ffi-gobject_introspection/i_repository_test.rb +18 -0
  73. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +40 -0
  74. data/test/{gir_ffi-base/glib → ffi-gobject_introspection}/strv_test.rb +8 -8
  75. data/test/gir_ffi/allocation_helper_test.rb +35 -0
  76. data/test/gir_ffi/arg_helper_test.rb +102 -7
  77. data/test/gir_ffi/boolean_test.rb +34 -0
  78. data/test/gir_ffi/boxed_base_test.rb +46 -6
  79. data/test/gir_ffi/builder_test.rb +88 -29
  80. data/test/gir_ffi/builders/argument_builder_test.rb +19 -0
  81. data/test/gir_ffi/builders/callback_argument_builder_test.rb +17 -0
  82. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +1 -1
  83. data/test/gir_ffi/builders/field_builder_test.rb +2 -1
  84. data/test/gir_ffi/builders/struct_builder_test.rb +42 -25
  85. data/test/gir_ffi/builders/user_defined_builder_test.rb +365 -17
  86. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +100 -0
  87. data/test/gir_ffi/builders/vfunc_builder_test.rb +5 -3
  88. data/test/{gir_ffi_test.rb → gir_ffi/core_test.rb} +8 -6
  89. data/test/gir_ffi/in_out_pointer_test.rb +1 -1
  90. data/test/gir_ffi/receiver_argument_info_test.rb +32 -0
  91. data/test/gir_ffi/sized_array_test.rb +34 -0
  92. data/test/gir_ffi/struct_base_test.rb +4 -32
  93. data/test/gir_ffi/struct_like_base_test.rb +164 -0
  94. data/test/gir_ffi/union_base_test.rb +4 -20
  95. data/test/gir_ffi/{user_defined_type_info_test.rb → user_defined_object_info_test.rb} +10 -10
  96. data/test/gir_ffi/user_defined_property_info_test.rb +22 -5
  97. data/test/gir_ffi/version_test.rb +1 -1
  98. data/test/integration/callback_exceptions_test.rb +2 -0
  99. data/test/integration/derived_classes_test.rb +2 -0
  100. data/test/integration/generated_everything_test.rb +22 -0
  101. data/test/integration/generated_gimarshallingtests_test.rb +23 -21
  102. data/test/integration/generated_gio_test.rb +2 -0
  103. data/test/integration/generated_glib_test.rb +2 -0
  104. data/test/integration/generated_gst_test.rb +2 -0
  105. data/test/integration/generated_gtop_test.rb +2 -0
  106. data/test/integration/generated_regress_test.rb +113 -29
  107. data/test/integration/generated_secret_test.rb +2 -0
  108. data/test/integration/generated_warnlib_test.rb +2 -0
  109. data/test/integration/method_lookup_test.rb +2 -0
  110. data/test/introspection_test_helper.rb +15 -0
  111. metadata +21 -27
  112. data/lib/gir_ffi-base/glib.rb +0 -8
  113. 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/user_defined_type_info'
3
+ require 'gir_ffi/user_defined_object_info'
4
4
 
5
5
  GirFFI.setup :GIMarshallingTests
6
6
 
7
- describe GirFFI::UserDefinedTypeInfo do
7
+ describe GirFFI::UserDefinedObjectInfo do
8
8
  describe '#described_class' do
9
- let(:info) { GirFFI::UserDefinedTypeInfo.new :some_class }
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::UserDefinedTypeInfo.new :some_class }
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::UserDefinedTypeInfo.new :some_class }
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::UserDefinedTypeInfo.new :some_class do |inf|
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::UserDefinedTypeInfo.new klass }
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::UserDefinedTypeInfo.new klass }
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::UserDefinedTypeInfo.new klass }
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::UserDefinedTypeInfo.new klass }
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 = GirFFI::UserDefinedPropertyInfo.new :some_param_spec
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
- expect(param_spec = Object.new).to receive(:get_name).and_return :property_name
16
- info = GirFFI::UserDefinedPropertyInfo.new param_spec
17
- info.name.must_equal :property_name
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
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'gir_ffi_test_helper'
3
3
 
4
- describe GirFFI::VERSION do
4
+ describe 'GirFFI::VERSION' do
5
5
  it 'is set to a valid version number' do
6
6
  GirFFI::VERSION.must_match(/\d+\.\d+\.\d+/)
7
7
  end
@@ -6,6 +6,8 @@ GirFFI.setup :Regress
6
6
  class CallbackTestException < RuntimeError; end
7
7
 
8
8
  describe 'An exception in a callback' do
9
+ cover 'GLib::MainLoop'
10
+
9
11
  describe 'for signals' do
10
12
  let(:object) { Regress::TestSubObj.new }
11
13
 
@@ -5,6 +5,8 @@ GirFFI.setup :Regress
5
5
 
6
6
  # Tests deriving Ruby classes from GObject classes.
7
7
  describe 'For derived classes' do
8
+ cover 'GirFFI'
9
+
8
10
  describe 'setting up methods when first called' do
9
11
  before do
10
12
  save_module :GIMarshallingTests
@@ -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
- skip 'Introspection data is not generated correctly'
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, nil
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
- skip 'param_spec_in_bool tests the wrong type'
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('/')
@@ -3,6 +3,8 @@ require 'gir_ffi_test_helper'
3
3
 
4
4
  # Tests generated classes, methods and functions in the GLib namespace.
5
5
  describe 'The generated GLib module' do
6
+ cover 'GLib'
7
+
6
8
  it 'can auto-generate the GLib::IConv class' do
7
9
  klass = GLib::IConv
8
10
 
@@ -6,6 +6,8 @@ Gst.init []
6
6
 
7
7
  # Tests behavior of objects in the generated Gio namespace.
8
8
  describe 'the generated Gst module' do
9
+ cover 'Gst'
10
+
9
11
  describe 'Gst::FakeSink' do
10
12
  let(:instance) { Gst::ElementFactory.make('fakesink', 'sink') }
11
13
 
@@ -4,6 +4,8 @@ require 'gir_ffi_test_helper'
4
4
  # Tests generated methods and functions in the GTop namespace. This namespace
5
5
  # contains types with bad names, like 'glibtop_cpu'.
6
6
  describe 'The generated GTop module' do
7
+ cover 'GTop'
8
+
7
9
  before do
8
10
  begin
9
11
  GirFFI.setup :GTop