forked from ruby/rake
/
test_rake_clean.rb
142 lines (119 loc) · 3.47 KB
/
test_rake_clean.rb
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
# 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_io 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_io 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_io 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
assert_output "", "" do
with_trace false do
Rake::Cleaner.cleanup(file_name)
end
end
end
def test_cleanup_opt_overrides_trace_silent
file_name = create_file
assert_output "", "" do
with_trace true do
Rake::Cleaner.cleanup(file_name, verbose: false)
end
end
end
def test_cleanup_opt_overrides_trace_verbose
file_name = create_file
out, err = capture_io 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
skip "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_io 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