aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMarkus Reiter2017-02-08 09:58:38 +0100
committerMarkus Reiter2017-02-10 17:19:19 +0100
commitd9d15d3670fa9f425f852feac0868ca2ace8f813 (patch)
tree99bc47bb717863d9356ae57278e47f991d882412 /Library
parent17fd7d6ebbfcddeb0be7f504600d69f32343dd86 (diff)
downloadbrew-d9d15d3670fa9f425f852feac0868ca2ace8f813.tar.bz2
Convert `Pkg` test to spec.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cask/spec/cask/pkg_spec.rb114
-rw-r--r--Library/Homebrew/cask/spec/spec_helper.rb8
-rw-r--r--Library/Homebrew/cask/test/cask/pkg_test.rb111
3 files changed, 122 insertions, 111 deletions
diff --git a/Library/Homebrew/cask/spec/cask/pkg_spec.rb b/Library/Homebrew/cask/spec/cask/pkg_spec.rb
new file mode 100644
index 000000000..2f0ba0839
--- /dev/null
+++ b/Library/Homebrew/cask/spec/cask/pkg_spec.rb
@@ -0,0 +1,114 @@
+require "spec_helper"
+
+describe Hbc::Pkg do
+ describe "uninstall" do
+ let(:fake_system_command) { Hbc::NeverSudoSystemCommand }
+ let(:empty_response) { double(stdout: "") }
+ let(:pkg) { described_class.new("my.fake.pkg", fake_system_command) }
+
+ it "removes files and dirs referenced by the pkg" do
+ some_files = Array.new(3) { Pathname.new(Tempfile.new("testfile").path) }
+ allow(pkg).to receive(:pkgutil_bom_files).and_return(some_files)
+
+ some_specials = Array.new(3) { Pathname.new(Tempfile.new("testfile").path) }
+ allow(pkg).to receive(:pkgutil_bom_specials).and_return(some_specials)
+
+ some_dirs = Array.new(3) { Pathname.new(Dir.mktmpdir) }
+ allow(pkg).to receive(:pkgutil_bom_dirs).and_return(some_dirs)
+
+ allow(pkg).to receive(:forget)
+
+ pkg.uninstall
+
+ some_files.each do |file|
+ expect(file).not_to exist
+ end
+
+ some_dirs.each do |dir|
+ expect(dir).not_to exist
+ end
+ end
+
+ context "pkgutil" do
+ let(:fake_system_command) { class_double(Hbc::SystemCommand) }
+
+ it "forgets the pkg" do
+ allow(fake_system_command).to receive(:run!).with(
+ "/usr/sbin/pkgutil",
+ args: ["--only-files", "--files", "my.fake.pkg"]
+ ).and_return(empty_response)
+
+ allow(fake_system_command).to receive(:run!).with(
+ "/usr/sbin/pkgutil",
+ args: ["--only-dirs", "--files", "my.fake.pkg"]
+ ).and_return(empty_response)
+
+ allow(fake_system_command).to receive(:run!).with(
+ "/usr/sbin/pkgutil",
+ args: ["--files", "my.fake.pkg"]
+ ).and_return(empty_response)
+
+ expect(fake_system_command).to receive(:run!).with(
+ "/usr/sbin/pkgutil",
+ args: ["--forget", "my.fake.pkg"],
+ sudo: true
+ )
+
+ pkg.uninstall
+ end
+ end
+
+ it "removes broken symlinks" do
+ fake_dir = Pathname.new(Dir.mktmpdir)
+ fake_file = fake_dir.join("ima_file").tap { |path| FileUtils.touch(path) }
+
+ intact_symlink = fake_dir.join("intact_symlink").tap { |path| path.make_symlink(fake_file) }
+ broken_symlink = fake_dir.join("broken_symlink").tap { |path| path.make_symlink("im_nota_file") }
+
+ allow(pkg).to receive(:pkgutil_bom_specials).and_return([])
+ allow(pkg).to receive(:pkgutil_bom_files).and_return([])
+ allow(pkg).to receive(:pkgutil_bom_dirs).and_return([fake_dir])
+ allow(pkg).to receive(:forget)
+
+ pkg.uninstall
+
+ expect(intact_symlink).to exist
+ expect(broken_symlink).not_to exist
+ expect(fake_dir).to exist
+ end
+
+ it "removes files incorrectly reportes as directories" do
+ fake_dir = Pathname.new(Dir.mktmpdir)
+ fake_file = fake_dir.join("ima_file_pretending_to_be_a_dir").tap { |path| FileUtils.touch(path) }
+
+ allow(pkg).to receive(:pkgutil_bom_specials).and_return([])
+ allow(pkg).to receive(:pkgutil_bom_files).and_return([])
+ allow(pkg).to receive(:pkgutil_bom_dirs).and_return([fake_file, fake_dir])
+ allow(pkg).to receive(:forget)
+
+ pkg.uninstall
+
+ expect(fake_file).not_to exist
+ expect(fake_dir).not_to exist
+ end
+
+ it "snags permissions on ornery dirs, but returns them afterwards" do
+ fake_dir = Pathname.new(Dir.mktmpdir)
+ fake_file = fake_dir.join("ima_installed_file").tap { |path| FileUtils.touch(path) }
+ fake_dir.chmod(0000)
+
+ allow(pkg).to receive(:pkgutil_bom_specials).and_return([])
+ allow(pkg).to receive(:pkgutil_bom_files).and_return([fake_file])
+ allow(pkg).to receive(:pkgutil_bom_dirs).and_return([fake_dir])
+ allow(pkg).to receive(:forget)
+
+ shutup do
+ pkg.uninstall
+ end
+
+ expect(fake_dir).to be_a_directory
+ expect(fake_file).not_to be_a_file
+ expect((fake_dir.stat.mode % 01000).to_s(8)).to eq("0")
+ end
+ end
+end
diff --git a/Library/Homebrew/cask/spec/spec_helper.rb b/Library/Homebrew/cask/spec/spec_helper.rb
index dc9edec3d..d9f29c828 100644
--- a/Library/Homebrew/cask/spec/spec_helper.rb
+++ b/Library/Homebrew/cask/spec/spec_helper.rb
@@ -41,3 +41,11 @@ RSpec.configure do |config|
]
end
end
+
+module Hbc
+ class NeverSudoSystemCommand < SystemCommand
+ def self.run(command, options = {})
+ super(command, options.merge(sudo: false))
+ end
+ end
+end
diff --git a/Library/Homebrew/cask/test/cask/pkg_test.rb b/Library/Homebrew/cask/test/cask/pkg_test.rb
deleted file mode 100644
index ac43f9e63..000000000
--- a/Library/Homebrew/cask/test/cask/pkg_test.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-require "test_helper"
-
-describe Hbc::Pkg do
- describe "uninstall" do
- it "removes files and dirs referenced by the pkg" do
- pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand)
-
- some_files = Array.new(3) { Pathname.new(Tempfile.new("testfile").path) }
- pkg.stubs(:pkgutil_bom_files).returns some_files
-
- some_specials = Array.new(3) { Pathname.new(Tempfile.new("testfile").path) }
- pkg.stubs(:pkgutil_bom_specials).returns some_specials
-
- some_dirs = Array.new(3) { Pathname.new(Dir.mktmpdir) }
- pkg.stubs(:pkgutil_bom_dirs).returns some_dirs
-
- pkg.stubs(:forget)
-
- pkg.uninstall
-
- some_files.each do |file|
- file.wont_be :exist?
- end
-
- some_dirs.each do |dir|
- dir.wont_be :exist?
- end
- end
-
- it "forgets the pkg" do
- pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::FakeSystemCommand)
-
- Hbc::FakeSystemCommand.stubs_command(
- ["/usr/sbin/pkgutil", "--only-files", "--files", "my.fake.pkg"]
- )
- Hbc::FakeSystemCommand.stubs_command(
- ["/usr/sbin/pkgutil", "--only-dirs", "--files", "my.fake.pkg"]
- )
- Hbc::FakeSystemCommand.stubs_command(
- ["/usr/sbin/pkgutil", "--files", "my.fake.pkg"]
- )
-
- Hbc::FakeSystemCommand.expects_command(
- ["/usr/bin/sudo", "-E", "--", "/usr/sbin/pkgutil", "--forget", "my.fake.pkg"]
- )
-
- pkg.uninstall
- end
-
- it "cleans broken symlinks, but leaves AOK symlinks" do
- pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand)
-
- fake_dir = Pathname.new(Dir.mktmpdir)
- fake_file = fake_dir.join("ima_file").tap { |path| FileUtils.touch(path) }
-
- intact_symlink = fake_dir.join("intact_symlink").tap { |path| path.make_symlink(fake_file) }
- broken_symlink = fake_dir.join("broken_symlink").tap { |path| path.make_symlink("im_nota_file") }
-
- pkg.stubs(:pkgutil_bom_specials).returns([])
- pkg.stubs(:pkgutil_bom_files).returns([])
- pkg.stubs(:pkgutil_bom_dirs).returns([fake_dir])
- pkg.stubs(:forget)
-
- pkg.uninstall
-
- intact_symlink.must_be :exist?
- broken_symlink.wont_be :exist?
- fake_dir.must_be :exist?
- end
-
- it "cleans files incorrectly reported as directories" do
- pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand)
-
- fake_dir = Pathname.new(Dir.mktmpdir)
- fake_file = fake_dir.join("ima_file_pretending_to_be_a_dir").tap { |path| FileUtils.touch(path) }
-
- pkg.stubs(:pkgutil_bom_specials).returns([])
- pkg.stubs(:pkgutil_bom_files).returns([])
- pkg.stubs(:pkgutil_bom_dirs).returns([fake_file, fake_dir])
- pkg.stubs(:forget)
-
- pkg.uninstall
-
- fake_file.wont_be :exist?
- fake_dir.wont_be :exist?
- end
-
- it "snags permissions on ornery dirs, but returns them afterwords" do
- pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand)
-
- fake_dir = Pathname.new(Dir.mktmpdir)
-
- fake_file = fake_dir.join("ima_installed_file").tap { |path| FileUtils.touch(path) }
-
- fake_dir.chmod(0000)
-
- pkg.stubs(:pkgutil_bom_specials).returns([])
- pkg.stubs(:pkgutil_bom_files).returns([fake_file])
- pkg.stubs(:pkgutil_bom_dirs).returns([fake_dir])
- pkg.stubs(:forget)
-
- shutup do
- pkg.uninstall
- end
-
- fake_dir.must_be :directory?
- fake_file.wont_be :file?
- (fake_dir.stat.mode % 01000).to_s(8).must_equal "0"
- end
- end
-end