summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/fileutils.rb8
-rw-r--r--test/fileutils/clobber.rb89
-rw-r--r--test/fileutils/test_dryrun.rb4
-rw-r--r--test/fileutils/test_nowrite.rb77
5 files changed, 106 insertions, 77 deletions
diff --git a/ChangeLog b/ChangeLog
index 3158fb5d83..bd184a141b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,7 @@
-Sat Feb 5 03:34:59 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Feb 5 03:37:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::LowMethods): make low level methods
+ in NoWrite and DryRun to do nothing. [ruby-dev:43129]
* test/fileutils/fileasserts.rb: add message arguments.
diff --git a/lib/fileutils.rb b/lib/fileutils.rb
index 73e2bfe3c3..1023ae3063 100644
--- a/lib/fileutils.rb
+++ b/lib/fileutils.rb
@@ -1519,6 +1519,12 @@ module FileUtils
OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
end
+ LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern)
+ module LowMethods
+ module_eval("private\n" + ::FileUtils::LOW_METHODS.map {|name| "def #{name}(*)end"}.join("\n"),
+ __FILE__, __LINE__)
+ end
+
METHODS = singleton_methods() - [:private_module_function,
:commands, :options, :have_option?, :options_of, :collect_method]
@@ -1554,6 +1560,7 @@ module FileUtils
#
module NoWrite
include FileUtils
+ include LowMethods
@fileutils_output = $stderr
@fileutils_label = ''
::FileUtils.collect_method(:noop).each do |name|
@@ -1580,6 +1587,7 @@ module FileUtils
#
module DryRun
include FileUtils
+ include LowMethods
@fileutils_output = $stderr
@fileutils_label = ''
::FileUtils.collect_method(:noop).each do |name|
diff --git a/test/fileutils/clobber.rb b/test/fileutils/clobber.rb
new file mode 100644
index 0000000000..b3359e91a4
--- /dev/null
+++ b/test/fileutils/clobber.rb
@@ -0,0 +1,89 @@
+require 'fileutils'
+require 'test/unit'
+require 'tmpdir'
+require_relative 'fileasserts'
+
+class TestFileUtils < Test::Unit::TestCase
+end
+
+module TestFileUtils::Clobber
+ def my_rm_rf(path)
+ if File.exist?('/bin/rm')
+ system %Q[/bin/rm -rf "#{path}"]
+ else
+ FileUtils.rm_rf path
+ end
+ end
+
+ SRC = 'data/src'
+ COPY = 'data/copy'
+
+ def setup
+ @prevdir = Dir.pwd
+ class << (@fileutils_output = "")
+ alias puts <<
+ end
+ tmproot = "#{Dir.tmpdir}/fileutils.rb.#{$$}"
+ Dir.mkdir tmproot unless File.directory?(tmproot)
+ Dir.chdir tmproot
+ my_rm_rf 'data'; Dir.mkdir 'data'
+ my_rm_rf 'tmp'; Dir.mkdir 'tmp'
+ File.open(SRC, 'w') {|f| f.puts 'dummy' }
+ File.open(COPY, 'w') {|f| f.puts 'dummy' }
+ end
+
+ def teardown
+ tmproot = Dir.pwd
+ Dir.chdir @prevdir
+ my_rm_rf tmproot
+ end
+
+ def test_cp
+ cp SRC, 'tmp/cp'
+ check 'tmp/cp'
+ end
+
+ def test_mv
+ mv SRC, 'tmp/mv'
+ check 'tmp/mv'
+ end
+
+ def check(dest, message=nil)
+ assert_file_not_exist dest, message
+ assert_file_exist SRC, message
+ assert_same_file SRC, COPY, message
+ end
+
+ def test_rm
+ rm SRC
+ assert_file_exist SRC
+ assert_same_file SRC, COPY
+ end
+
+ def test_rm_f
+ rm_f SRC
+ assert_file_exist SRC
+ assert_same_file SRC, COPY
+ end
+
+ def test_rm_rf
+ rm_rf SRC
+ assert_file_exist SRC
+ assert_same_file SRC, COPY
+ end
+
+ def test_mkdir
+ mkdir 'dir'
+ assert_file_not_exist 'dir'
+ end
+
+ def test_mkdir_p
+ mkdir 'dir/dir/dir'
+ assert_file_not_exist 'dir'
+ end
+
+ def test_copy_entry
+ copy_entry SRC, 'tmp/copy_entry'
+ check 'tmp/copy_entry', bug4331 = '[ruby-dev:43129]'
+ end
+end
diff --git a/test/fileutils/test_dryrun.rb b/test/fileutils/test_dryrun.rb
index e5ca25c9b4..85badbdb06 100644
--- a/test/fileutils/test_dryrun.rb
+++ b/test/fileutils/test_dryrun.rb
@@ -1,11 +1,13 @@
# $Id$
-require 'test/unit'
require 'fileutils'
+require 'test/unit'
+require_relative 'clobber'
class TestFileUtilsDryRun < Test::Unit::TestCase
include FileUtils::DryRun
+ include TestFileUtils::Clobber
def test_visibility
FileUtils::METHODS.each do |m|
diff --git a/test/fileutils/test_nowrite.rb b/test/fileutils/test_nowrite.rb
index 4575d3e7af..8ca9e89fa7 100644
--- a/test/fileutils/test_nowrite.rb
+++ b/test/fileutils/test_nowrite.rb
@@ -1,13 +1,13 @@
# $Id$
require 'fileutils'
-require_relative 'fileasserts'
-require 'tmpdir'
require 'test/unit'
+require_relative 'clobber'
class TestFileUtilsNoWrite < Test::Unit::TestCase
include FileUtils::NoWrite
+ include TestFileUtils::Clobber
def test_visibility
FileUtils::METHODS.each do |m|
@@ -23,77 +23,4 @@ class TestFileUtilsNoWrite < Test::Unit::TestCase
"FileUtils::NoWrite\##{m} is not private"
end
end
-
- def my_rm_rf(path)
- if File.exist?('/bin/rm')
- system %Q[/bin/rm -rf "#{path}"]
- else
- FileUtils.rm_rf path
- end
- end
-
- SRC = 'data/src'
- COPY = 'data/copy'
-
- def setup
- @prevdir = Dir.pwd
- tmproot = "#{Dir.tmpdir}/fileutils.rb.#{$$}"
- Dir.mkdir tmproot unless File.directory?(tmproot)
- Dir.chdir tmproot
- my_rm_rf 'data'; Dir.mkdir 'data'
- my_rm_rf 'tmp'; Dir.mkdir 'tmp'
- File.open(SRC, 'w') {|f| f.puts 'dummy' }
- File.open(COPY, 'w') {|f| f.puts 'dummy' }
- end
-
- def teardown
- tmproot = Dir.pwd
- Dir.chdir @prevdir
- my_rm_rf tmproot
- end
-
- def test_cp
- cp SRC, 'tmp/cp'
- check 'tmp/cp'
- end
-
- def test_mv
- mv SRC, 'tmp/mv'
- check 'tmp/mv'
- end
-
- def check(dest)
- assert_file_not_exist dest
- assert_file_exist SRC
- assert_same_file SRC, COPY
- end
-
- def test_rm
- rm SRC
- assert_file_exist SRC
- assert_same_file SRC, COPY
- end
-
- def test_rm_f
- rm_f SRC
- assert_file_exist SRC
- assert_same_file SRC, COPY
- end
-
- def test_rm_rf
- rm_rf SRC
- assert_file_exist SRC
- assert_same_file SRC, COPY
- end
-
- def test_mkdir
- mkdir 'dir'
- assert_file_not_exist 'dir'
- end
-
- def test_mkdir_p
- mkdir 'dir/dir/dir'
- assert_file_not_exist 'dir'
- end
-
end