зеркало из https://github.com/github/ruby.git
[ruby/reline] test_dumb_terminal: "ruby" command is not always available
Fixes the same issue at https://github.com/ruby/ruby/pull/5417 `ruby` is not always available in certain build environments and configure options (e.g. --program-suffix) This patch tries to choose an appropriate command line for spawning a fresh Ruby process, based on EnvUtil implementation in ruby/ruby's test suite. Plus when this library is directly mirrored into ruby/ruby, prefer EnvUtil available there over the implementation in this library's test suite. https://github.com/ruby/reline/commit/278327d2e9
This commit is contained in:
Родитель
8a474b344e
Коммит
8a29419b7f
|
@ -5,6 +5,19 @@ ENV['TERM'] = 'xterm' # for some CI environments
|
|||
require 'reline'
|
||||
require 'test/unit'
|
||||
|
||||
begin
|
||||
require 'rbconfig'
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
begin
|
||||
# This should exist and available in load path when this file is mirrored to ruby/ruby and running at there
|
||||
if File.exist?(File.expand_path('../../tool/lib/envutil.rb', __dir__))
|
||||
require 'envutil'
|
||||
end
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
module Reline
|
||||
class <<self
|
||||
def test_mode(ansi: false)
|
||||
|
@ -25,6 +38,34 @@ module Reline
|
|||
const_set('IOGate', Reline::GeneralIO)
|
||||
Reline.instance_variable_set(:@core, nil)
|
||||
end
|
||||
|
||||
# Return a executable name to spawn Ruby process. In certain build configuration,
|
||||
# "ruby" may not be available.
|
||||
def test_rubybin
|
||||
# When this test suite is running in ruby/ruby, prefer EnvUtil result over original implementation
|
||||
if const_defined?(:EnvUtil)
|
||||
return EnvUtil.rubybin
|
||||
end
|
||||
|
||||
# The following is a simplified port of EnvUtil.rubybin in ruby/ruby
|
||||
if ruby = ENV["RUBY"]
|
||||
return ruby
|
||||
end
|
||||
ruby = "ruby"
|
||||
exeext = RbConfig::CONFIG["EXEEXT"]
|
||||
rubyexe = (ruby + exeext if exeext and !exeext.empty?)
|
||||
if File.exist? ruby and File.executable? ruby and !File.directory? ruby
|
||||
return File.expand_path(ruby)
|
||||
end
|
||||
if rubyexe and File.exist? rubyexe and File.executable? rubyexe
|
||||
return File.expand_path(rubyexe)
|
||||
end
|
||||
if defined?(RbConfig.ruby)
|
||||
RbConfig.ruby
|
||||
else
|
||||
"ruby"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -370,7 +370,7 @@ class Reline::Test < Reline::TestCase
|
|||
|
||||
def test_dumb_terminal
|
||||
lib = File.expand_path("../../lib", __dir__)
|
||||
out = IO.popen([{"TERM"=>"dumb"}, "ruby", "-I#{lib}", "-rreline", "-e", "p Reline::IOGate"], &:read)
|
||||
out = IO.popen([{"TERM"=>"dumb"}, Reline.test_rubybin, "-I#{lib}", "-rreline", "-e", "p Reline::IOGate"], &:read)
|
||||
assert_equal("Reline::GeneralIO", out.chomp)
|
||||
end
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче