mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
require_relative "helper"
 | 
						|
require "rubygems/util"
 | 
						|
 | 
						|
class TestGemUtil < Gem::TestCase
 | 
						|
  def test_class_popen
 | 
						|
    pend "popen with a block does not behave well on jruby" if Gem.java_platform?
 | 
						|
    assert_equal "0\n", Gem::Util.popen(*ruby_with_rubygems_in_load_path, "-e", "p 0")
 | 
						|
 | 
						|
    assert_raise Errno::ECHILD do
 | 
						|
      Process.wait(-1)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def test_silent_system
 | 
						|
    pend if Gem.java_platform?
 | 
						|
    Gem::Deprecate.skip_during do
 | 
						|
      out, err = capture_output do
 | 
						|
        Gem::Util.silent_system(*ruby_with_rubygems_in_load_path, "-e", 'puts "hello"; warn "hello"')
 | 
						|
      end
 | 
						|
      assert_empty out
 | 
						|
      assert_empty err
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def test_traverse_parents
 | 
						|
    FileUtils.mkdir_p "a/b/c"
 | 
						|
 | 
						|
    enum = Gem::Util.traverse_parents "a/b/c"
 | 
						|
 | 
						|
    assert_equal File.join(@tempdir, "a/b/c"), enum.next
 | 
						|
    assert_equal File.join(@tempdir, "a/b"),   enum.next
 | 
						|
    assert_equal File.join(@tempdir, "a"),     enum.next
 | 
						|
    loop { break if enum.next.nil? } # exhaust the enumerator
 | 
						|
  end
 | 
						|
 | 
						|
  def test_traverse_parents_does_not_crash_on_permissions_error
 | 
						|
    pend "skipped on MS Windows (chmod has no effect)" if win_platform? || java_platform?
 | 
						|
 | 
						|
    FileUtils.mkdir_p "d/e/f"
 | 
						|
    # remove 'execute' permission from "e" directory and make it
 | 
						|
    # impossible to cd into it and its children
 | 
						|
    FileUtils.chmod(0666, "d/e")
 | 
						|
 | 
						|
    pend "skipped in root privilege" if Process.uid.zero?
 | 
						|
 | 
						|
    paths = Gem::Util.traverse_parents("d/e/f").to_a
 | 
						|
 | 
						|
    assert_equal File.join(@tempdir, "d"), paths[0]
 | 
						|
    assert_equal @tempdir, paths[1]
 | 
						|
    assert_equal File.realpath("..", @tempdir), paths[2]
 | 
						|
    assert_equal File.realpath("../..", @tempdir), paths[3]
 | 
						|
  ensure
 | 
						|
    # restore default permissions, allow the directory to be removed
 | 
						|
    FileUtils.chmod(0775, "d/e") unless win_platform? || java_platform?
 | 
						|
  end
 | 
						|
 | 
						|
  def test_linked_list_find
 | 
						|
    list = [1,2,3,4,5].inject(Gem::List.new(0)) do |m,o|
 | 
						|
      Gem::List.new o, m
 | 
						|
    end
 | 
						|
    assert_equal 5, list.find {|x| x == 5 }
 | 
						|
    assert_equal 4, list.find {|x| x == 4 }
 | 
						|
  end
 | 
						|
 | 
						|
  def test_glob_files_in_dir
 | 
						|
    FileUtils.mkdir_p "g"
 | 
						|
    FileUtils.touch File.join("g", "h.rb")
 | 
						|
    FileUtils.touch File.join("g", "i.rb")
 | 
						|
 | 
						|
    expected_paths = [
 | 
						|
      File.join(@tempdir, "g/h.rb"),
 | 
						|
      File.join(@tempdir, "g/i.rb"),
 | 
						|
    ]
 | 
						|
 | 
						|
    files_with_absolute_base = Gem::Util.glob_files_in_dir("*.rb", File.join(@tempdir, "g"))
 | 
						|
    assert_equal expected_paths.sort, files_with_absolute_base.sort
 | 
						|
 | 
						|
    files_with_relative_base = Gem::Util.glob_files_in_dir("*.rb", "g")
 | 
						|
    assert_equal expected_paths.sort, files_with_relative_base.sort
 | 
						|
  end
 | 
						|
 | 
						|
  def test_correct_for_windows_path
 | 
						|
    path = "/C:/WINDOWS/Temp/gems"
 | 
						|
    assert_equal "C:/WINDOWS/Temp/gems", Gem::Util.correct_for_windows_path(path)
 | 
						|
 | 
						|
    path = "/home/skillet"
 | 
						|
    assert_equal "/home/skillet", Gem::Util.correct_for_windows_path(path)
 | 
						|
  end
 | 
						|
end
 |