gir_ffi 0.5.1 → 0.5.2
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.
- data/History.txt +8 -0
- data/lib/ffi-glib/array.rb +1 -1
- data/lib/ffi-glib.rb +7 -12
- data/lib/ffi-gobject/closure.rb +1 -4
- data/lib/ffi-gobject/object.rb +2 -2
- data/lib/ffi-gobject/ruby_style.rb +2 -0
- data/lib/ffi-gobject/value.rb +19 -1
- data/lib/ffi-gobject.rb +14 -9
- data/lib/ffi-gobject_introspection/i_base_info.rb +5 -5
- data/lib/ffi-gobject_introspection/i_repository.rb +1 -1
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi/arg_helper.rb +3 -3
- data/lib/gir_ffi/argument_builder.rb +21 -17
- data/lib/gir_ffi/base_argument_builder.rb +5 -3
- data/lib/gir_ffi/builder/type/object.rb +1 -0
- data/lib/gir_ffi/builder/type/user_defined.rb +2 -3
- data/lib/gir_ffi/builder.rb +2 -2
- data/lib/gir_ffi/builder_helper.rb +2 -2
- data/lib/gir_ffi/callback_helper.rb +9 -9
- data/lib/gir_ffi/function_builder.rb +2 -2
- data/lib/gir_ffi/in_out_pointer.rb +1 -3
- data/lib/gir_ffi/in_pointer.rb +15 -2
- data/lib/gir_ffi/info_ext/i_arg_info.rb +27 -0
- data/lib/gir_ffi/info_ext/i_field_info.rb +1 -0
- data/lib/gir_ffi/info_ext/i_property_info.rb +1 -0
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_signal_info.rb +65 -0
- data/lib/gir_ffi/info_ext/i_type_info.rb +15 -0
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +1 -0
- data/lib/gir_ffi/info_ext/safe_function_name.rb +1 -0
- data/lib/gir_ffi/info_ext.rb +2 -0
- data/lib/gir_ffi/module_base.rb +1 -3
- data/lib/gir_ffi/return_value_builder.rb +1 -4
- data/lib/gir_ffi/version.rb +1 -2
- data/lib/gir_ffi/zero_terminated.rb +42 -0
- data/lib/gir_ffi.rb +1 -0
- data/test/ffi-gobject/value_test.rb +30 -1
- data/test/ffi-gobject_introspection/i_object_info_test.rb +4 -4
- data/test/ffi-gobject_test.rb +20 -0
- data/test/gir_ffi/arg_helper_test.rb +4 -4
- data/test/gir_ffi/argument_builder_test.rb +16 -0
- data/test/gir_ffi/builder_test.rb +0 -5
- data/test/gir_ffi/in_pointer_test.rb +20 -1
- data/test/gir_ffi/info_ext/i_arg_info_test.rb +39 -0
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +51 -0
- data/test/gir_ffi/info_ext/i_type_info_test.rb +20 -20
- data/test/gir_ffi/return_value_builder_test.rb +2 -2
- data/test/gir_ffi/zero_terminated_test.rb +48 -0
- data/test/gir_ffi_test_helper.rb +3 -3
- data/test/integration/generated_gimarshallingtests_test.rb +38 -28
- data/test/integration/generated_regress_test.rb +2 -5
- metadata +11 -5
- data/lib/ffi-gobject/helper.rb +0 -114
- data/test/ffi-gobject/helper_test.rb +0 -103
@@ -67,7 +67,8 @@ describe GIMarshallingTests do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
it "has the constant CONSTANT_GERROR_DEBUG_MESSAGE" do
|
70
|
-
|
70
|
+
GIMarshallingTests::CONSTANT_GERROR_DEBUG_MESSAGE.must_equal(
|
71
|
+
"we got an error, life is shit")
|
71
72
|
end
|
72
73
|
|
73
74
|
it "has the constant CONSTANT_GERROR_DOMAIN" do
|
@@ -124,19 +125,19 @@ describe GIMarshallingTests do
|
|
124
125
|
end
|
125
126
|
|
126
127
|
it "has a working function #in" do
|
127
|
-
skip
|
128
|
+
skip "methods on enums are not supported yet"
|
128
129
|
end
|
129
130
|
it "has a working function #in_zero" do
|
130
|
-
skip
|
131
|
+
skip "methods on enums are not supported yet"
|
131
132
|
end
|
132
133
|
it "has a working function #inout" do
|
133
|
-
skip
|
134
|
+
skip "methods on enums are not supported yet"
|
134
135
|
end
|
135
136
|
it "has a working function #out" do
|
136
|
-
skip
|
137
|
+
skip "methods on enums are not supported yet"
|
137
138
|
end
|
138
139
|
it "has a working function #returnv" do
|
139
|
-
skip
|
140
|
+
skip "methods on enums are not supported yet"
|
140
141
|
end
|
141
142
|
end
|
142
143
|
|
@@ -151,16 +152,16 @@ describe GIMarshallingTests do
|
|
151
152
|
assert_equal 42, GIMarshallingTests::GEnum[:value3]
|
152
153
|
end
|
153
154
|
it "has a working function #in" do
|
154
|
-
skip
|
155
|
+
skip "methods on enums are not supported yet"
|
155
156
|
end
|
156
157
|
it "has a working function #inout" do
|
157
|
-
skip
|
158
|
+
skip "methods on enums are not supported yet"
|
158
159
|
end
|
159
160
|
it "has a working function #out" do
|
160
|
-
skip
|
161
|
+
skip "methods on enums are not supported yet"
|
161
162
|
end
|
162
163
|
it "has a working function #returnv" do
|
163
|
-
skip
|
164
|
+
skip "methods on enums are not supported yet"
|
164
165
|
end
|
165
166
|
end
|
166
167
|
|
@@ -269,7 +270,10 @@ describe GIMarshallingTests do
|
|
269
270
|
let(:instance) { GIMarshallingTests::Object.new 42 }
|
270
271
|
|
271
272
|
it "has a working method #call_vfunc_with_callback" do
|
272
|
-
|
273
|
+
# NOTE: To call this method, the callback slot vfunc_with_callback has to
|
274
|
+
# be filled in the GIMarshallingTests::Object class structure. The
|
275
|
+
# GIMarshallingTests library doesn't do this.
|
276
|
+
skip "Needs vfunc setup"
|
273
277
|
end
|
274
278
|
|
275
279
|
it "has a working method #full_in" do
|
@@ -277,10 +281,11 @@ describe GIMarshallingTests do
|
|
277
281
|
end
|
278
282
|
|
279
283
|
it "has a working method #int8_in" do
|
280
|
-
skip
|
284
|
+
skip "Needs vfunc setup"
|
281
285
|
end
|
286
|
+
|
282
287
|
it "has a working method #int8_out" do
|
283
|
-
skip
|
288
|
+
skip "Needs vfunc setup"
|
284
289
|
end
|
285
290
|
|
286
291
|
# TODO: Avoid using common method names?
|
@@ -310,13 +315,15 @@ describe GIMarshallingTests do
|
|
310
315
|
end
|
311
316
|
|
312
317
|
it "has a working method #method_int8_in" do
|
313
|
-
skip
|
318
|
+
skip "Needs vfunc setup"
|
314
319
|
end
|
320
|
+
|
315
321
|
it "has a working method #method_int8_out" do
|
316
|
-
skip
|
322
|
+
skip "Needs vfunc setup"
|
317
323
|
end
|
324
|
+
|
318
325
|
it "has a working method #method_variant_array_in" do
|
319
|
-
skip
|
326
|
+
skip "Needs vfunc setup"
|
320
327
|
end
|
321
328
|
|
322
329
|
it "has a working method #method_with_default_implementation" do
|
@@ -336,28 +343,28 @@ describe GIMarshallingTests do
|
|
336
343
|
end
|
337
344
|
|
338
345
|
it "has a working method #vfunc_caller_allocated_out_parameter" do
|
339
|
-
skip
|
346
|
+
skip "Needs vfunc setup"
|
340
347
|
end
|
341
348
|
it "has a working method #vfunc_meth_with_error" do
|
342
|
-
skip
|
349
|
+
skip "Needs vfunc setup"
|
343
350
|
end
|
344
351
|
it "has a working method #vfunc_multiple_out_parameters" do
|
345
|
-
skip
|
352
|
+
skip "Needs vfunc setup"
|
346
353
|
end
|
347
354
|
it "has a working method #vfunc_one_out_parameter" do
|
348
|
-
skip
|
355
|
+
skip "Needs vfunc setup"
|
349
356
|
end
|
350
357
|
it "has a working method #vfunc_return_value_and_multiple_out_parameters" do
|
351
|
-
skip
|
358
|
+
skip "Needs vfunc setup"
|
352
359
|
end
|
353
360
|
it "has a working method #vfunc_return_value_and_one_out_parameter" do
|
354
|
-
skip
|
361
|
+
skip "Needs vfunc setup"
|
355
362
|
end
|
356
363
|
it "has a working method #vfunc_return_value_only" do
|
357
|
-
skip
|
364
|
+
skip "Needs vfunc setup"
|
358
365
|
end
|
359
366
|
it "has a working method #vfunc_with_callback" do
|
360
|
-
skip
|
367
|
+
skip "Needs vfunc setup"
|
361
368
|
end
|
362
369
|
|
363
370
|
it "has a property 'int' containing the argument to #new" do
|
@@ -597,7 +604,7 @@ describe GIMarshallingTests do
|
|
597
604
|
end
|
598
605
|
|
599
606
|
it "has a working function #array_enum_in" do
|
600
|
-
|
607
|
+
GIMarshallingTests.array_enum_in [:value1, :value2, :value3]
|
601
608
|
end
|
602
609
|
|
603
610
|
it "has a working function #array_fixed_inout" do
|
@@ -704,9 +711,12 @@ describe GIMarshallingTests do
|
|
704
711
|
it "has a working function #array_simple_struct_in" do
|
705
712
|
skip
|
706
713
|
end
|
714
|
+
|
707
715
|
it "has a working function #array_string_in" do
|
708
|
-
|
716
|
+
GIMarshallingTests.array_string_in ["foo", "bar"]
|
717
|
+
pass
|
709
718
|
end
|
719
|
+
|
710
720
|
it "has a working function #array_struct_in" do
|
711
721
|
skip
|
712
722
|
end
|
@@ -808,8 +818,8 @@ describe GIMarshallingTests do
|
|
808
818
|
ret = GIMarshallingTests.bytearray_full_return
|
809
819
|
assert_instance_of GLib::ByteArray, ret
|
810
820
|
assert_includes(
|
811
|
-
|
812
|
-
|
821
|
+
["0123".bytes.to_a, "\x001\xFF3".bytes.to_a],
|
822
|
+
ret.to_string.bytes.to_a)
|
813
823
|
end
|
814
824
|
|
815
825
|
it "has a working function #bytearray_none_in" do
|
@@ -561,15 +561,12 @@ describe Regress do
|
|
561
561
|
assert !is_floating?(instance)
|
562
562
|
end
|
563
563
|
|
564
|
-
# FIXME: Should it be possible to invoke this method by its virtual name?
|
565
564
|
it "has a working method #matrix" do
|
566
|
-
|
567
|
-
assert_equal 42, rv
|
565
|
+
instance.matrix("bar").must_equal 42
|
568
566
|
end
|
569
567
|
|
570
568
|
it "has a working method #do_matrix" do
|
571
|
-
|
572
|
-
result.must_equal 42
|
569
|
+
instance.do_matrix("bar").must_equal 42
|
573
570
|
end
|
574
571
|
|
575
572
|
it "has a working method #emit_sig_with_foreign_struct" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gir_ffi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -133,6 +133,7 @@ files:
|
|
133
133
|
- lib/gir_ffi/user_defined/i_base_info.rb
|
134
134
|
- lib/gir_ffi/user_defined/i_object_info.rb
|
135
135
|
- lib/gir_ffi/user_defined/i_registered_type_info.rb
|
136
|
+
- lib/gir_ffi/zero_terminated.rb
|
136
137
|
- lib/gir_ffi/callback.rb
|
137
138
|
- lib/gir_ffi/argument_builder.rb
|
138
139
|
- lib/gir_ffi/error_argument_builder.rb
|
@@ -148,10 +149,12 @@ files:
|
|
148
149
|
- lib/gir_ffi/callback_helper.rb
|
149
150
|
- lib/gir_ffi/builder.rb
|
150
151
|
- lib/gir_ffi/interface_base.rb
|
152
|
+
- lib/gir_ffi/info_ext/i_arg_info.rb
|
151
153
|
- lib/gir_ffi/info_ext/i_type_info.rb
|
152
154
|
- lib/gir_ffi/info_ext/i_field_info.rb
|
153
155
|
- lib/gir_ffi/info_ext/safe_constant_name.rb
|
154
156
|
- lib/gir_ffi/info_ext/i_property_info.rb
|
157
|
+
- lib/gir_ffi/info_ext/i_signal_info.rb
|
155
158
|
- lib/gir_ffi/info_ext/safe_function_name.rb
|
156
159
|
- lib/gir_ffi/info_ext/i_registered_type_info.rb
|
157
160
|
- lib/gir_ffi/module_base.rb
|
@@ -166,7 +169,6 @@ files:
|
|
166
169
|
- lib/ffi-gobject/base.rb
|
167
170
|
- lib/ffi-gobject/object.rb
|
168
171
|
- lib/ffi-gobject/value.rb
|
169
|
-
- lib/ffi-gobject/helper.rb
|
170
172
|
- lib/ffi-gobject/initially_unowned.rb
|
171
173
|
- lib/ffi-gobject/closure.rb
|
172
174
|
- lib/ffi-glib.rb
|
@@ -224,6 +226,7 @@ files:
|
|
224
226
|
- test/gir_ffi/builder/type/unintrospectable_test.rb
|
225
227
|
- test/gir_ffi/builder/type/interface_test.rb
|
226
228
|
- test/gir_ffi/builder/module_test.rb
|
229
|
+
- test/gir_ffi/zero_terminated_test.rb
|
227
230
|
- test/gir_ffi/object_base_test.rb
|
228
231
|
- test/gir_ffi/user_defined/i_registered_type_info_test.rb
|
229
232
|
- test/gir_ffi/user_defined/i_object_info_test.rb
|
@@ -240,6 +243,8 @@ files:
|
|
240
243
|
- test/gir_ffi/argument_builder_test.rb
|
241
244
|
- test/gir_ffi/return_value_builder_test.rb
|
242
245
|
- test/gir_ffi/info_ext/i_type_info_test.rb
|
246
|
+
- test/gir_ffi/info_ext/i_arg_info_test.rb
|
247
|
+
- test/gir_ffi/info_ext/i_signal_info_test.rb
|
243
248
|
- test/gir_ffi/info_ext/safe_constant_name_test.rb
|
244
249
|
- test/gir_ffi/info_ext/safe_function_name_test.rb
|
245
250
|
- test/gir_ffi/info_ext/i_field_info_test.rb
|
@@ -249,7 +254,6 @@ files:
|
|
249
254
|
- test/ffi-gobject/object_test.rb
|
250
255
|
- test/ffi-gobject/gobject_test.rb
|
251
256
|
- test/ffi-gobject/value_test.rb
|
252
|
-
- test/ffi-gobject/helper_test.rb
|
253
257
|
- test/ffi-gobject/ruby_style_test.rb
|
254
258
|
- test/base_test_helper.rb
|
255
259
|
- test/ffi-glib/s_list_test.rb
|
@@ -318,7 +322,6 @@ test_files:
|
|
318
322
|
- test/ffi-glib/ruby_closure_test.rb
|
319
323
|
- test/ffi-glib/s_list_test.rb
|
320
324
|
- test/ffi-gobject/gobject_test.rb
|
321
|
-
- test/ffi-gobject/helper_test.rb
|
322
325
|
- test/ffi-gobject/object_class_test.rb
|
323
326
|
- test/ffi-gobject/object_test.rb
|
324
327
|
- test/ffi-gobject/ruby_style_test.rb
|
@@ -350,7 +353,9 @@ test_files:
|
|
350
353
|
- test/gir_ffi/function_builder_test.rb
|
351
354
|
- test/gir_ffi/in_out_pointer_test.rb
|
352
355
|
- test/gir_ffi/in_pointer_test.rb
|
356
|
+
- test/gir_ffi/info_ext/i_arg_info_test.rb
|
353
357
|
- test/gir_ffi/info_ext/i_field_info_test.rb
|
358
|
+
- test/gir_ffi/info_ext/i_signal_info_test.rb
|
354
359
|
- test/gir_ffi/info_ext/i_type_info_test.rb
|
355
360
|
- test/gir_ffi/info_ext/safe_constant_name_test.rb
|
356
361
|
- test/gir_ffi/info_ext/safe_function_name_test.rb
|
@@ -361,6 +366,7 @@ test_files:
|
|
361
366
|
- test/gir_ffi/user_defined/i_property_info_test.rb
|
362
367
|
- test/gir_ffi/user_defined/i_registered_type_info_test.rb
|
363
368
|
- test/gir_ffi/variable_name_generator_test.rb
|
369
|
+
- test/gir_ffi/zero_terminated_test.rb
|
364
370
|
- test/gir_ffi_test.rb
|
365
371
|
- test/gir_ffi_test_helper.rb
|
366
372
|
- test/integration/derived_classes_test.rb
|
data/lib/ffi-gobject/helper.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
module GObject
|
2
|
-
module Helper
|
3
|
-
# Create a signal hander callback. Wraps the given block in such a way that
|
4
|
-
# arguments and return value are cast correctly to the ruby world and back.
|
5
|
-
#
|
6
|
-
# @param klass The class of the object that will receive the signal.
|
7
|
-
# @param signal The name of the signal
|
8
|
-
# @param block The body of the signal handler
|
9
|
-
#
|
10
|
-
# @return [FFI::Function] The signal handler, ready to be passed as a
|
11
|
-
# callback to C.
|
12
|
-
def self.signal_callback klass, signal, &block
|
13
|
-
sig_info = klass.find_signal signal
|
14
|
-
|
15
|
-
callback_block = signal_callback_args(sig_info, klass, &block)
|
16
|
-
|
17
|
-
builder.build_callback sig_info, &callback_block
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.builder= bldr
|
21
|
-
@builder = bldr
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.builder
|
25
|
-
@builder ||= GirFFI::Builder
|
26
|
-
end
|
27
|
-
|
28
|
-
# FIXME: Move either to ISignalInfo or the base GObject class.
|
29
|
-
def self.signal_callback_args sig, klass, &block
|
30
|
-
raise ArgumentError, "Block needed" if block.nil?
|
31
|
-
return Proc.new do |*args|
|
32
|
-
mapped = cast_back_signal_arguments sig, klass, *args
|
33
|
-
block.call(*mapped)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.signal_arguments_to_gvalue_array signal, instance, *rest
|
38
|
-
sig = instance.class.find_signal signal
|
39
|
-
|
40
|
-
arr = ::GObject::ValueArray.new sig.n_args + 1
|
41
|
-
|
42
|
-
arr.append signal_reciever_to_gvalue instance
|
43
|
-
|
44
|
-
sig.args.zip(rest).each do |info, arg|
|
45
|
-
arr.append signal_argument_to_gvalue info, arg
|
46
|
-
end
|
47
|
-
|
48
|
-
arr
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.signal_reciever_to_gvalue instance
|
52
|
-
val = ::GObject::Value.new
|
53
|
-
val.init ::GObject.type_from_instance instance
|
54
|
-
val.set_instance instance
|
55
|
-
return val
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.signal_argument_to_gvalue info, arg
|
59
|
-
val = gvalue_for_type_info info.argument_type
|
60
|
-
val.set_value arg
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.gvalue_for_type_info info
|
64
|
-
tag = info.tag
|
65
|
-
gtype = case tag
|
66
|
-
when :interface
|
67
|
-
info.interface.g_type
|
68
|
-
when :void
|
69
|
-
return nil
|
70
|
-
else
|
71
|
-
TYPE_TAG_TO_GTYPE[tag]
|
72
|
-
end
|
73
|
-
raise "GType not found for type info with tag #{tag}" unless gtype
|
74
|
-
Value.new.tap {|val| val.init gtype}
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.gvalue_for_signal_return_value signal, object
|
78
|
-
sig = object.class.find_signal signal
|
79
|
-
rettypeinfo = sig.return_type
|
80
|
-
|
81
|
-
gvalue_for_type_info rettypeinfo
|
82
|
-
end
|
83
|
-
|
84
|
-
# TODO: Generate cast back methods using existing Argument builders.
|
85
|
-
def self.cast_back_signal_arguments signalinfo, klass, *args
|
86
|
-
instance = klass.wrap args.shift
|
87
|
-
user_data = GirFFI::ArgHelper::OBJECT_STORE[args.pop.address]
|
88
|
-
|
89
|
-
extra_arguments = signalinfo.args.zip(args).map do |info, arg|
|
90
|
-
cast_signal_argument(info, arg)
|
91
|
-
end
|
92
|
-
|
93
|
-
return [instance, *extra_arguments].push user_data
|
94
|
-
end
|
95
|
-
|
96
|
-
def self.cast_signal_argument info, arg
|
97
|
-
arg_t = info.argument_type
|
98
|
-
if arg_t.tag == :interface
|
99
|
-
iface = arg_t.interface
|
100
|
-
kls = GirFFI::Builder.build_class iface
|
101
|
-
case iface.info_type
|
102
|
-
when :enum, :flags
|
103
|
-
kls[arg]
|
104
|
-
when :interface
|
105
|
-
arg.to_object
|
106
|
-
else
|
107
|
-
kls.wrap(arg)
|
108
|
-
end
|
109
|
-
else
|
110
|
-
arg
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
require 'gir_ffi_test_helper'
|
2
|
-
|
3
|
-
describe GObject::Helper do
|
4
|
-
before do
|
5
|
-
GirFFI.setup :Regress
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "#signal_arguments_to_gvalue_array" do
|
9
|
-
describe "the result of wrapping test-with-static-scope-arg" do
|
10
|
-
setup do
|
11
|
-
o = Regress::TestSubObj.new
|
12
|
-
b = Regress::TestSimpleBoxedA.new
|
13
|
-
|
14
|
-
@gva =
|
15
|
-
GObject::Helper.signal_arguments_to_gvalue_array(
|
16
|
-
"test-with-static-scope-arg", o, b)
|
17
|
-
end
|
18
|
-
|
19
|
-
should "be a GObject::ValueArray" do
|
20
|
-
assert_instance_of GObject::ValueArray, @gva
|
21
|
-
end
|
22
|
-
|
23
|
-
should "contain two values" do
|
24
|
-
assert_equal 2, @gva.n_values
|
25
|
-
end
|
26
|
-
|
27
|
-
should "have a first value with GType for TestSubObj" do
|
28
|
-
assert_equal Regress::TestSubObj.get_gtype, (@gva.get_nth 0).current_gtype
|
29
|
-
end
|
30
|
-
|
31
|
-
should "have a second value with GType for TestSimpleBoxedA" do
|
32
|
-
assert_equal Regress::TestSimpleBoxedA.get_gtype, (@gva.get_nth 1).current_gtype
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "#signal_argument_to_gvalue" do
|
38
|
-
it "maps a :utf8 argument to a string-valued GValue" do
|
39
|
-
stub(arg_t = Object.new).tag { :utf8 }
|
40
|
-
stub(info = Object.new).argument_type { arg_t }
|
41
|
-
val =
|
42
|
-
GObject::Helper.signal_argument_to_gvalue(
|
43
|
-
info, "foo")
|
44
|
-
assert_instance_of GObject::Value, val
|
45
|
-
assert_equal "foo", val.get_string
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#cast_back_signal_arguments" do
|
50
|
-
it "correctly casts back pointers for the test-with-static-scope-arg signal" do
|
51
|
-
o = Regress::TestSubObj.new
|
52
|
-
b = Regress::TestSimpleBoxedA.new
|
53
|
-
ud = GirFFI::ArgHelper.object_to_inptr "Hello!"
|
54
|
-
|
55
|
-
assert_equal "Hello!", GirFFI::ArgHelper::OBJECT_STORE[ud.address]
|
56
|
-
|
57
|
-
sig = o.class.find_signal "test-with-static-scope-arg"
|
58
|
-
|
59
|
-
gva =
|
60
|
-
GObject::Helper.cast_back_signal_arguments(
|
61
|
-
sig, o.class, o.to_ptr, b.to_ptr, ud)
|
62
|
-
|
63
|
-
klasses = gva.map {|it| it.class}
|
64
|
-
klasses.must_equal [ Regress::TestSubObj,
|
65
|
-
Regress::TestSimpleBoxedA,
|
66
|
-
String ]
|
67
|
-
gva[2].must_equal "Hello!"
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "#cast_signal_argument" do
|
72
|
-
describe "with info for an enum" do
|
73
|
-
before do
|
74
|
-
enuminfo = get_introspection_data 'GLib', 'DateMonth'
|
75
|
-
stub(arg_t = Object.new).interface { enuminfo }
|
76
|
-
stub(arg_t).tag { :interface }
|
77
|
-
stub(@info = Object.new).argument_type { arg_t }
|
78
|
-
end
|
79
|
-
|
80
|
-
it "casts an integer to its enum symbol" do
|
81
|
-
res = GObject::Helper.cast_signal_argument @info, 7
|
82
|
-
assert_equal :july, res
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe "with info for an interface" do
|
87
|
-
before do
|
88
|
-
ifaceinfo = get_introspection_data 'Regress', 'TestInterface'
|
89
|
-
stub(arg_t = Object.new).interface { ifaceinfo }
|
90
|
-
stub(arg_t).tag { :interface }
|
91
|
-
stub(@info = Object.new).argument_type { arg_t }
|
92
|
-
end
|
93
|
-
|
94
|
-
it "casts the argument by calling #to_object on it" do
|
95
|
-
mock(ptr = Object.new).to_object { "good-result" }
|
96
|
-
res = GObject::Helper.cast_signal_argument @info, ptr
|
97
|
-
res.must_equal "good-result"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
|