From d9d15d3670fa9f425f852feac0868ca2ace8f813 Mon Sep 17 00:00:00 2001
From: Markus Reiter <me@reitermark.us>
Date: Wed, 8 Feb 2017 09:58:38 +0100
Subject: [PATCH] Convert `Pkg` test to spec.

---
 Library/Homebrew/cask/spec/cask/pkg_spec.rb | 114 ++++++++++++++++++++
 Library/Homebrew/cask/spec/spec_helper.rb   |   8 ++
 Library/Homebrew/cask/test/cask/pkg_test.rb | 111 -------------------
 3 files changed, 122 insertions(+), 111 deletions(-)
 create mode 100644 Library/Homebrew/cask/spec/cask/pkg_spec.rb
 delete mode 100644 Library/Homebrew/cask/test/cask/pkg_test.rb

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 0000000000..2f0ba0839c
--- /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 dc9edec3d2..d9f29c828d 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 ac43f9e633..0000000000
--- 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
-- 
GitLab