summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_module.rb34
1 files changed, 34 insertions, 0 deletions
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#<Module:0x\h+>::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)