From b56fbb9b121665ab54e3bc1b9b77d5ad3a351e4f Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 17 Sep 2013 12:35:49 +0000 Subject: command-processor.rb: return executable file only * lib/shell/command-processor.rb (Shell::CommandProcessor#find_system_command): return executable file only, should ignore directories and unexecutable files. [ruby-core:57235] [Bug #8918] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42962 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/shell/test_command_processor.rb | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/shell/test_command_processor.rb (limited to 'test/shell') diff --git a/test/shell/test_command_processor.rb b/test/shell/test_command_processor.rb new file mode 100644 index 0000000000..dfa36c047b --- /dev/null +++ b/test/shell/test_command_processor.rb @@ -0,0 +1,45 @@ +require 'shell' +require 'tmpdir' +require_relative '../ruby/envutil' + +class TestShell < Test::Unit::TestCase +end +class TestShell::CommandProcessor < Test::Unit::TestCase + def setup + @tmpdir = Dir.mktmpdir("test_shell") + @shell = Shell.new + @shell.system_path = [@tmpdir] + end + + def catch_command_start(tc = Object.new) + @shell.process_controller.singleton_class.class_eval do + define_method(:add_schedule) {|cmd| throw tc, cmd} + end + tc + end + + def test_system_external + ext = RbConfig::CONFIG["EXECUTABLE_EXTS"][/\S+\z/] + path = File.join(@tmpdir, "foo#{ext}") + open(path, "w", 0755) {} + + cmd = assert_throw(catch_command_start) {@shell.system("foo")} + assert_equal(path, cmd.command) + ensure + File.unlink(path) + end + + def test_system_not_found + bug8918 = '[ruby-core:57235] [Bug #8918]' + + path = File.join(@tmpdir, "foo") + open(path, "w", 0644) {} + + assert_raise(Shell::Error::CommandNotFound, bug8918) { + catch(catch_command_start) {@shell.system("foo")} + } + ensure + Process.waitall + File.unlink(path) + end +end -- cgit v1.2.3