diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index 4c171bb439..cc11087e8a 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -3365,6 +3365,40 @@ class TestModule < Test::Unit::TestCase CODE end + def test_set_temporary_name + m = Module.new + assert_nil m.name + + m.const_set(:N, Module.new) + + assert_match(/\A#::N\z/, m::N.name) + m::N.set_temporary_name("fake_name_under_M") + assert_equal("fake_name_under_M", m::N.name) + m::N.set_temporary_name(nil) + assert_nil(m::N.name) + + m.set_temporary_name("fake_name") + assert_equal("fake_name", m.name) + + m.set_temporary_name(nil) + assert_nil m.name + + assert_raise_with_message(ArgumentError, "empty class/module name") do + m.set_temporary_name("") + end + %w[A A::B ::A ::A::B].each do |name| + assert_raise_with_message(ArgumentError, /must not be a constant path/) do + m.set_temporary_name(name) + end + end + + [Object, User, AClass].each do |mod| + assert_raise_with_message(RuntimeError, /permanent name/) do + mod.set_temporary_name("fake_name") + end + end + end + private def assert_top_method_is_private(method)