blob: decd56a3582d6a7fcc79bf7caa939d6a502ce8ee (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
|