diff options
Diffstat (limited to 'spec/ruby/core/module/undef_method_spec.rb')
| -rw-r--r-- | spec/ruby/core/module/undef_method_spec.rb | 74 |
1 files changed, 48 insertions, 26 deletions
diff --git a/spec/ruby/core/module/undef_method_spec.rb b/spec/ruby/core/module/undef_method_spec.rb index 54c3d37c7f..d77640cb7e 100644 --- a/spec/ruby/core/module/undef_method_spec.rb +++ b/spec/ruby/core/module/undef_method_spec.rb @@ -1,5 +1,5 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require File.expand_path('../fixtures/classes', __FILE__) +require_relative '../../spec_helper' +require_relative 'fixtures/classes' module ModuleSpecs class Parent @@ -18,15 +18,8 @@ describe "Module#undef_method" do @module = Module.new { def method_to_undef; end } end - ruby_version_is ''...'2.5' do - it "is a private method" do - Module.should have_private_instance_method(:undef_method, false) - end - end - ruby_version_is '2.5' do - it "is a public method" do - Module.should have_public_instance_method(:undef_method, false) - end + it "is a public method" do + Module.public_instance_methods(false).should.include?(:undef_method) end it "requires multiple arguments" do @@ -41,8 +34,8 @@ describe "Module#undef_method" do x = klass.new klass.send(:undef_method, :method_to_undef, :another_method_to_undef) - lambda { x.method_to_undef }.should raise_error(NoMethodError) - lambda { x.another_method_to_undef }.should raise_error(NoMethodError) + -> { x.method_to_undef }.should.raise(NoMethodError) + -> { x.another_method_to_undef }.should.raise(NoMethodError) end it "does not undef any instance methods when argument not given" do @@ -53,11 +46,40 @@ describe "Module#undef_method" do end it "returns self" do - @module.send(:undef_method, :method_to_undef).should equal(@module) + @module.send(:undef_method, :method_to_undef).should.equal?(@module) + end + + it "raises a NameError when passed a missing name for a module" do + -> { @module.send :undef_method, :not_exist }.should.raise(NameError, /undefined method [`']not_exist' for module [`']#{@module}'/) { |e| + # a NameError and not a NoMethodError + e.class.should == NameError + } + end + + it "raises a NameError when passed a missing name for a class" do + klass = Class.new + -> { klass.send :undef_method, :not_exist }.should.raise(NameError, /undefined method [`']not_exist' for class [`']#{klass}'/) { |e| + # a NameError and not a NoMethodError + e.class.should == NameError + } + end + + it "raises a NameError when passed a missing name for a singleton class" do + klass = Class.new + obj = klass.new + sclass = obj.singleton_class + + -> { sclass.send :undef_method, :not_exist }.should.raise(NameError, /undefined method [`']not_exist' for class [`']#{sclass}'/) { |e| + e.message.should =~ /[`']#<Class:#<#<Class:/ + + # a NameError and not a NoMethodError + e.class.should == NameError + } end - it "raises a NameError when passed a missing name" do - lambda { @module.send :undef_method, :not_exist }.should raise_error(NameError) { |e| + it "raises a NameError when passed a missing name for a metaclass" do + klass = String.singleton_class + -> { klass.send :undef_method, :not_exist }.should.raise(NameError, /undefined method [`']not_exist' for class [`']String'/) { |e| # a NameError and not a NoMethodError e.class.should == NameError } @@ -68,20 +90,20 @@ describe "Module#undef_method" do @frozen = @module.dup.freeze end - it "raises a RuntimeError when passed a name" do - lambda { @frozen.send :undef_method, :method_to_undef }.should raise_error(RuntimeError) + it "raises a FrozenError when passed a name" do + -> { @frozen.send :undef_method, :method_to_undef }.should.raise(FrozenError) end - it "raises a RuntimeError when passed a missing name" do - lambda { @frozen.send :undef_method, :not_exist }.should raise_error(RuntimeError) + it "raises a FrozenError when passed a missing name" do + -> { @frozen.send :undef_method, :not_exist }.should.raise(FrozenError) end it "raises a TypeError when passed a not name" do - lambda { @frozen.send :undef_method, Object.new }.should raise_error(TypeError) + -> { @frozen.send :undef_method, Object.new }.should.raise(TypeError) end it "does not raise exceptions when no arguments given" do - @frozen.send(:undef_method).should equal(@frozen) + @frozen.send(:undef_method).should.equal?(@frozen) end end end @@ -98,7 +120,7 @@ describe "Module#undef_method with symbol" do klass.send :undef_method, :method_to_undef - lambda { x.method_to_undef }.should raise_error(NoMethodError) + -> { x.method_to_undef }.should.raise(NoMethodError) end it "removes a method defined in a super class" do @@ -108,7 +130,7 @@ describe "Module#undef_method with symbol" do child_class.send :undef_method, :method_to_undef - lambda { child.method_to_undef }.should raise_error(NoMethodError) + -> { child.method_to_undef }.should.raise(NoMethodError) end it "does not remove a method defined in a super class when removed from a subclass" do @@ -134,7 +156,7 @@ describe "Module#undef_method with string" do klass.send :undef_method, 'another_method_to_undef' - lambda { x.another_method_to_undef }.should raise_error(NoMethodError) + -> { x.another_method_to_undef }.should.raise(NoMethodError) end it "removes a method defined in a super class" do @@ -144,7 +166,7 @@ describe "Module#undef_method with string" do child_class.send :undef_method, 'another_method_to_undef' - lambda { child.another_method_to_undef }.should raise_error(NoMethodError) + -> { child.another_method_to_undef }.should.raise(NoMethodError) end it "does not remove a method defined in a super class when removed from a subclass" do |
