Skip to content
This repository was archived by the owner on Mar 15, 2022. It is now read-only.

Commit 4a7c18b

Browse files
committed
Merge pull request #3 from Burgestrand/fix_ref_mock_gc
Ref::Mock.gc with no arguments does not trigger fake garbage collect for all objects
2 parents 892c8d7 + ef212c6 commit 4a7c18b

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

lib/ref/mock.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,16 @@ def object_space # :nodoc:
107107
# Simulate garbage collection of the objects passed in as arguments. If no objects
108108
# are specified, all objects will be reclaimed.
109109
def gc(*objects)
110-
objects = object_space.keys if objects.empty?
111-
objects.each do |obj|
112-
finalizers = object_space.delete(obj.__id__)
110+
objects = if objects.empty?
111+
object_space.keys
112+
else
113+
objects.map { |obj| obj.__id__ }
114+
end
115+
116+
objects.each do |id|
117+
finalizers = object_space.delete(id)
113118
if finalizers
114-
finalizers.each{|finalizer| finalizer.call(obj.__id__)}
119+
finalizers.each{|finalizer| finalizer.call(id)}
115120
end
116121
end
117122
end

test/mock_test.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
require File.expand_path("../test_helper", __FILE__)
2+
3+
class TestMock < Test::Unit::TestCase
4+
def test_gc_with_argument
5+
Ref::Mock.use do
6+
obj_1 = Object.new
7+
obj_2 = Object.new
8+
9+
ref_1 = Ref::WeakReference.new(obj_1)
10+
ref_2 = Ref::WeakReference.new(obj_2)
11+
12+
Ref::Mock.gc(obj_1)
13+
14+
assert_nil ref_1.object
15+
assert_equal ref_2.object, obj_2
16+
end
17+
end
18+
19+
def test_gc_with_no_argument
20+
Ref::Mock.use do
21+
obj_1 = Object.new
22+
obj_2 = Object.new
23+
24+
ref_1 = Ref::WeakReference.new(obj_1)
25+
ref_2 = Ref::WeakReference.new(obj_2)
26+
27+
Ref::Mock.gc
28+
29+
assert_nil ref_1.object
30+
assert_nil ref_2.object
31+
end
32+
end
33+
end

0 commit comments

Comments
 (0)