gir_ffi 0.15.3 → 0.15.4

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.
Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +15 -0
  3. data/README.md +5 -6
  4. data/TODO.md +14 -35
  5. data/docs/Documentation.md +6 -0
  6. data/docs/Subclassing.md +38 -0
  7. data/lib/ffi-glib.rb +8 -3
  8. data/lib/ffi-glib/byte_array.rb +2 -1
  9. data/lib/ffi-glib/destroy_notify.rb +2 -2
  10. data/lib/ffi-glib/hash_table.rb +1 -2
  11. data/lib/ffi-glib/list.rb +11 -5
  12. data/lib/ffi-glib/list_methods.rb +12 -0
  13. data/lib/ffi-glib/s_list.rb +10 -4
  14. data/lib/ffi-gobject.rb +0 -3
  15. data/lib/ffi-gobject/object.rb +77 -73
  16. data/lib/ffi-gobject/object_class.rb +1 -1
  17. data/lib/ffi-gobject/value.rb +107 -108
  18. data/lib/ffi-gobject_introspection/i_base_info.rb +20 -19
  19. data/lib/gir_ffi-base/gobject/lib.rb +4 -0
  20. data/lib/gir_ffi/array_element_convertor.rb +1 -2
  21. data/lib/gir_ffi/boxed_base.rb +1 -5
  22. data/lib/gir_ffi/builder.rb +1 -1
  23. data/lib/gir_ffi/builder_helper.rb +7 -4
  24. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
  25. data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
  26. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  27. data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
  28. data/lib/gir_ffi/builders/callback_builder.rb +14 -12
  29. data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
  30. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  31. data/lib/gir_ffi/builders/enum_builder.rb +3 -3
  32. data/lib/gir_ffi/builders/interface_builder.rb +3 -1
  33. data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
  34. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
  35. data/lib/gir_ffi/builders/method_template.rb +4 -4
  36. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  37. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  38. data/lib/gir_ffi/builders/object_builder.rb +16 -6
  39. data/lib/gir_ffi/builders/property_builder.rb +1 -2
  40. data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
  41. data/lib/gir_ffi/builders/struct_builder.rb +5 -5
  42. data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
  43. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  44. data/lib/gir_ffi/callback_base.rb +3 -3
  45. data/lib/gir_ffi/core.rb +17 -2
  46. data/lib/gir_ffi/glib_error.rb +1 -2
  47. data/lib/gir_ffi/in_pointer.rb +7 -0
  48. data/lib/gir_ffi/object_base.rb +27 -0
  49. data/lib/gir_ffi/return_value_info.rb +1 -2
  50. data/lib/gir_ffi/struct_base.rb +1 -9
  51. data/lib/gir_ffi/struct_like_base.rb +9 -5
  52. data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
  53. data/lib/gir_ffi/union_base.rb +1 -9
  54. data/lib/gir_ffi/user_defined_object_info.rb +3 -2
  55. data/lib/gir_ffi/version.rb +1 -1
  56. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  57. metadata +86 -136
  58. data/Gemfile +0 -14
  59. data/Rakefile +0 -9
  60. data/tasks/test.rake +0 -204
  61. data/test/base_test_helper.rb +0 -70
  62. data/test/ffi-glib/array_test.rb +0 -203
  63. data/test/ffi-glib/byte_array_test.rb +0 -28
  64. data/test/ffi-glib/bytes_test.rb +0 -61
  65. data/test/ffi-glib/closure_test.rb +0 -38
  66. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  67. data/test/ffi-glib/hash_table_test.rb +0 -68
  68. data/test/ffi-glib/list_test.rb +0 -86
  69. data/test/ffi-glib/main_loop_test.rb +0 -53
  70. data/test/ffi-glib/ptr_array_test.rb +0 -112
  71. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  72. data/test/ffi-glib/s_list_test.rb +0 -76
  73. data/test/ffi-glib/strv_test.rb +0 -60
  74. data/test/ffi-glib/variant_test.rb +0 -12
  75. data/test/ffi-gobject/gobject_test.rb +0 -76
  76. data/test/ffi-gobject/object_class_test.rb +0 -31
  77. data/test/ffi-gobject/object_test.rb +0 -123
  78. data/test/ffi-gobject/param_spec_test.rb +0 -32
  79. data/test/ffi-gobject/value_test.rb +0 -390
  80. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  81. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
  82. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
  83. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  84. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  85. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  86. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  87. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  88. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  89. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  90. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  91. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
  92. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  93. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  94. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  95. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  96. data/test/ffi-gobject_test.rb +0 -153
  97. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  98. data/test/gir_ffi/arg_helper_test.rb +0 -146
  99. data/test/gir_ffi/boolean_test.rb +0 -43
  100. data/test/gir_ffi/boxed_base_test.rb +0 -65
  101. data/test/gir_ffi/builder_test.rb +0 -168
  102. data/test/gir_ffi/builders/argument_builder_test.rb +0 -691
  103. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  104. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -130
  105. data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
  106. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -84
  107. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  108. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -39
  109. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  110. data/test/gir_ffi/builders/field_builder_test.rb +0 -140
  111. data/test/gir_ffi/builders/function_builder_test.rb +0 -570
  112. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -56
  113. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  114. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  115. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  116. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  117. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
  118. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -444
  119. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -199
  120. data/test/gir_ffi/builders/struct_builder_test.rb +0 -96
  121. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
  122. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
  123. data/test/gir_ffi/builders/union_builder_test.rb +0 -28
  124. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -528
  125. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -107
  126. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -245
  127. data/test/gir_ffi/callback_base_test.rb +0 -22
  128. data/test/gir_ffi/class_base_test.rb +0 -171
  129. data/test/gir_ffi/core_test.rb +0 -99
  130. data/test/gir_ffi/enum_base_test.rb +0 -43
  131. data/test/gir_ffi/error_type_info_test.rb +0 -50
  132. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -22
  133. data/test/gir_ffi/g_type_test.rb +0 -31
  134. data/test/gir_ffi/in_pointer_test.rb +0 -203
  135. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  136. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -22
  137. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  138. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  139. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  140. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -712
  141. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  142. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  143. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  144. data/test/gir_ffi/interface_base_test.rb +0 -20
  145. data/test/gir_ffi/method_stubber_test.rb +0 -67
  146. data/test/gir_ffi/object_base_test.rb +0 -64
  147. data/test/gir_ffi/object_store_test.rb +0 -41
  148. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  149. data/test/gir_ffi/sized_array_test.rb +0 -206
  150. data/test/gir_ffi/struct_base_test.rb +0 -23
  151. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  152. data/test/gir_ffi/type_map_test.rb +0 -17
  153. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  154. data/test/gir_ffi/union_base_test.rb +0 -23
  155. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  156. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  157. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  158. data/test/gir_ffi/version_test.rb +0 -9
  159. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  160. data/test/gir_ffi_test_helper.rb +0 -84
  161. data/test/integration/callback_exceptions_test.rb +0 -59
  162. data/test/integration/derived_classes_test.rb +0 -54
  163. data/test/integration/generated_everything_test.rb +0 -453
  164. data/test/integration/generated_gimarshallingtests_test.rb +0 -3109
  165. data/test/integration/generated_gio_test.rb +0 -116
  166. data/test/integration/generated_glib_test.rb +0 -10
  167. data/test/integration/generated_gobject_test.rb +0 -124
  168. data/test/integration/generated_gst_test.rb +0 -38
  169. data/test/integration/generated_gtk_source_test.rb +0 -21
  170. data/test/integration/generated_gtop_test.rb +0 -22
  171. data/test/integration/generated_pango_ft2_test.rb +0 -17
  172. data/test/integration/generated_pango_test.rb +0 -24
  173. data/test/integration/generated_regress_test.rb +0 -4076
  174. data/test/integration/generated_secret_test.rb +0 -14
  175. data/test/integration/generated_utility_test.rb +0 -174
  176. data/test/integration/generated_warnlib_test.rb +0 -45
  177. data/test/integration/method_lookup_test.rb +0 -34
  178. data/test/introspection_test_helper.rb +0 -94
  179. data/test/lib/Makefile.am +0 -110
  180. data/test/lib/autogen.sh +0 -4
  181. data/test/lib/configure.ac +0 -34
  182. data/test/lib/m4/jhflags.m4 +0 -21
  183. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "introspection_test_helper"
4
-
5
- describe GObjectIntrospection::IVFuncInfo do
6
- let(:vfunc_info) do
7
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "method_int8_in"
8
- end
9
-
10
- let(:throwing_vfunc_info) do
11
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_meth_with_err"
12
- end
13
-
14
- let(:vfunc_info_with_different_invoker) do
15
- get_vfunc_introspection_data "Regress", "TestObj", "matrix"
16
- end
17
-
18
- describe "#throws?" do
19
- it "returns false if there is no error argument" do
20
- _(vfunc_info).wont_be :throws?
21
- end
22
-
23
- it "returns true if there is and error argument" do
24
- _(throwing_vfunc_info).must_be :throws?
25
- end
26
- end
27
-
28
- describe "#invoker" do
29
- it "returns nil if no invoker method is present" do
30
- _(throwing_vfunc_info.invoker).must_be_nil
31
- end
32
-
33
- it "returns info for the invoker method if present" do
34
- _(vfunc_info.invoker.name).must_equal "method_int8_in"
35
- end
36
-
37
- it "returns the correct invoker even if named differently" do
38
- _(vfunc_info_with_different_invoker.invoker.name).must_equal "do_matrix"
39
- end
40
- end
41
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "introspection_test_helper"
4
-
5
- describe GObjectIntrospection::Lib::GIArgument do
6
- describe "its member :v_ssize" do
7
- it "is signed" do
8
- gia = GObjectIntrospection::Lib::GIArgument.new
9
- gia[:v_int64] = -1
10
- assert_equal(-1, gia[:v_ssize])
11
- end
12
- end
13
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "base_test_helper"
4
-
5
- describe GObjectIntrospection::Strv do
6
- it "wraps a pointer" do
7
- strv = GObjectIntrospection::Strv.new :some_pointer
8
- assert_equal :some_pointer, strv.to_ptr
9
- end
10
-
11
- describe "::wrap" do
12
- it "takes a pointer and returns a GObjectIntrospection::Strv wrapping it" do
13
- strv = GObjectIntrospection::Strv.wrap :some_pointer
14
- assert_instance_of GObjectIntrospection::Strv, strv
15
- assert_equal :some_pointer, strv.to_ptr
16
- end
17
- end
18
-
19
- describe "#each" do
20
- it "yields each string element" do
21
- ary = %w(one two three)
22
- ptrs = ary.map { |a| FFI::MemoryPointer.from_string(a) }
23
- ptrs << nil
24
- block = FFI::MemoryPointer.new(:pointer, ptrs.length)
25
- block.write_array_of_pointer ptrs
26
-
27
- strv = GObjectIntrospection::Strv.new block
28
- arr = []
29
- strv.each do |str|
30
- arr << str
31
- end
32
- assert_equal %w(one two three), arr
33
- end
34
-
35
- it "yields zero times for a Strv wrapping a null pointer" do
36
- strv = GObjectIntrospection::Strv.new FFI::Pointer.new(0)
37
- strv.each do |_str|
38
- flunk
39
- end
40
- end
41
- end
42
-
43
- it "includes Enumerable" do
44
- _(GObjectIntrospection::Strv).must_include Enumerable
45
- end
46
- end
@@ -1,153 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GObject do
6
- before do
7
- GirFFI.setup :Regress
8
- end
9
-
10
- describe "::signal_emit" do
11
- it "emits a signal" do
12
- a = 1
13
- o = Regress::TestSubObj.new
14
- prc = proc { a = 2 }
15
- callback = GObject::Callback.from prc
16
- ::GObject::Lib.g_signal_connect_data o, "test", callback, nil, nil, 0
17
- GObject.signal_emit o, "test"
18
- assert_equal 2, a
19
- end
20
-
21
- it "handles return values" do
22
- s = Gio::SocketService.new
23
-
24
- argtypes = [:pointer, :pointer, :pointer, :pointer]
25
- callback = FFI::Function.new(:bool, argtypes) { |_a, _b, _c, _d| true }
26
- ::GObject::Lib.g_signal_connect_data s, "incoming", callback, nil, nil, 0
27
- rv = GObject.signal_emit s, "incoming"
28
- assert_equal true, rv
29
- end
30
-
31
- it "passes in extra arguments" do
32
- o = Regress::TestSubObj.new
33
- sb = Regress::TestSimpleBoxedA.new
34
- sb.some_int8 = 31
35
- sb.some_double = 2.42
36
- sb.some_enum = :value2
37
- b2 = nil
38
-
39
- argtypes = [:pointer, :pointer, :pointer]
40
- callback = FFI::Function.new(:void, argtypes) do |_a, b, _c|
41
- b2 = b
42
- end
43
- ::GObject::Lib.g_signal_connect_data(o, "test-with-static-scope-arg",
44
- callback, nil, nil, 0)
45
- GObject.signal_emit o, "test-with-static-scope-arg", sb
46
-
47
- sb2 = Regress::TestSimpleBoxedA.wrap b2
48
- assert sb.equals(sb2)
49
- end
50
-
51
- it "allows specifying signal detail" do
52
- a = 1
53
- o = Regress::TestSubObj.new
54
-
55
- callback = FFI::Function.new(:void, [:pointer, :pointer, :pointer]) { a = 2 }
56
- ::GObject::Lib.g_signal_connect_data o, "notify::detail", callback, nil, nil, 0
57
-
58
- GObject.signal_emit o, "notify::detail"
59
-
60
- _(a).must_equal 2
61
- end
62
- end
63
-
64
- describe "::signal_connect" do
65
- it "installs a signal handler" do
66
- a = 1
67
- o = Regress::TestSubObj.new
68
- GObject.signal_connect(o, "test") { a = 2 }
69
- GObject.signal_emit o, "test"
70
- assert_equal 2, a
71
- end
72
-
73
- it "passes user data to handler" do
74
- a = 1
75
- o = Regress::TestSubObj.new
76
- GObject.signal_connect(o, "test", 2) { |_i, d| a = d }
77
- GObject.signal_emit o, "test"
78
- assert_equal 2, a
79
- end
80
-
81
- it "passes object to handler" do
82
- o = Regress::TestSubObj.new
83
- o2 = nil
84
- GObject.signal_connect(o, "test") { |i, _d| o2 = i }
85
- GObject.signal_emit o, "test"
86
- assert_instance_of Regress::TestSubObj, o2
87
- assert_equal o.to_ptr, o2.to_ptr
88
- end
89
-
90
- it "does not allow connecting an invalid signal" do
91
- o = Regress::TestSubObj.new
92
- _(proc { GObject.signal_connect(o, "not-really-a-signal") {} })
93
- .must_raise GirFFI::SignalNotFoundError
94
- end
95
-
96
- it "handles return values" do
97
- s = Gio::SocketService.new
98
- GObject.signal_connect(s, "incoming") { true }
99
- rv = GObject.signal_emit s, "incoming"
100
- assert_equal true, rv
101
- end
102
-
103
- it "requires a block" do
104
- o = Regress::TestSubObj.new
105
- _(proc { GObject.signal_connect o, "test" }).must_raise ArgumentError
106
- end
107
-
108
- it "allows specifying signal detail" do
109
- a = 1
110
- o = Regress::TestSubObj.new
111
- GObject.signal_connect(o, "notify::detail", 2) { |_i, _, d| a = d }
112
- GObject.signal_emit o, "notify::detail"
113
- assert_equal 2, a
114
- end
115
-
116
- describe "connecting a signal with extra arguments" do
117
- before do
118
- @a = nil
119
- @b = 2
120
-
121
- o = Regress::TestSubObj.new
122
- sb = Regress::TestSimpleBoxedA.new
123
- sb.some_int = 23
124
-
125
- GObject.signal_connect(o, "test-with-static-scope-arg", 2) \
126
- do |_instance, object, user_data|
127
- @a = user_data
128
- @b = object
129
- end
130
- GObject.signal_emit o, "test-with-static-scope-arg", sb
131
- end
132
-
133
- it "passes on the user data argument" do
134
- assert_equal 2, @a
135
- end
136
-
137
- it "passes on the extra arguments" do
138
- assert_instance_of Regress::TestSimpleBoxedA, @b
139
- assert_equal 23, @b.some_int
140
- end
141
- end
142
- end
143
-
144
- describe "::signal_connect_after" do
145
- it "installs a signal handler" do
146
- a = 1
147
- o = Regress::TestSubObj.new
148
- GObject.signal_connect_after(o, "test") { a = 2 }
149
- GObject.signal_emit o, "test"
150
- assert_equal 2, a
151
- end
152
- end
153
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::AllocationHelper do
6
- describe ".free_after" do
7
- before do
8
- allow(GirFFI::LibC).to receive(:free)
9
- end
10
-
11
- it "frees the passed-in pointer" do
12
- ptr = double("pointer", null?: false)
13
- GirFFI::AllocationHelper.free_after(ptr) {}
14
- expect(GirFFI::LibC).to have_received(:free).with(ptr)
15
- end
16
-
17
- it "does not free a passed-in null pointer" do
18
- ptr = double("pointer", null?: true)
19
- GirFFI::AllocationHelper.free_after(ptr) {}
20
- expect(GirFFI::LibC).not_to have_received(:free)
21
- end
22
-
23
- it "yields ptr to the block" do
24
- ptr = double("pointer", null?: false)
25
- foo = nil
26
- GirFFI::AllocationHelper.free_after(ptr) { |it| foo = it }
27
- _(foo).must_equal ptr
28
- end
29
-
30
- it "returns the result of the block" do
31
- ptr = double("pointer", null?: false)
32
- result = GirFFI::AllocationHelper.free_after(ptr) { "bar" }
33
- _(result).must_equal "bar"
34
- end
35
- end
36
- end
@@ -1,146 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::ArgHelper do
6
- describe ".cast_from_pointer" do
7
- it "handles class types" do
8
- klass = Class.new
9
- expect(klass).to receive(:wrap).with(:pointer_value).and_return :wrapped_value
10
- _(GirFFI::ArgHelper.cast_from_pointer(klass, :pointer_value))
11
- .must_equal :wrapped_value
12
- end
13
-
14
- describe "for :gint8" do
15
- it "handles negative :gint8" do
16
- ptr = FFI::Pointer.new(-127)
17
- _(GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr)).must_equal(-127)
18
- end
19
-
20
- it "handles positive :gint8" do
21
- ptr = FFI::Pointer.new(128)
22
- _(GirFFI::ArgHelper.cast_from_pointer(:gint8, ptr)).must_equal(128)
23
- end
24
- end
25
-
26
- it "handles :guint32" do
27
- ptr = FFI::Pointer.new(0xffffffff)
28
- _(GirFFI::ArgHelper.cast_from_pointer(:guint32, ptr)).must_equal(0xffffffff)
29
- end
30
-
31
- describe "for :gint32" do
32
- it "handles positive :gint32" do
33
- ptr = FFI::Pointer.new(1)
34
- _(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(1)
35
- end
36
-
37
- it "handles negative :gint32" do
38
- ptr = FFI::Pointer.new(0xffffffff)
39
- _(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(-1)
40
- end
41
-
42
- it "handles largest negative :gint32" do
43
- ptr = FFI::Pointer.new(0x80000000)
44
- _(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(-0x80000000)
45
- end
46
-
47
- it "handles largest positive :gint32" do
48
- ptr = FFI::Pointer.new(0x7fffffff)
49
- _(GirFFI::ArgHelper.cast_from_pointer(:gint32, ptr)).must_equal(0x7fffffff)
50
- end
51
- end
52
-
53
- it "handles :utf8" do
54
- ptr = FFI::MemoryPointer.from_string "foo"
55
- _(GirFFI::ArgHelper.cast_from_pointer(:utf8, ptr)).must_equal "foo"
56
- end
57
-
58
- it "handles :filename" do
59
- ptr = FFI::MemoryPointer.from_string "foo"
60
- _(GirFFI::ArgHelper.cast_from_pointer(:filename, ptr)).must_equal "foo"
61
- end
62
-
63
- it "handles GHashTable" do
64
- hash = GLib::HashTable.from [:utf8, :gint32], "foo" => 1, "bar" => 2
65
- ptr = hash.to_ptr
66
- result = GirFFI::ArgHelper.cast_from_pointer([:pointer, [:ghash, :utf8, :gint32]],
67
- ptr)
68
- _(result.to_hash).must_equal hash.to_hash
69
- end
70
-
71
- describe "when passing a broken typespec" do
72
- it "raises on unknown symbol" do
73
- ptr = FFI::Pointer.new(0xffffffff)
74
- exception = _(-> { GirFFI::ArgHelper.cast_from_pointer(:foo, ptr) })
75
- .must_raise RuntimeError
76
- _(exception.message).must_equal "Don't know how to cast foo"
77
- end
78
-
79
- it "raises on unexpected main type for complex type" do
80
- ptr = FFI::Pointer.new(0xffffffff)
81
- exception = _(-> { GirFFI::ArgHelper.cast_from_pointer([:utf8], ptr) })
82
- .must_raise RuntimeError
83
- _(exception.message).must_equal "Don't know how to cast [:utf8]"
84
- end
85
-
86
- it "raises on unexpected sub type for complex type" do
87
- ptr = FFI::Pointer.new(0xffffffff)
88
- exception = _(-> { GirFFI::ArgHelper.cast_from_pointer([:pointer, :utf8], ptr) })
89
- .must_raise RuntimeError
90
- _(exception.message).must_equal "Don't know how to cast [:pointer, :utf8]"
91
- end
92
-
93
- it "raises on unexpected container type for complex type" do
94
- ptr = FFI::Pointer.new(0xffffffff)
95
- exception =
96
- _(-> { GirFFI::ArgHelper.cast_from_pointer([:pointer, [:gint32]], ptr) })
97
- .must_raise RuntimeError
98
- _(exception.message).must_equal "Don't know how to cast [:pointer, [:gint32]]"
99
- end
100
- end
101
- end
102
-
103
- describe ".store" do
104
- describe "when called with nil" do
105
- it "returns a null pointer" do
106
- _(GirFFI::ArgHelper.store(nil)).must_be :null?
107
- end
108
- end
109
-
110
- describe "when called with a string" do
111
- it "stores the string in GirFFI::ArgHelper::OBJECT_STORE" do
112
- str = "Foo"
113
- ptr = GirFFI::ArgHelper.store(str)
114
- result = GirFFI::ArgHelper::OBJECT_STORE.fetch(ptr)
115
- _(result).must_equal str
116
- end
117
- end
118
- end
119
-
120
- describe ".check_fixed_array_size" do
121
- it "passes if array has the correct size" do
122
- GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2, 3], "foo")
123
- pass
124
- end
125
-
126
- it "raises if array does not have the correct size" do
127
- result = _(-> { GirFFI::ArgHelper.check_fixed_array_size(3, [1, 2], "foo") })
128
- .must_raise ArgumentError
129
- _(result.message).must_equal "foo should have size 3"
130
- end
131
- end
132
-
133
- describe ".check_error" do
134
- it "does nothing if there is no error" do
135
- err_ptr = double("err_ptr", read_pointer: nil)
136
- GirFFI::ArgHelper.check_error err_ptr
137
- pass
138
- end
139
-
140
- it "raises an exception if there is an error" do
141
- err = GLib::Error.new
142
- err_ptr = double("err_ptr", read_pointer: err.to_ptr)
143
- _(-> { GirFFI::ArgHelper.check_error err_ptr }).must_raise GirFFI::GLibError
144
- end
145
- end
146
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Boolean do
6
- it "has the same native size as an int" do
7
- _(FFI.type_size(GirFFI::Boolean)).must_equal FFI.type_size :int
8
- end
9
-
10
- describe ".from_native" do
11
- it "converts 0 to false" do
12
- _(GirFFI::Boolean.from_native(0, "whatever")).must_equal false
13
- end
14
-
15
- it "converts 1 to true" do
16
- _(GirFFI::Boolean.from_native(1, "whatever")).must_equal true
17
- end
18
- end
19
-
20
- describe ".to_native" do
21
- it "converts false to 0" do
22
- _(GirFFI::Boolean.to_native(false, "whatever")).must_equal 0
23
- end
24
-
25
- it "converts true to 1" do
26
- _(GirFFI::Boolean.to_native(true, "whatever")).must_equal 1
27
- end
28
-
29
- it "converts nil to 0" do
30
- _(GirFFI::Boolean.to_native(nil, "whatever")).must_equal 0
31
- end
32
-
33
- it "converts truthy value to 1" do
34
- _(GirFFI::Boolean.to_native("i am truth!", "whatever")).must_equal 1
35
- end
36
- end
37
-
38
- describe ".size" do
39
- it "returns the correct type size" do
40
- _(GirFFI::Boolean.size).must_equal FFI.type_size :int
41
- end
42
- end
43
- end