gir_ffi 0.15.2 → 0.15.7

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 (190) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +41 -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/container_class_methods.rb +1 -3
  10. data/lib/ffi-glib/destroy_notify.rb +2 -2
  11. data/lib/ffi-glib/hash_table.rb +1 -2
  12. data/lib/ffi-glib/list.rb +11 -5
  13. data/lib/ffi-glib/list_methods.rb +12 -0
  14. data/lib/ffi-glib/s_list.rb +10 -4
  15. data/lib/ffi-gobject.rb +2 -5
  16. data/lib/ffi-gobject/object.rb +102 -92
  17. data/lib/ffi-gobject/object_class.rb +1 -1
  18. data/lib/ffi-gobject/ruby_closure.rb +1 -1
  19. data/lib/ffi-gobject/value.rb +108 -117
  20. data/lib/ffi-gobject_introspection/i_base_info.rb +35 -27
  21. data/lib/gir_ffi-base/gobject/lib.rb +4 -0
  22. data/lib/gir_ffi/array_element_convertor.rb +3 -4
  23. data/lib/gir_ffi/boxed_base.rb +13 -11
  24. data/lib/gir_ffi/builder.rb +3 -4
  25. data/lib/gir_ffi/builder_helper.rb +10 -2
  26. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
  27. data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
  28. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  29. data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
  30. data/lib/gir_ffi/builders/callback_builder.rb +25 -11
  31. data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
  32. data/lib/gir_ffi/builders/enum_builder.rb +9 -5
  33. data/lib/gir_ffi/builders/field_builder.rb +2 -1
  34. data/lib/gir_ffi/builders/function_builder.rb +1 -1
  35. data/lib/gir_ffi/builders/interface_builder.rb +3 -1
  36. data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
  37. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
  38. data/lib/gir_ffi/builders/method_template.rb +4 -4
  39. data/lib/gir_ffi/builders/module_builder.rb +4 -2
  40. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  41. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  42. data/lib/gir_ffi/builders/object_builder.rb +18 -6
  43. data/lib/gir_ffi/builders/property_builder.rb +1 -2
  44. data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
  45. data/lib/gir_ffi/builders/struct_builder.rb +34 -7
  46. data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
  47. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  48. data/lib/gir_ffi/callback_base.rb +7 -8
  49. data/lib/gir_ffi/class_base.rb +1 -0
  50. data/lib/gir_ffi/core.rb +17 -2
  51. data/lib/gir_ffi/glib_error.rb +1 -2
  52. data/lib/gir_ffi/in_pointer.rb +10 -2
  53. data/lib/gir_ffi/interface_base.rb +5 -0
  54. data/lib/gir_ffi/object_base.rb +27 -0
  55. data/lib/gir_ffi/return_value_info.rb +1 -2
  56. data/lib/gir_ffi/struct_base.rb +1 -9
  57. data/lib/gir_ffi/struct_like_base.rb +9 -5
  58. data/lib/gir_ffi/type_map.rb +1 -0
  59. data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
  60. data/lib/gir_ffi/union_base.rb +1 -9
  61. data/lib/gir_ffi/user_defined_object_info.rb +3 -2
  62. data/lib/gir_ffi/version.rb +1 -1
  63. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  64. metadata +106 -143
  65. data/Gemfile +0 -14
  66. data/Rakefile +0 -9
  67. data/tasks/test.rake +0 -204
  68. data/test/base_test_helper.rb +0 -70
  69. data/test/ffi-glib/array_test.rb +0 -203
  70. data/test/ffi-glib/byte_array_test.rb +0 -28
  71. data/test/ffi-glib/bytes_test.rb +0 -61
  72. data/test/ffi-glib/closure_test.rb +0 -38
  73. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  74. data/test/ffi-glib/hash_table_test.rb +0 -68
  75. data/test/ffi-glib/list_test.rb +0 -86
  76. data/test/ffi-glib/main_loop_test.rb +0 -53
  77. data/test/ffi-glib/ptr_array_test.rb +0 -112
  78. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  79. data/test/ffi-glib/s_list_test.rb +0 -76
  80. data/test/ffi-glib/strv_test.rb +0 -60
  81. data/test/ffi-glib/variant_test.rb +0 -12
  82. data/test/ffi-gobject/gobject_test.rb +0 -76
  83. data/test/ffi-gobject/object_class_test.rb +0 -31
  84. data/test/ffi-gobject/object_test.rb +0 -122
  85. data/test/ffi-gobject/param_spec_test.rb +0 -32
  86. data/test/ffi-gobject/value_test.rb +0 -390
  87. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  88. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
  89. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
  90. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  91. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  92. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  93. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  94. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  95. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  96. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  97. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  98. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
  99. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  100. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  101. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  102. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  103. data/test/ffi-gobject_test.rb +0 -151
  104. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  105. data/test/gir_ffi/arg_helper_test.rb +0 -139
  106. data/test/gir_ffi/boolean_test.rb +0 -43
  107. data/test/gir_ffi/boxed_base_test.rb +0 -65
  108. data/test/gir_ffi/builder_test.rb +0 -322
  109. data/test/gir_ffi/builders/argument_builder_test.rb +0 -651
  110. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  111. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -126
  112. data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
  113. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -81
  114. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  115. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  116. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  117. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  118. data/test/gir_ffi/builders/function_builder_test.rb +0 -550
  119. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  120. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  121. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  122. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  123. data/test/gir_ffi/builders/property_builder_test.rb +0 -158
  124. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
  125. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -433
  126. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -197
  127. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  128. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
  129. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
  130. data/test/gir_ffi/builders/union_builder_test.rb +0 -28
  131. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  132. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  133. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -241
  134. data/test/gir_ffi/callback_base_test.rb +0 -22
  135. data/test/gir_ffi/class_base_test.rb +0 -166
  136. data/test/gir_ffi/core_test.rb +0 -98
  137. data/test/gir_ffi/enum_base_test.rb +0 -43
  138. data/test/gir_ffi/error_type_info_test.rb +0 -50
  139. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  140. data/test/gir_ffi/g_type_test.rb +0 -31
  141. data/test/gir_ffi/in_pointer_test.rb +0 -203
  142. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  143. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  144. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  145. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  146. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  147. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -711
  148. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  149. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  150. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  151. data/test/gir_ffi/interface_base_test.rb +0 -20
  152. data/test/gir_ffi/method_stubber_test.rb +0 -65
  153. data/test/gir_ffi/object_base_test.rb +0 -64
  154. data/test/gir_ffi/object_store_test.rb +0 -41
  155. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  156. data/test/gir_ffi/sized_array_test.rb +0 -206
  157. data/test/gir_ffi/struct_base_test.rb +0 -23
  158. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  159. data/test/gir_ffi/type_map_test.rb +0 -17
  160. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  161. data/test/gir_ffi/union_base_test.rb +0 -23
  162. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  163. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  164. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  165. data/test/gir_ffi/version_test.rb +0 -9
  166. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  167. data/test/gir_ffi_test_helper.rb +0 -84
  168. data/test/integration/callback_exceptions_test.rb +0 -59
  169. data/test/integration/derived_classes_test.rb +0 -53
  170. data/test/integration/generated_everything_test.rb +0 -452
  171. data/test/integration/generated_gimarshallingtests_test.rb +0 -3096
  172. data/test/integration/generated_gio_test.rb +0 -116
  173. data/test/integration/generated_glib_test.rb +0 -10
  174. data/test/integration/generated_gobject_test.rb +0 -124
  175. data/test/integration/generated_gst_test.rb +0 -38
  176. data/test/integration/generated_gtk_source_test.rb +0 -32
  177. data/test/integration/generated_gtop_test.rb +0 -22
  178. data/test/integration/generated_pango_ft2_test.rb +0 -17
  179. data/test/integration/generated_pango_test.rb +0 -24
  180. data/test/integration/generated_regress_test.rb +0 -4062
  181. data/test/integration/generated_secret_test.rb +0 -14
  182. data/test/integration/generated_utility_test.rb +0 -174
  183. data/test/integration/generated_warnlib_test.rb +0 -43
  184. data/test/integration/method_lookup_test.rb +0 -34
  185. data/test/introspection_test_helper.rb +0 -93
  186. data/test/lib/Makefile.am +0 -110
  187. data/test/lib/autogen.sh +0 -4
  188. data/test/lib/configure.ac +0 -34
  189. data/test/lib/m4/jhflags.m4 +0 -21
  190. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- GirFFI.setup :GIMarshallingTests
6
-
7
- describe GirFFI::Core do
8
- it "sets up cairo as Cairo" do
9
- GirFFI.setup :cairo
10
- assert Object.const_defined?(:Cairo)
11
- end
12
-
13
- it "sets up xlib, which has no shared library" do
14
- gir = GObjectIntrospection::IRepository.default
15
- gir.require "xlib"
16
- assert_nil gir.shared_library("xlib"), "Precondition for test failed"
17
- GirFFI.setup :xlib
18
- end
19
-
20
- it "sets up dependencies" do
21
- save_module :GObject
22
- save_module :Regress
23
- GirFFI.setup :Regress
24
- assert Object.const_defined?(:GObject)
25
- restore_module :Regress
26
- restore_module :GObject
27
- end
28
-
29
- describe ".setup" do
30
- it "passes the desired version down to the module builder" do
31
- expect(GirFFI::Builder).to receive(:build_module).with("Regress", "0.1")
32
- GirFFI.setup :Regress, "0.1"
33
- end
34
- end
35
-
36
- describe "::define_type" do
37
- describe "without a block" do
38
- before do
39
- @klass = Class.new GIMarshallingTests::OverridesObject
40
- Object.const_set "DerivedA#{Sequence.next}", @klass
41
- @gtype = GirFFI.define_type @klass
42
- end
43
-
44
- it "returns a GType for the derived class" do
45
- parent_gtype = GIMarshallingTests::OverridesObject.gtype
46
- _(@gtype).wont_equal parent_gtype
47
- _(GObject.type_name(@gtype)).must_equal @klass.name
48
- end
49
-
50
- it "makes #gtype on the registered class return the new GType" do
51
- _(@klass.gtype).must_equal @gtype
52
- end
53
-
54
- it "registers a type with the same size as the parent" do
55
- q = GObject.type_query @gtype
56
- _(q.instance_size).must_equal GIMarshallingTests::OverridesObject::Struct.size
57
- end
58
-
59
- it "creates a struct class for the derived class with just one member" do
60
- _(@klass::Struct.members).must_equal [:parent]
61
- end
62
-
63
- it "allows the new class to be instantiated" do
64
- obj = @klass.new
65
- type = GObject.type_from_instance obj
66
- _(type).must_equal @gtype
67
- end
68
- end
69
-
70
- describe "with a block with a call to #install_property" do
71
- before do
72
- @klass = Class.new GIMarshallingTests::OverridesObject
73
- Object.const_set "DerivedB#{Sequence.next}", @klass
74
- @gtype = GirFFI.define_type @klass do |info|
75
- info.install_property GObject.param_spec_int("foo", "foo bar",
76
- "The Foo Bar Property",
77
- 10, 20, 15,
78
- 3)
79
- end
80
- end
81
-
82
- it "registers a type that is bigger than the parent" do
83
- q = GObject.type_query @gtype
84
- _(q.instance_size).must_be :>, GIMarshallingTests::OverridesObject::Struct.size
85
- end
86
-
87
- it "gives the types Struct the fields :parent and :foo" do
88
- _(@klass::Struct.members).must_equal [:parent, :foo]
89
- end
90
-
91
- it "creates accessor functions for the property" do
92
- obj = @klass.new
93
- obj.foo = 13
94
- _(obj.foo).must_equal 13
95
- end
96
- end
97
- end
98
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- GirFFI.setup :Regress
6
-
7
- describe GirFFI::EnumBase do
8
- describe ".wrap" do
9
- it "converts an integer to a symbol if possible" do
10
- _(Regress::TestEnum.wrap(1)).must_equal :value2
11
- end
12
-
13
- it "passes an integer if it cannot be converted" do
14
- _(Regress::TestEnum.wrap(32)).must_equal 32
15
- end
16
-
17
- it "passes a known symbol untouched" do
18
- _(Regress::TestEnum.wrap(:value1)).must_equal :value1
19
- end
20
-
21
- it "passes an unknown symbol untouched" do
22
- _(Regress::TestEnum.wrap(:foo)).must_equal :foo
23
- end
24
- end
25
-
26
- describe ".to_int" do
27
- it "passes a known integer untouched" do
28
- _(Regress::TestEnum.to_int(1)).must_equal 1
29
- end
30
-
31
- it "passes an unknown integer untouched" do
32
- _(Regress::TestEnum.to_int(32)).must_equal 32
33
- end
34
-
35
- it "convertes a known symbol to an integer" do
36
- _(Regress::TestEnum.to_int(:value1)).must_equal 0
37
- end
38
-
39
- it "raises an error for an unknown symbol" do
40
- _(-> { Regress::TestEnum.to_int(:foo) }).must_raise ArgumentError
41
- end
42
- end
43
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
- require "gir_ffi/error_type_info"
5
-
6
- describe GirFFI::ErrorTypeInfo do
7
- let(:instance) { GirFFI::ErrorTypeInfo.new }
8
-
9
- describe "#array_length" do
10
- it "returns the correct value" do
11
- _(instance.array_length).must_equal(-1)
12
- end
13
- end
14
-
15
- describe "#tag_or_class" do
16
- it "returns the correct value" do
17
- _(instance.tag_or_class).must_equal [:pointer, :error]
18
- end
19
- end
20
-
21
- describe "#pointer?" do
22
- it "returns the correct value" do
23
- _(instance.pointer?).must_equal true
24
- end
25
- end
26
-
27
- describe "#flattened_tag" do
28
- it "returns the correct value" do
29
- _(instance.flattened_tag).must_equal :error
30
- end
31
- end
32
-
33
- describe "#extra_conversion_arguments" do
34
- it "returns the correct value" do
35
- _(instance.extra_conversion_arguments).must_equal []
36
- end
37
- end
38
-
39
- describe "#argument_class_name" do
40
- it "returns the correct value" do
41
- _(instance.argument_class_name).must_equal "GLib::Error"
42
- end
43
- end
44
-
45
- describe "#needs_ruby_to_c_conversion_for_callbacks?" do
46
- it "returns the correct value" do
47
- _(instance.needs_ruby_to_c_conversion_for_callbacks?).must_equal true
48
- end
49
- end
50
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::FFIExt::Pointer do
6
- let(:pointer_class) { Class.new { include GirFFI::FFIExt::Pointer } }
7
- describe "#to_object" do
8
- it "finds the wrapping class by gtype and wraps the pointer in it" do
9
- ptr = pointer_class.new
10
- expect(ptr).to receive(:null?).and_return false
11
- object_class = Class.new
12
-
13
- expect(GObject).to receive(:type_from_instance_pointer).with(ptr).and_return 0xdeadbeef
14
- expect(GirFFI::Builder).to receive(:build_by_gtype).with(0xdeadbeef).and_return object_class
15
- expect(object_class).to receive(:direct_wrap).with(ptr).and_return "good-result"
16
-
17
- _(ptr.to_object).must_equal "good-result"
18
- end
19
- end
20
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- require "gir_ffi/g_type"
6
-
7
- describe GirFFI::GType do
8
- let(:gobject_gtype) { GObject::Object.gtype }
9
- let(:gobject_type_query) { GObject.type_query gobject_gtype }
10
-
11
- describe "#to_i" do
12
- it "returns the integer gtype" do
13
- gt = GirFFI::GType.new(gobject_gtype)
14
- _(gt.to_i).must_equal gobject_gtype
15
- end
16
- end
17
-
18
- describe "#class_size" do
19
- it "returns the class size for object types" do
20
- gt = GirFFI::GType.new(gobject_gtype)
21
- _(gt.class_size).must_equal gobject_type_query.class_size
22
- end
23
- end
24
-
25
- describe "#instance_size" do
26
- it "returns the instance size for object types" do
27
- gt = GirFFI::GType.new(gobject_gtype)
28
- _(gt.instance_size).must_equal gobject_type_query.instance_size
29
- end
30
- end
31
- end
@@ -1,203 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- require "gir_ffi/in_pointer"
6
-
7
- describe GirFFI::InPointer do
8
- describe ".from_array" do
9
- it "returns nil when passed nil" do
10
- result = GirFFI::InPointer.from_array :gint32, nil
11
- assert_nil result
12
- end
13
-
14
- it "handles type tag :GType" do
15
- GirFFI::InPointer.from_array :GType, [2]
16
- end
17
-
18
- it "handles enum types" do
19
- e = Module.new do
20
- extend GirFFI::EnumBase
21
- self::Enum = FFI::Enum.new [:foo, :bar, :baz], :qux
22
- end
23
- ptr = GirFFI::InPointer.from_array e, [:bar, :foo, :baz]
24
- _(ptr.read_array_of_int32(3)).must_equal [1, 0, 2]
25
- end
26
-
27
- it "handles struct types" do
28
- e = Class.new(GirFFI::StructBase) do
29
- self::Struct = Class.new(GirFFI::Struct) do
30
- layout :foo, :int32, :bar, :int32
31
- end
32
- end
33
- struct = e::Struct.allocate
34
- struct[:foo] = 42
35
- struct[:bar] = 24
36
- ptr = GirFFI::InPointer.from_array e, [struct]
37
- _(ptr).wont_be :==, struct.to_ptr
38
- new_struct = e::Struct.new ptr
39
- _(new_struct[:foo]).must_equal 42
40
- _(new_struct[:bar]).must_equal 24
41
- end
42
-
43
- it "handles typed pointers" do
44
- p1 = GirFFI::InPointer.from :gint32, 42
45
- p2 = GirFFI::InPointer.from :gint32, 24
46
-
47
- ptr = GirFFI::InPointer.from_array [:pointer, :gint32], [p1, p2]
48
-
49
- _(ptr.read_array_of_pointer(2)).must_equal [p1, p2]
50
- end
51
-
52
- it "handles pointer casting" do
53
- ptr = GirFFI::InPointer.from_array [:pointer, :gint32], [42, 24]
54
-
55
- _(ptr.read_array_of_pointer(2).map(&:address)).must_equal [42, 24]
56
- end
57
- end
58
-
59
- describe "an instance created with .from_array :gint32" do
60
- before do
61
- @result = GirFFI::InPointer.from_array :gint32, [24, 13]
62
- end
63
-
64
- it "holds a pointer to the correct input values" do
65
- assert_equal 24, @result.get_int(0)
66
- assert_equal 13, @result.get_int(4)
67
- end
68
-
69
- it "is an instance of FFI::MemoryPointer" do
70
- _(@result).must_be_instance_of FFI::MemoryPointer
71
- end
72
-
73
- it "is zero-terminated" do
74
- assert_equal 0, @result.get_int(8)
75
- end
76
- end
77
-
78
- describe "an instance created with .from_array :utf8" do
79
- before do
80
- @result = GirFFI::InPointer.from_array :utf8, %w(foo bar baz)
81
- end
82
-
83
- it "returns an array of pointers to strings" do
84
- ary = @result.read_array_of_pointer(3)
85
- assert_equal %w(foo bar baz), ary.map(&:read_string)
86
- end
87
- end
88
-
89
- describe "an instance created with .from_array :filename" do
90
- before do
91
- @result = GirFFI::InPointer.from_array :filename, %w(foo bar baz)
92
- end
93
-
94
- it "returns an array of pointers to strings" do
95
- ary = @result.read_array_of_pointer(3)
96
- assert_equal %w(foo bar baz), ary.map(&:read_string)
97
- end
98
- end
99
-
100
- describe "an instance created with .from :utf8" do
101
- before do
102
- @result = GirFFI::InPointer.from :utf8, "foo"
103
- end
104
-
105
- it "returns a pointer to the given string" do
106
- assert_equal "foo", @result.read_string
107
- end
108
-
109
- it "is an instance of FFI::MemoryPointer" do
110
- _(@result).must_be_instance_of FFI::MemoryPointer
111
- end
112
- end
113
-
114
- describe "an instance created with .from :guint32" do
115
- before do
116
- @result = GirFFI::InPointer.from :guint32, 12_345
117
- end
118
-
119
- it "returns a pointer with an address equal to the given value" do
120
- assert_equal 12_345, @result.address
121
- end
122
-
123
- it "is an instance of FFI::Pointer" do
124
- _(@result).must_be_instance_of FFI::Pointer
125
- end
126
- end
127
-
128
- describe "an instance created with .from :filename" do
129
- before do
130
- @result = GirFFI::InPointer.from :filename, "foo"
131
- end
132
-
133
- it "returns a pointer to the given string" do
134
- assert_equal "foo", @result.read_string
135
- end
136
- end
137
-
138
- describe ".from" do
139
- it "returns nil when passed nil" do
140
- result = GirFFI::InPointer.from :foo, nil
141
- assert_nil result
142
- end
143
-
144
- it "sets the pointer's address to the passed value for type :gint8" do
145
- result = GirFFI::InPointer.from :gint8, 23
146
- assert_equal 23, result.address
147
- end
148
-
149
- it "returns a pointer to the value for type :gint64" do
150
- result = GirFFI::InPointer.from :gint64, -0x90000000
151
- assert_equal(-0x90000000, result.get_int64(0))
152
- end
153
-
154
- it "returns a pointer to the value for type :guint64" do
155
- result = GirFFI::InPointer.from :guint64, 0xf0000000
156
- assert_equal 0xf0000000, result.get_uint64(0)
157
- end
158
-
159
- it "returns a pointer to the value for type :gdouble" do
160
- result = GirFFI::InPointer.from :gdouble, 0.1
161
- assert_in_epsilon 0.1, result.read_double
162
- end
163
-
164
- it "returns a pointer to the value for type :gfloat" do
165
- result = GirFFI::InPointer.from :gfloat, 0.1
166
- assert_in_epsilon 0.1, result.read_float
167
- end
168
-
169
- it "handles enum types" do
170
- e = Module.new do
171
- extend GirFFI::EnumBase
172
- self::Enum = FFI::Enum.new [:foo, :bar, :baz], :qux
173
- end
174
- ptr = GirFFI::InPointer.from e, :bar
175
- _(ptr.address).must_equal 1
176
- end
177
-
178
- describe "for type :void" do
179
- it "returns the result of to_ptr" do
180
- obj = Object.new
181
- def obj.to_ptr
182
- :test_value
183
- end
184
- _(GirFFI::InPointer.from(:void, obj)).must_equal :test_value
185
- end
186
-
187
- it "returns nil when passed nil" do
188
- _(GirFFI::InPointer.from(:void, nil)).must_be_nil
189
- end
190
- end
191
-
192
- describe "for types that are classes" do
193
- it "returns the result of to_ptr" do
194
- klass = Class.new
195
- obj = klass.new
196
- def obj.to_ptr
197
- :test_value
198
- end
199
- _(GirFFI::InPointer.from(klass, obj)).must_equal :test_value
200
- end
201
- end
202
- end
203
- end