1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
# frozen_string_literal: true
require File.expand_path("../helper", __FILE__)
require "rake/clean"
class TestRakeClean < Rake::TestCase # :nodoc:
def test_clean
if RUBY_ENGINE == "truffleruby" and RUBY_ENGINE_VERSION.start_with?("19.3.")
load "rake/clean.rb" # TruffleRuby 19.3 does not set self correctly with wrap=true
else
load "rake/clean.rb", true
end
assert Rake::Task["clean"], "Should define clean"
assert Rake::Task["clobber"], "Should define clobber"
assert Rake::Task["clobber"].prerequisites.include?("clean"),
"Clobber should require clean"
end
def test_cleanup
file_name = create_undeletable_file
out, _ = capture_output do
Rake::Cleaner.cleanup(file_name, verbose: false)
end
assert_match(/failed to remove/i, out)
ensure
remove_undeletable_file
end
def test_cleanup_ignores_missing_files
file_name = File.join(@tempdir, "missing_directory", "no_such_file")
out, _ = capture_output do
Rake::Cleaner.cleanup(file_name, verbose: false)
end
refute_match(/failed to remove/i, out)
end
def test_cleanup_trace
file_name = create_file
out, err = capture_output do
with_trace true do
Rake::Cleaner.cleanup(file_name)
end
end
if err == ""
# Current FileUtils
assert_equal "rm -r #{file_name}\n", out
else
# Old FileUtils
assert_equal "", out
assert_equal "rm -r #{file_name}\n", err
end
end
def test_cleanup_without_trace
file_name = create_file
out, err = capture_output do
with_trace false do
Rake::Cleaner.cleanup(file_name)
end
end
assert_empty out
assert_empty err
end
def test_cleanup_opt_overrides_trace_silent
file_name = create_file
out, err = capture_output do
with_trace true do
Rake::Cleaner.cleanup(file_name, verbose: false)
end
end
assert_empty out
assert_empty err
end
def test_cleanup_opt_overrides_trace_verbose
file_name = create_file
out, err = capture_output do
with_trace false do
Rake::Cleaner.cleanup(file_name, verbose: true)
end
end
if err == ""
assert_equal "rm -r #{file_name}\n", out
else
assert_equal "", out
assert_equal "rm -r #{file_name}\n", err
end
end
private
def create_file
dir_name = File.join(@tempdir, "deletedir")
file_name = File.join(dir_name, "deleteme")
FileUtils.mkdir(dir_name)
FileUtils.touch(file_name)
file_name
end
def create_undeletable_file
dir_name = File.join(@tempdir, "deletedir")
file_name = File.join(dir_name, "deleteme")
FileUtils.mkdir(dir_name)
FileUtils.touch(file_name)
FileUtils.chmod(0, file_name)
FileUtils.chmod(0, dir_name)
begin
FileUtils.chmod(0644, file_name)
rescue
file_name
else
omit "Permission to delete files is different on this system"
end
end
def remove_undeletable_file
dir_name = File.join(@tempdir, "deletedir")
file_name = File.join(dir_name, "deleteme")
FileUtils.chmod(0777, dir_name)
FileUtils.chmod(0777, file_name)
Rake::Cleaner.cleanup(file_name, verbose: false)
Rake::Cleaner.cleanup(dir_name, verbose: false)
end
def with_trace(value)
old, Rake.application.options.trace =
Rake.application.options.trace, value
# FileUtils caches the $stderr object, which breaks capture_output et. al.
# We hack it here where it's convenient to do so.
Rake::Cleaner.instance_variable_set :@fileutils_output, nil
yield
ensure
Rake.application.options.trace = old
end
end
|