gir_ffi 0.7.10 → 0.8.0

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 (150) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +6 -0
  3. data/Gemfile +3 -1
  4. data/README.md +5 -2
  5. data/lib/ffi-glib.rb +1 -0
  6. data/lib/ffi-glib/array.rb +6 -6
  7. data/lib/ffi-glib/array_methods.rb +1 -1
  8. data/lib/ffi-glib/byte_array.rb +1 -1
  9. data/lib/ffi-glib/bytes.rb +3 -3
  10. data/lib/ffi-glib/container_class_methods.rb +2 -2
  11. data/lib/ffi-glib/error.rb +2 -2
  12. data/lib/ffi-glib/hash_table.rb +9 -9
  13. data/lib/ffi-glib/iconv.rb +1 -1
  14. data/lib/ffi-glib/list.rb +2 -2
  15. data/lib/ffi-glib/list_methods.rb +8 -7
  16. data/lib/ffi-glib/main_loop.rb +1 -1
  17. data/lib/ffi-glib/ptr_array.rb +7 -7
  18. data/lib/ffi-glib/s_list.rb +2 -2
  19. data/lib/ffi-glib/strv.rb +3 -3
  20. data/lib/ffi-glib/variant.rb +9 -2
  21. data/lib/ffi-gobject.rb +10 -10
  22. data/lib/ffi-gobject/closure.rb +1 -1
  23. data/lib/ffi-gobject/initially_unowned.rb +4 -3
  24. data/lib/ffi-gobject/object.rb +19 -19
  25. data/lib/ffi-gobject/object_class.rb +2 -2
  26. data/lib/ffi-gobject/ruby_closure.rb +5 -4
  27. data/lib/ffi-gobject/value.rb +15 -20
  28. data/lib/ffi-gobject_introspection/g_error.rb +1 -1
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +6 -6
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +1 -1
  31. data/lib/ffi-gobject_introspection/i_enum_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_interface_info.rb +8 -8
  33. data/lib/ffi-gobject_introspection/i_object_info.rb +9 -9
  34. data/lib/ffi-gobject_introspection/i_repository.rb +13 -13
  35. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -2
  36. data/lib/ffi-gobject_introspection/i_type_info.rb +1 -1
  37. data/lib/ffi-gobject_introspection/i_union_info.rb +3 -3
  38. data/lib/ffi-gobject_introspection/lib.rb +4 -4
  39. data/lib/gir_ffi-base/glib/boolean.rb +4 -4
  40. data/lib/gir_ffi-base/glib/strv.rb +2 -2
  41. data/lib/gir_ffi/allocation_helper.rb +1 -1
  42. data/lib/gir_ffi/arg_helper.rb +8 -8
  43. data/lib/gir_ffi/boxed_base.rb +5 -9
  44. data/lib/gir_ffi/builder.rb +4 -4
  45. data/lib/gir_ffi/builder_helper.rb +3 -3
  46. data/lib/gir_ffi/builders/argument_builder_collection.rb +1 -1
  47. data/lib/gir_ffi/builders/base_argument_builder.rb +3 -3
  48. data/lib/gir_ffi/builders/base_method_builder.rb +71 -0
  49. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  50. data/lib/gir_ffi/builders/boxed_builder.rb +3 -2
  51. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +1 -1
  52. data/lib/gir_ffi/builders/closure_convertor.rb +1 -1
  53. data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +1 -1
  54. data/lib/gir_ffi/builders/constructor_builder.rb +52 -0
  55. data/lib/gir_ffi/builders/enum_builder.rb +3 -3
  56. data/lib/gir_ffi/builders/field_builder.rb +3 -2
  57. data/lib/gir_ffi/builders/function_builder.rb +9 -50
  58. data/lib/gir_ffi/builders/initializer_builder.rb +32 -0
  59. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +16 -0
  60. data/lib/gir_ffi/builders/mapping_method_builder.rb +7 -5
  61. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -3
  62. data/lib/gir_ffi/builders/method_template.rb +1 -1
  63. data/lib/gir_ffi/builders/module_builder.rb +8 -7
  64. data/lib/gir_ffi/builders/null_convertor.rb +1 -1
  65. data/lib/gir_ffi/builders/null_return_value_builder.rb +21 -0
  66. data/lib/gir_ffi/builders/object_builder.rb +3 -3
  67. data/lib/gir_ffi/builders/property_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/registered_type_builder.rb +31 -15
  69. data/lib/gir_ffi/builders/return_value_builder.rb +1 -14
  70. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +2 -2
  71. data/lib/gir_ffi/builders/signal_closure_builder.rb +1 -1
  72. data/lib/gir_ffi/builders/type_builder.rb +2 -2
  73. data/lib/gir_ffi/builders/unintrospectable_builder.rb +1 -1
  74. data/lib/gir_ffi/builders/user_defined_builder.rb +11 -11
  75. data/lib/gir_ffi/builders/vfunc_builder.rb +1 -1
  76. data/lib/gir_ffi/callback_base.rb +8 -13
  77. data/lib/gir_ffi/class_base.rb +41 -45
  78. data/lib/gir_ffi/core.rb +2 -2
  79. data/lib/gir_ffi/enum_base.rb +9 -14
  80. data/lib/gir_ffi/field_argument_info.rb +1 -1
  81. data/lib/gir_ffi/g_type.rb +1 -1
  82. data/lib/gir_ffi/glib_error.rb +1 -1
  83. data/lib/gir_ffi/in_out_pointer.rb +4 -4
  84. data/lib/gir_ffi/in_pointer.rb +12 -12
  85. data/lib/gir_ffi/info_ext/i_arg_info.rb +0 -10
  86. data/lib/gir_ffi/info_ext/i_callback_info.rb +0 -5
  87. data/lib/gir_ffi/info_ext/i_property_info.rb +1 -1
  88. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -6
  89. data/lib/gir_ffi/info_ext/i_signal_info.rb +2 -2
  90. data/lib/gir_ffi/info_ext/i_type_info.rb +2 -17
  91. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +0 -5
  92. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  93. data/lib/gir_ffi/interface_base.rb +2 -7
  94. data/lib/gir_ffi/method_stubber.rb +1 -1
  95. data/lib/gir_ffi/module_base.rb +4 -7
  96. data/lib/gir_ffi/object_base.rb +4 -9
  97. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  98. data/lib/gir_ffi/receiver_type_info.rb +1 -1
  99. data/lib/gir_ffi/registered_type_base.rb +0 -5
  100. data/lib/gir_ffi/return_value_info.rb +1 -1
  101. data/lib/gir_ffi/sized_array.rb +10 -10
  102. data/lib/gir_ffi/type_map.rb +3 -3
  103. data/lib/gir_ffi/unintrospectable_type_info.rb +3 -1
  104. data/lib/gir_ffi/user_data_argument_info.rb +1 -1
  105. data/lib/gir_ffi/user_defined_property_info.rb +1 -1
  106. data/lib/gir_ffi/user_defined_type_info.rb +4 -4
  107. data/lib/gir_ffi/version.rb +1 -1
  108. data/lib/gir_ffi/vfunc_implementation.rb +1 -1
  109. data/lib/gir_ffi/zero_terminated.rb +6 -6
  110. data/test/base_test_helper.rb +13 -13
  111. data/test/ffi-gobject/object_test.rb +22 -1
  112. data/test/ffi-gobject/value_test.rb +24 -24
  113. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +4 -4
  114. data/test/ffi-gobject_introspection/i_type_info_test.rb +2 -2
  115. data/test/ffi-gobject_test.rb +2 -2
  116. data/test/gir_ffi/builders/argument_builder_test.rb +60 -60
  117. data/test/gir_ffi/builders/callback_argument_builder_test.rb +8 -8
  118. data/test/gir_ffi/builders/callback_builder_test.rb +4 -4
  119. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +8 -8
  120. data/test/gir_ffi/builders/constructor_builder_test.rb +34 -0
  121. data/test/gir_ffi/builders/function_builder_test.rb +8 -24
  122. data/test/gir_ffi/builders/initializer_builder_test.rb +36 -0
  123. data/test/gir_ffi/builders/interface_builder_test.rb +2 -2
  124. data/test/gir_ffi/builders/object_builder_test.rb +6 -18
  125. data/test/gir_ffi/builders/property_builder_test.rb +2 -2
  126. data/test/gir_ffi/builders/return_value_builder_test.rb +54 -79
  127. data/test/gir_ffi/builders/signal_closure_builder_test.rb +14 -14
  128. data/test/gir_ffi/builders/user_defined_builder_test.rb +8 -8
  129. data/test/gir_ffi/builders/vfunc_builder_test.rb +22 -22
  130. data/test/gir_ffi/class_base_test.rb +9 -7
  131. data/test/gir_ffi/in_pointer_test.rb +1 -1
  132. data/test/gir_ffi/info_ext/i_callable_info_test.rb +2 -2
  133. data/test/gir_ffi/info_ext/i_callback_info_test.rb +2 -2
  134. data/test/gir_ffi/info_ext/i_field_info_test.rb +2 -2
  135. data/test/gir_ffi/info_ext/i_function_info_test.rb +2 -2
  136. data/test/gir_ffi/info_ext/i_signal_info_test.rb +2 -2
  137. data/test/gir_ffi/info_ext/i_type_info_test.rb +18 -18
  138. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +2 -2
  139. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
  140. data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
  141. data/test/gir_ffi/method_stubber_test.rb +6 -6
  142. data/test/gir_ffi/user_defined_type_info_test.rb +3 -3
  143. data/test/gir_ffi_test_helper.rb +12 -12
  144. data/test/integration/derived_classes_test.rb +7 -3
  145. data/test/integration/generated_gimarshallingtests_test.rb +10 -10
  146. data/test/integration/generated_regress_test.rb +11 -20
  147. data/test/introspection_test_helper.rb +1 -1
  148. data/test/minitest/stats_plugin.rb +3 -3
  149. metadata +9 -3
  150. data/lib/gir_ffi/builders/constructor_result_convertor.rb +0 -14
@@ -3,7 +3,7 @@ module GirFFI
3
3
  class ObjectBase < ClassBase
4
4
  # Wrap the passed pointer in an instance of its type's corresponding class,
5
5
  # generally assumed to be a descendant of the current type.
6
- def self.wrap ptr
6
+ def self.wrap(ptr)
7
7
  ptr.to_object
8
8
  end
9
9
 
@@ -14,7 +14,7 @@ module GirFFI
14
14
  #
15
15
  # @return [GObjectIntrospection::IPropertyInfo] The property's info
16
16
  #
17
- def self.find_property name
17
+ def self.find_property(name)
18
18
  gir_ffi_builder.find_property name
19
19
  end
20
20
 
@@ -25,20 +25,15 @@ module GirFFI
25
25
  #
26
26
  # @return [GObjectIntrospection::ISignalInfo] The signal's info
27
27
  #
28
- def self.find_signal name
28
+ def self.find_signal(name)
29
29
  gir_ffi_builder.find_signal name
30
30
  end
31
31
 
32
- # @deprecated Use #to_ffi_type instead. Will be removed in 0.8.0.
33
- def self.to_ffitype
34
- to_ffi_type
35
- end
36
-
37
32
  def self.to_ffi_type
38
33
  :pointer
39
34
  end
40
35
 
41
- def self.copy_value_to_pointer value, pointer, offset = 0
36
+ def self.copy_value_to_pointer(value, pointer, offset = 0)
42
37
  pointer.put_pointer offset, value.to_ptr
43
38
  end
44
39
 
@@ -5,7 +5,7 @@ module GirFFI
5
5
  class ReceiverArgumentInfo
6
6
  attr_reader :argument_type
7
7
 
8
- def initialize type
8
+ def initialize(type)
9
9
  @argument_type = type
10
10
  end
11
11
 
@@ -4,7 +4,7 @@ module GirFFI
4
4
  class ReceiverTypeInfo
5
5
  include InfoExt::ITypeInfo
6
6
 
7
- def initialize interface_info
7
+ def initialize(interface_info)
8
8
  @interface_info = interface_info
9
9
  end
10
10
 
@@ -6,11 +6,6 @@ module GirFFI
6
6
  module RegisteredTypeBase
7
7
  include TypeBase
8
8
 
9
- # @deprecated Use #gtype. Will be removed in 0.8.0.
10
- def get_gtype
11
- gtype
12
- end
13
-
14
9
  def gtype
15
10
  self::G_TYPE
16
11
  end
@@ -4,7 +4,7 @@ module GirFFI
4
4
  attr_reader :argument_type
5
5
  attr_reader :ownership_transfer
6
6
 
7
- def initialize type, ownership_transfer, skip
7
+ def initialize(type, ownership_transfer, skip)
8
8
  @argument_type = type
9
9
  @ownership_transfer = ownership_transfer
10
10
  @skip = skip
@@ -4,7 +4,7 @@ module GirFFI
4
4
  include Enumerable
5
5
  attr_reader :element_type, :size
6
6
 
7
- def initialize element_type, size, pointer
7
+ def initialize(element_type, size, pointer)
8
8
  @element_type = element_type
9
9
  @size = size
10
10
  @pointer = pointer
@@ -14,7 +14,7 @@ module GirFFI
14
14
  @pointer
15
15
  end
16
16
 
17
- def index idx
17
+ def index(idx)
18
18
  ptr = GirFFI::InOutPointer.new element_type, @pointer + idx * element_size
19
19
  ptr.to_ruby_value
20
20
  end
@@ -25,7 +25,7 @@ module GirFFI
25
25
  end
26
26
  end
27
27
 
28
- def == other
28
+ def ==(other)
29
29
  to_a == other.to_a
30
30
  end
31
31
 
@@ -33,11 +33,11 @@ module GirFFI
33
33
  size * element_size
34
34
  end
35
35
 
36
- def self.get_value_from_pointer pointer
36
+ def self.get_value_from_pointer(pointer)
37
37
  pointer
38
38
  end
39
39
 
40
- def self.copy_value_to_pointer value, pointer
40
+ def self.copy_value_to_pointer(value, pointer)
41
41
  size = value.size_in_bytes
42
42
  pointer.put_bytes(0, value.to_ptr.read_bytes(size), 0, size)
43
43
  end
@@ -52,12 +52,12 @@ module GirFFI
52
52
  @element_size ||= FFI.type_size element_ffi_type
53
53
  end
54
54
 
55
- def self.wrap element_type, size, pointer
55
+ def self.wrap(element_type, size, pointer)
56
56
  new element_type, size, pointer unless pointer.null?
57
57
  end
58
58
 
59
59
  class << self
60
- def from element_type, size, item
60
+ def from(element_type, size, item)
61
61
  return unless item
62
62
 
63
63
  case item
@@ -72,19 +72,19 @@ module GirFFI
72
72
 
73
73
  private
74
74
 
75
- def from_sized_array size, sized_array
75
+ def from_sized_array(size, sized_array)
76
76
  check_size size, sized_array.size
77
77
  sized_array
78
78
  end
79
79
 
80
- def from_enumerable element_type, expected_size, arr
80
+ def from_enumerable(element_type, expected_size, arr)
81
81
  size = arr.size
82
82
  check_size expected_size, size
83
83
  ptr = GirFFI::InPointer.from_array element_type, arr
84
84
  wrap element_type, size, ptr
85
85
  end
86
86
 
87
- def check_size expected_size, size
87
+ def check_size(expected_size, size)
88
88
  if expected_size > 0 && size != expected_size
89
89
  raise ArgumentError, "Expected size #{expected_size}, got #{size}"
90
90
  end
@@ -38,16 +38,16 @@ module GirFFI
38
38
  void: :void
39
39
  }
40
40
 
41
- def self.map_basic_type type
41
+ def self.map_basic_type(type)
42
42
  sym = type.to_sym
43
43
  TAG_TYPE_MAP[sym] || sym
44
44
  end
45
45
 
46
- def self.type_specification_to_ffitype type
46
+ def self.type_specification_to_ffitype(type)
47
47
  type_specification_to_ffi_type type
48
48
  end
49
49
 
50
- def self.type_specification_to_ffi_type type
50
+ def self.type_specification_to_ffi_type(type)
51
51
  case type
52
52
  when Module
53
53
  type.to_ffi_type
@@ -6,7 +6,9 @@ module GirFFI
6
6
  class UnintrospectableTypeInfo
7
7
  attr_reader :g_type
8
8
 
9
- def initialize gtype, gir = GObjectIntrospection::IRepository.default, gobject = GObject
9
+ def initialize(gtype,
10
+ gir = GObjectIntrospection::IRepository.default,
11
+ gobject = GObject)
10
12
  @g_type = gtype
11
13
  @gir = gir
12
14
  @gobject = gobject
@@ -4,7 +4,7 @@ module GirFFI
4
4
  class UserDataArgumentInfo
5
5
  attr_reader :argument_type
6
6
 
7
- def initialize type
7
+ def initialize(type)
8
8
  @argument_type = type
9
9
  end
10
10
 
@@ -2,7 +2,7 @@ module GirFFI
2
2
  # Represents a property of a user defined type, conforming, as needed, to the
3
3
  # interface of GObjectIntrospection::IPropertyInfo.
4
4
  class UserDefinedPropertyInfo
5
- def initialize param_spec
5
+ def initialize(param_spec)
6
6
  @param_spec = param_spec
7
7
  end
8
8
 
@@ -8,7 +8,7 @@ module GirFFI
8
8
  class UserDefinedTypeInfo
9
9
  attr_reader :properties, :vfunc_implementations
10
10
 
11
- def initialize klass
11
+ def initialize(klass)
12
12
  @klass = klass
13
13
  @properties = []
14
14
  @vfunc_implementations = []
@@ -19,15 +19,15 @@ module GirFFI
19
19
  @klass
20
20
  end
21
21
 
22
- def install_property property
22
+ def install_property(property)
23
23
  @properties << UserDefinedPropertyInfo.new(property)
24
24
  end
25
25
 
26
- def install_vfunc_implementation name, implementation
26
+ def install_vfunc_implementation(name, implementation)
27
27
  @vfunc_implementations << VFuncImplementation.new(name, implementation)
28
28
  end
29
29
 
30
- def find_instance_method _method
30
+ def find_instance_method(_method)
31
31
  nil
32
32
  end
33
33
 
@@ -1,4 +1,4 @@
1
1
  # Current GirFFI version
2
2
  module GirFFI
3
- VERSION = '0.7.10'
3
+ VERSION = '0.8.0'
4
4
  end
@@ -3,7 +3,7 @@ module GirFFI
3
3
  class VFuncImplementation
4
4
  attr_reader :name, :implementation
5
5
 
6
- def initialize name, implementation
6
+ def initialize(name, implementation)
7
7
  @name = name
8
8
  @implementation = implementation
9
9
  end
@@ -5,7 +5,7 @@ module GirFFI
5
5
 
6
6
  attr_reader :element_type
7
7
 
8
- def initialize elm_t, ptr
8
+ def initialize(elm_t, ptr)
9
9
  @element_type = elm_t
10
10
  @ptr = ptr
11
11
  end
@@ -14,11 +14,11 @@ module GirFFI
14
14
  @ptr
15
15
  end
16
16
 
17
- def self.from type, arg
17
+ def self.from(type, arg)
18
18
  new type, InPointer.from_array(type, arg)
19
19
  end
20
20
 
21
- def self.wrap type, arg
21
+ def self.wrap(type, arg)
22
22
  new type, arg
23
23
  end
24
24
 
@@ -31,13 +31,13 @@ module GirFFI
31
31
  end
32
32
  end
33
33
 
34
- def == other
34
+ def ==(other)
35
35
  to_a == other.to_a
36
36
  end
37
37
 
38
38
  private
39
39
 
40
- def read_value offset
40
+ def read_value(offset)
41
41
  val = @ptr.send(getter_method, offset)
42
42
  val unless val.zero?
43
43
  end
@@ -46,7 +46,7 @@ module GirFFI
46
46
  @getter_method ||= "get_#{ffi_type}"
47
47
  end
48
48
 
49
- def wrap_value val
49
+ def wrap_value(val)
50
50
  case element_type
51
51
  when Array
52
52
  element_type.last.wrap val
@@ -23,7 +23,7 @@ GObjectIntrospection::IRepository.prepend_search_path File.join(File.dirname(__F
23
23
 
24
24
  module GObjectIntrospection
25
25
  class IRepository
26
- def shared_library_with_regress namespace
26
+ def shared_library_with_regress(namespace)
27
27
  case namespace
28
28
  when 'Regress'
29
29
  return File.join(File.dirname(__FILE__), 'lib', 'libregress.so')
@@ -42,41 +42,41 @@ end
42
42
  Thread.abort_on_exception = true
43
43
 
44
44
  module BaseTestExtensions
45
- def assert_defines_singleton_method klass, method, msg = nil
45
+ def assert_defines_singleton_method(klass, method, msg = nil)
46
46
  method = method.to_sym
47
47
  methods = klass.singleton_methods(false).map(&:to_sym)
48
- msg = message(msg) {
48
+ msg = message(msg) do
49
49
  "Expected #{mu_pp(klass)} to define singleton method #{mu_pp(method)}, " \
50
50
  "but only found #{mu_pp(methods)}"
51
- }
51
+ end
52
52
  assert_includes methods, method, msg
53
53
  end
54
54
 
55
- def refute_defines_singleton_method klass, method, msg = nil
55
+ def refute_defines_singleton_method(klass, method, msg = nil)
56
56
  method = method.to_sym
57
57
  methods = klass.singleton_methods(false).map(&:to_sym)
58
- msg = message(msg) {
58
+ msg = message(msg) do
59
59
  "Expected #{mu_pp(klass)} not to define singleton method #{mu_pp(method)}"
60
- }
60
+ end
61
61
  refute_includes methods, method, msg
62
62
  end
63
63
 
64
- def assert_defines_instance_method klass, method, msg = nil
64
+ def assert_defines_instance_method(klass, method, msg = nil)
65
65
  method = method.to_sym
66
66
  methods = klass.instance_methods(false).map(&:to_sym)
67
- msg = message(msg) {
67
+ msg = message(msg) do
68
68
  "Expected #{mu_pp(klass)} to define instance method #{mu_pp(method)}, " \
69
69
  "but only found #{mu_pp(methods)}"
70
- }
70
+ end
71
71
  assert_includes methods, method, msg
72
72
  end
73
73
 
74
- def refute_defines_instance_method klass, method, msg = nil
74
+ def refute_defines_instance_method(klass, method, msg = nil)
75
75
  method = method.to_sym
76
76
  methods = klass.instance_methods(false).map(&:to_sym)
77
- msg = message(msg) {
77
+ msg = message(msg) do
78
78
  "Expected #{mu_pp(klass)} not to define instance method #{mu_pp(method)}"
79
- }
79
+ end
80
80
  refute_includes methods, method, msg
81
81
  end
82
82
  end
@@ -15,7 +15,7 @@ describe GObject::Object do
15
15
  @x
16
16
  end
17
17
 
18
- def set_x val
18
+ def set_x(val)
19
19
  @x = val
20
20
  end
21
21
  end
@@ -68,4 +68,25 @@ describe GObject::Object do
68
68
  end
69
69
  end
70
70
  end
71
+
72
+ describe 'upon garbage collection' do
73
+ it 'lowers the reference count' do
74
+ if defined?(RUBY_ENGINE) && %w(jruby rbx).include?(RUBY_ENGINE)
75
+ skip 'cannot be reliably tested on JRuby and Rubinius'
76
+ end
77
+
78
+ object = GObject::Object.new GObject::TYPE_OBJECT, nil
79
+ ptr = object.to_ptr
80
+ ref_count(ptr).must_equal 1
81
+
82
+ # Lose reference to object to allow garbage collection
83
+ object = nil # rubocop:disable Lint/UselessAssignment
84
+
85
+ GC.start
86
+ GC.start
87
+ GC.start
88
+
89
+ ref_count(ptr).must_equal 0
90
+ end
91
+ end
71
92
  end
@@ -45,77 +45,77 @@ describe GObject::Value do
45
45
  describe '#set_value' do
46
46
  it 'handles char values' do
47
47
  value = 83
48
- gv = GObject::Value.for_g_type GObject::TYPE_CHAR
48
+ gv = GObject::Value.for_gtype GObject::TYPE_CHAR
49
49
  gv.set_value value
50
50
  gv.get_char.must_equal value
51
51
  end
52
52
 
53
53
  it 'handles enum values presented as symbols' do
54
54
  value = :value2
55
- gv = GObject::Value.for_g_type Regress::TestEnum.gtype
55
+ gv = GObject::Value.for_gtype Regress::TestEnum.gtype
56
56
  gv.set_value value
57
57
  gv.get_value.must_equal value
58
58
  end
59
59
 
60
60
  it 'handles enum values presented as numbers' do
61
61
  value = :value2
62
- gv = GObject::Value.for_g_type Regress::TestEnum.gtype
62
+ gv = GObject::Value.for_gtype Regress::TestEnum.gtype
63
63
  gv.set_value Regress::TestEnum[value]
64
64
  gv.get_value.must_equal value
65
65
  end
66
66
 
67
67
  it 'handles GType values' do
68
68
  value = GObject::TYPE_STRING
69
- gv = GObject::Value.for_g_type GObject::TYPE_GTYPE
69
+ gv = GObject::Value.for_gtype GObject::TYPE_GTYPE
70
70
  gv.set_value value
71
71
  gv.get_gtype.must_equal value
72
72
  end
73
73
 
74
74
  it 'handles int64 values' do
75
75
  value = 0x1234_5678_9012_3456
76
- gv = GObject::Value.for_g_type GObject::TYPE_INT64
76
+ gv = GObject::Value.for_gtype GObject::TYPE_INT64
77
77
  gv.set_value value
78
78
  gv.get_int64.must_equal value
79
79
  end
80
80
 
81
81
  it 'handles long values' do
82
82
  value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
83
- gv = GObject::Value.for_g_type GObject::TYPE_LONG
83
+ gv = GObject::Value.for_gtype GObject::TYPE_LONG
84
84
  gv.set_value value
85
85
  gv.get_long.must_equal value
86
86
  end
87
87
 
88
88
  it 'handles uchar values' do
89
89
  value = 83
90
- gv = GObject::Value.for_g_type GObject::TYPE_UCHAR
90
+ gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
91
91
  gv.set_value value
92
92
  gv.get_uchar.must_equal value
93
93
  end
94
94
 
95
95
  it 'handles uint values' do
96
96
  value = 0x1234_5678
97
- gv = GObject::Value.for_g_type GObject::TYPE_UINT
97
+ gv = GObject::Value.for_gtype GObject::TYPE_UINT
98
98
  gv.set_value value
99
99
  gv.get_uint.must_equal value
100
100
  end
101
101
 
102
102
  it 'handles uint64 values' do
103
103
  value = 0x1234_5678_9012_3456
104
- gv = GObject::Value.for_g_type GObject::TYPE_UINT64
104
+ gv = GObject::Value.for_gtype GObject::TYPE_UINT64
105
105
  gv.set_value value
106
106
  gv.get_uint64.must_equal value
107
107
  end
108
108
 
109
109
  it 'handles ulong values' do
110
110
  value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
111
- gv = GObject::Value.for_g_type GObject::TYPE_ULONG
111
+ gv = GObject::Value.for_gtype GObject::TYPE_ULONG
112
112
  gv.set_value value
113
113
  gv.get_ulong.must_equal value
114
114
  end
115
115
 
116
116
  it 'handles variant values' do
117
117
  value = GLib::Variant.new_string('Foo')
118
- gv = GObject::Value.for_g_type GObject::TYPE_VARIANT
118
+ gv = GObject::Value.for_gtype GObject::TYPE_VARIANT
119
119
  gv.set_value value
120
120
  gv.get_variant.must_equal value
121
121
  end
@@ -136,84 +136,84 @@ describe GObject::Value do
136
136
 
137
137
  it 'unwraps a char' do
138
138
  value = 3
139
- gv = GObject::Value.for_g_type GObject::TYPE_CHAR
139
+ gv = GObject::Value.for_gtype GObject::TYPE_CHAR
140
140
  gv.set_char value
141
141
  gv.get_value.must_equal value
142
142
  end
143
143
 
144
144
  it 'unwraps an enum value' do
145
145
  value = :value2
146
- gv = GObject::Value.for_g_type Regress::TestEnum.gtype
146
+ gv = GObject::Value.for_gtype Regress::TestEnum.gtype
147
147
  gv.set_enum Regress::TestEnum[value]
148
148
  gv.get_value.must_equal value
149
149
  end
150
150
 
151
151
  it 'unwraps a flags value' do
152
152
  value = Regress::TestFlags[:flag1] | Regress::TestFlags[:flag3]
153
- gv = GObject::Value.for_g_type Regress::TestFlags.gtype
153
+ gv = GObject::Value.for_gtype Regress::TestFlags.gtype
154
154
  gv.set_flags value
155
155
  gv.get_value.must_equal value
156
156
  end
157
157
 
158
158
  it 'unwraps a GType' do
159
159
  value = GObject::TYPE_STRING
160
- gv = GObject::Value.for_g_type GObject::TYPE_GTYPE
160
+ gv = GObject::Value.for_gtype GObject::TYPE_GTYPE
161
161
  gv.set_gtype value
162
162
  gv.get_value.must_equal value
163
163
  end
164
164
 
165
165
  it 'unwraps an int64' do
166
166
  value = 0x1234_5678_9012_3456
167
- gv = GObject::Value.for_g_type GObject::TYPE_INT64
167
+ gv = GObject::Value.for_gtype GObject::TYPE_INT64
168
168
  gv.set_int64 value
169
169
  gv.get_value.must_equal value
170
170
  end
171
171
 
172
172
  it 'unwraps a long' do
173
173
  value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
174
- gv = GObject::Value.for_g_type GObject::TYPE_LONG
174
+ gv = GObject::Value.for_gtype GObject::TYPE_LONG
175
175
  gv.set_long value
176
176
  gv.get_value.must_equal value
177
177
  end
178
178
 
179
179
  it 'unwraps an uchar' do
180
180
  value = 3
181
- gv = GObject::Value.for_g_type GObject::TYPE_UCHAR
181
+ gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
182
182
  gv.set_uchar value
183
183
  gv.get_value.must_equal value
184
184
  end
185
185
 
186
186
  it 'unwraps an uint' do
187
187
  value = 0x1234_5678
188
- gv = GObject::Value.for_g_type GObject::TYPE_UINT
188
+ gv = GObject::Value.for_gtype GObject::TYPE_UINT
189
189
  gv.set_uint value
190
190
  gv.get_value.must_equal value
191
191
  end
192
192
 
193
193
  it 'unwraps an uint64' do
194
194
  value = 0x1234_5678_9012_3456
195
- gv = GObject::Value.for_g_type GObject::TYPE_UINT64
195
+ gv = GObject::Value.for_gtype GObject::TYPE_UINT64
196
196
  gv.set_uint64 value
197
197
  gv.get_value.must_equal value
198
198
  end
199
199
 
200
200
  it 'unwraps a ulong' do
201
201
  value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
202
- gv = GObject::Value.for_g_type GObject::TYPE_ULONG
202
+ gv = GObject::Value.for_gtype GObject::TYPE_ULONG
203
203
  gv.set_ulong value
204
204
  gv.get_value.must_equal value
205
205
  end
206
206
 
207
207
  it 'unwraps a variant' do
208
208
  value = GLib::Variant.new_string('Foo')
209
- gv = GObject::Value.for_g_type GObject::TYPE_VARIANT
209
+ gv = GObject::Value.for_gtype GObject::TYPE_VARIANT
210
210
  gv.set_variant value
211
211
  gv.get_value.must_equal value
212
212
  end
213
213
 
214
214
  it 'works with a ByteArray' do
215
215
  ba = GLib::ByteArray.new.append('some bytes')
216
- v = GObject::Value.for_g_type GObject::TYPE_BYTE_ARRAY
216
+ v = GObject::Value.for_gtype GObject::TYPE_BYTE_ARRAY
217
217
  v.set_boxed ba
218
218
 
219
219
  result = v.get_value
@@ -224,7 +224,7 @@ describe GObject::Value do
224
224
 
225
225
  it 'works with an Array' do
226
226
  arr = GLib::Array.from(:uint, [1, 2, 3])
227
- v = GObject::Value.for_g_type GObject::TYPE_ARRAY
227
+ v = GObject::Value.for_gtype GObject::TYPE_ARRAY
228
228
  v.set_boxed arr
229
229
 
230
230
  result = v.get_value