gir_ffi 0.6.4 → 0.6.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/lib/ffi-glib/array.rb +12 -3
- data/lib/ffi-glib/list_methods.rb +4 -0
- data/lib/ffi-glib/ptr_array.rb +4 -0
- data/lib/ffi-glib/sized_array.rb +4 -0
- data/lib/ffi-glib/strv.rb +4 -1
- data/lib/gir_ffi/arg_helper.rb +5 -27
- data/lib/gir_ffi/class_base.rb +8 -0
- data/lib/gir_ffi/enum_base.rb +8 -0
- data/lib/gir_ffi/ffi_ext/pointer.rb +12 -0
- data/lib/gir_ffi/in_out_pointer.rb +3 -13
- data/lib/gir_ffi/in_pointer.rb +19 -1
- data/lib/gir_ffi/info_ext/i_enum_info.rb +0 -2
- data/lib/gir_ffi/info_ext/i_object_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_type_info.rb +3 -14
- data/lib/gir_ffi/module_base.rb +1 -0
- data/lib/gir_ffi/type_map.rb +6 -8
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +5 -1
- data/tasks/test.rake +1 -0
- data/test/ffi-glib/array_test.rb +41 -7
- data/test/ffi-glib/hash_table_test.rb +3 -3
- data/test/ffi-glib/list_test.rb +31 -3
- data/test/ffi-glib/ptr_array_test.rb +28 -0
- data/test/ffi-glib/s_list_test.rb +28 -0
- data/test/ffi-glib/sized_array_test.rb +30 -3
- data/test/ffi-glib/strv_test.rb +31 -0
- data/test/ffi-gobject_test.rb +2 -2
- data/test/gir_ffi/arg_helper_test.rb +3 -2
- data/test/gir_ffi/class_base_test.rb +62 -4
- data/test/gir_ffi/function_builder_test.rb +1 -1
- data/test/gir_ffi/in_pointer_test.rb +17 -0
- data/test/gir_ffi/info_ext/i_object_info_test.rb +14 -0
- data/test/gir_ffi/info_ext/i_type_info_test.rb +79 -25
- data/test/gir_ffi/type_map_test.rb +15 -0
- data/test/gir_ffi/zero_terminated_test.rb +28 -0
- data/test/integration/generated_gimarshallingtests_test.rb +90 -75
- data/test/integration/generated_pango_test.rb +1 -1
- data/test/integration/generated_regress_test.rb +64 -39
- metadata +8 -18
data/tasks/test.rake
CHANGED
data/test/ffi-glib/array_test.rb
CHANGED
@@ -42,12 +42,18 @@ describe GLib::Array do
|
|
42
42
|
assert_equal arr.to_a, arr2.to_a
|
43
43
|
end
|
44
44
|
|
45
|
-
it "
|
45
|
+
it "warns the element sizes don't match" do
|
46
46
|
arr = GLib::Array.new :gint32
|
47
47
|
arr.append_vals [1, 2, 3]
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
proc { GLib::Array.wrap :gint8, arr.to_ptr }.must_output nil, /sizes do not match/
|
49
|
+
end
|
50
|
+
|
51
|
+
it "handles a struct as the element type" do
|
52
|
+
vals = [1, 2, 3].map {|i| GObject::EnumValue.new.tap {|ev| ev.value = i} }
|
53
|
+
arr = GLib::Array.new GObject::EnumValue
|
54
|
+
arr.append_vals vals
|
55
|
+
arr2 = GLib::Array.wrap GObject::EnumValue, arr.to_ptr
|
56
|
+
arr2.to_a.must_equal arr.to_a
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
@@ -71,7 +77,7 @@ describe GLib::Array do
|
|
71
77
|
arr = GLib::Array.new :gint32
|
72
78
|
arr.append_vals [3, 2, 1]
|
73
79
|
arr2 = GLib::Array.from :foo, arr
|
74
|
-
|
80
|
+
assert arr2.equal? arr
|
75
81
|
end
|
76
82
|
|
77
83
|
it "wraps its argument if given a pointer" do
|
@@ -81,8 +87,36 @@ describe GLib::Array do
|
|
81
87
|
assert_instance_of FFI::Pointer, pointer
|
82
88
|
arr2 = GLib::Array.from :gint32, pointer
|
83
89
|
assert_instance_of GLib::Array, arr2
|
84
|
-
|
85
|
-
|
90
|
+
refute arr2.equal? arr
|
91
|
+
arr2.to_a.must_equal arr.to_a
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "#==" do
|
96
|
+
it "returns true when comparing to an array with the same elements" do
|
97
|
+
arr = GLib::Array.from :gint32, [1, 2, 3]
|
98
|
+
|
99
|
+
arr.must_be :==, [1, 2, 3]
|
100
|
+
end
|
101
|
+
|
102
|
+
it "returns false when comparing to an array with different elements" do
|
103
|
+
arr = GLib::Array.from :gint32, [1, 2, 3]
|
104
|
+
|
105
|
+
arr.wont_be :==, [1, 2]
|
106
|
+
end
|
107
|
+
|
108
|
+
it "returns true when comparing to a GArray with the same elements" do
|
109
|
+
arr = GLib::Array.from :gint32, [1, 2, 3]
|
110
|
+
other = GLib::Array.from :gint32, [1, 2, 3]
|
111
|
+
|
112
|
+
arr.must_be :==, other
|
113
|
+
end
|
114
|
+
|
115
|
+
it "returns false when comparing to a GArray with different elements" do
|
116
|
+
arr = GLib::Array.from :gint32, [1, 2, 3]
|
117
|
+
other = GLib::Array.from :gint32, [1, 2]
|
118
|
+
|
119
|
+
arr.wont_be :==, other
|
86
120
|
end
|
87
121
|
end
|
88
122
|
end
|
@@ -17,7 +17,7 @@ describe GLib::HashTable do
|
|
17
17
|
it "return its argument if given a GHashTable" do
|
18
18
|
hsh = GLib::HashTable.from [:utf8, :gint32], {"foo" => 23, "bar" => 32}
|
19
19
|
hsh2 = GLib::HashTable.from [:utf8, :gint32], hsh
|
20
|
-
|
20
|
+
assert hsh2.equal? hsh
|
21
21
|
end
|
22
22
|
|
23
23
|
it "wraps its argument if given a pointer" do
|
@@ -26,8 +26,8 @@ describe GLib::HashTable do
|
|
26
26
|
assert_instance_of FFI::Pointer, pointer
|
27
27
|
hsh2 = GLib::HashTable.from [:utf8, :gint32], pointer
|
28
28
|
assert_instance_of GLib::HashTable, hsh2
|
29
|
-
|
30
|
-
|
29
|
+
refute hsh2.equal? hsh
|
30
|
+
hsh2.to_hash.must_equal hsh.to_hash
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
data/test/ffi-glib/list_test.rb
CHANGED
@@ -40,7 +40,7 @@ describe GLib::List do
|
|
40
40
|
it "return its argument if given a GList" do
|
41
41
|
lst = GLib::List.from :gint32, [3, 2, 1]
|
42
42
|
lst2 = GLib::List.from :gint32, lst
|
43
|
-
|
43
|
+
assert lst2.equal? lst
|
44
44
|
end
|
45
45
|
|
46
46
|
it "wraps its argument if given a pointer" do
|
@@ -49,8 +49,36 @@ describe GLib::List do
|
|
49
49
|
assert_instance_of FFI::Pointer, pointer
|
50
50
|
lst2 = GLib::List.from :gint32, pointer
|
51
51
|
assert_instance_of GLib::List, lst2
|
52
|
-
|
53
|
-
|
52
|
+
refute lst2.equal? lst
|
53
|
+
lst2.to_a.must_equal lst.to_a
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#==" do
|
58
|
+
it "returns true when comparing to an array with the same elements" do
|
59
|
+
list = GLib::List.from :gint32, [1, 2, 3]
|
60
|
+
|
61
|
+
list.must_be :==, [1, 2, 3]
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns false when comparing to an array with different elements" do
|
65
|
+
list = GLib::List.from :gint32, [1, 2, 3]
|
66
|
+
|
67
|
+
list.wont_be :==, [1, 2]
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns true when comparing to a list with the same elements" do
|
71
|
+
list = GLib::List.from :gint32, [1, 2, 3]
|
72
|
+
other = GLib::List.from :gint32, [1, 2, 3]
|
73
|
+
|
74
|
+
list.must_be :==, other
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns false when comparing to a list with different elements" do
|
78
|
+
list = GLib::List.from :gint32, [1, 2, 3]
|
79
|
+
other = GLib::List.from :gint32, [1, 2]
|
80
|
+
|
81
|
+
list.wont_be :==, other
|
54
82
|
end
|
55
83
|
end
|
56
84
|
end
|
@@ -66,4 +66,32 @@ describe GLib::PtrArray do
|
|
66
66
|
arr.add "test1"
|
67
67
|
assert_equal ["test1"], arr.to_a
|
68
68
|
end
|
69
|
+
|
70
|
+
describe "#==" do
|
71
|
+
it "returns true when comparing to an array with the same elements" do
|
72
|
+
arr = GLib::PtrArray.from :utf8, ["1", "2", "3"]
|
73
|
+
|
74
|
+
arr.must_be :==, ["1", "2", "3"]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns false when comparing to an array with different elements" do
|
78
|
+
arr = GLib::PtrArray.from :utf8, ["1", "2", "3"]
|
79
|
+
|
80
|
+
arr.wont_be :==, ["1", "2"]
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns true when comparing to a GPtrArray with the same elements" do
|
84
|
+
arr = GLib::PtrArray.from :utf8, ["1", "2", "3"]
|
85
|
+
other = GLib::PtrArray.from :utf8, ["1", "2", "3"]
|
86
|
+
|
87
|
+
arr.must_be :==, other
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns false when comparing to a GPtrArray with different elements" do
|
91
|
+
arr = GLib::PtrArray.from :utf8, ["1", "2", "3"]
|
92
|
+
other = GLib::PtrArray.from :utf8, ["1", "2"]
|
93
|
+
|
94
|
+
arr.wont_be :==, other
|
95
|
+
end
|
96
|
+
end
|
69
97
|
end
|
@@ -43,4 +43,32 @@ describe GLib::SList do
|
|
43
43
|
assert_equal lst, lst2
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
describe "#==" do
|
48
|
+
it "returns true when comparing to an array with the same elements" do
|
49
|
+
list = GLib::SList.from :gint32, [1, 2, 3]
|
50
|
+
|
51
|
+
list.must_be :==, [1, 2, 3]
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns false when comparing to an array with different elements" do
|
55
|
+
list = GLib::SList.from :gint32, [1, 2, 3]
|
56
|
+
|
57
|
+
list.wont_be :==, [1, 2]
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns true when comparing to a list with the same elements" do
|
61
|
+
list = GLib::SList.from :gint32, [1, 2, 3]
|
62
|
+
other = GLib::SList.from :gint32, [1, 2, 3]
|
63
|
+
|
64
|
+
list.must_be :==, other
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns false when comparing to a list with different elements" do
|
68
|
+
list = GLib::SList.from :gint32, [1, 2, 3]
|
69
|
+
other = GLib::SList.from :gint32, [1, 2]
|
70
|
+
|
71
|
+
list.wont_be :==, other
|
72
|
+
end
|
73
|
+
end
|
46
74
|
end
|
@@ -75,8 +75,36 @@ describe GLib::SizedArray do
|
|
75
75
|
arr = GLib::SizedArray.from :gint32, 3, [3, 2, 1]
|
76
76
|
arr2 = GLib::SizedArray.from :gint32, 3, arr.to_ptr
|
77
77
|
assert_instance_of GLib::SizedArray, arr2
|
78
|
-
|
79
|
-
|
78
|
+
refute arr2.equal? arr
|
79
|
+
arr2.to_ptr.must_equal arr.to_ptr
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "#==" do
|
84
|
+
it "returns true when comparing to an array with the same elements" do
|
85
|
+
sized = GLib::SizedArray.from :int32, 3, [1, 2, 3]
|
86
|
+
|
87
|
+
sized.must_be :==, [1, 2, 3]
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns false when comparing to an array with different elements" do
|
91
|
+
sized = GLib::SizedArray.from :int32, 3, [1, 2, 3]
|
92
|
+
|
93
|
+
sized.wont_be :==, [1, 2]
|
94
|
+
end
|
95
|
+
|
96
|
+
it "returns true when comparing to a sized array with the same elements" do
|
97
|
+
sized = GLib::SizedArray.from :int32, 3, [1, 2, 3]
|
98
|
+
other = GLib::SizedArray.from :int32, 3, [1, 2, 3]
|
99
|
+
|
100
|
+
sized.must_be :==, other
|
101
|
+
end
|
102
|
+
|
103
|
+
it "returns false when comparing to a sized array with different elements" do
|
104
|
+
sized = GLib::SizedArray.from :int32, 3, [1, 2, 3]
|
105
|
+
other = GLib::SizedArray.from :int32, 2, [1, 2]
|
106
|
+
|
107
|
+
sized.wont_be :==, other
|
80
108
|
end
|
81
109
|
end
|
82
110
|
|
@@ -84,4 +112,3 @@ describe GLib::SizedArray do
|
|
84
112
|
GLib::SizedArray.must_include Enumerable
|
85
113
|
end
|
86
114
|
end
|
87
|
-
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'base_test_helper'
|
2
|
+
|
3
|
+
describe GLib::Strv do
|
4
|
+
describe "#==" do
|
5
|
+
it "returns true when comparing to an array with the same elements" do
|
6
|
+
strv = GLib::Strv.from ["1", "2", "3"]
|
7
|
+
|
8
|
+
strv.must_be :==, ["1", "2", "3"]
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns false when comparing to an array with different elements" do
|
12
|
+
strv = GLib::Strv.from ["1", "2", "3"]
|
13
|
+
|
14
|
+
strv.wont_be :==, ["1", "2"]
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns true when comparing to a strv with the same elements" do
|
18
|
+
strv = GLib::Strv.from ["1", "2", "3"]
|
19
|
+
other = GLib::Strv.from ["1", "2", "3"]
|
20
|
+
|
21
|
+
strv.must_be :==, other
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns false when comparing to a strv with different elements" do
|
25
|
+
strv = GLib::Strv.from ["1", "2", "3"]
|
26
|
+
other = GLib::Strv.from ["1", "2"]
|
27
|
+
|
28
|
+
strv.wont_be :==, other
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/test/ffi-gobject_test.rb
CHANGED
@@ -22,7 +22,7 @@ describe GObject do
|
|
22
22
|
callback = FFI::Function.new(:bool, argtypes) { |a,b,c,d| true }
|
23
23
|
::GObject::Lib.g_signal_connect_data s, "incoming", callback, nil, nil, 0
|
24
24
|
rv = GObject.signal_emit s, "incoming"
|
25
|
-
assert_equal true, rv.
|
25
|
+
assert_equal true, rv.get_value
|
26
26
|
end
|
27
27
|
|
28
28
|
should "pass in extra arguments" do
|
@@ -94,7 +94,7 @@ describe GObject do
|
|
94
94
|
s = Gio::SocketService.new
|
95
95
|
GObject.signal_connect(s, "incoming") { true }
|
96
96
|
rv = GObject.signal_emit s, "incoming"
|
97
|
-
assert_equal true, rv.
|
97
|
+
assert_equal true, rv.get_value
|
98
98
|
end
|
99
99
|
|
100
100
|
should "require a block" do
|
@@ -52,7 +52,9 @@ describe GirFFI::ArgHelper do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
describe "for pointers to arrays of enums" do
|
55
|
-
let(:enum) {
|
55
|
+
let(:enum) { Module.new {
|
56
|
+
extend GirFFI::EnumBase
|
57
|
+
self::Enum = FFI::Enum.new([:foo, 1, :bar, 2]) } }
|
56
58
|
it "returns an empty array when passed a null pointer" do
|
57
59
|
result = GirFFI::ArgHelper.ptr_to_typed_array enum, FFI::Pointer.new(0), 0
|
58
60
|
result.must_equal []
|
@@ -69,7 +71,6 @@ describe GirFFI::ArgHelper do
|
|
69
71
|
result = GirFFI::ArgHelper.ptr_to_typed_array enum, block, 2
|
70
72
|
result.must_equal [:foo, :bar]
|
71
73
|
end
|
72
|
-
|
73
74
|
end
|
74
75
|
|
75
76
|
describe "for pointers to arrays of base types" do
|
@@ -2,14 +2,72 @@ require 'gir_ffi_test_helper'
|
|
2
2
|
|
3
3
|
describe GirFFI::ClassBase do
|
4
4
|
describe "a simple descendant" do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
let(:klass) {
|
6
|
+
Class.new(GirFFI::ClassBase) do
|
7
|
+
self::Struct = Class.new(FFI::Struct) do
|
8
|
+
layout :foo, :int32
|
9
|
+
end
|
10
|
+
end
|
11
|
+
}
|
12
|
+
let(:object) { klass.wrap FFI::MemoryPointer.new(:int32) }
|
8
13
|
|
9
14
|
it "has #from as a pass-through method" do
|
10
|
-
result =
|
15
|
+
result = klass.from :foo
|
11
16
|
result.must_equal :foo
|
12
17
|
end
|
18
|
+
|
19
|
+
describe "#==" do
|
20
|
+
it "returns true when comparing to an object of the same class and pointer" do
|
21
|
+
other = klass.wrap object.to_ptr
|
22
|
+
|
23
|
+
object.must_be :==, other
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns false when comparing to an object of the same class and different pointer" do
|
27
|
+
other = klass.wrap FFI::MemoryPointer.new(:int32)
|
28
|
+
|
29
|
+
object.wont_be :==, other
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns false when comparing to an object of a different class" do
|
33
|
+
other = Object.new
|
34
|
+
|
35
|
+
object.wont_be :==, other
|
36
|
+
end
|
37
|
+
|
38
|
+
it "returns true when comparing to an object of a subclass and the same pointer" do
|
39
|
+
subclass = Class.new(klass)
|
40
|
+
other = subclass.wrap object.to_ptr
|
41
|
+
|
42
|
+
object.must_be :==, other
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#eql?" do
|
47
|
+
it "returns true when comparing to an object of the same class and pointer" do
|
48
|
+
other = klass.wrap object.to_ptr
|
49
|
+
|
50
|
+
object.must_equal other
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns false when comparing to an object of the same class and different pointer" do
|
54
|
+
other = klass.wrap FFI::MemoryPointer.new(:int32)
|
55
|
+
|
56
|
+
object.wont_equal other
|
57
|
+
end
|
58
|
+
|
59
|
+
it "returns true when comparing to an object of a different class and same pointer" do
|
60
|
+
stub(other = Object.new).to_ptr { object.to_ptr }
|
61
|
+
|
62
|
+
object.wont_equal other
|
63
|
+
end
|
64
|
+
|
65
|
+
it "returns false when comparing to an object of a different class and different pointer" do
|
66
|
+
stub(other = Object.new).to_ptr { FFI::MemoryPointer.new(:int32) }
|
67
|
+
|
68
|
+
object.wont_equal other
|
69
|
+
end
|
70
|
+
end
|
13
71
|
end
|
14
72
|
|
15
73
|
describe "a descendant with multiple builders" do
|
@@ -11,7 +11,7 @@ describe GirFFI::FunctionBuilder do
|
|
11
11
|
def self.test_array_fixed_out_objects
|
12
12
|
_v1 = GirFFI::InOutPointer.for :c
|
13
13
|
DummyLib.regress_test_array_fixed_out_objects _v1
|
14
|
-
_v2 = GLib::SizedArray.wrap([:pointer,
|
14
|
+
_v2 = GLib::SizedArray.wrap([:pointer, Regress::TestObj], 2, _v1.to_value)
|
15
15
|
return _v2
|
16
16
|
end
|
17
17
|
CODE
|
@@ -15,12 +15,29 @@ describe GirFFI::InPointer do
|
|
15
15
|
|
16
16
|
it "handles enum types" do
|
17
17
|
e = Module.new do
|
18
|
+
extend GirFFI::EnumBase
|
18
19
|
self::Enum = FFI::Enum.new [:foo, :bar, :baz]
|
19
20
|
end
|
20
21
|
ptr = GirFFI::InPointer.from_array e, [:bar, :foo, :baz]
|
21
22
|
ptr.read_array_of_int32(3).must_equal [1, 0, 2]
|
22
23
|
end
|
23
24
|
|
25
|
+
it "handles struct types" do
|
26
|
+
e = Class.new do
|
27
|
+
self::Struct = Class.new(FFI::Struct) do
|
28
|
+
layout :foo, :int32, :bar, :int32
|
29
|
+
end
|
30
|
+
end
|
31
|
+
struct = e::Struct.allocate
|
32
|
+
struct[:foo] = 42
|
33
|
+
struct[:bar] = 24
|
34
|
+
ptr = GirFFI::InPointer.from_array e, [struct]
|
35
|
+
ptr.wont_equal struct.to_ptr
|
36
|
+
new_struct = e::Struct.new ptr
|
37
|
+
new_struct[:foo].must_equal 42
|
38
|
+
new_struct[:bar].must_equal 24
|
39
|
+
end
|
40
|
+
|
24
41
|
it "handles typed pointers" do
|
25
42
|
p1 = GirFFI::InPointer.from :gint32, 42
|
26
43
|
p2 = GirFFI::InPointer.from :gint32, 24
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'gir_ffi_test_helper'
|
2
|
+
|
3
|
+
describe GirFFI::InfoExt::IObjectInfo do
|
4
|
+
let(:klass) { Class.new do
|
5
|
+
include GirFFI::InfoExt::IObjectInfo
|
6
|
+
end }
|
7
|
+
let(:object_info) { klass.new }
|
8
|
+
|
9
|
+
describe "#to_ffitype" do
|
10
|
+
it "returns :pointer" do
|
11
|
+
object_info.to_ffitype.must_equal :pointer
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|