diff options
Diffstat (limited to 'trunk/test/fileutils/test_fileutils.rb')
-rw-r--r-- | trunk/test/fileutils/test_fileutils.rb | 1081 |
1 files changed, 0 insertions, 1081 deletions
diff --git a/trunk/test/fileutils/test_fileutils.rb b/trunk/test/fileutils/test_fileutils.rb deleted file mode 100644 index a52eb50071..0000000000 --- a/trunk/test/fileutils/test_fileutils.rb +++ /dev/null @@ -1,1081 +0,0 @@ -# $Id$ - -require 'fileutils' -require 'fileasserts' -require 'pathname' -require 'tmpdir' -require 'test/unit' - -class TestFileUtils < Test::Unit::TestCase - TMPROOT = "#{Dir.tmpdir}/fileutils.rb.#{$$}" -end - -prevdir = Dir.pwd -tmproot = TestFileUtils::TMPROOT -Dir.mkdir tmproot unless File.directory?(tmproot) -Dir.chdir tmproot - -def have_drive_letter? - /djgpp|mswin(?!ce)|mingw|bcc|emx/ =~ RUBY_PLATFORM -end - -def have_file_perm? - /djgpp|mswin|mingw|bcc|wince|emx/ !~ RUBY_PLATFORM -end - -$fileutils_rb_have_symlink = nil - -def have_symlink? - if $fileutils_rb_have_symlink == nil - $fileutils_rb_have_symlink = check_have_symlink? - end - $fileutils_rb_have_symlink -end - -def check_have_symlink? - File.symlink nil, nil -rescue NotImplementedError - return false -rescue - return true -end - -$fileutils_rb_have_hardlink = nil - -def have_hardlink? - if $fileutils_rb_have_hardlink == nil - $fileutils_rb_have_hardlink = check_have_hardlink? - end - $fileutils_rb_have_hardlink -end - -def check_have_hardlink? - File.link nil, nil -rescue NotImplementedError - return false -rescue - return true -end - -begin - Dir.mkdir("\n") - Dir.rmdir("\n") - def lf_in_path_allowed? - true - end -rescue - def lf_in_path_allowed? - false - end -end - -Dir.chdir prevdir -Dir.rmdir tmproot - -class TestFileUtils - - include FileUtils - - def check_singleton(name) - assert_equal true, ::FileUtils.public_methods.include?(name.to_sym) - end - - def my_rm_rf(path) - if File.exist?('/bin/rm') - system %Q[/bin/rm -rf "#{path}"] - else - FileUtils.rm_rf path - end - end - - def mymkdir(path) - Dir.mkdir path - File.chown nil, Process.gid, path if have_file_perm? - end - - def setup - @prevdir = Dir.pwd - tmproot = TMPROOT - mymkdir tmproot unless File.directory?(tmproot) - Dir.chdir tmproot - my_rm_rf 'data'; mymkdir 'data' - my_rm_rf 'tmp'; mymkdir 'tmp' - prepare_data_file - end - - def teardown - tmproot = Dir.pwd - Dir.chdir @prevdir - my_rm_rf tmproot - end - - - TARGETS = %w( data/a data/all data/random data/zero ) - - def prepare_data_file - File.open('data/a', 'w') {|f| - 32.times do - f.puts 'a' * 50 - end - } - - all_chars = (0..255).map {|n| n.chr }.join('') - File.open('data/all', 'w') {|f| - 32.times do - f.puts all_chars - end - } - - random_chars = (0...50).map { rand(256).chr }.join('') - File.open('data/random', 'w') {|f| - 32.times do - f.puts random_chars - end - } - - File.open('data/zero', 'w') {|f| - ; - } - end - - BIGFILE = 'data/big' - - def prepare_big_file - File.open('data/big', 'w') {|f| - (4 * 1024 * 1024 / 256).times do # 4MB - f.print "aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa\n" - end - } - end - - def prepare_time_data - File.open('data/old', 'w') {|f| f.puts 'dummy' } - File.open('data/newer', 'w') {|f| f.puts 'dummy' } - File.open('data/newest', 'w') {|f| f.puts 'dummy' } - t = Time.now - File.utime t-8, t-8, 'data/old' - File.utime t-4, t-4, 'data/newer' - end - - def each_srcdest - TARGETS.each do |path| - yield path, "tmp/#{File.basename(path)}" - end - end - - # - # Test Cases - # - - def test_pwd - check_singleton :pwd - - assert_equal Dir.pwd, pwd() - - cwd = Dir.pwd -if have_drive_letter? - cd('C:/') { - assert_equal 'C:/', pwd() - } - assert_equal cwd, pwd() -else - cd('/') { - assert_equal '/', pwd() - } - assert_equal cwd, pwd() -end - end - - def test_cmp - check_singleton :cmp - - TARGETS.each do |fname| - assert cmp(fname, fname), 'not same?' - end - assert_raises(ArgumentError) { - cmp TARGETS[0], TARGETS[0], :undefinedoption => true - } - - # pathname - touch 'tmp/cmptmp' - assert_nothing_raised { - cmp Pathname.new('tmp/cmptmp'), 'tmp/cmptmp' - cmp 'tmp/cmptmp', Pathname.new('tmp/cmptmp') - cmp Pathname.new('tmp/cmptmp'), Pathname.new('tmp/cmptmp') - } - end - - def test_cp - check_singleton :cp - - each_srcdest do |srcpath, destpath| - cp srcpath, destpath - assert_same_file srcpath, destpath - - cp srcpath, File.dirname(destpath) - assert_same_file srcpath, destpath - - cp srcpath, File.dirname(destpath) + '/' - assert_same_file srcpath, destpath - - cp srcpath, destpath, :preserve => true - assert_same_file srcpath, destpath - assert_same_entry srcpath, destpath - end - - # src==dest (1) same path - touch 'tmp/cptmp' - assert_raises(ArgumentError) { - cp 'tmp/cptmp', 'tmp/cptmp' - } -if have_symlink? - # src==dest (2) symlink and its target - File.symlink 'cptmp', 'tmp/cptmp_symlink' - assert_raises(ArgumentError) { - cp 'tmp/cptmp', 'tmp/cptmp_symlink' - } - assert_raises(ArgumentError) { - cp 'tmp/cptmp_symlink', 'tmp/cptmp' - } - # src==dest (3) looped symlink - File.symlink 'symlink', 'tmp/symlink' - assert_raises(Errno::ELOOP) { - cp 'tmp/symlink', 'tmp/symlink' - } -end - - # pathname - assert_nothing_raised { - cp 'tmp/cptmp', Pathname.new('tmp/tmpdest') - cp Pathname.new('tmp/cptmp'), 'tmp/tmpdest' - cp Pathname.new('tmp/cptmp'), Pathname.new('tmp/tmpdest') - mkdir 'tmp/tmpdir' - cp ['tmp/cptmp', 'tmp/tmpdest'], Pathname.new('tmp/tmpdir') - } - end - - def test_cp_r - check_singleton :cp_r - - cp_r 'data', 'tmp' - TARGETS.each do |fname| - assert_same_file fname, "tmp/#{fname}" - end - - cp_r 'data', 'tmp2', :preserve => true - TARGETS.each do |fname| - assert_same_entry fname, "tmp2/#{File.basename(fname)}" - assert_same_file fname, "tmp2/#{File.basename(fname)}" - end - - # a/* -> b/* - mkdir 'tmp/cpr_src' - mkdir 'tmp/cpr_dest' - File.open('tmp/cpr_src/a', 'w') {|f| f.puts 'a' } - File.open('tmp/cpr_src/b', 'w') {|f| f.puts 'b' } - File.open('tmp/cpr_src/c', 'w') {|f| f.puts 'c' } - mkdir 'tmp/cpr_src/d' - cp_r 'tmp/cpr_src/.', 'tmp/cpr_dest' - assert_same_file 'tmp/cpr_src/a', 'tmp/cpr_dest/a' - assert_same_file 'tmp/cpr_src/b', 'tmp/cpr_dest/b' - assert_same_file 'tmp/cpr_src/c', 'tmp/cpr_dest/c' - assert_directory 'tmp/cpr_dest/d' - my_rm_rf 'tmp/cpr_src' - my_rm_rf 'tmp/cpr_dest' - -if have_symlink? - # symlink in a directory - mkdir 'tmp/cpr_src' - ln_s 'SLdest', 'tmp/cpr_src/symlink' - cp_r 'tmp/cpr_src', 'tmp/cpr_dest' - assert_symlink 'tmp/cpr_dest/symlink' - assert_equal 'SLdest', File.readlink('tmp/cpr_dest/symlink') - - # root is a symlink - ln_s 'cpr_src', 'tmp/cpr_src2' - cp_r 'tmp/cpr_src2', 'tmp/cpr_dest2' - assert_directory 'tmp/cpr_dest2' - #assert_not_symlink 'tmp/cpr_dest2' - assert_symlink 'tmp/cpr_dest2' # 2005-05-26: feature change - assert_symlink 'tmp/cpr_dest2/symlink' - assert_equal 'SLdest', File.readlink('tmp/cpr_dest2/symlink') -end - - # pathname - touch 'tmp/cprtmp' - assert_nothing_raised { - cp_r Pathname.new('tmp/cprtmp'), 'tmp/tmpdest' - cp_r 'tmp/cprtmp', Pathname.new('tmp/tmpdest') - cp_r Pathname.new('tmp/cprtmp'), Pathname.new('tmp/tmpdest') - } - end - - def test_mv - check_singleton :mv - - mkdir 'tmp/dest' - TARGETS.each do |fname| - cp fname, 'tmp/mvsrc' - mv 'tmp/mvsrc', 'tmp/mvdest' - assert_same_file fname, 'tmp/mvdest' - - mv 'tmp/mvdest', 'tmp/dest/' - assert_same_file fname, 'tmp/dest/mvdest' - - mv 'tmp/dest/mvdest', 'tmp' - assert_same_file fname, 'tmp/mvdest' - end - - mkdir 'tmp/tmpdir' - mkdir_p 'tmp/dest2/tmpdir' - assert_raises(Errno::EEXIST) { - mv 'tmp/tmpdir', 'tmp/dest2' - } - mkdir 'tmp/dest2/tmpdir/junk' - assert_raises(Errno::EEXIST, "[ruby-talk:124368]") { - mv 'tmp/tmpdir', 'tmp/dest2' - } - - # src==dest (1) same path - touch 'tmp/cptmp' - assert_raises(ArgumentError) { - mv 'tmp/cptmp', 'tmp/cptmp' - } -if have_symlink? - # src==dest (2) symlink and its target - File.symlink 'cptmp', 'tmp/cptmp_symlink' - assert_raises(ArgumentError) { - mv 'tmp/cptmp', 'tmp/cptmp_symlink' - } - assert_raises(ArgumentError) { - mv 'tmp/cptmp_symlink', 'tmp/cptmp' - } - # src==dest (3) looped symlink - File.symlink 'symlink', 'tmp/symlink' - assert_raises(Errno::ELOOP) { - mv 'tmp/symlink', 'tmp/symlink' - } -end - - # pathname - assert_nothing_raised { - touch 'tmp/mvtmpsrc' - mv Pathname.new('tmp/mvtmpsrc'), 'tmp/mvtmpdest' - touch 'tmp/mvtmpsrc' - mv 'tmp/mvtmpsrc', Pathname.new('tmp/mvtmpdest') - touch 'tmp/mvtmpsrc' - mv Pathname.new('tmp/mvtmpsrc'), Pathname.new('tmp/mvtmpdest') - } - end - - def test_rm - check_singleton :rm - - TARGETS.each do |fname| - cp fname, 'tmp/rmsrc' - rm 'tmp/rmsrc' - assert_file_not_exist 'tmp/rmsrc' - end - - # pathname - touch 'tmp/rmtmp1' - touch 'tmp/rmtmp2' - touch 'tmp/rmtmp3' - assert_nothing_raised { - rm Pathname.new('tmp/rmtmp1') - rm [Pathname.new('tmp/rmtmp2'), Pathname.new('tmp/rmtmp3')] - } - assert_file_not_exist 'tmp/rmtmp1' - assert_file_not_exist 'tmp/rmtmp2' - assert_file_not_exist 'tmp/rmtmp3' - end - - def test_rm_f - check_singleton :rm_f - - TARGETS.each do |fname| - cp fname, 'tmp/rmsrc' - rm_f 'tmp/rmsrc' - assert_file_not_exist 'tmp/rmsrc' - end - -if have_symlink? - File.open('tmp/lnf_symlink_src', 'w') {|f| f.puts 'dummy' } - File.symlink 'tmp/lnf_symlink_src', 'tmp/lnf_symlink_dest' - rm_f 'tmp/lnf_symlink_dest' - assert_file_not_exist 'tmp/lnf_symlink_dest' - assert_file_exist 'tmp/lnf_symlink_src' -end - - rm_f 'notexistdatafile' - rm_f 'tmp/notexistdatafile' - my_rm_rf 'tmpdatadir' - Dir.mkdir 'tmpdatadir' - # rm_f 'tmpdatadir' - Dir.rmdir 'tmpdatadir' - - Dir.mkdir 'tmp/tmpdir' - File.open('tmp/tmpdir/a', 'w') {|f| f.puts 'dummy' } - File.open('tmp/tmpdir/c', 'w') {|f| f.puts 'dummy' } - rm_f ['tmp/tmpdir/a', 'tmp/tmpdir/b', 'tmp/tmpdir/c'] - assert_file_not_exist 'tmp/tmpdir/a' - assert_file_not_exist 'tmp/tmpdir/c' - Dir.rmdir 'tmp/tmpdir' - - # pathname - touch 'tmp/rmtmp1' - touch 'tmp/rmtmp2' - touch 'tmp/rmtmp3' - touch 'tmp/rmtmp4' - assert_nothing_raised { - rm_f Pathname.new('tmp/rmtmp1') - rm_f [Pathname.new('tmp/rmtmp2'), Pathname.new('tmp/rmtmp3')] - } - assert_file_not_exist 'tmp/rmtmp1' - assert_file_not_exist 'tmp/rmtmp2' - assert_file_not_exist 'tmp/rmtmp3' - assert_file_exist 'tmp/rmtmp4' - end - - def test_rm_r - check_singleton :rm_r - - my_rm_rf 'tmpdatadir' - - Dir.mkdir 'tmpdatadir' - rm_r 'tmpdatadir' - assert_file_not_exist 'tmpdatadir' - - Dir.mkdir 'tmpdatadir' - rm_r 'tmpdatadir/' - assert_file_not_exist 'tmpdatadir' - - Dir.mkdir 'tmp/tmpdir' - rm_r 'tmp/tmpdir/' - assert_file_not_exist 'tmp/tmpdir' - assert_file_exist 'tmp' - - Dir.mkdir 'tmp/tmpdir' - rm_r 'tmp/tmpdir' - assert_file_not_exist 'tmp/tmpdir' - assert_file_exist 'tmp' - - Dir.mkdir 'tmp/tmpdir' - File.open('tmp/tmpdir/a', 'w') {|f| f.puts 'dummy' } - File.open('tmp/tmpdir/b', 'w') {|f| f.puts 'dummy' } - File.open('tmp/tmpdir/c', 'w') {|f| f.puts 'dummy' } - rm_r 'tmp/tmpdir' - assert_file_not_exist 'tmp/tmpdir' - assert_file_exist 'tmp' - - Dir.mkdir 'tmp/tmpdir' - File.open('tmp/tmpdir/a', 'w') {|f| f.puts 'dummy' } - File.open('tmp/tmpdir/c', 'w') {|f| f.puts 'dummy' } - rm_r ['tmp/tmpdir/a', 'tmp/tmpdir/b', 'tmp/tmpdir/c'], :force => true - assert_file_not_exist 'tmp/tmpdir/a' - assert_file_not_exist 'tmp/tmpdir/c' - Dir.rmdir 'tmp/tmpdir' - -if have_symlink? - # [ruby-talk:94635] a symlink to the directory - Dir.mkdir 'tmp/tmpdir' - File.symlink '..', 'tmp/tmpdir/symlink_to_dir' - rm_r 'tmp/tmpdir' - assert_file_not_exist 'tmp/tmpdir' - assert_file_exist 'tmp' -end - - # pathname - Dir.mkdir 'tmp/tmpdir1'; touch 'tmp/tmpdir1/tmp' - Dir.mkdir 'tmp/tmpdir2'; touch 'tmp/tmpdir2/tmp' - Dir.mkdir 'tmp/tmpdir3'; touch 'tmp/tmpdir3/tmp' - assert_nothing_raised { - rm_r Pathname.new('tmp/tmpdir1') - rm_r [Pathname.new('tmp/tmpdir2'), Pathname.new('tmp/tmpdir3')] - } - assert_file_not_exist 'tmp/tmpdir1' - assert_file_not_exist 'tmp/tmpdir2' - assert_file_not_exist 'tmp/tmpdir3' - end - - def test_remove_entry_secure - check_singleton :remove_entry_secure - - my_rm_rf 'tmpdatadir' - - Dir.mkdir 'tmpdatadir' - remove_entry_secure 'tmpdatadir' - assert_file_not_exist 'tmpdatadir' - - Dir.mkdir 'tmpdatadir' - remove_entry_secure 'tmpdatadir/' - assert_file_not_exist 'tmpdatadir' - - Dir.mkdir 'tmp/tmpdir' - remove_entry_secure 'tmp/tmpdir/' - assert_file_not_exist 'tmp/tmpdir' - assert_file_exist 'tmp' - - Dir.mkdir 'tmp/tmpdir' - remove_entry_secure 'tmp/tmpdir' - assert_file_not_exist 'tmp/tmpdir' - assert_file_exist 'tmp' - - Dir.mkdir 'tmp/tmpdir' - File.open('tmp/tmpdir/a', 'w') {|f| f.puts 'dummy' } - File.open('tmp/tmpdir/b', 'w') {|f| f.puts 'dummy' } - File.open('tmp/tmpdir/c', 'w') {|f| f.puts 'dummy' } - remove_entry_secure 'tmp/tmpdir' - assert_file_not_exist 'tmp/tmpdir' - assert_file_exist 'tmp' - - Dir.mkdir 'tmp/tmpdir' - File.open('tmp/tmpdir/a', 'w') {|f| f.puts 'dummy' } - File.open('tmp/tmpdir/c', 'w') {|f| f.puts 'dummy' } - remove_entry_secure 'tmp/tmpdir/a', true - remove_entry_secure 'tmp/tmpdir/b', true - remove_entry_secure 'tmp/tmpdir/c', true - assert_file_not_exist 'tmp/tmpdir/a' - assert_file_not_exist 'tmp/tmpdir/c' - Dir.rmdir 'tmp/tmpdir' - -if have_symlink? - # [ruby-talk:94635] a symlink to the directory - Dir.mkdir 'tmp/tmpdir' - File.symlink '..', 'tmp/tmpdir/symlink_to_dir' - remove_entry_secure 'tmp/tmpdir' - assert_file_not_exist 'tmp/tmpdir' - assert_file_exist 'tmp' -end - - # pathname - Dir.mkdir 'tmp/tmpdir1'; touch 'tmp/tmpdir1/tmp' - assert_nothing_raised { - remove_entry_secure Pathname.new('tmp/tmpdir1') - } - assert_file_not_exist 'tmp/tmpdir1' - end - - def test_with_big_file - prepare_big_file - - cp BIGFILE, 'tmp/cpdest' - assert_same_file BIGFILE, 'tmp/cpdest' - assert cmp(BIGFILE, 'tmp/cpdest'), 'orig != copied' - - mv 'tmp/cpdest', 'tmp/mvdest' - assert_same_file BIGFILE, 'tmp/mvdest' - assert_file_not_exist 'tmp/cpdest' - - rm 'tmp/mvdest' - assert_file_not_exist 'tmp/mvdest' - end - -if have_hardlink? - def test_ln - TARGETS.each do |fname| - ln fname, 'tmp/lndest' - assert_same_file fname, 'tmp/lndest' - File.unlink 'tmp/lndest' - end - - ln TARGETS, 'tmp' - TARGETS.each do |fname| - assert_same_file fname, 'tmp/' + File.basename(fname) - end - TARGETS.each do |fname| - File.unlink 'tmp/' + File.basename(fname) - end - - # src==dest (1) same path - touch 'tmp/cptmp' - assert_raises(Errno::EEXIST) { - ln 'tmp/cptmp', 'tmp/cptmp' - } -if have_symlink? - # src==dest (2) symlink and its target - File.symlink 'cptmp', 'tmp/symlink' - assert_raises(Errno::EEXIST) { - ln 'tmp/cptmp', 'tmp/symlink' # normal file -> symlink - } - assert_raises(Errno::EEXIST) { - ln 'tmp/symlink', 'tmp/cptmp' # symlink -> normal file - } - # src==dest (3) looped symlink - File.symlink 'cptmp_symlink', 'tmp/cptmp_symlink' - begin - ln 'tmp/cptmp_symlink', 'tmp/cptmp_symlink' - rescue => err - assert_kind_of SystemCallError, err - end -end - - # pathname - touch 'tmp/lntmp' - assert_nothing_raised { - ln Pathname.new('tmp/lntmp'), 'tmp/lndesttmp1' - ln 'tmp/lntmp', Pathname.new('tmp/lndesttmp2') - ln Pathname.new('tmp/lntmp'), Pathname.new('tmp/lndesttmp3') - } - end -end - -if have_symlink? - def test_ln_s - check_singleton :ln_s - - TARGETS.each do |fname| - ln_s fname, 'tmp/lnsdest' - assert FileTest.symlink?('tmp/lnsdest'), 'not symlink' - assert_equal fname, File.readlink('tmp/lnsdest') - rm_f 'tmp/lnsdest' - end - assert_nothing_raised { - ln_s 'symlink', 'tmp/symlink' - } - assert_symlink 'tmp/symlink' - - # pathname - touch 'tmp/lnsdest' - assert_nothing_raised { - ln_s Pathname.new('lnsdest'), 'tmp/symlink_tmp1' - ln_s 'lnsdest', Pathname.new('tmp/symlink_tmp2') - ln_s Pathname.new('lnsdest'), Pathname.new('tmp/symlink_tmp3') - } - end -end - -if have_symlink? - def test_ln_sf - check_singleton :ln_sf - - TARGETS.each do |fname| - ln_sf fname, 'tmp/lnsdest' - assert FileTest.symlink?('tmp/lnsdest'), 'not symlink' - assert_equal fname, File.readlink('tmp/lnsdest') - ln_sf fname, 'tmp/lnsdest' - ln_sf fname, 'tmp/lnsdest' - end - assert_nothing_raised { - ln_sf 'symlink', 'tmp/symlink' - } - - # pathname - touch 'tmp/lns_dest' - assert_nothing_raised { - ln_sf Pathname.new('lns_dest'), 'tmp/symlink_tmp1' - ln_sf 'lns_dest', Pathname.new('tmp/symlink_tmp2') - ln_sf Pathname.new('lns_dest'), Pathname.new('tmp/symlink_tmp3') - } - end -end - - def test_mkdir - check_singleton :mkdir - - my_rm_rf 'tmpdatadir' - mkdir 'tmpdatadir' - assert_directory 'tmpdatadir' - Dir.rmdir 'tmpdatadir' - - mkdir 'tmpdatadir/' - assert_directory 'tmpdatadir' - Dir.rmdir 'tmpdatadir' - - mkdir 'tmp/mkdirdest' - assert_directory 'tmp/mkdirdest' - Dir.rmdir 'tmp/mkdirdest' - - mkdir 'tmp/tmp', :mode => 0700 - assert_directory 'tmp/tmp' - assert_equal 0700, (File.stat('tmp/tmp').mode & 0777) if have_file_perm? - Dir.rmdir 'tmp/tmp' - -if have_file_perm? - mkdir 'tmp/tmp', :mode => 07777 - assert_directory 'tmp/tmp' - assert_equal 07777, (File.stat('tmp/tmp').mode & 07777) - Dir.rmdir 'tmp/tmp' -end - -if lf_in_path_allowed? - mkdir "tmp-first-line\ntmp-second-line" - assert_directory "tmp-first-line\ntmp-second-line" - Dir.rmdir "tmp-first-line\ntmp-second-line" -end - - # pathname - assert_nothing_raised { - mkdir Pathname.new('tmp/tmpdirtmp') - mkdir [Pathname.new('tmp/tmpdirtmp2'), Pathname.new('tmp/tmpdirtmp3')] - } - end - - def test_mkdir_p - check_singleton :mkdir_p - - dirs = %w( - tmpdir/dir/ - tmpdir/dir/./ - tmpdir/dir/./.././dir/ - tmpdir/a - tmpdir/a/ - tmpdir/a/b - tmpdir/a/b/ - tmpdir/a/b/c/ - tmpdir/a/b/c - tmpdir/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a - tmpdir/a/a - ) - my_rm_rf 'tmpdir' - dirs.each do |d| - mkdir_p d - assert_directory d - assert_file_not_exist "#{d}/a" - assert_file_not_exist "#{d}/b" - assert_file_not_exist "#{d}/c" - my_rm_rf 'tmpdir' - end - dirs.each do |d| - mkdir_p d - assert_directory d - end - rm_rf 'tmpdir' - dirs.each do |d| - mkdir_p "#{Dir.pwd}/#{d}" - assert_directory d - end - rm_rf 'tmpdir' - - mkdir_p 'tmp/tmp/tmp', :mode => 0700 - assert_directory 'tmp/tmp' - assert_directory 'tmp/tmp/tmp' - assert_equal 0700, (File.stat('tmp/tmp').mode & 0777) if have_file_perm? - assert_equal 0700, (File.stat('tmp/tmp/tmp').mode & 0777) if have_file_perm? - rm_rf 'tmp/tmp' - - mkdir_p 'tmp/tmp', :mode => 0 - assert_directory 'tmp/tmp' - assert_equal 0, (File.stat('tmp/tmp').mode & 0777) if have_file_perm? - # DO NOT USE rm_rf here. - # (rm(1) try to chdir to parent directory, it fails to remove directory.) - Dir.rmdir 'tmp/tmp' - Dir.rmdir 'tmp' - -if have_file_perm? - mkdir_p 'tmp/tmp/tmp', :mode => 07777 - assert_directory 'tmp/tmp/tmp' - assert_equal 07777, (File.stat('tmp/tmp/tmp').mode & 07777) - Dir.rmdir 'tmp/tmp/tmp' - Dir.rmdir 'tmp/tmp' -end - - # pathname - assert_nothing_raised { - mkdir_p Pathname.new('tmp/tmp/tmp') - } - end - - def test_install - check_singleton :install - - File.open('tmp/aaa', 'w') {|f| f.puts 'aaa' } - File.open('tmp/bbb', 'w') {|f| f.puts 'bbb' } - install 'tmp/aaa', 'tmp/bbb', :mode => 0600 - assert_equal "aaa\n", File.read('tmp/bbb') - assert_equal 0600, (File.stat('tmp/bbb').mode & 0777) if have_file_perm? - - t = File.mtime('tmp/bbb') - install 'tmp/aaa', 'tmp/bbb' - assert_equal "aaa\n", File.read('tmp/bbb') - assert_equal 0600, (File.stat('tmp/bbb').mode & 0777) if have_file_perm? - assert_equal_time t, File.mtime('tmp/bbb') - - File.unlink 'tmp/aaa' - File.unlink 'tmp/bbb' - - # src==dest (1) same path - touch 'tmp/cptmp' - assert_raises(ArgumentError) { - install 'tmp/cptmp', 'tmp/cptmp' - } -if have_symlink? - # src==dest (2) symlink and its target - File.symlink 'cptmp', 'tmp/cptmp_symlink' - assert_raises(ArgumentError) { - install 'tmp/cptmp', 'tmp/cptmp_symlink' - } - assert_raises(ArgumentError) { - install 'tmp/cptmp_symlink', 'tmp/cptmp' - } - # src==dest (3) looped symlink - File.symlink 'symlink', 'tmp/symlink' - assert_raises(Errno::ELOOP) { - # File#install invokes open(2), always ELOOP must be raised - install 'tmp/symlink', 'tmp/symlink' - } -end - - # pathname - assert_nothing_raised { - rm_f 'tmp/a'; touch 'tmp/a' - install 'tmp/a', Pathname.new('tmp/b') - rm_f 'tmp/a'; touch 'tmp/a' - install Pathname.new('tmp/a'), 'tmp/b' - rm_f 'tmp/a'; touch 'tmp/a' - install Pathname.new('tmp/a'), Pathname.new('tmp/b') - rm_f 'tmp/a' - touch 'tmp/a' - touch 'tmp/b' - mkdir 'tmp/dest' - install [Pathname.new('tmp/a'), Pathname.new('tmp/b')], 'tmp/dest' - my_rm_rf 'tmp/dest' - mkdir 'tmp/dest' - install [Pathname.new('tmp/a'), Pathname.new('tmp/b')], Pathname.new('tmp/dest') - } - end - -if have_file_perm? - def test_chmod - check_singleton :chmod - - touch 'tmp/a' - chmod 0700, 'tmp/a' - assert_equal 0700, File.stat('tmp/a').mode & 0777 - chmod 0500, 'tmp/a' - assert_equal 0500, File.stat('tmp/a').mode & 0777 - end - - def test_chmod_R - check_singleton :chmod_R - - mkdir_p 'tmp/dir/dir' - touch %w( tmp/dir/file tmp/dir/dir/file ) - chmod_R 0700, 'tmp/dir' - assert_equal 0700, File.stat('tmp/dir').mode & 0777 - assert_equal 0700, File.stat('tmp/dir/file').mode & 0777 - assert_equal 0700, File.stat('tmp/dir/dir').mode & 0777 - assert_equal 0700, File.stat('tmp/dir/dir/file').mode & 0777 - chmod_R 0500, 'tmp/dir' - assert_equal 0500, File.stat('tmp/dir').mode & 0777 - assert_equal 0500, File.stat('tmp/dir/file').mode & 0777 - assert_equal 0500, File.stat('tmp/dir/dir').mode & 0777 - assert_equal 0500, File.stat('tmp/dir/dir/file').mode & 0777 - chmod_R 0700, 'tmp/dir' # to remove - end - - # FIXME: How can I test this method? - def test_chown - check_singleton :chown - end - - # FIXME: How can I test this method? - def test_chown_R - check_singleton :chown_R - end -end - - def test_copy_entry - check_singleton :copy_entry - - each_srcdest do |srcpath, destpath| - copy_entry srcpath, destpath - assert_same_file srcpath, destpath - assert_equal File.stat(srcpath).ftype, File.stat(destpath).ftype - end -if have_symlink? - # root is a symlink - File.symlink 'somewhere', 'tmp/symsrc' - copy_entry 'tmp/symsrc', 'tmp/symdest' - assert_symlink 'tmp/symdest' - assert_equal 'somewhere', File.readlink('tmp/symdest') - - # content is a symlink - mkdir 'tmp/dir' - File.symlink 'somewhere', 'tmp/dir/sym' - copy_entry 'tmp/dir', 'tmp/dirdest' - assert_directory 'tmp/dirdest' - assert_not_symlink 'tmp/dirdest' - assert_symlink 'tmp/dirdest/sym' - assert_equal 'somewhere', File.readlink('tmp/dirdest/sym') -end - end - - def test_copy_file - check_singleton :copy_file - - each_srcdest do |srcpath, destpath| - copy_file srcpath, destpath - assert_same_file srcpath, destpath - end - end - - def test_copy_stream - check_singleton :copy_stream - # IO - each_srcdest do |srcpath, destpath| - File.open(srcpath) {|src| - File.open(destpath, 'w') {|dest| - copy_stream src, dest - } - } - assert_same_file srcpath, destpath - end - - # duck typing test [ruby-dev:25369] - my_rm_rf 'tmp' - Dir.mkdir 'tmp' - each_srcdest do |srcpath, destpath| - File.open(srcpath) {|src| - File.open(destpath, 'w') {|dest| - copy_stream Stream.new(src), Stream.new(dest) - } - } - assert_same_file srcpath, destpath - end - end - - def test_remove_file - check_singleton :remove_file - File.open('data/tmp', 'w') {|f| f.puts 'dummy' } - remove_file 'data/tmp' - assert_file_not_exist 'data/tmp' -if have_file_perm? - File.open('data/tmp', 'w') {|f| f.puts 'dummy' } - File.chmod 0, 'data/tmp' - remove_file 'data/tmp' - assert_file_not_exist 'data/tmp' -end - end - - def test_remove_dir - check_singleton :remove_dir - Dir.mkdir 'data/tmpdir' - File.open('data/tmpdir/a', 'w') {|f| f.puts 'dummy' } - remove_dir 'data/tmpdir' - assert_file_not_exist 'data/tmpdir' -if have_file_perm? - Dir.mkdir 'data/tmpdir' - File.chmod 0555, 'data/tmpdir' - remove_dir 'data/tmpdir' - assert_file_not_exist 'data/tmpdir' -end - end - - def test_compare_file - check_singleton :compare_file - # FIXME - end - - def test_compare_stream - check_singleton :compare_stream - # FIXME - end - - class Stream - def initialize(f) - @f = f - end - - def read(n) - @f.read(n) - end - - def write(str) - @f.write str - end - end - - def test_uptodate? - check_singleton :uptodate? - prepare_time_data - Dir.chdir('data') { - assert( uptodate?('newest', %w(old newer notexist)) ) - assert( ! uptodate?('newer', %w(old newest notexist)) ) - assert( ! uptodate?('notexist', %w(old newest newer)) ) - } - - # pathname - touch 'tmp/a' - touch 'tmp/b' - touch 'tmp/c' - assert_nothing_raised { - uptodate? Pathname.new('tmp/a'), ['tmp/b', 'tmp/c'] - uptodate? 'tmp/a', [Pathname.new('tmp/b'), 'tmp/c'] - uptodate? 'tmp/a', ['tmp/b', Pathname.new('tmp/c')] - uptodate? Pathname.new('tmp/a'), [Pathname.new('tmp/b'), Pathname.new('tmp/c')] - } - end - - def test_cd - check_singleton :cd - end - - def test_chdir - check_singleton :chdir - end - - def test_getwd - check_singleton :getwd - end - - def test_identical? - check_singleton :identical? - end - - def test_link - check_singleton :link - end - - def test_makedirs - check_singleton :makedirs - end - - def test_mkpath - check_singleton :mkpath - end - - def test_move - check_singleton :move - end - - def test_rm_rf - check_singleton :rm_rf - end - - def test_rmdir - check_singleton :rmdir - end - - def test_rmtree - check_singleton :rmtree - end - - def test_safe_unlink - check_singleton :safe_unlink - end - - def test_symlink - check_singleton :symlink - end - - def test_touch - check_singleton :touch - end - - def test_collect_methods - end - - def test_commands - end - - def test_have_option? - end - - def test_options - end - - def test_options_of - end - -end |