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
backports-1.16.1 test/basic_object_test.rb
backports-1.15.0 test/basic_object_test.rb
backports-1.14.1 test/basic_object_test.rb
backports-1.14.0 test/basic_object_test.rb
backports-1.13.3 test/basic_object_test.rb
backports-1.13.2 test/basic_object_test.rb
backports-1.13.1 test/basic_object_test.rb
backports-1.13.0 test/basic_object_test.rb
backports-1.12.3 test/basic_object_test.rb
backports-1.12.2 test/basic_object_test.rb
backports-1.12.1 test/basic_object_test.rb
backports-1.12.0 test/basic_object_test.rb
backports-1.11.2 test/basic_object_test.rb
backports-1.11.1 test/basic_object_test.rb
backports-1.11.0 test/basic_object_test.rb
backports-1.10.3 test/basic_object_test.rb
backports-1.10.2 test/basic_object_test.rb
backports-1.10.1 test/basic_object_test.rb
backports-1.10.0 test/basic_object_test.rb
backports-1.9.0 test/basic_object_test.rb