Sha256: 629b0b8ac3024a384d65d11fd2be106b5c045df029cfe639d2327bef35ef9587

Contents?: true

Size: 1.63 KB

Versions: 40

Compression:

Stored size: 1.63 KB

Contents

require 'test_helper'
require 'backports/basic_object'

class BasicObjectTest < Test::Unit::TestCase
  context "BasicObject" do
    should "do it's best to keep stuff undefined" do
      # written in one big test because sequence matters
      # and defining classes / methods can't really be undone

      assert_equal 3, BasicObject.instance_methods.size
      
      class Subclass < BasicObject
        def foo
          :bar
        end
      end
      
      assert_equal 4, Subclass.instance_methods.size
      
      module ::Kernel
        def bar
          :foo
        end
      end
      
      assert Subclass.method_defined?(:bar) # for now
      
      class ForceCleanup < Subclass
      end
      
      assert !Subclass.method_defined?(:bar) # should be cleaned up
      
      module SomeExtension
        def foo
          42
        end
      end
      
      class ::Object
        include SomeExtension
      end
      
      class ForceCleanupAgain < Subclass
      end
      
      # puts BasicObject.instance_methods - BasicObject.instance_methods(false)
      # puts BasicObject.instance_method(:foo).owner
      # puts SomeExtension <= Object
      assert Subclass.method_defined?(:foo) # should not be cleaned up!
      assert !BasicObject.method_defined?(:foo) # but BasicObject should have been cleaned up!
      
      class BasicObject
        def last_case
          1.0/0
        end
      end
      
      module SomeExtension
        def last_case
          0
        end
      end
      
      class ForceCleanupForTheLastTime < BasicObject
      end
      
      assert BasicObject.method_defined?(:last_case)
    end
  end
end

Version data entries

40 entries across 40 versions & 2 rubygems

Version Path
marcandre-backports-1.9.0 test/basic_object_test.rb
backports-2.3.0 test/basic_object_test.rb
backports-2.2.1 test/basic_object_test.rb
backports-2.2.0 test/basic_object_test.rb
backports-2.1.0 test/basic_object_test.rb
backports-2.0.3 test/basic_object_test.rb
backports-2.0.2 test/basic_object_test.rb
backports-2.0.1 test/basic_object_test.rb
backports-2.0.0 test/basic_object_test.rb
backports-1.18.2 test/basic_object_test.rb
backports-1.18.1 test/basic_object_test.rb
backports-1.18.0 test/basic_object_test.rb
backports-1.17.1 test/basic_object_test.rb
backports-1.17.0 test/basic_object_test.rb
backports-1.16.7 test/basic_object_test.rb
backports-1.16.6 test/basic_object_test.rb
backports-1.16.5 test/basic_object_test.rb
backports-1.16.4 test/basic_object_test.rb
backports-1.16.3 test/basic_object_test.rb
backports-1.16.2 test/basic_object_test.rb