From 18c0a86cc680929bbd8c48f4f45a197e3e68c70a Mon Sep 17 00:00:00 2001 From: aamine Date: Sun, 8 Aug 2004 21:35:11 +0000 Subject: * lib/fileutils.rb (cp_r): copies symlink to symlink, except cp_r root. * lib/fileutils.rb: new method FileUtils.copy_entry. * test/fileutils/test_fileutils.rb: more cp_r tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6747 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/fileutils/fileasserts.rb | 39 ++++++++++++++++++++++++-------- test/fileutils/test_fileutils.rb | 49 ++++++++++++++++++++++++++++++++++------ 2 files changed, 72 insertions(+), 16 deletions(-) (limited to 'test/fileutils') diff --git a/test/fileutils/fileasserts.rb b/test/fileutils/fileasserts.rb index 2a96351bc2..ea03534545 100644 --- a/test/fileutils/fileasserts.rb +++ b/test/fileutils/fileasserts.rb @@ -1,12 +1,10 @@ -# -# test/fileutils/fileasserts.rb -# +# $Id$ module Test module Unit module Assertions # redefine - def assert_same_file( from, to ) + def assert_same_file(from, to) _wrap_assertion { assert_block("file #{from} != #{to}") { File.read(from) == File.read(to) @@ -14,7 +12,22 @@ module Test } end - def assert_file_exist( path ) + def assert_same_entry(from, to) + _wrap_assertion { + assert_block("entry #{from} != #{to}") { + a = File.stat(from) + b = File.stat(to) + + a.mode == b.mode and + #a.atime == b.atime and + a.mtime == b.mtime and + a.uid == b.uid and + a.gid == b.gid + } + } + end + + def assert_file_exist(path) _wrap_assertion { assert_block("file not exist: #{path}") { File.exist?(path) @@ -22,7 +35,7 @@ module Test } end - def assert_file_not_exist( path ) + def assert_file_not_exist(path) _wrap_assertion { assert_block("file not exist: #{path}") { not File.exist?(path) @@ -30,7 +43,7 @@ module Test } end - def assert_directory( path ) + def assert_directory(path) _wrap_assertion { assert_block("is not directory: #{path}") { File.directory?(path) @@ -38,14 +51,22 @@ module Test } end - def assert_symlink( path ) + def assert_symlink(path) _wrap_assertion { - assert_block("is no symlink: #{path}") { + assert_block("is not a symlink: #{path}") { File.symlink?(path) } } end + def assert_not_symlink(path) + _wrap_assertion { + assert_block("is a symlink: #{path}") { + not File.symlink?(path) + } + } + end + end end end diff --git a/test/fileutils/test_fileutils.rb b/test/fileutils/test_fileutils.rb index 950e20499c..bacbb51aa8 100644 --- a/test/fileutils/test_fileutils.rb +++ b/test/fileutils/test_fileutils.rb @@ -1,6 +1,4 @@ -# -# test/fileutils/test_fileutils.rb -# +# $Id$ require 'fileutils' require 'fileasserts' @@ -96,13 +94,12 @@ class TestFileUtils end - TARGETS = %w( data/same data/all data/random data/zero ) + TARGETS = %w( data/a data/all data/random data/zero ) def prepare_data_file - same_chars = 'a' * 50 - File.open('data/same', 'w') {|f| + File.open('data/a', 'w') {|f| 32.times do - f.puts same_chars + f.puts 'a' * 50 end } @@ -236,6 +233,44 @@ end assert_same_file fname, "tmp/#{fname}" end + cp_r 'data', 'tmp2', :preserve => true + TARGETS.each do |fname| + assert_same_entry fname, "tmp/#{fname}" + assert_same_file fname, "tmp/#{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' + rm_rf 'tmp/cpr_src' + 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/symlink' + assert_equal 'SLdest', File.readlink('tmp/cpr_dest2/symlink') +end + # pathname touch 'tmp/cprtmp' assert_nothing_raised { -- cgit v1.2.3