11require_relative '../../spec_helper'
2+ require_relative 'fixtures/set_temporary_name'
23
34ruby_version_is "3.3" do
45 describe "Module#set_temporary_name" do
1314 m . name . should be_nil
1415 end
1516
17+ it "returns self" do
18+ m = Module . new
19+ m . set_temporary_name ( "fake_name" ) . should . equal? m
20+ end
21+
1622 it "can assign a temporary name which is not a valid constant path" do
1723 m = Module . new
18- m . set_temporary_name ( "a::B" )
19- m . name . should == "a::B"
24+
25+ m . set_temporary_name ( "name" )
26+ m . name . should == "name"
2027
2128 m . set_temporary_name ( "Template['foo.rb']" )
2229 m . name . should == "Template['foo.rb']"
30+
31+ m . set_temporary_name ( "a::B" )
32+ m . name . should == "a::B"
33+
34+ m . set_temporary_name ( "A::b" )
35+ m . name . should == "A::b"
36+
37+ m . set_temporary_name ( "A::B::" )
38+ m . name . should == "A::B::"
39+
40+ m . set_temporary_name ( "A::::B" )
41+ m . name . should == "A::::B"
42+
43+ m . set_temporary_name ( "A=" )
44+ m . name . should == "A="
2345 end
2446
2547 it "can't assign empty string as name" do
4365 -> { Object . set_temporary_name ( "fake_name" ) } . should raise_error ( RuntimeError , "can't change permanent name" )
4466 end
4567
46- it "can assign a temporary name to a nested module" do
68+ it "can assign a temporary name to a module nested into an anonymous module" do
4769 m = Module . new
4870 module m ::N ; end
4971 m ::N . name . should =~ /\A #<Module:0x\h +>::N\z /
@@ -55,6 +77,17 @@ module m::N; end
5577 m ::N . name . should be_nil
5678 end
5779
80+ it "discards a temporary name when an outer anonymous module gets a permanent name" do
81+ m = Module . new
82+ module m ::N ; end
83+
84+ m ::N . set_temporary_name ( "fake_name" )
85+ m ::N . name . should == "fake_name"
86+
87+ ModuleSpecs ::SetTemporaryNameSpec ::M = m
88+ m ::N . name . should == "ModuleSpecs::SetTemporaryNameSpec::M::N"
89+ end
90+
5891 it "can update the name when assigned to a constant" do
5992 m = Module . new
6093 m ::N = Module . new
@@ -64,5 +97,24 @@ module m::N; end
6497 m ::M = m ::N
6598 m ::M . name . should =~ /\A #<Module:0x\h +>::M\z /m
6699 end
100+
101+ it "can reassign a temporary name repeatedly" do
102+ m = Module . new
103+
104+ m . set_temporary_name ( "fake_name" )
105+ m . name . should == "fake_name"
106+
107+ m . set_temporary_name ( "fake_name_2" )
108+ m . name . should == "fake_name_2"
109+ end
110+
111+ it "does not affect a name of a module nested into an anonymous module with a temporary name" do
112+ m = Module . new
113+ m ::N = Module . new
114+ m ::N . name . should =~ /\A #<Module:0x\h +>::N\z /
115+
116+ m . set_temporary_name ( "foo" )
117+ m ::N . name . should =~ /\A #<Module:0x\h +>::N\z /
118+ end
67119 end
68120end
0 commit comments