gir_ffi 0.7.7 → 0.7.8
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/array.rb +1 -1
- data/lib/ffi-glib/error.rb +1 -2
- data/lib/ffi-glib/hash_table.rb +2 -2
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-gobject/base.rb +23 -23
- data/lib/ffi-gobject/object.rb +7 -3
- data/lib/ffi-gobject/value.rb +6 -1
- data/lib/ffi-gobject.rb +9 -6
- data/lib/ffi-gobject_introspection/i_base_info.rb +3 -3
- data/lib/ffi-gobject_introspection/i_constant_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_repository.rb +4 -1
- data/lib/ffi-gobject_introspection/i_type_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_unresolved_info.rb +7 -0
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi/builders/argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +37 -29
- data/lib/gir_ffi/builders/callback_argument_builder.rb +57 -27
- data/lib/gir_ffi/builders/closure_convertor.rb +12 -8
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +12 -8
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +11 -7
- data/lib/gir_ffi/builders/field_builder.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +2 -2
- data/lib/gir_ffi/builders/method_template.rb +1 -1
- data/lib/gir_ffi/builders/null_convertor.rb +11 -7
- data/lib/gir_ffi/builders/property_builder.rb +1 -1
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +17 -13
- data/lib/gir_ffi/error_argument_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +12 -0
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +2 -2
- data/lib/gir_ffi/info_ext/safe_function_name.rb +1 -1
- data/lib/gir_ffi/info_ext.rb +1 -0
- data/lib/gir_ffi/module_base.rb +1 -1
- data/lib/gir_ffi/receiver_argument_info.rb +15 -12
- data/lib/gir_ffi/user_data_argument_info.rb +17 -15
- data/lib/gir_ffi/user_data_type_info.rb +14 -12
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +1 -1
- data/test/base_test_helper.rb +15 -15
- data/test/ffi-glib/array_test.rb +38 -38
- data/test/ffi-glib/byte_array_test.rb +6 -7
- data/test/ffi-glib/bytes_test.rb +9 -9
- data/test/ffi-glib/hash_table_test.rb +26 -23
- data/test/ffi-glib/iconv_test.rb +5 -5
- data/test/ffi-glib/list_test.rb +16 -16
- data/test/ffi-glib/main_loop_test.rb +6 -6
- data/test/ffi-glib/ptr_array_test.rb +45 -45
- data/test/ffi-glib/ruby_closure_test.rb +6 -6
- data/test/ffi-glib/s_list_test.rb +15 -15
- data/test/ffi-glib/strv_test.rb +21 -21
- data/test/ffi-glib/variant_test.rb +4 -4
- data/test/ffi-gobject/gobject_test.rb +35 -35
- data/test/ffi-gobject/object_class_test.rb +1 -1
- data/test/ffi-gobject/object_test.rb +29 -6
- data/test/ffi-gobject/value_test.rb +66 -52
- data/test/ffi-gobject_introspection/i_base_info_test.rb +10 -11
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +6 -6
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +4 -5
- data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -2
- data/test/ffi-gobject_introspection/i_object_info_test.rb +5 -5
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +9 -8
- data/test/ffi-gobject_introspection/i_repository_test.rb +16 -16
- data/test/ffi-gobject_introspection/i_type_info_test.rb +16 -2
- data/test/ffi-gobject_introspection/lib_test.rb +2 -2
- data/test/ffi-gobject_test.rb +50 -40
- data/test/gir_ffi/arg_helper_test.rb +5 -5
- data/test/gir_ffi/builder_test.rb +41 -41
- data/test/gir_ffi/builders/argument_builder_test.rb +240 -207
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -1
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +81 -15
- data/test/gir_ffi/builders/callback_builder_test.rb +39 -14
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +41 -33
- data/test/gir_ffi/builders/enum_builder_test.rb +3 -3
- data/test/gir_ffi/builders/field_builder_test.rb +17 -17
- data/test/gir_ffi/builders/function_builder_test.rb +16 -16
- data/test/gir_ffi/builders/interface_builder_test.rb +9 -7
- data/test/gir_ffi/builders/module_builder_test.rb +5 -6
- data/test/gir_ffi/builders/object_builder_test.rb +24 -19
- data/test/gir_ffi/builders/property_builder_test.rb +25 -23
- data/test/gir_ffi/builders/registered_type_builder_test.rb +11 -11
- data/test/gir_ffi/builders/return_value_builder_test.rb +237 -197
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +29 -22
- data/test/gir_ffi/builders/struct_builder_test.rb +10 -10
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +8 -8
- data/test/gir_ffi/builders/union_builder_test.rb +5 -6
- data/test/gir_ffi/builders/user_defined_builder_test.rb +42 -33
- data/test/gir_ffi/builders/vfunc_builder_test.rb +37 -30
- data/test/gir_ffi/callback_base_test.rb +4 -5
- data/test/gir_ffi/class_base_test.rb +35 -28
- data/test/gir_ffi/error_type_info_test.rb +14 -14
- data/test/gir_ffi/ffi_ext/pointer_test.rb +4 -4
- data/test/gir_ffi/g_type_test.rb +6 -6
- data/test/gir_ffi/in_out_pointer_test.rb +27 -27
- data/test/gir_ffi/in_pointer_test.rb +54 -50
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +8 -7
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +7 -7
- data/test/gir_ffi/info_ext/i_field_info_test.rb +10 -8
- data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -15
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +10 -8
- data/test/gir_ffi/info_ext/i_type_info_test.rb +158 -155
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +17 -0
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +12 -10
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +12 -10
- data/test/gir_ffi/interface_base_test.rb +6 -6
- data/test/gir_ffi/method_stubber_test.rb +16 -13
- data/test/gir_ffi/object_base_test.rb +6 -6
- data/test/gir_ffi/sized_array_test.rb +23 -23
- data/test/gir_ffi/type_map_test.rb +3 -3
- data/test/gir_ffi/unintrospectable_type_info_test.rb +18 -18
- data/test/gir_ffi/user_defined_property_info_test.rb +4 -4
- data/test/gir_ffi/user_defined_type_info_test.rb +16 -16
- data/test/gir_ffi/variable_name_generator_test.rb +6 -6
- data/test/gir_ffi/version_test.rb +1 -1
- data/test/gir_ffi/zero_terminated_test.rb +16 -17
- data/test/gir_ffi-base/glib/boolean_test.rb +13 -13
- data/test/gir_ffi-base/glib/strv_test.rb +11 -11
- data/test/gir_ffi_test.rb +18 -18
- data/test/gir_ffi_test_helper.rb +13 -18
- data/test/integration/derived_classes_test.rb +8 -8
- data/test/integration/generated_gimarshallingtests_test.rb +794 -792
- data/test/integration/generated_gio_test.rb +25 -26
- data/test/integration/generated_glib_test.rb +8 -2
- data/test/integration/generated_gobject_test.rb +16 -9
- data/test/integration/generated_pango_ft2_test.rb +1 -2
- data/test/integration/generated_pango_test.rb +2 -2
- data/test/integration/generated_regress_test.rb +785 -705
- data/test/integration/generated_secret_test.rb +5 -5
- data/test/integration/method_lookup_test.rb +5 -5
- data/test/introspection_test_helper.rb +3 -1
- data/test/minitest/stats_plugin.rb +3 -3
- metadata +6 -3
@@ -1,24 +1,25 @@
|
|
1
1
|
require 'introspection_test_helper'
|
2
2
|
|
3
3
|
describe GObjectIntrospection::IRegisteredTypeInfo do
|
4
|
-
describe
|
5
|
-
describe
|
4
|
+
describe '#get_type_name' do
|
5
|
+
describe 'for an interface' do
|
6
6
|
let(:registered_type_info) {
|
7
|
-
get_introspection_data('GIMarshallingTests', 'Interface')
|
7
|
+
get_introspection_data('GIMarshallingTests', 'Interface')
|
8
|
+
}
|
8
9
|
|
9
|
-
it
|
10
|
+
it 'returns interface name' do
|
10
11
|
registered_type_info.type_name.must_equal 'GIMarshallingTestsInterface'
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
|
-
describe
|
15
|
+
describe 'for a type that is not an interface' do
|
15
16
|
let(:registered_type_info) {
|
16
|
-
get_introspection_data('GIMarshallingTests', 'Enum')
|
17
|
+
get_introspection_data('GIMarshallingTests', 'Enum')
|
18
|
+
}
|
17
19
|
|
18
|
-
it
|
20
|
+
it 'returns nil' do
|
19
21
|
registered_type_info.type_name.must_be_nil
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
24
|
-
|
@@ -1,19 +1,19 @@
|
|
1
1
|
require 'introspection_test_helper'
|
2
2
|
|
3
3
|
describe GObjectIntrospection::IRepository do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe 'an instance' do
|
5
|
+
it 'is not created by calling new()' do
|
6
6
|
assert_raises NoMethodError do
|
7
7
|
GObjectIntrospection::IRepository.new
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
it
|
11
|
+
it 'is created by calling default()' do
|
12
12
|
gir = GObjectIntrospection::IRepository.default
|
13
13
|
assert_kind_of GObjectIntrospection::IRepository, gir
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it 'is a singleton' do
|
17
17
|
gir = GObjectIntrospection::IRepository.default
|
18
18
|
gir2 = GObjectIntrospection::IRepository.default
|
19
19
|
assert_equal gir, gir2
|
@@ -22,40 +22,40 @@ describe GObjectIntrospection::IRepository do
|
|
22
22
|
|
23
23
|
let(:gir) { GObjectIntrospection::IRepository.default }
|
24
24
|
|
25
|
-
describe
|
25
|
+
describe '#require' do
|
26
26
|
it "raises an error if the namespace doesn't exist" do
|
27
27
|
assert_raises RuntimeError do
|
28
28
|
gir.require 'VeryUnlikelyGObjectNamespaceName', nil
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
32
|
+
it 'allows version to be nil' do
|
33
33
|
gir.require 'GObject', nil
|
34
34
|
pass
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
37
|
+
it 'allows version to be left out' do
|
38
38
|
gir.require 'GObject'
|
39
39
|
pass
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
describe
|
44
|
-
it
|
43
|
+
describe '#find_by_gtype' do
|
44
|
+
it 'raises an error if 0 is passed as the gtype' do
|
45
45
|
proc { gir.find_by_gtype 0 }.must_raise ArgumentError
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
describe
|
50
|
-
|
51
|
-
gir.require 'GObject',
|
52
|
-
end
|
53
|
-
|
54
|
-
it "yields more than one object" do
|
49
|
+
describe '#n_infos' do
|
50
|
+
it 'yields more than one object for the GObject namespace' do
|
51
|
+
gir.require 'GObject', '2.0'
|
55
52
|
assert_operator gir.n_infos('GObject'), :>, 0
|
56
53
|
end
|
54
|
+
end
|
57
55
|
|
58
|
-
|
56
|
+
describe '#info' do
|
57
|
+
it 'yields IBaseInfo objects' do
|
58
|
+
gir.require 'GObject', '2.0'
|
59
59
|
assert_kind_of GObjectIntrospection::IBaseInfo, gir.info('GObject', 0)
|
60
60
|
end
|
61
61
|
end
|
@@ -1,17 +1,31 @@
|
|
1
1
|
require 'introspection_test_helper'
|
2
2
|
|
3
3
|
describe GObjectIntrospection::ITypeInfo do
|
4
|
-
describe
|
4
|
+
describe '#name?' do
|
5
5
|
let(:object_info) { get_introspection_data('GIMarshallingTests', 'Object') }
|
6
6
|
let(:vfunc_info) { object_info.find_vfunc('vfunc_array_out_parameter') }
|
7
7
|
let(:arg_info) { vfunc_info.args[0] }
|
8
8
|
let(:type_info) { arg_info.argument_type }
|
9
9
|
|
10
|
-
it
|
10
|
+
it 'raises an error' do
|
11
11
|
skip unless vfunc_info
|
12
12
|
proc {
|
13
13
|
type_info.name
|
14
14
|
}.must_raise RuntimeError
|
15
15
|
end
|
16
16
|
end
|
17
|
+
|
18
|
+
describe '#interface' do
|
19
|
+
describe 'for unresolvable interface types' do
|
20
|
+
let(:function_info) { get_introspection_data 'GObject', 'signal_set_va_marshaller' }
|
21
|
+
let(:argument_info) { function_info.args.last }
|
22
|
+
let(:type_info) { argument_info.argument_type }
|
23
|
+
|
24
|
+
it 'returns an IUnresolvableInfo object' do
|
25
|
+
result = type_info.interface
|
26
|
+
result.info_type.must_equal :unresolved
|
27
|
+
result.must_be_kind_of GObjectIntrospection::IUnresolvedInfo
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
17
31
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'introspection_test_helper'
|
2
2
|
|
3
3
|
describe GObjectIntrospection::Lib::GIArgument do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe 'its member :v_ssize' do
|
5
|
+
it 'is signed' do
|
6
6
|
gia = GObjectIntrospection::Lib::GIArgument.new
|
7
7
|
gia[:v_int64] = -1
|
8
8
|
assert_equal(-1, gia[:v_ssize])
|
data/test/ffi-gobject_test.rb
CHANGED
@@ -5,28 +5,28 @@ describe GObject do
|
|
5
5
|
GirFFI.setup :Regress
|
6
6
|
end
|
7
7
|
|
8
|
-
describe
|
9
|
-
it
|
8
|
+
describe '::signal_emit' do
|
9
|
+
it 'emits a signal' do
|
10
10
|
a = 1
|
11
11
|
o = Regress::TestSubObj.new
|
12
12
|
prc = proc { a = 2 }
|
13
13
|
callback = GObject::Callback.from prc
|
14
|
-
::GObject::Lib.g_signal_connect_data o,
|
15
|
-
GObject.signal_emit o,
|
14
|
+
::GObject::Lib.g_signal_connect_data o, 'test', callback, nil, nil, 0
|
15
|
+
GObject.signal_emit o, 'test'
|
16
16
|
assert_equal 2, a
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
19
|
+
it 'handles return values' do
|
20
20
|
s = Gio::SocketService.new
|
21
21
|
|
22
22
|
argtypes = [:pointer, :pointer, :pointer, :pointer]
|
23
|
-
callback = FFI::Function.new(:bool, argtypes) { |
|
24
|
-
::GObject::Lib.g_signal_connect_data s,
|
25
|
-
rv = GObject.signal_emit s,
|
23
|
+
callback = FFI::Function.new(:bool, argtypes) { |_a, _b, _c, _d| true }
|
24
|
+
::GObject::Lib.g_signal_connect_data s, 'incoming', callback, nil, nil, 0
|
25
|
+
rv = GObject.signal_emit s, 'incoming'
|
26
26
|
assert_equal true, rv.get_value
|
27
27
|
end
|
28
28
|
|
29
|
-
it
|
29
|
+
it 'passes in extra arguments' do
|
30
30
|
o = Regress::TestSubObj.new
|
31
31
|
sb = Regress::TestSimpleBoxedA.new
|
32
32
|
sb.some_int8 = 31
|
@@ -35,85 +35,85 @@ describe GObject do
|
|
35
35
|
b2 = nil
|
36
36
|
|
37
37
|
argtypes = [:pointer, :pointer, :pointer]
|
38
|
-
callback = FFI::Function.new(:void, argtypes) do |
|
38
|
+
callback = FFI::Function.new(:void, argtypes) do |_a, b, _c|
|
39
39
|
b2 = b
|
40
40
|
end
|
41
|
-
::GObject::Lib.g_signal_connect_data o,
|
42
|
-
GObject.signal_emit o,
|
41
|
+
::GObject::Lib.g_signal_connect_data o, 'test-with-static-scope-arg', callback, nil, nil, 0
|
42
|
+
GObject.signal_emit o, 'test-with-static-scope-arg', sb
|
43
43
|
|
44
44
|
sb2 = Regress::TestSimpleBoxedA.wrap b2
|
45
45
|
assert sb.equals(sb2)
|
46
46
|
end
|
47
47
|
|
48
|
-
it
|
48
|
+
it 'allows specifying signal detail' do
|
49
49
|
a = 1
|
50
50
|
o = Regress::TestSubObj.new
|
51
51
|
|
52
52
|
callback = FFI::Function.new(:void, [:pointer, :pointer, :pointer]) { a = 2 }
|
53
|
-
::GObject::Lib.g_signal_connect_data o,
|
53
|
+
::GObject::Lib.g_signal_connect_data o, 'notify::detail', callback, nil, nil, 0
|
54
54
|
|
55
|
-
GObject.signal_emit o,
|
55
|
+
GObject.signal_emit o, 'notify::detail'
|
56
56
|
|
57
57
|
a.must_equal 2
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
describe
|
62
|
-
it
|
61
|
+
describe '::signal_connect' do
|
62
|
+
it 'installs a signal handler' do
|
63
63
|
a = 1
|
64
64
|
o = Regress::TestSubObj.new
|
65
|
-
GObject.signal_connect(o,
|
66
|
-
GObject.signal_emit o,
|
65
|
+
GObject.signal_connect(o, 'test') { a = 2 }
|
66
|
+
GObject.signal_emit o, 'test'
|
67
67
|
assert_equal 2, a
|
68
68
|
end
|
69
69
|
|
70
|
-
it
|
70
|
+
it 'passes user data to handler' do
|
71
71
|
a = 1
|
72
72
|
o = Regress::TestSubObj.new
|
73
|
-
GObject.signal_connect(o,
|
74
|
-
GObject.signal_emit o,
|
73
|
+
GObject.signal_connect(o, 'test', 2) { |_i, d| a = d }
|
74
|
+
GObject.signal_emit o, 'test'
|
75
75
|
assert_equal 2, a
|
76
76
|
end
|
77
77
|
|
78
|
-
it
|
78
|
+
it 'passes object to handler' do
|
79
79
|
o = Regress::TestSubObj.new
|
80
80
|
o2 = nil
|
81
|
-
GObject.signal_connect(o,
|
82
|
-
GObject.signal_emit o,
|
81
|
+
GObject.signal_connect(o, 'test') { |i, _d| o2 = i }
|
82
|
+
GObject.signal_emit o, 'test'
|
83
83
|
assert_instance_of Regress::TestSubObj, o2
|
84
84
|
assert_equal o.to_ptr, o2.to_ptr
|
85
85
|
end
|
86
86
|
|
87
|
-
it
|
87
|
+
it 'does not allow connecting an invalid signal' do
|
88
88
|
o = Regress::TestSubObj.new
|
89
89
|
assert_raises RuntimeError do
|
90
|
-
GObject.signal_connect(o,
|
90
|
+
GObject.signal_connect(o, 'not-really-a-signal') {}
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
it
|
94
|
+
it 'handles return values' do
|
95
95
|
s = Gio::SocketService.new
|
96
|
-
GObject.signal_connect(s,
|
97
|
-
rv = GObject.signal_emit s,
|
96
|
+
GObject.signal_connect(s, 'incoming') { true }
|
97
|
+
rv = GObject.signal_emit s, 'incoming'
|
98
98
|
assert_equal true, rv.get_value
|
99
99
|
end
|
100
100
|
|
101
|
-
it
|
101
|
+
it 'requires a block' do
|
102
102
|
o = Regress::TestSubObj.new
|
103
103
|
assert_raises ArgumentError do
|
104
|
-
GObject.signal_connect o,
|
104
|
+
GObject.signal_connect o, 'test'
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
it
|
108
|
+
it 'allows specifying signal detail' do
|
109
109
|
a = 1
|
110
110
|
o = Regress::TestSubObj.new
|
111
|
-
GObject.signal_connect(o,
|
112
|
-
GObject.signal_emit o,
|
111
|
+
GObject.signal_connect(o, 'notify::detail', 2) { |_i, _, d| a = d }
|
112
|
+
GObject.signal_emit o, 'notify::detail'
|
113
113
|
assert_equal 2, a
|
114
114
|
end
|
115
115
|
|
116
|
-
describe
|
116
|
+
describe 'connecting a signal with extra arguments' do
|
117
117
|
before do
|
118
118
|
@a = nil
|
119
119
|
@b = 2
|
@@ -122,21 +122,31 @@ describe GObject do
|
|
122
122
|
sb = Regress::TestSimpleBoxedA.new
|
123
123
|
sb.some_int = 23
|
124
124
|
|
125
|
-
GObject.signal_connect(o,
|
125
|
+
GObject.signal_connect(o, 'test-with-static-scope-arg', 2) { |_instance, object, user_data|
|
126
126
|
@a = user_data
|
127
127
|
@b = object
|
128
128
|
}
|
129
|
-
GObject.signal_emit o,
|
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
|
|
136
|
-
it
|
136
|
+
it 'passes on the extra arguments' do
|
137
137
|
assert_instance_of Regress::TestSimpleBoxedA, @b
|
138
138
|
assert_equal 23, @b.some_int
|
139
139
|
end
|
140
140
|
end
|
141
141
|
end
|
142
|
+
|
143
|
+
describe '::signal_connect_after' do
|
144
|
+
it 'installs a signal handler' do
|
145
|
+
a = 1
|
146
|
+
o = Regress::TestSubObj.new
|
147
|
+
GObject.signal_connect_after(o, 'test') { a = 2 }
|
148
|
+
GObject.signal_emit o, 'test'
|
149
|
+
assert_equal 2, a
|
150
|
+
end
|
151
|
+
end
|
142
152
|
end
|
@@ -1,24 +1,24 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::ArgHelper do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe '.cast_from_pointer' do
|
5
|
+
it 'handles class types' do
|
6
6
|
klass = Class.new
|
7
7
|
mock(klass).wrap(:pointer_value) { :wrapped_value }
|
8
8
|
GirFFI::ArgHelper.cast_from_pointer(klass, :pointer_value).must_equal :wrapped_value
|
9
9
|
end
|
10
10
|
|
11
|
-
it
|
11
|
+
it 'handles negative :gint8' do
|
12
12
|
ptr = FFI::Pointer.new(-127)
|
13
13
|
GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr).must_equal(-127)
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it 'handles positive :gint8' do
|
17
17
|
ptr = FFI::Pointer.new(128)
|
18
18
|
GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr).must_equal(128)
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
21
|
+
it 'handles :guint32' do
|
22
22
|
ptr = FFI::Pointer.new(0xffffffff)
|
23
23
|
GirFFI::ArgHelper.cast_from_pointer(:guint32, ptr).must_equal(0xffffffff)
|
24
24
|
end
|
@@ -6,7 +6,7 @@ describe GirFFI::Builder do
|
|
6
6
|
let(:gir) { GObjectIntrospection::IRepository.default }
|
7
7
|
|
8
8
|
describe '.build_class' do
|
9
|
-
it
|
9
|
+
it 'does not replace existing classes' do
|
10
10
|
oldclass = GObject::Object
|
11
11
|
GirFFI::Builder.build_class get_introspection_data('GObject', 'Object')
|
12
12
|
GObject::Object.must_equal oldclass
|
@@ -15,44 +15,44 @@ describe GirFFI::Builder do
|
|
15
15
|
|
16
16
|
describe '.attach_ffi_function' do
|
17
17
|
let(:lib) { Module.new }
|
18
|
-
it
|
18
|
+
it 'calls attach_function with the correct types for Regress.test_callback_destroy_notify' do
|
19
19
|
function_info = get_introspection_data 'Regress', 'test_callback_destroy_notify'
|
20
20
|
|
21
21
|
mock(lib).
|
22
|
-
attach_function(
|
23
|
-
[
|
22
|
+
attach_function('regress_test_callback_destroy_notify',
|
23
|
+
[Regress::TestCallbackUserData, :pointer, GLib::DestroyNotify],
|
24
24
|
:int32) { true }
|
25
25
|
|
26
26
|
GirFFI::Builder.attach_ffi_function(lib, function_info)
|
27
27
|
end
|
28
28
|
|
29
|
-
it
|
29
|
+
it 'calls attach_function with the correct types for Regress::TestObj#torture_signature_0' do
|
30
30
|
info = get_method_introspection_data 'Regress', 'TestObj', 'torture_signature_0'
|
31
31
|
|
32
32
|
mock(lib).
|
33
|
-
attach_function(
|
33
|
+
attach_function('regress_test_obj_torture_signature_0',
|
34
34
|
[:pointer, :int32, :pointer, :pointer, :pointer, :pointer, :uint32],
|
35
35
|
:void) { true }
|
36
36
|
|
37
37
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
38
38
|
end
|
39
39
|
|
40
|
-
it
|
40
|
+
it 'calls attach_function with the correct types for Regress::TestObj#instance_method' do
|
41
41
|
info = get_method_introspection_data 'Regress', 'TestObj', 'instance_method'
|
42
|
-
mock(lib).attach_function(
|
42
|
+
mock(lib).attach_function('regress_test_obj_instance_method',
|
43
43
|
[:pointer], :int32) { true }
|
44
44
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
47
|
+
it 'calls attach_function with the correct types for Regress.test_array_gint32_in' do
|
48
48
|
info = get_introspection_data 'Regress', 'test_array_gint32_in'
|
49
|
-
mock(lib).attach_function(
|
49
|
+
mock(lib).attach_function('regress_test_array_gint32_in',
|
50
50
|
[:int32, :pointer], :int32) { true }
|
51
51
|
GirFFI::Builder.attach_ffi_function(lib, info)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
describe
|
55
|
+
describe 'looking at Regress.test_callback_destroy_notify' do
|
56
56
|
before do
|
57
57
|
save_module :GObject
|
58
58
|
save_module :Regress
|
@@ -61,7 +61,7 @@ describe GirFFI::Builder do
|
|
61
61
|
@go = get_introspection_data 'Regress', 'test_callback_destroy_notify'
|
62
62
|
end
|
63
63
|
|
64
|
-
it
|
64
|
+
it 'defines ffi callback types :Callback and :ClosureNotify' do
|
65
65
|
Regress.setup_method 'test_callback_destroy_notify'
|
66
66
|
tcud = Regress::Lib.find_type :TestCallbackUserData
|
67
67
|
dn = GLib::Lib.find_type :DestroyNotify
|
@@ -78,40 +78,40 @@ describe GirFFI::Builder do
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
describe
|
81
|
+
describe 'building Regress::TestBoxed' do
|
82
82
|
before do
|
83
83
|
GirFFI::Builder.build_class get_introspection_data('Regress', 'TestBoxed')
|
84
84
|
end
|
85
85
|
|
86
|
-
it
|
87
|
-
assert Regress::TestBoxed.respond_to?
|
86
|
+
it 'sets up #wrap' do
|
87
|
+
assert Regress::TestBoxed.respond_to? 'wrap'
|
88
88
|
end
|
89
89
|
|
90
|
-
it
|
91
|
-
assert Regress::TestBoxed.respond_to?
|
90
|
+
it 'sets up #allocate' do
|
91
|
+
assert Regress::TestBoxed.respond_to? 'allocate'
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
-
describe
|
95
|
+
describe 'built Regress module' do
|
96
96
|
before do
|
97
97
|
save_module :Regress
|
98
98
|
GirFFI::Builder.build_module 'Regress'
|
99
99
|
end
|
100
100
|
|
101
|
-
it
|
101
|
+
it 'autocreates singleton methods' do
|
102
102
|
refute_defines_singleton_method Regress, :test_uint
|
103
103
|
Regress.test_uint 31
|
104
104
|
assert_defines_singleton_method Regress, :test_uint
|
105
105
|
end
|
106
106
|
|
107
|
-
it
|
107
|
+
it 'autocreates the TestObj class on first access' do
|
108
108
|
assert !Regress.const_defined?(:TestObj)
|
109
109
|
Regress::TestObj.must_be_instance_of Class
|
110
110
|
assert Regress.const_defined? :TestObj
|
111
111
|
end
|
112
112
|
|
113
|
-
it
|
114
|
-
|
113
|
+
it 'knows its own module builder' do
|
114
|
+
Regress.gir_ffi_builder.must_be_instance_of GirFFI::Builders::ModuleBuilder
|
115
115
|
end
|
116
116
|
|
117
117
|
after do
|
@@ -119,35 +119,35 @@ describe GirFFI::Builder do
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
-
describe
|
122
|
+
describe 'having built Regress::TestObj' do
|
123
123
|
before do
|
124
124
|
GirFFI::Builder.build_class get_introspection_data('Regress', 'TestObj')
|
125
125
|
end
|
126
126
|
|
127
|
-
it
|
128
|
-
o = Regress::TestObj.new_from_file(
|
127
|
+
it 'C functions for called instance methods get attached to Regress::Lib' do
|
128
|
+
o = Regress::TestObj.new_from_file('foo')
|
129
129
|
o.instance_method
|
130
130
|
Regress::Lib.must_respond_to :regress_test_obj_instance_method
|
131
131
|
end
|
132
132
|
|
133
|
-
it
|
133
|
+
it 'the built class knows its own GIR info' do
|
134
134
|
Regress::TestObj.gir_info.name.must_equal 'TestObj'
|
135
135
|
end
|
136
136
|
|
137
|
-
it
|
137
|
+
it 'the built class knows its own class builder' do
|
138
138
|
Regress::TestObj.gir_ffi_builder.must_be_instance_of GirFFI::Builders::ObjectBuilder
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
|
-
describe
|
143
|
-
it
|
142
|
+
describe 'built Regress::TestSubObj' do
|
143
|
+
it 'inherits #set_bare from its superclass' do
|
144
144
|
o1 = Regress::TestSubObj.new
|
145
145
|
o1.set_bare(nil)
|
146
146
|
pass
|
147
147
|
end
|
148
148
|
|
149
|
-
it
|
150
|
-
obj = Regress::TestObj.new_from_file(
|
149
|
+
it 'overrides #instance_method' do
|
150
|
+
obj = Regress::TestObj.new_from_file('foo')
|
151
151
|
subobj = Regress::TestSubObj.new
|
152
152
|
|
153
153
|
obj.instance_method.must_equal(-1)
|
@@ -155,30 +155,30 @@ describe GirFFI::Builder do
|
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
158
|
-
describe
|
158
|
+
describe 'building Regress::TestSubObj' do
|
159
159
|
before do
|
160
160
|
save_module :Regress
|
161
161
|
GirFFI::Builder.build_class get_introspection_data('Regress', 'TestSubObj')
|
162
162
|
end
|
163
163
|
|
164
|
-
it
|
164
|
+
it 'sets up the Regress namespace' do
|
165
165
|
assert Regress.const_defined? :Lib
|
166
166
|
assert Regress.respond_to? :gir_ffi_builder
|
167
167
|
assert Regress.const_defined? :GIR_FFI_BUILDER
|
168
168
|
end
|
169
169
|
|
170
|
-
it
|
170
|
+
it 'creates the Regress::Lib module ready to attach functions from the shared library' do
|
171
171
|
expected = [gir.shared_library('Regress')]
|
172
172
|
assert_equal expected, Regress::Lib.ffi_libraries.map(&:name)
|
173
173
|
end
|
174
174
|
|
175
|
-
it
|
175
|
+
it 'builds parent classes also' do
|
176
176
|
assert Regress.const_defined? :TestObj
|
177
177
|
assert Object.const_defined? :GObject
|
178
178
|
assert GObject.const_defined? :Object
|
179
179
|
end
|
180
180
|
|
181
|
-
it
|
181
|
+
it 'sets up the inheritance chain' do
|
182
182
|
ancestors = Regress::TestSubObj.ancestors
|
183
183
|
assert_equal [
|
184
184
|
Regress::TestSubObj,
|
@@ -187,7 +187,7 @@ describe GirFFI::Builder do
|
|
187
187
|
], ancestors[0..2]
|
188
188
|
end
|
189
189
|
|
190
|
-
it
|
190
|
+
it 'creates a Regress::TestSubObj#to_ptr method' do
|
191
191
|
assert Regress::TestSubObj.public_method_defined? :to_ptr
|
192
192
|
end
|
193
193
|
|
@@ -196,25 +196,25 @@ describe GirFFI::Builder do
|
|
196
196
|
end
|
197
197
|
end
|
198
198
|
|
199
|
-
describe
|
199
|
+
describe 'building Regress' do
|
200
200
|
before do
|
201
201
|
save_module :Regress
|
202
202
|
GirFFI::Builder.build_module 'Regress'
|
203
203
|
end
|
204
204
|
|
205
|
-
it
|
205
|
+
it 'creates a Lib module ready to attach functions from the shared library' do
|
206
206
|
gir = GObjectIntrospection::IRepository.default
|
207
207
|
expected = [gir.shared_library('Regress')]
|
208
208
|
assert_equal expected, Regress::Lib.ffi_libraries.map(&:name)
|
209
209
|
end
|
210
210
|
|
211
|
-
it
|
211
|
+
it 'does not replace existing module' do
|
212
212
|
oldmodule = Regress
|
213
213
|
GirFFI::Builder.build_module 'Regress'
|
214
214
|
assert_equal oldmodule, Regress
|
215
215
|
end
|
216
216
|
|
217
|
-
it
|
217
|
+
it 'does not replace existing Lib module' do
|
218
218
|
oldmodule = Regress::Lib
|
219
219
|
GirFFI::Builder.build_module 'Regress'
|
220
220
|
assert_equal oldmodule, Regress::Lib
|