summaryrefslogtreecommitdiff
path: root/spec/rubyspec/language/metaclass_spec.rb
diff options
context:
space:
mode:
authoreregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-09-20 20:18:52 +0000
committereregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-09-20 20:18:52 +0000
commit1d15d5f08032acf1b7bceacbb450d617ff6e0931 (patch)
treea3785a79899302bc149e4a6e72f624ac27dc1f10 /spec/rubyspec/language/metaclass_spec.rb
parent75bfc6440d595bf339007f4fb280fd4d743e89c1 (diff)
Move spec/rubyspec to spec/ruby for consistency
* Other ruby implementations use the spec/ruby directory. [Misc #13792] [ruby-core:82287] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/rubyspec/language/metaclass_spec.rb')
-rw-r--r--spec/rubyspec/language/metaclass_spec.rb143
1 files changed, 0 insertions, 143 deletions
diff --git a/spec/rubyspec/language/metaclass_spec.rb b/spec/rubyspec/language/metaclass_spec.rb
deleted file mode 100644
index b3bcd9ef18..0000000000
--- a/spec/rubyspec/language/metaclass_spec.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-require File.expand_path('../../spec_helper', __FILE__)
-require File.expand_path('../../fixtures/class', __FILE__)
-require File.expand_path('../fixtures/metaclass', __FILE__)
-
-describe "self in a metaclass body (class << obj)" do
- it "is TrueClass for true" do
- class << true; self; end.should == TrueClass
- end
-
- it "is FalseClass for false" do
- class << false; self; end.should == FalseClass
- end
-
- it "is NilClass for nil" do
- class << nil; self; end.should == NilClass
- end
-
- it "raises a TypeError for numbers" do
- lambda { class << 1; self; end }.should raise_error(TypeError)
- end
-
- it "raises a TypeError for symbols" do
- lambda { class << :symbol; self; end }.should raise_error(TypeError)
- end
-
- it "is a singleton Class instance" do
- cls = class << mock('x'); self; end
- cls.is_a?(Class).should == true
- cls.should_not equal(Object)
- end
-end
-
-describe "A constant on a metaclass" do
- before :each do
- @object = Object.new
- class << @object
- CONST = self
- end
- end
-
- it "can be accessed after the metaclass body is reopened" do
- class << @object
- CONST.should == self
- end
- end
-
- it "can be accessed via self::CONST" do
- class << @object
- self::CONST.should == self
- end
- end
-
- it "can be accessed via const_get" do
- class << @object
- const_get(:CONST).should == self
- end
- end
-
- it "is not defined on the object's class" do
- @object.class.const_defined?(:CONST).should be_false
- end
-
- it "is not defined in the metaclass opener's scope" do
- class << @object
- CONST
- end
- lambda { CONST }.should raise_error(NameError)
- end
-
- it "cannot be accessed via object::CONST" do
- lambda do
- @object::CONST
- end.should raise_error(TypeError)
- end
-
- it "raises a NameError for anonymous_module::CONST" do
- @object = Class.new
- class << @object
- CONST = 100
- end
-
- lambda do
- @object::CONST
- end.should raise_error(NameError)
- end
-
- it "appears in the metaclass constant list" do
- constants = class << @object; constants; end
- constants.should include(:CONST)
- end
-
- it "does not appear in the object's class constant list" do
- @object.class.constants.should_not include(:CONST)
- end
-
- it "is not preserved when the object is duped" do
- @object = @object.dup
-
- lambda do
- class << @object; CONST; end
- end.should raise_error(NameError)
- end
-
- it "is preserved when the object is cloned" do
- @object = @object.clone
-
- class << @object
- CONST.should_not be_nil
- end
- end
-end
-
-describe "calling methods on the metaclass" do
-
- it "calls a method on the metaclass" do
- MetaClassSpecs::A.cheese.should == 'edam'
- MetaClassSpecs::B.cheese.should == 'stilton'
- end
-
- it "calls a method on the instance's metaclass" do
- b = MetaClassSpecs::B.new
- b_meta = MetaClassSpecs.metaclass_of b
- b_meta.send(:define_method, :cheese) {'cheshire'}
- b.cheese.should == 'cheshire'
- end
-
- it "calls a method in deeper chains of metaclasses" do
- b = MetaClassSpecs::B.new
- b_meta = MetaClassSpecs.metaclass_of b
- b_meta_meta = MetaClassSpecs.metaclass_of b_meta
- b_meta_meta.send(:define_method, :cheese) {'gouda'}
- b_meta.cheese.should == 'gouda'
-
- b_meta_meta_meta = MetaClassSpecs.metaclass_of b_meta_meta
- b_meta_meta_meta.send(:define_method, :cheese) {'wensleydale'}
- b_meta_meta.cheese.should == 'wensleydale'
- end
-
- it "calls a method defined on the metaclass of the metaclass" do
- d_meta = MetaClassSpecs::D.singleton_class
- d_meta.ham.should == 'iberico'
- end
-end