aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/cleaner_spec.rb
diff options
context:
space:
mode:
authorMarkus Reiter2017-02-27 12:38:38 +0100
committerGitHub2017-02-27 12:38:38 +0100
commit7db5f7ce60e0f5a2d70d5009d9cae3a2b19afe47 (patch)
tree724f909d7b19a55e6f5eab87277f291a31796418 /Library/Homebrew/test/cleaner_spec.rb
parentd9e4addb007ecd608fed4fbeaee57b968db63b15 (diff)
parent8bea5de173a279cd094b1551760b67f4ba21aa7b (diff)
downloadbrew-7db5f7ce60e0f5a2d70d5009d9cae3a2b19afe47.tar.bz2
Merge pull request #2204 from reitermarkus/spec-cleaner
Convert Cleaner test to spec.
Diffstat (limited to 'Library/Homebrew/test/cleaner_spec.rb')
-rw-r--r--Library/Homebrew/test/cleaner_spec.rb224
1 files changed, 224 insertions, 0 deletions
diff --git a/Library/Homebrew/test/cleaner_spec.rb b/Library/Homebrew/test/cleaner_spec.rb
new file mode 100644
index 000000000..116f00dff
--- /dev/null
+++ b/Library/Homebrew/test/cleaner_spec.rb
@@ -0,0 +1,224 @@
+require "cleaner"
+require "formula"
+
+describe Cleaner do
+ include FileUtils
+
+ subject { described_class.new(f) }
+ let(:f) { formula("cleaner_test") { url "foo-1.0" } }
+
+ before(:each) do
+ f.prefix.mkpath
+ end
+
+ describe "#clean" do
+ it "cleans files" do
+ f.bin.mkpath
+ f.lib.mkpath
+ cp "#{TEST_FIXTURE_DIR}/mach/a.out", f.bin
+ cp Dir["#{TEST_FIXTURE_DIR}/mach/*.dylib"], f.lib
+
+ subject.clean
+
+ expect((f.bin/"a.out").stat.mode).to eq(0100555)
+ expect((f.lib/"fat.dylib").stat.mode).to eq(0100444)
+ expect((f.lib/"x86_64.dylib").stat.mode).to eq(0100444)
+ expect((f.lib/"i386.dylib").stat.mode).to eq(0100444)
+ end
+
+ it "prunes the prefix if it is empty" do
+ subject.clean
+ expect(f.prefix).not_to be_a_directory
+ end
+
+ it "prunes empty directories" do
+ subdir = f.bin/"subdir"
+ subdir.mkpath
+
+ subject.clean
+
+ expect(f.bin).not_to be_a_directory
+ expect(subdir).not_to be_a_directory
+ end
+
+ it "removes a symlink when its target was pruned before" do
+ dir = f.prefix/"b"
+ symlink = f.prefix/"a"
+
+ dir.mkpath
+ ln_s dir.basename, symlink
+
+ subject.clean
+
+ expect(dir).not_to exist
+ expect(symlink).not_to be_a_symlink
+ expect(symlink).not_to exist
+ end
+
+ it "removes symlinks pointing to an empty directory" do
+ dir = f.prefix/"b"
+ symlink = f.prefix/"c"
+
+ dir.mkpath
+ ln_s dir.basename, symlink
+
+ subject.clean
+
+ expect(dir).not_to exist
+ expect(symlink).not_to be_a_symlink
+ expect(symlink).not_to exist
+ end
+
+ it "removes broken symlinks" do
+ symlink = f.prefix/"symlink"
+ ln_s "target", symlink
+
+ subject.clean
+
+ expect(symlink).not_to be_a_symlink
+ end
+
+ it "removes '.la' files" do
+ file = f.lib/"foo.la"
+
+ f.lib.mkpath
+ touch file
+
+ subject.clean
+
+ expect(file).not_to exist
+ end
+
+ it "removes 'perllocal' files" do
+ file = f.lib/"perl5/darwin-thread-multi-2level/perllocal.pod"
+
+ (f.lib/"perl5/darwin-thread-multi-2level").mkpath
+ touch file
+
+ subject.clean
+
+ expect(file).not_to exist
+ end
+
+ it "removes '.packlist' files" do
+ file = f.lib/"perl5/darwin-thread-multi-2level/auto/test/.packlist"
+
+ (f.lib/"perl5/darwin-thread-multi-2level/auto/test").mkpath
+ touch file
+
+ subject.clean
+
+ expect(file).not_to exist
+ end
+
+ it "removes 'charset.alias' files" do
+ file = f.lib/"charset.alias"
+
+ f.lib.mkpath
+ touch file
+
+ subject.clean
+
+ expect(file).not_to exist
+ end
+ end
+
+ describe "::skip_clean" do
+ it "adds paths that should be skipped" do
+ f.class.skip_clean "bin"
+ f.bin.mkpath
+
+ subject.clean
+
+ expect(f.bin).to be_a_directory
+ end
+
+ it "also skips empty sub-directories under the added paths" do
+ f.class.skip_clean "bin"
+ subdir = f.bin/"subdir"
+ subdir.mkpath
+
+ subject.clean
+
+ expect(f.bin).to be_a_directory
+ expect(subdir).to be_a_directory
+ end
+
+ it "allows skipping broken symlinks" do
+ f.class.skip_clean "symlink"
+ symlink = f.prefix/"symlink"
+ ln_s "target", symlink
+
+ subject.clean
+
+ expect(symlink).to be_a_symlink
+ end
+
+ it "allows skipping symlinks pointing to an empty directory" do
+ f.class.skip_clean "c"
+ dir = f.prefix/"b"
+ symlink = f.prefix/"c"
+
+ dir.mkpath
+ ln_s dir.basename, symlink
+
+ subject.clean
+
+ expect(dir).not_to exist
+ expect(symlink).to be_a_symlink
+ expect(symlink).not_to exist
+ end
+
+ it "allows skipping symlinks whose target was pruned before" do
+ f.class.skip_clean "a"
+ dir = f.prefix/"b"
+ symlink = f.prefix/"a"
+
+ dir.mkpath
+ ln_s dir.basename, symlink
+
+ subject.clean
+
+ expect(dir).not_to exist
+ expect(symlink).to be_a_symlink
+ expect(symlink).not_to exist
+ end
+
+ it "allows skipping '.la' files" do
+ file = f.lib/"foo.la"
+
+ f.class.skip_clean :la
+ f.lib.mkpath
+ touch file
+
+ subject.clean
+
+ expect(file).to exist
+ end
+
+ it "allows skipping sub-directories" do
+ dir = f.lib/"subdir"
+ f.class.skip_clean "lib/subdir"
+
+ dir.mkpath
+
+ subject.clean
+
+ expect(dir).to be_a_directory
+ end
+
+ it "allows skipping paths relative to prefix" do
+ dir1 = f.bin/"a"
+ dir2 = f.lib/"bin/a"
+
+ f.class.skip_clean "bin/a"
+ dir1.mkpath
+ dir2.mkpath
+
+ subject.clean
+
+ expect(dir1).to exist
+ expect(dir2).not_to exist
+ end
+ end
+end