summaryrefslogtreecommitdiff
path: root/spec/rubyspec/core/module/name_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/rubyspec/core/module/name_spec.rb')
-rw-r--r--spec/rubyspec/core/module/name_spec.rb68
1 files changed, 68 insertions, 0 deletions
diff --git a/spec/rubyspec/core/module/name_spec.rb b/spec/rubyspec/core/module/name_spec.rb
new file mode 100644
index 0000000000..0727278591
--- /dev/null
+++ b/spec/rubyspec/core/module/name_spec.rb
@@ -0,0 +1,68 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/module', __FILE__)
+
+describe "Module#name" do
+ it "is nil for an anonymous module" do
+ Module.new.name.should be_nil
+ end
+
+ it "is nil when assigned to a constant in an anonymous module" do
+ m = Module.new
+ m::N = Module.new
+ m::N.name.should be_nil
+ end
+
+ it "is not nil for a nested module created with the module keyword" do
+ m = Module.new
+ module m::N; end
+ m::N.name.should =~ /#<Module:0x[0-9a-f]+>::N/
+ end
+
+ it "is set when opened with the module keyword" do
+ ModuleSpecs.name.should == "ModuleSpecs"
+ end
+
+ it "is set when a nested module is opened with the module keyword" do
+ ModuleSpecs::Anonymous.name.should == "ModuleSpecs::Anonymous"
+ end
+
+ it "is set when assigning to a constant" do
+ m = Module.new
+ ModuleSpecs::Anonymous::A = m
+ m.name.should == "ModuleSpecs::Anonymous::A"
+ end
+
+ it "is not modified when assigning to a new constant after it has been accessed" do
+ m = Module.new
+ ModuleSpecs::Anonymous::B = m
+ m.name.should == "ModuleSpecs::Anonymous::B"
+ ModuleSpecs::Anonymous::C = m
+ m.name.should == "ModuleSpecs::Anonymous::B"
+ end
+
+ # http://bugs.ruby-lang.org/issues/6067
+ it "is set with a conditional assignment to a nested constant" do
+ eval("ModuleSpecs::Anonymous::F ||= Module.new")
+ ModuleSpecs::Anonymous::F.name.should == "ModuleSpecs::Anonymous::F"
+ end
+
+ it "is set with a conditional assignment to a constant" do
+ module ModuleSpecs::Anonymous
+ D ||= Module.new
+ end
+ ModuleSpecs::Anonymous::D.name.should == "ModuleSpecs::Anonymous::D"
+ end
+
+ # http://redmine.ruby-lang.org/issues/show/1833
+ it "preserves the encoding in which the class was defined" do
+ require fixture(__FILE__, "name")
+ ModuleSpecs::NameEncoding.new.name.encoding.should == Encoding::UTF_8
+ end
+
+ it "is set when the anonymous outer module name is set" do
+ m = Module.new
+ m::N = Module.new
+ ModuleSpecs::Anonymous::E = m
+ m::N.name.should == "ModuleSpecs::Anonymous::E::N"
+ end
+end