summaryrefslogtreecommitdiff
path: root/test/lib/envutil.rb
diff options
context:
space:
mode:
authoreregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-12 23:41:50 +0000
committereregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-12 23:41:50 +0000
commitd5874f0fffa1e12920ae267ad81acf651475cd64 (patch)
tree8f9b8dd8080340f27867a2bc75b863bcd95aa418 /test/lib/envutil.rb
parentcf4d4c32f341ef342e91c367dbd414147ed08542 (diff)
Capture the values of globals in EnvUtil to restore to the original
* Avoids the thread-safety issues mentioned in r61192, when thread concurrently modify default Encodings or $VERBOSE. Their state will always be the original one once the test finishes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/lib/envutil.rb')
-rw-r--r--test/lib/envutil.rb40
1 files changed, 22 insertions, 18 deletions
diff --git a/test/lib/envutil.rb b/test/lib/envutil.rb
index f44f0e9a65..a5621963e1 100644
--- a/test/lib/envutil.rb
+++ b/test/lib/envutil.rb
@@ -46,6 +46,14 @@ module EnvUtil
class << self
attr_accessor :subprocess_timeout_scale
+ attr_reader :original_internal_encoding, :original_external_encoding,
+ :original_verbose
+
+ def capture_global_values
+ @original_internal_encoding = Encoding.default_internal
+ @original_external_encoding = Encoding.default_external
+ @original_verbose = $VERBOSE
+ end
end
def apply_timeout_scale(t)
@@ -167,27 +175,29 @@ module EnvUtil
class << (stderr = "".dup)
alias write concat
end
- stderr, $stderr, verbose, $VERBOSE = $stderr, stderr, $VERBOSE, true
+ stderr, $stderr = $stderr, stderr
+ $VERBOSE = true
yield stderr
return $stderr
ensure
- stderr, $stderr, $VERBOSE = $stderr, stderr, verbose
+ stderr, $stderr = $stderr, stderr
+ $VERBOSE = EnvUtil.original_verbose
end
module_function :verbose_warning
def default_warning
- verbose, $VERBOSE = $VERBOSE, false
+ $VERBOSE = false
yield
ensure
- $VERBOSE = verbose
+ $VERBOSE = EnvUtil.original_verbose
end
module_function :default_warning
def suppress_warning
- verbose, $VERBOSE = $VERBOSE, nil
+ $VERBOSE = nil
yield
ensure
- $VERBOSE = verbose
+ $VERBOSE = EnvUtil.original_verbose
end
module_function :suppress_warning
@@ -200,26 +210,18 @@ module EnvUtil
module_function :under_gc_stress
def with_default_external(enc)
- verbose, $VERBOSE = $VERBOSE, nil
- origenc, Encoding.default_external = Encoding.default_external, enc
- $VERBOSE = verbose
+ suppress_warning { Encoding.default_external = enc }
yield
ensure
- verbose, $VERBOSE = $VERBOSE, nil
- Encoding.default_external = origenc
- $VERBOSE = verbose
+ suppress_warning { Encoding.default_external = EnvUtil.original_external_encoding }
end
module_function :with_default_external
def with_default_internal(enc)
- verbose, $VERBOSE = $VERBOSE, nil
- origenc, Encoding.default_internal = Encoding.default_internal, enc
- $VERBOSE = verbose
+ suppress_warning { Encoding.default_internal = enc }
yield
ensure
- verbose, $VERBOSE = $VERBOSE, nil
- Encoding.default_internal = origenc
- $VERBOSE = verbose
+ suppress_warning { Encoding.default_internal = EnvUtil.original_internal_encoding }
end
module_function :with_default_internal
@@ -291,3 +293,5 @@ if defined?(RbConfig)
Gem::ConfigMap[:bindir] = dir if defined?(Gem::ConfigMap)
end
end
+
+EnvUtil.capture_global_values