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,99 +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 :Utility
22
- save_module :Regress
23
- refute Object.const_defined?(:Utility)
24
- GirFFI.setup :Regress
25
- assert Object.const_defined?(:Utility)
26
- restore_module :Regress
27
- restore_module :Utility
28
- end
29
-
30
- describe ".setup" do
31
- it "passes the desired version down to the module builder" do
32
- expect(GirFFI::Builder).to receive(:build_module).with("Regress", "0.1")
33
- GirFFI.setup :Regress, "0.1"
34
- end
35
- end
36
-
37
- describe "::define_type" do
38
- describe "without a block" do
39
- before do
40
- @klass = Class.new GIMarshallingTests::OverridesObject
41
- Object.const_set "DerivedA#{Sequence.next}", @klass
42
- @gtype = GirFFI.define_type @klass
43
- end
44
-
45
- it "returns a GType for the derived class" do
46
- parent_gtype = GIMarshallingTests::OverridesObject.gtype
47
- _(@gtype).wont_equal parent_gtype
48
- _(GObject.type_name(@gtype)).must_equal @klass.name
49
- end
50
-
51
- it "makes #gtype on the registered class return the new GType" do
52
- _(@klass.gtype).must_equal @gtype
53
- end
54
-
55
- it "registers a type with the same size as the parent" do
56
- q = GObject.type_query @gtype
57
- _(q.instance_size).must_equal GIMarshallingTests::OverridesObject::Struct.size
58
- end
59
-
60
- it "creates a struct class for the derived class with just one member" do
61
- _(@klass::Struct.members).must_equal [:parent]
62
- end
63
-
64
- it "allows the new class to be instantiated" do
65
- obj = @klass.new
66
- type = GObject.type_from_instance obj
67
- _(type).must_equal @gtype
68
- end
69
- end
70
-
71
- describe "with a block with a call to #install_property" do
72
- before do
73
- @klass = Class.new GIMarshallingTests::OverridesObject
74
- Object.const_set "DerivedB#{Sequence.next}", @klass
75
- @gtype = GirFFI.define_type @klass do |info|
76
- info.install_property GObject.param_spec_int("foo", "foo bar",
77
- "The Foo Bar Property",
78
- 10, 20, 15,
79
- 3)
80
- end
81
- end
82
-
83
- it "registers a type that is bigger than the parent" do
84
- q = GObject.type_query @gtype
85
- _(q.instance_size).must_be :>, GIMarshallingTests::OverridesObject::Struct.size
86
- end
87
-
88
- it "gives the types Struct the fields :parent and :foo" do
89
- _(@klass::Struct.members).must_equal [:parent, :foo]
90
- end
91
-
92
- it "creates accessor functions for the property" do
93
- obj = @klass.new
94
- obj.foo = 13
95
- _(obj.foo).must_equal 13
96
- end
97
- end
98
- end
99
- 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,22 +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)
14
- .to receive(:type_from_instance_pointer).with(ptr).and_return 0xdeadbeef
15
- expect(GirFFI::Builder)
16
- .to receive(:build_by_gtype).with(0xdeadbeef).and_return object_class
17
- expect(object_class).to receive(:direct_wrap).with(ptr).and_return "good-result"
18
-
19
- _(ptr.to_object).must_equal "good-result"
20
- end
21
- end
22
- 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