ruby--ruby/spec/ruby/fixtures/code_loading.rb

42 lines
1.1 KiB
Ruby

module CodeLoadingSpecs
# The #require instance method is private, so this class enables
# calling #require like obj.require(file). This is used to share
# specs between Kernel#require and Kernel.require.
class Method
def require(name)
super name
end
def load(name, wrap=false)
super
end
end
def self.preload_rubygems
# Require RubyGems eagerly, to ensure #require is already the RubyGems
# version and RubyGems is only loaded once, before starting #require/#autoload specs
# which snapshot $LOADED_FEATURES and could cause RubyGems to load twice.
# #require specs also snapshot #require, and could end up redefining #require as the original core Kernel#require.
@rubygems ||= begin
require "rubygems"
true
rescue LoadError
true
end
end
def self.spec_setup
preload_rubygems
@saved_loaded_features = $LOADED_FEATURES.clone
@saved_load_path = $LOAD_PATH.clone
ScratchPad.record []
end
def self.spec_cleanup
$LOADED_FEATURES.replace @saved_loaded_features
$LOAD_PATH.replace @saved_load_path
ScratchPad.clear
end
end