Skip to content

Commit 8f3c3ab

Browse files
committed
Ractor error tests
1 parent df5d3fe commit 8f3c3ab

1 file changed

Lines changed: 46 additions & 1 deletion

File tree

test/ruby/test_ractor.rb

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,50 @@ def test_max_cpu_1
201201
RUBY
202202
end
203203

204+
def test_error_includes_ivar_and_object
205+
obj = Class.new do
206+
def initialize
207+
@unshareable = -> {}
208+
end
209+
210+
def inspect
211+
"#<Unshareable>"
212+
end
213+
end.new
214+
assert_unshareable(obj, /:ivar, :@unshareable, #<Unshareable>/)
215+
end
216+
217+
def test_error_includes_array_index
218+
assert_unshareable([0, -> {}], /:array_at, 1/)
219+
end
220+
221+
def test_error_includes_hash_key_and_value
222+
assert_unshareable({ unshareable: -> {} }, /:hash_at, :unshareable, #<Proc:/)
223+
end
224+
225+
def test_error_includes_hash_unshareable_key
226+
assert_unshareable({ -> {} => true }, /:hash_key, #<Proc:0x[[:xdigit:]]+ #{__FILE__}:#{__LINE__}/)
227+
end
228+
229+
def test_error_includes_hash_default
230+
h = Hash.new {}
231+
assert_unshareable(h, /:hash_default, #<Proc:0x[[:xdigit:]]+ #{__FILE__}:#{__LINE__ - 1}/)
232+
end
233+
234+
def test_error_includes_proc_self
235+
pr = -> {}
236+
assert_unshareable(pr, /:proc_self, #<#{self.class.name}/)
237+
end
238+
239+
def test_error_wraps_freeze_error
240+
obj = Class.new do
241+
undef_method :freeze
242+
end.new
243+
e = assert_unshareable(obj, /failed to call #freeze/, exception: Ractor::Error)
244+
assert_equal NoMethodError, e.cause.class
245+
assert_equal :freeze, e.cause.name
246+
end
247+
204248
def assert_make_shareable(obj)
205249
refute Ractor.shareable?(obj), "object was already shareable"
206250
Ractor.make_shareable(obj)
@@ -209,9 +253,10 @@ def assert_make_shareable(obj)
209253

210254
def assert_unshareable(obj, msg=nil, exception: Ractor::IsolationError)
211255
refute Ractor.shareable?(obj), "object is already shareable"
212-
assert_raise_with_message(exception, msg) do
256+
e = assert_raise_with_message(exception, msg) do
213257
Ractor.make_shareable(obj)
214258
end
215259
refute Ractor.shareable?(obj), "despite raising, object became shareable"
260+
e
216261
end
217262
end

0 commit comments

Comments
 (0)