gir_ffi 0.7.4 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +7 -0
- data/TODO.md +8 -0
- data/lib/ffi-glib/array.rb +7 -7
- data/lib/ffi-glib/byte_array.rb +3 -4
- data/lib/ffi-glib/bytes.rb +3 -3
- data/lib/ffi-glib/error.rb +2 -2
- data/lib/ffi-glib/hash_table.rb +7 -7
- data/lib/ffi-glib/iconv.rb +3 -4
- data/lib/ffi-glib/list.rb +3 -3
- data/lib/ffi-glib/list_methods.rb +3 -3
- data/lib/ffi-glib/ptr_array.rb +6 -6
- data/lib/ffi-glib/s_list.rb +3 -3
- data/lib/ffi-glib/strv.rb +3 -3
- data/lib/ffi-glib/variant.rb +6 -2
- data/lib/ffi-glib.rb +3 -0
- data/lib/ffi-gobject/base.rb +1 -0
- data/lib/ffi-gobject/closure.rb +2 -2
- data/lib/ffi-gobject/initially_unowned.rb +4 -3
- data/lib/ffi-gobject/object.rb +5 -5
- data/lib/ffi-gobject/object_class.rb +2 -2
- data/lib/ffi-gobject/ruby_closure.rb +2 -3
- data/lib/ffi-gobject/value.rb +5 -5
- data/lib/ffi-gobject.rb +17 -22
- data/lib/ffi-gobject_introspection/i_arg_info.rb +0 -1
- data/lib/ffi-gobject_introspection/i_base_info.rb +3 -4
- data/lib/ffi-gobject_introspection/i_callable_info.rb +1 -2
- data/lib/ffi-gobject_introspection/i_constant_info.rb +19 -11
- data/lib/ffi-gobject_introspection/i_enum_info.rb +4 -3
- data/lib/ffi-gobject_introspection/i_function_info.rb +7 -1
- data/lib/ffi-gobject_introspection/i_interface_info.rb +12 -0
- data/lib/ffi-gobject_introspection/i_object_info.rb +19 -8
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +0 -1
- data/lib/ffi-gobject_introspection/i_repository.rb +10 -15
- data/lib/ffi-gobject_introspection/i_struct_info.rb +4 -2
- data/lib/ffi-gobject_introspection/i_type_info.rb +4 -2
- data/lib/ffi-gobject_introspection/i_union_info.rb +7 -3
- data/lib/ffi-gobject_introspection/i_value_info.rb +0 -1
- data/lib/ffi-gobject_introspection/lib.rb +1 -2
- data/lib/ffi-gobject_introspection.rb +0 -1
- data/lib/gir_ffi/allocation_helper.rb +2 -1
- data/lib/gir_ffi/arg_helper.rb +6 -2
- data/lib/gir_ffi/builder_helper.rb +1 -0
- data/lib/gir_ffi/builders/argument_builder_collection.rb +67 -0
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +2 -0
- data/lib/gir_ffi/builders/callback_argument_builder.rb +7 -5
- data/lib/gir_ffi/builders/callback_builder.rb +3 -1
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -0
- data/lib/gir_ffi/builders/closure_argument_builder.rb +13 -0
- data/lib/gir_ffi/builders/closure_convertor.rb +2 -0
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +2 -0
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +1 -0
- data/lib/gir_ffi/builders/enum_builder.rb +1 -4
- data/lib/gir_ffi/builders/field_builder.rb +2 -2
- data/lib/gir_ffi/builders/function_builder.rb +2 -1
- data/lib/gir_ffi/builders/interface_builder.rb +0 -3
- data/lib/gir_ffi/builders/mapping_method_builder.rb +24 -92
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +73 -0
- data/lib/gir_ffi/builders/null_argument_builder.rb +3 -0
- data/lib/gir_ffi/builders/null_builder.rb +1 -0
- data/lib/gir_ffi/builders/object_builder.rb +0 -2
- data/lib/gir_ffi/builders/property_builder.rb +4 -4
- data/lib/gir_ffi/builders/registered_type_builder.rb +35 -1
- data/lib/gir_ffi/builders/return_value_builder.rb +4 -6
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +2 -0
- data/lib/gir_ffi/builders/signal_closure_builder.rb +46 -0
- data/lib/gir_ffi/builders/struct_builder.rb +0 -2
- data/lib/gir_ffi/builders/type_builder.rb +1 -1
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +1 -1
- data/lib/gir_ffi/builders/union_builder.rb +0 -2
- data/lib/gir_ffi/builders/user_defined_builder.rb +6 -18
- data/lib/gir_ffi/builders/vfunc_builder.rb +6 -4
- data/lib/gir_ffi/builders/with_layout.rb +1 -2
- data/lib/gir_ffi/callback_base.rb +4 -4
- data/lib/gir_ffi/class_base.rb +28 -18
- data/lib/gir_ffi/enum_base.rb +2 -2
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -0
- data/lib/gir_ffi/in_out_pointer.rb +4 -4
- data/lib/gir_ffi/in_pointer.rb +2 -2
- data/lib/gir_ffi/info_ext/full_type_name.rb +16 -0
- data/lib/gir_ffi/info_ext/i_arg_info.rb +2 -3
- data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -8
- data/lib/gir_ffi/info_ext/i_property_info.rb +0 -1
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +0 -1
- data/lib/gir_ffi/info_ext/i_signal_info.rb +8 -40
- data/lib/gir_ffi/info_ext/i_type_info.rb +12 -2
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +1 -6
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +0 -5
- data/lib/gir_ffi/info_ext.rb +1 -0
- data/lib/gir_ffi/lib_c.rb +1 -0
- data/lib/gir_ffi/module_base.rb +2 -2
- data/lib/gir_ffi/object_base.rb +0 -16
- data/lib/gir_ffi/receiver_argument_info.rb +0 -4
- data/lib/gir_ffi/registered_type_base.rb +0 -1
- data/lib/gir_ffi/sized_array.rb +5 -5
- data/lib/gir_ffi/struct_base.rb +4 -0
- data/lib/gir_ffi/type_base.rb +2 -2
- data/lib/gir_ffi/type_map.rb +1 -0
- data/lib/gir_ffi/unintrospectable_type_info.rb +1 -3
- data/lib/gir_ffi/user_data_type_info.rb +2 -0
- data/lib/gir_ffi/version.rb +2 -1
- data/lib/gir_ffi/zero_terminated.rb +6 -6
- data/lib/gir_ffi-base/glib/boolean.rb +2 -2
- data/lib/gir_ffi-base/glib/strv.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +1 -0
- data/lib/gir_ffi-base/gobject.rb +1 -1
- data/lib/gir_ffi.rb +2 -0
- data/test/ffi-glib/hash_table_test.rb +1 -1
- data/test/ffi-glib/strv_test.rb +27 -0
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +1 -5
- data/test/ffi-gobject_test.rb +3 -3
- data/test/gir_ffi/builders/{with_methods_test.rb → registered_type_builder_test.rb} +1 -1
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +136 -0
- data/test/gir_ffi/builders/user_defined_builder_test.rb +2 -1
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -11
- data/test/integration/generated_gimarshallingtests_test.rb +47 -2
- data/test/integration/generated_regress_test.rb +19 -11
- metadata +82 -25
- data/lib/gir_ffi/builders/signal_builder.rb +0 -51
- data/lib/gir_ffi/builders/with_methods.rb +0 -45
- data/lib/gir_ffi/signal_base.rb +0 -21
- data/lib/gir_ffi/vfunc_base.rb +0 -9
- data/test/gir_ffi/builders/signal_builder_test.rb +0 -106
data/test/ffi-glib/strv_test.rb
CHANGED
@@ -1,6 +1,33 @@
|
|
1
1
|
require 'base_test_helper'
|
2
2
|
|
3
3
|
describe GLib::Strv do
|
4
|
+
describe "::from" do
|
5
|
+
it "creates a Strv from a Ruby array" do
|
6
|
+
strv = GLib::Strv.from ["1", "2", "3"]
|
7
|
+
strv.must_be_instance_of GLib::Strv
|
8
|
+
strv.to_a.must_equal ["1", "2", "3"]
|
9
|
+
end
|
10
|
+
|
11
|
+
it "return its argument if given a Strv" do
|
12
|
+
strv = GLib::Strv.from ["1", "2", "3"]
|
13
|
+
strv2 = GLib::Strv.from strv
|
14
|
+
assert strv2.equal? strv
|
15
|
+
end
|
16
|
+
|
17
|
+
it "wraps its argument if given a pointer" do
|
18
|
+
strv = GLib::Strv.from ["1", "2", "3"]
|
19
|
+
|
20
|
+
pointer = strv.to_ptr
|
21
|
+
pointer.must_be_kind_of FFI::Pointer
|
22
|
+
|
23
|
+
strv2 = GLib::Strv.from pointer
|
24
|
+
|
25
|
+
strv2.must_be_kind_of GLib::Strv
|
26
|
+
refute strv2.equal? strv
|
27
|
+
strv2.to_a.must_equal strv.to_a
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
4
31
|
describe "#==" do
|
5
32
|
it "returns true when comparing to an array with the same elements" do
|
6
33
|
strv = GLib::Strv.from ["1", "2", "3"]
|
@@ -10,11 +10,7 @@ describe GObjectIntrospection::IConstantInfo do
|
|
10
10
|
assert_equal :gint32, @info.constant_type.tag
|
11
11
|
end
|
12
12
|
|
13
|
-
it "returns
|
14
|
-
assert_equal 1_000_000, @info.value_union[:v_int32]
|
15
|
-
end
|
16
|
-
|
17
|
-
it "returns 1 as its value" do
|
13
|
+
it "returns 1_000_000 as its value" do
|
18
14
|
assert_equal 1_000_000, @info.value
|
19
15
|
end
|
20
16
|
end
|
data/test/ffi-gobject_test.rb
CHANGED
@@ -122,14 +122,14 @@ describe GObject do
|
|
122
122
|
sb = Regress::TestSimpleBoxedA.new
|
123
123
|
sb.some_int = 23
|
124
124
|
|
125
|
-
GObject.signal_connect(o, "test-with-static-scope-arg", 2) { |
|
126
|
-
@a =
|
125
|
+
GObject.signal_connect(o, "test-with-static-scope-arg", 2) { |instance, object, user_data|
|
126
|
+
@a = user_data
|
127
127
|
@b = object
|
128
128
|
}
|
129
129
|
GObject.signal_emit o, "test-with-static-scope-arg", sb
|
130
130
|
end
|
131
131
|
|
132
|
-
it "
|
132
|
+
it "passes on the user data argument" do
|
133
133
|
assert_equal 2, @a
|
134
134
|
end
|
135
135
|
|
@@ -2,7 +2,7 @@ require 'gir_ffi_test_helper'
|
|
2
2
|
|
3
3
|
GirFFI.setup :Regress
|
4
4
|
|
5
|
-
describe GirFFI::Builders::
|
5
|
+
describe GirFFI::Builders::RegisteredTypeBuilder do
|
6
6
|
describe "#setup_instance_method" do
|
7
7
|
it "restores a method that was removed" do
|
8
8
|
Regress::TestObj.class_eval { remove_method "instance_method" }
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'gir_ffi_test_helper'
|
2
|
+
|
3
|
+
describe GirFFI::Builders::SignalClosureBuilder do
|
4
|
+
let(:builder) { GirFFI::Builders::SignalClosureBuilder.new signal_info }
|
5
|
+
|
6
|
+
describe "#build_class" do
|
7
|
+
let(:signal_info) {
|
8
|
+
get_signal_introspection_data "Regress", "TestObj", "test" }
|
9
|
+
|
10
|
+
it "builds a descendant of RubyClosure" do
|
11
|
+
klass = builder.build_class
|
12
|
+
klass.ancestors.must_include GObject::RubyClosure
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#marshaller_definition" do
|
17
|
+
describe "for a signal with no arguments or return value" do
|
18
|
+
let(:signal_info) {
|
19
|
+
get_signal_introspection_data "Regress", "TestObj", "test" }
|
20
|
+
|
21
|
+
it "returns a valid marshaller converting only the receiver" do
|
22
|
+
expected = <<-CODE.reset_indentation
|
23
|
+
def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
|
24
|
+
_instance, _ = param_values.map(&:get_value_plain)
|
25
|
+
_v1 = _instance
|
26
|
+
wrap(closure.to_ptr).invoke_block(_v1)
|
27
|
+
end
|
28
|
+
CODE
|
29
|
+
|
30
|
+
builder.marshaller_definition.must_equal expected
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "for a signal with an argument and a return value" do
|
35
|
+
let(:signal_info) {
|
36
|
+
get_signal_introspection_data "Regress", "TestObj", "sig-with-int64-prop" }
|
37
|
+
|
38
|
+
it "returns a valid mapping method" do
|
39
|
+
skip unless signal_info
|
40
|
+
|
41
|
+
expected = <<-CODE.reset_indentation
|
42
|
+
def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
|
43
|
+
_instance, i, _ = param_values.map(&:get_value_plain)
|
44
|
+
_v1 = _instance
|
45
|
+
_v2 = i
|
46
|
+
_v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
|
47
|
+
return_value.set_value _v3
|
48
|
+
end
|
49
|
+
CODE
|
50
|
+
|
51
|
+
builder.marshaller_definition.must_equal expected
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "for a signal with an enum argument" do
|
56
|
+
let(:signal_info) {
|
57
|
+
get_signal_introspection_data "Gio", "MountOperation", "reply" }
|
58
|
+
|
59
|
+
it "returns a valid mapping method" do
|
60
|
+
expected = <<-CODE.reset_indentation
|
61
|
+
def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
|
62
|
+
_instance, result, _ = param_values.map(&:get_value_plain)
|
63
|
+
_v1 = _instance
|
64
|
+
_v2 = result
|
65
|
+
wrap(closure.to_ptr).invoke_block(_v1, _v2)
|
66
|
+
end
|
67
|
+
CODE
|
68
|
+
|
69
|
+
builder.marshaller_definition.must_equal expected
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "for a signal with a array plus length arguments" do
|
74
|
+
let(:signal_info) {
|
75
|
+
get_signal_introspection_data "Regress", "TestObj", "sig-with-array-len-prop" }
|
76
|
+
|
77
|
+
it "returns a valid mapping method" do
|
78
|
+
skip unless signal_info
|
79
|
+
|
80
|
+
expected = <<-CODE.reset_indentation
|
81
|
+
def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
|
82
|
+
_instance, arr, len, _ = param_values.map(&:get_value_plain)
|
83
|
+
_v1 = _instance
|
84
|
+
_v2 = len
|
85
|
+
_v3 = GirFFI::SizedArray.wrap(:guint32, _v2, arr)
|
86
|
+
wrap(closure.to_ptr).invoke_block(_v1, _v3)
|
87
|
+
end
|
88
|
+
CODE
|
89
|
+
|
90
|
+
builder.marshaller_definition.must_equal expected
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "for a signal with a struct argument" do
|
95
|
+
let(:signal_info) {
|
96
|
+
get_signal_introspection_data "Regress", "TestObj", "test-with-static-scope-arg" }
|
97
|
+
|
98
|
+
it "returns a valid mapping method" do
|
99
|
+
skip unless signal_info
|
100
|
+
|
101
|
+
expected = <<-CODE.reset_indentation
|
102
|
+
def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
|
103
|
+
_instance, object, _ = param_values.map(&:get_value_plain)
|
104
|
+
_v1 = _instance
|
105
|
+
_v2 = Regress::TestSimpleBoxedA.wrap(object)
|
106
|
+
wrap(closure.to_ptr).invoke_block(_v1, _v2)
|
107
|
+
end
|
108
|
+
CODE
|
109
|
+
|
110
|
+
builder.marshaller_definition.must_equal expected
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "for a signal returning an array of integers" do
|
115
|
+
let(:signal_info) {
|
116
|
+
get_signal_introspection_data "Regress", "TestObj", "sig-with-intarray-ret" }
|
117
|
+
|
118
|
+
it "returns a valid mapping method" do
|
119
|
+
skip unless signal_info
|
120
|
+
|
121
|
+
expected = <<-CODE.reset_indentation
|
122
|
+
def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
|
123
|
+
_instance, i, _ = param_values.map(&:get_value_plain)
|
124
|
+
_v1 = _instance
|
125
|
+
_v2 = i
|
126
|
+
_v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
|
127
|
+
_v4 = GLib::Array.from(:gint32, _v3)
|
128
|
+
return_value.set_value _v4
|
129
|
+
end
|
130
|
+
CODE
|
131
|
+
|
132
|
+
builder.marshaller_definition.must_equal expected
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -100,7 +100,8 @@ describe GirFFI::Builders::UserDefinedBuilder do
|
|
100
100
|
gtype = klass.get_gtype
|
101
101
|
other_builder = GirFFI::Builders::UserDefinedBuilder.new info
|
102
102
|
other_builder.build_class
|
103
|
-
other_builder
|
103
|
+
# FIXME: Does not really test what we want to test: other_builder might lie!
|
104
|
+
other_builder.target_gtype.must_equal gtype
|
104
105
|
end
|
105
106
|
end
|
106
107
|
end
|
@@ -25,15 +25,4 @@ describe GirFFI::InfoExt::ISignalInfo do
|
|
25
25
|
result_boxed.some_int.must_equal boxed.some_int
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
29
|
-
describe "#return_ffi_type" do
|
30
|
-
# NOTE: This is needed because FFI callbacks are limited in the
|
31
|
-
# accepted types.
|
32
|
-
it "returns :bool for the :gboolean type" do
|
33
|
-
stub(return_type_info = Object.new).to_ffitype { GLib::Boolean }
|
34
|
-
stub(signal_info).return_type { return_type_info }
|
35
|
-
|
36
|
-
signal_info.return_ffi_type.must_equal :bool
|
37
|
-
end
|
38
|
-
end
|
39
28
|
end
|
@@ -437,6 +437,7 @@ describe GIMarshallingTests do
|
|
437
437
|
derived_instance.int.must_equal 23
|
438
438
|
end
|
439
439
|
|
440
|
+
# TODO: Check if this is fixed
|
440
441
|
# See https://bugzilla.gnome.org/show_bug.cgi?id=727665
|
441
442
|
it "has a working method #int8_out" do
|
442
443
|
skip "Introspection data is not generated correctly"
|
@@ -1039,7 +1040,7 @@ describe GIMarshallingTests do
|
|
1039
1040
|
end
|
1040
1041
|
end
|
1041
1042
|
|
1042
|
-
describe "its 'some-
|
1043
|
+
describe "its 'some-uint' property" do
|
1043
1044
|
it "can be retrieved with #get_property" do
|
1044
1045
|
instance.get_property("some-uint").get_value.must_equal 0
|
1045
1046
|
end
|
@@ -1355,6 +1356,18 @@ describe GIMarshallingTests do
|
|
1355
1356
|
pass
|
1356
1357
|
end
|
1357
1358
|
|
1359
|
+
it "has a working function #array_in_utf8_two_in" do
|
1360
|
+
skip unless get_introspection_data 'GIMarshallingTests', 'array_in_utf8_two_in'
|
1361
|
+
GIMarshallingTests.array_in_utf8_two_in [-1, 0, 1, 2], "1", "2"
|
1362
|
+
pass
|
1363
|
+
end
|
1364
|
+
|
1365
|
+
it "has a working function #array_in_utf8_two_in_out_of_order" do
|
1366
|
+
skip unless get_introspection_data 'GIMarshallingTests', 'array_in_utf8_two_in_out_of_order'
|
1367
|
+
GIMarshallingTests.array_in_utf8_two_in_out_of_order "1", [-1, 0, 1, 2], "2"
|
1368
|
+
pass
|
1369
|
+
end
|
1370
|
+
|
1358
1371
|
it "has a working function #array_inout" do
|
1359
1372
|
res = GIMarshallingTests.array_inout [-1, 0, 1, 2]
|
1360
1373
|
res.must_be :==, [-2, -1, 0, 1, 2]
|
@@ -1545,6 +1558,21 @@ describe GIMarshallingTests do
|
|
1545
1558
|
result.must_equal 42.0
|
1546
1559
|
end
|
1547
1560
|
|
1561
|
+
it "has a working function #callback_owned_boxed" do
|
1562
|
+
skip unless get_introspection_data 'GIMarshallingTests', 'callback_owned_boxed'
|
1563
|
+
a = nil
|
1564
|
+
|
1565
|
+
callback = proc { |box, callback_data| a = box.long_ + callback_data }
|
1566
|
+
|
1567
|
+
result = GIMarshallingTests.callback_owned_boxed callback, 42
|
1568
|
+
result.must_equal 1
|
1569
|
+
a.must_equal 43
|
1570
|
+
|
1571
|
+
result = GIMarshallingTests.callback_owned_boxed callback, 42
|
1572
|
+
result.must_equal 2
|
1573
|
+
a.must_equal 44
|
1574
|
+
end
|
1575
|
+
|
1548
1576
|
it "has a working function #callback_return_value_and_multiple_out_parameters" do
|
1549
1577
|
result = GIMarshallingTests.callback_return_value_and_multiple_out_parameters proc { |*args|
|
1550
1578
|
[42, -142, 3]
|
@@ -1756,6 +1784,7 @@ describe GIMarshallingTests do
|
|
1756
1784
|
it "has a working function #gclosure_in" do
|
1757
1785
|
cl = GObject::RubyClosure.new { 42 }
|
1758
1786
|
GIMarshallingTests.gclosure_in cl
|
1787
|
+
pass
|
1759
1788
|
end
|
1760
1789
|
|
1761
1790
|
it "has a working function #gclosure_return" do
|
@@ -2143,7 +2172,6 @@ describe GIMarshallingTests do
|
|
2143
2172
|
end
|
2144
2173
|
|
2145
2174
|
it "has a working function #gvalue_flat_array_round_trip" do
|
2146
|
-
skip "Fails on JRuby" if RUBY_PLATFORM == 'java'
|
2147
2175
|
result = GIMarshallingTests.gvalue_flat_array_round_trip 42, "42", true
|
2148
2176
|
arr = result.to_a
|
2149
2177
|
arr[0].get_value.must_equal 42
|
@@ -2403,6 +2431,14 @@ describe GIMarshallingTests do
|
|
2403
2431
|
assert_equal 0x7fffffff, res
|
2404
2432
|
end
|
2405
2433
|
|
2434
|
+
it "has a working function #int_one_in_utf8_two_in_one_allows_none" do
|
2435
|
+
skip unless get_introspection_data('GIMarshallingTests',
|
2436
|
+
'int_one_in_utf8_two_in_one_allows_none')
|
2437
|
+
GIMarshallingTests.int_one_in_utf8_two_in_one_allows_none 1, "2", "3"
|
2438
|
+
GIMarshallingTests.int_one_in_utf8_two_in_one_allows_none 1, nil, "3"
|
2439
|
+
pass
|
2440
|
+
end
|
2441
|
+
|
2406
2442
|
it "has a working function #int_out_max" do
|
2407
2443
|
res = GIMarshallingTests.int_out_max
|
2408
2444
|
assert_equal 0x7fffffff, res
|
@@ -2438,6 +2474,14 @@ describe GIMarshallingTests do
|
|
2438
2474
|
assert_equal [4, 5, 6], res
|
2439
2475
|
end
|
2440
2476
|
|
2477
|
+
it "has a working function #int_two_in_utf8_two_in_with_allow_none" do
|
2478
|
+
skip unless get_introspection_data('GIMarshallingTests',
|
2479
|
+
'int_two_in_utf8_two_in_with_allow_none')
|
2480
|
+
GIMarshallingTests.int_two_in_utf8_two_in_with_allow_none 1, 2, "3", "4"
|
2481
|
+
GIMarshallingTests.int_two_in_utf8_two_in_with_allow_none 1, 2, nil, nil
|
2482
|
+
pass
|
2483
|
+
end
|
2484
|
+
|
2441
2485
|
it "has a working function #long_in_max" do
|
2442
2486
|
GIMarshallingTests.long_in_max max_long
|
2443
2487
|
pass
|
@@ -2514,6 +2558,7 @@ describe GIMarshallingTests do
|
|
2514
2558
|
res.must_be_instance_of GIMarshallingTests::OverridesStruct
|
2515
2559
|
end
|
2516
2560
|
|
2561
|
+
# TODO: Wait for fixed version of param_spec_in_bool to land in Debian/Ubuntu
|
2517
2562
|
# See https://bugzilla.gnome.org/show_bug.cgi?id=728409
|
2518
2563
|
it "has a working function #param_spec_in_bool" do
|
2519
2564
|
skip "param_spec_in_bool tests the wrong type"
|
@@ -520,6 +520,12 @@ describe Regress do
|
|
520
520
|
o = Regress::TestObj.new_callback Proc.new { a = 2 }, nil, nil
|
521
521
|
assert_instance_of Regress::TestObj, o
|
522
522
|
a.must_equal 2
|
523
|
+
|
524
|
+
# Regress::TestObj.new_callback adds a callback to the list of notified
|
525
|
+
# callbacks. Thaw the callbacks to make sure the list is cleared for
|
526
|
+
# later tests.
|
527
|
+
result = Regress.test_callback_thaw_notifications
|
528
|
+
result.must_equal 2
|
523
529
|
end
|
524
530
|
|
525
531
|
it "creates an instance using #new_from_file" do
|
@@ -582,7 +588,7 @@ describe Regress do
|
|
582
588
|
end
|
583
589
|
|
584
590
|
it "has a working method #emit_sig_with_int64" do
|
585
|
-
skip
|
591
|
+
skip unless get_signal_introspection_data "Regress", "TestObj", "sig-with-int64-prop"
|
586
592
|
instance.signal_connect "sig-with-int64-prop" do |obj, i, ud|
|
587
593
|
i
|
588
594
|
end
|
@@ -600,7 +606,7 @@ describe Regress do
|
|
600
606
|
end
|
601
607
|
|
602
608
|
it "has a working method #emit_sig_with_uint64" do
|
603
|
-
skip
|
609
|
+
skip unless get_signal_introspection_data "Regress", "TestObj", "sig-with-uint64-prop"
|
604
610
|
instance.signal_connect "sig-with-uint64-prop" do |obj, i, ud|
|
605
611
|
i
|
606
612
|
end
|
@@ -1024,9 +1030,10 @@ describe Regress do
|
|
1024
1030
|
a = int64
|
1025
1031
|
end
|
1026
1032
|
|
1027
|
-
GObject.signal_emit instance, "sig-with-int64-prop",
|
1033
|
+
result = GObject.signal_emit instance, "sig-with-int64-prop", 0x7fff_ffff_ffff_ffff
|
1028
1034
|
|
1029
|
-
a.must_equal
|
1035
|
+
a.must_equal 0x7fff_ffff_ffff_ffff
|
1036
|
+
result.get_value.must_equal 0x7fff_ffff_ffff_ffff
|
1030
1037
|
end
|
1031
1038
|
|
1032
1039
|
it "handles the 'sig-with-intarray-ret' signal" do
|
@@ -1043,9 +1050,8 @@ describe Regress do
|
|
1043
1050
|
|
1044
1051
|
a.must_equal 3
|
1045
1052
|
|
1046
|
-
#
|
1047
|
-
|
1048
|
-
result.get_value.must_be_nil
|
1053
|
+
# TODO: Use signal info to convert return value
|
1054
|
+
GLib::Array.wrap(:gint32, result.get_value_plain).to_a.must_equal [3, 2, 1]
|
1049
1055
|
end
|
1050
1056
|
|
1051
1057
|
it "handles the 'sig-with-obj' signal" do
|
@@ -1082,9 +1088,10 @@ describe Regress do
|
|
1082
1088
|
a = uint64
|
1083
1089
|
end
|
1084
1090
|
|
1085
|
-
GObject.signal_emit instance, "sig-with-uint64-prop",
|
1091
|
+
result = GObject.signal_emit instance, "sig-with-uint64-prop", 0xffff_ffff_ffff_ffff
|
1086
1092
|
|
1087
|
-
a.must_equal
|
1093
|
+
a.must_equal 0xffff_ffff_ffff_ffff
|
1094
|
+
result.get_value.must_equal 0xffff_ffff_ffff_ffff
|
1088
1095
|
end
|
1089
1096
|
|
1090
1097
|
it "handles the 'test' signal" do
|
@@ -1508,6 +1515,7 @@ describe Regress do
|
|
1508
1515
|
instance.data1.read_int.must_equal 42
|
1509
1516
|
end
|
1510
1517
|
|
1518
|
+
# TODO: Check what gobject-introspection should/will do with these fields.
|
1511
1519
|
it "has a writable field data2" do
|
1512
1520
|
skip "Introspection data cannot deal with type of this field yet"
|
1513
1521
|
end
|
@@ -1950,8 +1958,9 @@ describe Regress do
|
|
1950
1958
|
end
|
1951
1959
|
|
1952
1960
|
it "has a working function #test_closure_variant" do
|
1953
|
-
skip "This causes a core dump on some systems"
|
1954
1961
|
arg = GLib::Variant.new_string "foo"
|
1962
|
+
|
1963
|
+
# TODO: Convert proc to RubyClosure automatically
|
1955
1964
|
closure = GObject::RubyClosure.new do |variant|
|
1956
1965
|
str = variant.get_string
|
1957
1966
|
if str == "foo"
|
@@ -1961,7 +1970,6 @@ describe Regress do
|
|
1961
1970
|
end
|
1962
1971
|
end
|
1963
1972
|
|
1964
|
-
# TODO: Convert proc to RubyClosure automatically
|
1965
1973
|
result = Regress.test_closure_variant closure, arg
|
1966
1974
|
|
1967
1975
|
result.get_int32.must_equal 40
|