gir_ffi 0.9.5 → 0.10.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Changelog.md +9 -0
- data/lib/ffi-glib/byte_array.rb +1 -1
- data/lib/ffi-glib/bytes.rb +4 -4
- data/lib/ffi-glib/container_class_methods.rb +2 -0
- data/lib/ffi-glib/iconv.rb +2 -2
- data/lib/ffi-glib/variant.rb +10 -2
- data/lib/ffi-gobject.rb +6 -14
- data/lib/ffi-gobject/object.rb +7 -0
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/param_spec.rb +12 -0
- data/lib/ffi-gobject/value.rb +20 -11
- data/lib/gir_ffi-base/gobject.rb +35 -3
- data/lib/gir_ffi-base/gobject/lib.rb +2 -0
- data/lib/gir_ffi/allocation_helper.rb +11 -0
- data/lib/gir_ffi/arg_helper.rb +4 -0
- data/lib/gir_ffi/boxed_base.rb +28 -32
- data/lib/gir_ffi/builders/argument_builder.rb +31 -6
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +36 -7
- data/lib/gir_ffi/builders/callback_argument_builder.rb +24 -10
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +1 -1
- data/lib/gir_ffi/builders/field_builder.rb +28 -10
- data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +2 -3
- data/lib/gir_ffi/builders/initializer_return_value_builder.rb +5 -1
- data/lib/gir_ffi/builders/null_argument_builder.rb +0 -12
- data/lib/gir_ffi/builders/pointer_value_convertor.rb +38 -0
- data/lib/gir_ffi/builders/return_value_builder.rb +12 -10
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +21 -2
- data/lib/gir_ffi/builders/struct_builder.rb +9 -2
- data/lib/gir_ffi/builders/{boxed_builder.rb → struct_like.rb} +2 -5
- data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +5 -2
- data/lib/gir_ffi/builders/union_builder.rb +5 -2
- data/lib/gir_ffi/enum_base.rb +4 -0
- data/lib/gir_ffi/error_argument_info.rb +0 -16
- data/lib/gir_ffi/ffi_ext/pointer.rb +11 -5
- data/lib/gir_ffi/flags_base.rb +4 -0
- data/lib/gir_ffi/in_out_pointer.rb +5 -30
- data/lib/gir_ffi/in_pointer.rb +5 -4
- data/lib/gir_ffi/info_ext/i_type_info.rb +3 -5
- data/lib/gir_ffi/object_base.rb +4 -0
- data/lib/gir_ffi/sized_array.rb +20 -0
- data/lib/gir_ffi/struct_base.rb +13 -2
- data/lib/gir_ffi/struct_like_base.rb +53 -0
- data/lib/gir_ffi/union_base.rb +7 -1
- data/lib/gir_ffi/version.rb +1 -1
- data/test/ffi-glib/destroy_notify_test.rb +4 -1
- data/test/ffi-gobject/param_spec_test.rb +18 -0
- data/test/gir_ffi/arg_helper_test.rb +17 -0
- data/test/gir_ffi/boxed_base_test.rb +24 -0
- data/test/gir_ffi/builders/argument_builder_test.rb +156 -63
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +10 -10
- data/test/gir_ffi/builders/callback_builder_test.rb +31 -8
- data/test/gir_ffi/builders/field_builder_test.rb +32 -30
- data/test/gir_ffi/builders/function_builder_test.rb +251 -45
- data/test/gir_ffi/builders/initializer_builder_test.rb +17 -1
- data/test/gir_ffi/builders/return_value_builder_test.rb +115 -68
- data/test/gir_ffi/builders/struct_builder_test.rb +6 -0
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +4 -1
- data/test/gir_ffi/builders/vfunc_builder_test.rb +10 -10
- data/test/gir_ffi/in_out_pointer_test.rb +12 -81
- data/test/gir_ffi/in_pointer_test.rb +0 -17
- data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -10
- data/test/gir_ffi/sized_array_test.rb +62 -0
- data/test/gir_ffi/struct_base_test.rb +24 -0
- data/test/gir_ffi/union_base_test.rb +24 -0
- data/test/gir_ffi/version_test.rb +1 -1
- data/test/integration/generated_gimarshallingtests_test.rb +32 -12
- data/test/integration/generated_regress_test.rb +9 -12
- metadata +12 -8
- data/lib/ffi-gobject/base.rb +0 -27
- data/lib/gir_ffi/user_data_argument_info.rb +0 -24
- data/lib/gir_ffi/user_data_type_info.rb +0 -22
@@ -11,102 +11,32 @@ describe GirFFI::InOutPointer do
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
describe 'an instance created with .from' do
|
15
|
-
before do
|
16
|
-
@result = GirFFI::InOutPointer.from :gint32, 23
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'holds a pointer to the given value' do
|
20
|
-
assert_equal 23, @result.get_int32(0)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'is an instance of GirFFI::InOutPointer' do
|
24
|
-
assert_instance_of GirFFI::InOutPointer, @result
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe '.from' do
|
29
|
-
it 'handles :gboolean false' do
|
30
|
-
ptr = GirFFI::InOutPointer.from :gboolean, false
|
31
|
-
ptr.read_int.must_equal 0
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'handles :gboolean true' do
|
35
|
-
ptr = GirFFI::InOutPointer.from :gboolean, true
|
36
|
-
ptr.read_int.must_equal(1)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'handles :utf8 pointers' do
|
40
|
-
str_ptr = GirFFI::InPointer.from :utf8, 'Hello'
|
41
|
-
GirFFI::InOutPointer.from :utf8, str_ptr
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe 'in instance created with .for' do
|
46
|
-
before do
|
47
|
-
@result = GirFFI::InOutPointer.for :gint32
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'holds a pointer to a null value' do
|
51
|
-
assert_equal 0, @result.get_int32(0)
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'is an instance of GirFFI::InOutPointer' do
|
55
|
-
assert_instance_of GirFFI::InOutPointer, @result
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe '.for' do
|
60
|
-
it 'handles :gboolean' do
|
61
|
-
result = GirFFI::InOutPointer.for :gboolean
|
62
|
-
result.to_value.must_equal false
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'handles :utf8' do
|
66
|
-
result = GirFFI::InOutPointer.for :utf8
|
67
|
-
result.to_value.must_be :null?
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'handles GObject::Value' do
|
71
|
-
result = GirFFI::InOutPointer.for GObject::Value
|
72
|
-
type_size = FFI.type_size GObject::Value
|
73
|
-
expected = "\x00" * type_size
|
74
|
-
result.to_value.read_bytes(type_size).must_equal expected
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe '#set_value' do
|
79
|
-
it 'works setting the value to nil for GObject::Value' do
|
80
|
-
pointer = GirFFI::InOutPointer.from GObject::Value, GObject::Value.from(3)
|
81
|
-
pointer.set_value nil
|
82
|
-
type_size = FFI.type_size GObject::Value
|
83
|
-
expected = "\x00" * type_size
|
84
|
-
pointer.to_value.read_bytes(type_size).must_equal expected
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
14
|
describe '#to_value' do
|
89
15
|
it 'returns the held value' do
|
90
|
-
ptr = GirFFI::InOutPointer.
|
16
|
+
ptr = GirFFI::InOutPointer.allocate_new :gint32
|
17
|
+
ptr.write_int32 123
|
91
18
|
assert_equal 123, ptr.to_value
|
92
19
|
end
|
93
20
|
|
94
21
|
describe 'for :gboolean values' do
|
95
22
|
it 'works when the value is false' do
|
96
|
-
ptr = GirFFI::InOutPointer.
|
23
|
+
ptr = GirFFI::InOutPointer.allocate_new :gboolean
|
24
|
+
ptr.write_int 0
|
97
25
|
ptr.to_value.must_equal false
|
98
26
|
end
|
99
27
|
|
100
28
|
it 'works when the value is true' do
|
101
|
-
ptr = GirFFI::InOutPointer.
|
29
|
+
ptr = GirFFI::InOutPointer.allocate_new :gboolean
|
30
|
+
ptr.write_int 1
|
102
31
|
ptr.to_value.must_equal true
|
103
32
|
end
|
104
33
|
end
|
105
34
|
|
106
35
|
describe 'for :utf8 values' do
|
107
|
-
it 'returns a pointer to the held value' do
|
108
|
-
str_ptr = GirFFI::InPointer.
|
109
|
-
ptr = GirFFI::InOutPointer.
|
36
|
+
it 'returns a pointer to the held string value' do
|
37
|
+
str_ptr = GirFFI::InPointer.from_utf8 'Some value'
|
38
|
+
ptr = GirFFI::InOutPointer.allocate_new :utf8
|
39
|
+
ptr.write_pointer str_ptr
|
110
40
|
assert_equal 'Some value', ptr.to_value.read_string
|
111
41
|
end
|
112
42
|
end
|
@@ -115,7 +45,8 @@ describe GirFFI::InOutPointer do
|
|
115
45
|
it 'returns a pointer to the held value' do
|
116
46
|
val = GObject::EnumValue.new
|
117
47
|
val.value = 3
|
118
|
-
ptr = GirFFI::InOutPointer.
|
48
|
+
ptr = GirFFI::InOutPointer.allocate_new GObject::EnumValue
|
49
|
+
GObject::EnumValue.copy_value_to_pointer val, ptr
|
119
50
|
result = ptr.to_value
|
120
51
|
GObject::EnumValue.wrap(result).value.must_equal 3
|
121
52
|
end
|
@@ -181,21 +181,4 @@ describe GirFFI::InPointer do
|
|
181
181
|
end
|
182
182
|
end
|
183
183
|
end
|
184
|
-
|
185
|
-
describe '.from_closure_data' do
|
186
|
-
describe 'when called with nil' do
|
187
|
-
it 'returns a null pointer' do
|
188
|
-
GirFFI::InPointer.from_closure_data(nil).must_be :null?
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
describe 'when called with a string' do
|
193
|
-
it 'stores the string in GirFFI::ArgHelper::OBJECT_STORE' do
|
194
|
-
str = 'Foo'
|
195
|
-
ptr = GirFFI::InPointer.from_closure_data(str)
|
196
|
-
result = GirFFI::ArgHelper::OBJECT_STORE.fetch(ptr)
|
197
|
-
result.must_equal str
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
184
|
end
|
@@ -291,16 +291,6 @@ describe GirFFI::InfoExt::ITypeInfo do
|
|
291
291
|
end
|
292
292
|
end
|
293
293
|
|
294
|
-
describe 'for a string' do
|
295
|
-
before do
|
296
|
-
allow(type_info).to receive(:tag).and_return :utf8
|
297
|
-
end
|
298
|
-
|
299
|
-
it 'returns an array containing :utf8' do
|
300
|
-
type_info.extra_conversion_arguments.must_equal [:utf8]
|
301
|
-
end
|
302
|
-
end
|
303
|
-
|
304
294
|
describe 'for a fixed-size array' do
|
305
295
|
before do
|
306
296
|
allow(type_info).to receive(:tag).and_return :array
|
@@ -81,6 +81,68 @@ describe GirFFI::SizedArray do
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
describe '.copy_from' do
|
85
|
+
describe 'from a Ruby array' do
|
86
|
+
it 'creates an unowned GirFFI::SizedArray with the same elements' do
|
87
|
+
arr = GirFFI::SizedArray.copy_from :gint32, 3, [3, 2, 1]
|
88
|
+
arr.must_be_instance_of GirFFI::SizedArray
|
89
|
+
assert_equal [3, 2, 1], arr.to_a
|
90
|
+
arr.to_ptr.wont_be :autorelease?
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'creates unowned copies of struct pointer elements' do
|
94
|
+
struct = GIMarshallingTests::BoxedStruct.new
|
95
|
+
struct.long_ = 2342
|
96
|
+
arr = GirFFI::SizedArray.copy_from([:pointer, GIMarshallingTests::BoxedStruct],
|
97
|
+
1,
|
98
|
+
[struct])
|
99
|
+
arr.must_be_instance_of GirFFI::SizedArray
|
100
|
+
arr.to_ptr.wont_be :autorelease?
|
101
|
+
|
102
|
+
struct_copy = arr.first
|
103
|
+
struct_copy.long_.must_equal struct.long_
|
104
|
+
struct_copy.to_ptr.wont_equal struct.to_ptr
|
105
|
+
struct_copy.to_ptr.wont_be :autorelease?
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'increases the ref count of object pointer elements' do
|
109
|
+
obj = GIMarshallingTests::Object.new 42
|
110
|
+
arr = GirFFI::SizedArray.copy_from([:pointer, GIMarshallingTests::Object],
|
111
|
+
-1,
|
112
|
+
[obj, nil])
|
113
|
+
arr.must_be_instance_of GirFFI::SizedArray
|
114
|
+
arr.to_ptr.wont_be :autorelease?
|
115
|
+
|
116
|
+
arr.to_a.must_equal [obj, nil]
|
117
|
+
obj.ref_count.must_equal 2
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe 'from a GirFFI::SizedArray' do
|
122
|
+
it 'return an unowned copy of its argument' do
|
123
|
+
arr = GirFFI::SizedArray.from :gint32, 3, [3, 2, 1]
|
124
|
+
arr2 = GirFFI::SizedArray.copy_from :gint32, 3, arr
|
125
|
+
arr.to_ptr.wont_equal arr2.to_ptr
|
126
|
+
arr2.to_a.must_equal [3, 2, 1]
|
127
|
+
arr2.to_ptr.wont_be :autorelease?
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'returns nil when passed nil' do
|
132
|
+
arr = GirFFI::SizedArray.copy_from :gint32, 0, nil
|
133
|
+
arr.must_be_nil
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'creates an unowned copy of its argument if given a pointer' do
|
137
|
+
arr = GirFFI::SizedArray.from :gint32, 3, [3, 2, 1]
|
138
|
+
arr2 = GirFFI::SizedArray.copy_from :gint32, 3, arr.to_ptr
|
139
|
+
assert_instance_of GirFFI::SizedArray, arr2
|
140
|
+
arr2.to_ptr.wont_equal arr.to_ptr
|
141
|
+
arr2.to_ptr.wont_be :autorelease?
|
142
|
+
arr2.to_a.must_equal [3, 2, 1]
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
84
146
|
describe '#==' do
|
85
147
|
it 'returns true when comparing to an array with the same elements' do
|
86
148
|
sized = GirFFI::SizedArray.from :int32, 3, [1, 2, 3]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'gir_ffi_test_helper'
|
3
|
+
|
4
|
+
GirFFI.setup :GIMarshallingTests
|
5
|
+
|
6
|
+
describe GirFFI::StructBase do
|
7
|
+
describe 'wrap_copy' do
|
8
|
+
it 'returns a wrapped copy with autorelease true' 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.must_be :autorelease?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'copy_from' do
|
17
|
+
it 'returns a copy with autorelease false' do
|
18
|
+
original = GIMarshallingTests::SimpleStruct.new
|
19
|
+
copy = GIMarshallingTests::SimpleStruct.copy_from(original)
|
20
|
+
copy.to_ptr.wont_equal original.to_ptr
|
21
|
+
copy.to_ptr.wont_be :autorelease?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'gir_ffi_test_helper'
|
3
|
+
|
4
|
+
GirFFI.setup :GIMarshallingTests
|
5
|
+
|
6
|
+
describe GirFFI::UnionBase do
|
7
|
+
describe 'wrap_copy' do
|
8
|
+
it 'returns a wrapped copy with autorelease true' do
|
9
|
+
original = GIMarshallingTests::Union.new
|
10
|
+
copy = GIMarshallingTests::Union.wrap_copy(original.to_ptr)
|
11
|
+
copy.to_ptr.wont_equal original.to_ptr
|
12
|
+
copy.to_ptr.must_be :autorelease?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'copy_from' do
|
17
|
+
it 'returns a copy with autorelease false' do
|
18
|
+
original = GIMarshallingTests::Union.new
|
19
|
+
copy = GIMarshallingTests::Union.copy_from(original)
|
20
|
+
copy.to_ptr.wont_equal original.to_ptr
|
21
|
+
copy.to_ptr.wont_be :autorelease?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -45,6 +45,7 @@ describe GIMarshallingTests do
|
|
45
45
|
it 'creates an instance using #new' do
|
46
46
|
bx = GIMarshallingTests::BoxedStruct.new
|
47
47
|
assert_instance_of GIMarshallingTests::BoxedStruct, bx
|
48
|
+
bx.to_ptr.must_be :autorelease?
|
48
49
|
end
|
49
50
|
|
50
51
|
it 'has a working method #inv' do
|
@@ -56,22 +57,27 @@ describe GIMarshallingTests do
|
|
56
57
|
it 'has a working function #inout' do
|
57
58
|
bx = GIMarshallingTests::BoxedStruct.new
|
58
59
|
bx.long_ = 42
|
60
|
+
bx.to_ptr.must_be :autorelease?
|
59
61
|
|
60
|
-
|
62
|
+
# FIXME: Temporary check method
|
63
|
+
bx.to_ptr.autorelease = true
|
61
64
|
|
62
|
-
|
63
|
-
|
65
|
+
res = GIMarshallingTests::BoxedStruct.inout bx
|
66
|
+
bx.to_ptr.must_be :autorelease?
|
67
|
+
res.to_ptr.must_be :autorelease?
|
64
68
|
|
65
69
|
assert_equal 0, res.long_
|
66
70
|
end
|
67
71
|
|
68
72
|
it 'has a working function #out' do
|
69
73
|
res = GIMarshallingTests::BoxedStruct.out
|
74
|
+
res.to_ptr.must_be :autorelease?
|
70
75
|
assert_equal 42, res.long_
|
71
76
|
end
|
72
77
|
|
73
78
|
it 'has a working function #returnv' do
|
74
79
|
res = GIMarshallingTests::BoxedStruct.returnv
|
80
|
+
res.to_ptr.must_be :autorelease?
|
75
81
|
assert_equal 42, res.long_
|
76
82
|
res.g_strv.must_be :==, %w(0 1 2)
|
77
83
|
end
|
@@ -275,8 +281,9 @@ describe GIMarshallingTests do
|
|
275
281
|
it 'has a writable field pointer' do
|
276
282
|
instance.pointer.must_be_nil
|
277
283
|
nested = GIMarshallingTests::NestedStruct.new
|
284
|
+
nested.simple_struct.int8 = 23
|
278
285
|
instance.pointer = nested
|
279
|
-
instance.pointer.must_equal
|
286
|
+
instance.pointer.simple_struct.int8.must_equal 23
|
280
287
|
end
|
281
288
|
end
|
282
289
|
|
@@ -302,7 +309,7 @@ describe GIMarshallingTests do
|
|
302
309
|
|
303
310
|
res = GIMarshallingTests::Object.full_inout ob
|
304
311
|
|
305
|
-
ob.ref_count.
|
312
|
+
ob.ref_count.must_equal 1
|
306
313
|
res.ref_count.must_equal 1
|
307
314
|
|
308
315
|
res.must_be_instance_of GIMarshallingTests::Object
|
@@ -311,12 +318,14 @@ describe GIMarshallingTests do
|
|
311
318
|
|
312
319
|
it 'has a working function #full_out' do
|
313
320
|
res = GIMarshallingTests::Object.full_out
|
314
|
-
|
321
|
+
res.must_be_instance_of GIMarshallingTests::Object
|
322
|
+
res.ref_count.must_equal 1
|
315
323
|
end
|
316
324
|
|
317
325
|
it 'has a working function #full_return' do
|
318
326
|
res = GIMarshallingTests::Object.full_return
|
319
|
-
|
327
|
+
res.must_be_instance_of GIMarshallingTests::Object
|
328
|
+
res.ref_count.must_equal 1
|
320
329
|
end
|
321
330
|
|
322
331
|
it 'has a working function #inout_same' do
|
@@ -325,19 +334,28 @@ describe GIMarshallingTests do
|
|
325
334
|
|
326
335
|
it 'has a working function #none_inout' do
|
327
336
|
ob = GIMarshallingTests::Object.new 42
|
337
|
+
ob.ref_count.must_equal 1
|
338
|
+
|
328
339
|
res = GIMarshallingTests::Object.none_inout ob
|
329
|
-
|
330
|
-
ob.
|
340
|
+
|
341
|
+
ob.ref_count.must_equal 1
|
342
|
+
res.ref_count.must_equal 2
|
343
|
+
|
344
|
+
res.must_be_instance_of GIMarshallingTests::Object
|
345
|
+
ob.int.must_equal 42
|
346
|
+
res.int.must_equal 0
|
331
347
|
end
|
332
348
|
|
333
349
|
it 'has a working function #none_out' do
|
334
350
|
res = GIMarshallingTests::Object.none_out
|
335
|
-
|
351
|
+
res.must_be_instance_of GIMarshallingTests::Object
|
352
|
+
res.ref_count.must_equal 2
|
336
353
|
end
|
337
354
|
|
338
355
|
it 'has a working function #none_return' do
|
339
356
|
res = GIMarshallingTests::Object.none_return
|
340
|
-
|
357
|
+
res.must_be_instance_of GIMarshallingTests::Object
|
358
|
+
res.ref_count.must_equal 2
|
341
359
|
end
|
342
360
|
|
343
361
|
it 'has a working function #static_method' do
|
@@ -1454,12 +1472,14 @@ describe GIMarshallingTests do
|
|
1454
1472
|
GIMarshallingTests.array_struct_in arr
|
1455
1473
|
end
|
1456
1474
|
|
1457
|
-
# NOTE: Should be run with valgrind. See gimarhallingtests.c.
|
1458
1475
|
it 'has a working function #array_struct_take_in' do
|
1459
1476
|
arr = [1, 2, 3].map do |val|
|
1460
1477
|
GIMarshallingTests::BoxedStruct.new.tap { |struct| struct.long_ = val }
|
1461
1478
|
end
|
1479
|
+
# NOTE: This copies values so arr's elements stay valid
|
1462
1480
|
GIMarshallingTests.array_struct_take_in arr
|
1481
|
+
|
1482
|
+
arr.map(&:long_).must_equal [1, 2, 3]
|
1463
1483
|
end
|
1464
1484
|
|
1465
1485
|
it 'has a working function #array_struct_value_in' do
|
@@ -479,6 +479,7 @@ describe Regress do
|
|
479
479
|
rect = Regress::FooBRect.wrap(Regress::FooBRect::Struct.new.to_ptr)
|
480
480
|
rect.x = 42
|
481
481
|
rect.y = 23
|
482
|
+
skip 'Cannot copy FooBRect structs'
|
482
483
|
instance.rect = rect
|
483
484
|
instance.rect.x.must_equal 42.0
|
484
485
|
instance.rect.y.must_equal 23.0
|
@@ -894,11 +895,9 @@ describe Regress do
|
|
894
895
|
describe 'Regress::FooStruct' do
|
895
896
|
let(:instance) { Regress::FooStruct.new }
|
896
897
|
|
897
|
-
it '
|
898
|
-
instance.priv.
|
899
|
-
|
900
|
-
instance.priv = struct
|
901
|
-
instance.priv.must_equal struct
|
898
|
+
it 'blocks access to the field priv' do
|
899
|
+
proc { instance.priv = nil }.must_raise NoMethodError
|
900
|
+
proc { instance.priv }.must_raise NoMethodError
|
902
901
|
end
|
903
902
|
|
904
903
|
it 'has a writable field member' do
|
@@ -1168,12 +1167,9 @@ describe Regress do
|
|
1168
1167
|
instance.nested_a.some_int.must_equal 12_345
|
1169
1168
|
end
|
1170
1169
|
|
1171
|
-
it '
|
1172
|
-
instance.priv.
|
1173
|
-
|
1174
|
-
instance.priv.wont_equal other.priv
|
1175
|
-
instance.priv = other.priv
|
1176
|
-
instance.priv.must_equal other.priv
|
1170
|
+
it 'blocks access to the field priv' do
|
1171
|
+
proc { instance.priv = nil }.must_raise NoMethodError
|
1172
|
+
proc { instance.priv }.must_raise NoMethodError
|
1177
1173
|
end
|
1178
1174
|
|
1179
1175
|
it 'creates an instance using #new' do
|
@@ -1297,6 +1293,7 @@ describe Regress do
|
|
1297
1293
|
end
|
1298
1294
|
|
1299
1295
|
it 'has a working method #free' do
|
1296
|
+
skip "#free is used internally and shouldn't be exposed"
|
1300
1297
|
instance.free
|
1301
1298
|
pass
|
1302
1299
|
end
|
@@ -2567,7 +2564,7 @@ describe Regress do
|
|
2567
2564
|
|
2568
2565
|
it 'has a writable field data1' do
|
2569
2566
|
instance.data1.must_be :null?
|
2570
|
-
instance.data1 = GirFFI::
|
2567
|
+
instance.data1 = GirFFI::AllocationHelper.allocate(:int32).tap { |it| it.write_int(42) }
|
2571
2568
|
instance.data1.read_int.must_equal 42
|
2572
2569
|
end
|
2573
2570
|
|