diff options
Diffstat (limited to 'spec/ruby/fixtures/code_loading.rb')
| -rw-r--r-- | spec/ruby/fixtures/code_loading.rb | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/spec/ruby/fixtures/code_loading.rb b/spec/ruby/fixtures/code_loading.rb new file mode 100644 index 0000000000..decd56a358 --- /dev/null +++ b/spec/ruby/fixtures/code_loading.rb @@ -0,0 +1,41 @@ +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 |
