1require_relative 'base'
2
3class TestMkmf
4  class TestFindExecutable < TestMkmf
5    def setup
6      super
7      @path, ENV["PATH"] = ENV["PATH"], @tmpdir
8    end
9
10    def teardown
11      ENV["PATH"] = @path
12      super
13    end
14
15    def test_find_executable
16      bug2669 = '[ruby-core:27912]'
17      name = "foobar#{$$}#{rand(1000)}"
18      exts = mkmf {self.class::CONFIG['EXECUTABLE_EXTS']}.split
19      stdout.filter {|s| s.sub(name, "<executable>")}
20      exts[0] ||= ""
21      exts.each do |ext|
22        full = name+ext
23        begin
24          open(full, "w") {|ff| ff.chmod(0755)}
25          result = mkmf {find_executable(name)}
26        ensure
27          File.unlink(full)
28        end
29        assert_equal("#{@tmpdir}/#{name}#{ext}", result, bug2669)
30      end
31    end
32
33    def test_find_executable_dir
34      name = "foobar#{$$}#{rand(1000)}"
35      exts = mkmf {self.class::CONFIG['EXECUTABLE_EXTS']}.split
36      stdout.filter {|s| s.sub(name, "<executable>")}
37      exts[0] ||= ""
38      exts.each do |ext|
39        full = name+ext
40        begin
41          Dir.mkdir(full)
42          result = mkmf {find_executable(name)}
43        ensure
44          Dir.rmdir(full)
45        end
46        assert_nil(result)
47      end
48    end
49  end
50end
51