gir_ffi 0.7.10 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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