From 9c8f7138f35625878e017559c896441fda6f357c Mon Sep 17 00:00:00 2001
From: Markus Reiter <me@reitermark.us>
Date: Tue, 13 Jun 2017 17:14:01 +0200
Subject: [PATCH] Add `casks` method to iterate through arguments.

---
 .../cask/lib/hbc/cli/abstract_command.rb      | 37 ++++++++++++++++
 Library/Homebrew/cask/lib/hbc/cli/audit.rb    |  7 +--
 Library/Homebrew/cask/lib/hbc/cli/cat.rb      | 10 +++--
 Library/Homebrew/cask/lib/hbc/cli/cleanup.rb  |  2 +-
 Library/Homebrew/cask/lib/hbc/cli/edit.rb     | 10 +++--
 Library/Homebrew/cask/lib/hbc/cli/fetch.rb    |  9 ++--
 Library/Homebrew/cask/lib/hbc/cli/home.rb     |  4 +-
 Library/Homebrew/cask/lib/hbc/cli/info.rb     |  6 +--
 Library/Homebrew/cask/lib/hbc/cli/install.rb  | 32 ++------------
 .../cask/lib/hbc/cli/internal_dump.rb         | 18 +-------
 .../cask/lib/hbc/cli/internal_stanza.rb       | 35 ++++-----------
 Library/Homebrew/cask/lib/hbc/cli/list.rb     | 44 +++++--------------
 Library/Homebrew/cask/lib/hbc/cli/outdated.rb |  4 +-
 .../Homebrew/cask/lib/hbc/cli/reinstall.rb    | 26 +++--------
 Library/Homebrew/cask/lib/hbc/cli/style.rb    |  2 +-
 .../Homebrew/cask/lib/hbc/cli/uninstall.rb    | 13 +++---
 Library/Homebrew/cask/lib/hbc/cli/zap.rb      |  9 ++--
 Library/Homebrew/test/cask/cli/audit_spec.rb  |  2 +-
 Library/Homebrew/test/cask/cli/cat_spec.rb    |  6 +--
 Library/Homebrew/test/cask/cli/fetch_spec.rb  |  2 +-
 .../Homebrew/test/cask/cli/install_spec.rb    |  6 +--
 Library/Homebrew/test/cask/cli/style_spec.rb  |  2 +-
 .../Homebrew/test/cask/cli/uninstall_spec.rb  | 20 ++++-----
 Library/Homebrew/test/cask/cli/zap_spec.rb    |  6 +--
 24 files changed, 128 insertions(+), 184 deletions(-)

diff --git a/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb b/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb
index c83fc3e426..77f85301eb 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb
@@ -41,6 +41,43 @@ module Hbc
       def initialize(*args)
         @args = process_arguments(*args)
       end
+
+      def self.warn_unavailable_with_suggestion(cask_token, e)
+        exact_match, partial_matches = Search.search(cask_token)
+        error_message = e.message
+        if exact_match
+          error_message.concat(" Did you mean:\n#{exact_match}")
+        elsif !partial_matches.empty?
+          error_message.concat(" Did you mean one of:\n")
+                       .concat(Formatter.columns(partial_matches.take(20)))
+        end
+        onoe error_message
+      end
+
+      private
+
+      def casks(alternative: -> { [] })
+        return to_enum(:casks, alternative: alternative) unless block_given?
+
+        count = 0
+
+        casks = args.empty? ? alternative.call : args
+
+        casks.each do |cask_or_token|
+          begin
+            yield cask_or_token.respond_to?(:token) ? cask_or_token : CaskLoader.load(cask_or_token)
+            count += 1
+          rescue CaskUnavailableError => e
+            cask_token = cask_or_token
+            self.class.warn_unavailable_with_suggestion cask_token, e
+          rescue CaskError => e
+            onoe e.message
+          end
+        end
+
+        return :empty if casks.length.zero?
+        (count == casks.length) ? :complete : :incomplete
+      end
     end
   end
 end
diff --git a/Library/Homebrew/cask/lib/hbc/cli/audit.rb b/Library/Homebrew/cask/lib/hbc/cli/audit.rb
index 74d1ebfa77..35d82800c6 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/audit.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/audit.rb
@@ -9,11 +9,8 @@ module Hbc
       end
 
       def run
-        casks_to_audit = args.empty? ? Hbc.all : args.map(&CaskLoader.public_method(:load))
-
-        failed_casks = casks_to_audit.reject do |cask|
-          audit(cask)
-        end
+        failed_casks = casks(alternative: -> { Hbc.all })
+                       .reject { |cask| audit(cask) }
 
         return if failed_casks.empty?
         raise CaskError, "audit failed for casks: #{failed_casks.join(" ")}"
diff --git a/Library/Homebrew/cask/lib/hbc/cli/cat.rb b/Library/Homebrew/cask/lib/hbc/cli/cat.rb
index e68481b46b..d08c87bea2 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/cat.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/cat.rb
@@ -7,10 +7,12 @@ module Hbc
       end
 
       def run
-        args.each do |cask_token|
-          cask_path = CaskLoader.path(cask_token)
-          raise CaskUnavailableError, cask_token.to_s unless cask_path.exist?
-          puts File.open(cask_path, &:read)
+        raise CaskError, "Cat incomplete." if cat_casks == :incomplete
+      end
+
+      def cat_casks
+        casks.each do |cask|
+          puts File.open(cask.sourcefile_path, &:read)
         end
       end
 
diff --git a/Library/Homebrew/cask/lib/hbc/cli/cleanup.rb b/Library/Homebrew/cask/lib/hbc/cli/cleanup.rb
index 40b37dd5dd..356162db55 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/cleanup.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/cleanup.rb
@@ -20,7 +20,7 @@ module Hbc
       end
 
       def run
-        remove_cache_files(*@args)
+        remove_cache_files(*args)
       end
 
       def cache_files
diff --git a/Library/Homebrew/cask/lib/hbc/cli/edit.rb b/Library/Homebrew/cask/lib/hbc/cli/edit.rb
index 77238d209e..b9485886c9 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/edit.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/edit.rb
@@ -9,10 +9,12 @@ module Hbc
 
       def run
         cask_token = args.first
-        cask_path = CaskLoader.path(cask_token)
-
-        unless cask_path.exist?
-          raise CaskUnavailableError.new(cask_token, "Run #{Formatter.identifier("brew cask create #{cask_token}")} to create a new Cask.")
+        cask_path = begin
+          CaskLoader.load(cask_token).sourcefile_path
+        rescue CaskUnavailableError => e
+          reason = e.reason.empty? ? "" : "#{e.reason} "
+          reason.concat("Run #{Formatter.identifier("brew cask create #{e.token}")} to create a new Cask.")
+          raise e.class.new(e.token, reason)
         end
 
         odebug "Opening editor for Cask #{cask_token}"
diff --git a/Library/Homebrew/cask/lib/hbc/cli/fetch.rb b/Library/Homebrew/cask/lib/hbc/cli/fetch.rb
index 2c1cc5f66e..e31b1a17c1 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/fetch.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/fetch.rb
@@ -9,9 +9,12 @@ module Hbc
       end
 
       def run
-        args.each do |cask_token|
-          ohai "Downloading external files for Cask #{cask_token}"
-          cask = CaskLoader.load(cask_token)
+        raise CaskError, "Fetch incomplete." if fetch_casks == :incomplete
+      end
+
+      def fetch_casks
+        casks.each do |cask|
+          ohai "Downloading external files for Cask #{cask}"
           downloaded_path = Download.new(cask, force: force?).perform
           Verify.all(cask, downloaded_path)
           ohai "Success! Downloaded to -> #{downloaded_path}"
diff --git a/Library/Homebrew/cask/lib/hbc/cli/home.rb b/Library/Homebrew/cask/lib/hbc/cli/home.rb
index 009bc1e3e5..d496e309ea 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/home.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/home.rb
@@ -2,9 +2,7 @@ module Hbc
   class CLI
     class Home < AbstractCommand
       def run
-        casks = args.map(&CaskLoader.public_method(:load))
-
-        if casks.empty?
+        if casks.none?
           odebug "Opening project homepage"
           self.class.open_url "https://caskroom.github.io/"
         else
diff --git a/Library/Homebrew/cask/lib/hbc/cli/info.rb b/Library/Homebrew/cask/lib/hbc/cli/info.rb
index 623c4b7378..d26747e176 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/info.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/info.rb
@@ -7,10 +7,8 @@ module Hbc
       end
 
       def run
-        args.each do |cask_token|
-          odebug "Getting info for Cask #{cask_token}"
-          cask = CaskLoader.load(cask_token)
-
+        casks.each do |cask|
+          odebug "Getting info for Cask #{cask}"
           self.class.info(cask)
         end
       end
diff --git a/Library/Homebrew/cask/lib/hbc/cli/install.rb b/Library/Homebrew/cask/lib/hbc/cli/install.rb
index 4ac98d1deb..0f1a5dd34c 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/install.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/install.rb
@@ -10,47 +10,21 @@ module Hbc
       end
 
       def run
-        retval = install_casks
-        # retval is ternary: true/false/nil
-
-        raise CaskError, "nothing to install" if retval.nil?
-        raise CaskError, "install incomplete" unless retval
+        raise CaskError, "Install incomplete." if install_casks == :incomplete
       end
 
       def install_casks
-        count = 0
-        args.each do |cask_token|
+        casks.each do |cask|
           begin
-            cask = CaskLoader.load(cask_token)
             Installer.new(cask, binaries:       binaries?,
-                                verbose: verbose?,
+                                verbose:        verbose?,
                                 force:          force?,
                                 skip_cask_deps: skip_cask_deps?,
                                 require_sha:    require_sha?).install
-            count += 1
           rescue CaskAlreadyInstalledError => e
             opoo e.message
-            count += 1
-          rescue CaskUnavailableError => e
-            self.class.warn_unavailable_with_suggestion cask_token, e
-          rescue CaskError => e
-            onoe e.message
           end
         end
-
-        count.zero? ? nil : count == args.length
-      end
-
-      def self.warn_unavailable_with_suggestion(cask_token, e)
-        exact_match, partial_matches = Search.search(cask_token)
-        error_message = e.message
-        if exact_match
-          error_message.concat(" Did you mean:\n#{exact_match}")
-        elsif !partial_matches.empty?
-          error_message.concat(" Did you mean one of:\n")
-                       .concat(Formatter.columns(partial_matches.take(20)))
-        end
-        onoe error_message
       end
 
       def self.help
diff --git a/Library/Homebrew/cask/lib/hbc/cli/internal_dump.rb b/Library/Homebrew/cask/lib/hbc/cli/internal_dump.rb
index 78dbf1622b..e21ce86b6c 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/internal_dump.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/internal_dump.rb
@@ -7,25 +7,11 @@ module Hbc
       end
 
       def run
-        retval = dump_casks
-        # retval is ternary: true/false/nil
-
-        raise CaskError, "nothing to dump" if retval.nil?
-        raise CaskError, "dump incomplete" unless retval
+        raise CaskError, "Dump incomplete." if dump_casks == :incomplet
       end
 
       def dump_casks
-        count = 0
-        args.each do |cask_token|
-          begin
-            cask = CaskLoader.load(cask_token)
-            count += 1
-            cask.dumpcask
-          rescue StandardError => e
-            opoo "#{cask_token} was not found or would not load: #{e}"
-          end
-        end
-        count.zero? ? nil : count == args.length
+        casks.each(&:dumpcask)
       end
 
       def self.help
diff --git a/Library/Homebrew/cask/lib/hbc/cli/internal_stanza.rb b/Library/Homebrew/cask/lib/hbc/cli/internal_stanza.rb
index 86dee7c9c1..4515fe9319 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/internal_stanza.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/internal_stanza.rb
@@ -72,38 +72,22 @@ module Hbc
       end
 
       def run
-        retval = print_stanzas
-        # retval is ternary: true/false/nil
-        if retval.nil?
-          exit 1 if quiet?
-          raise CaskError, "nothing to print"
-        elsif !retval
-          exit 1 if quiet?
-          raise CaskError, "print incomplete"
-        end
+        return unless print_stanzas == :incomplete
+        exit 1 if quiet?
+        raise CaskError, "Print incomplete."
       end
 
       def print_stanzas
-        count = 0
         if ARTIFACTS.include?(stanza)
           artifact_name = stanza
           @stanza = :artifacts
         end
 
-        cask_tokens = args.empty? ? Hbc.all_tokens : args
-        cask_tokens.each do |cask_token|
-          print "#{cask_token}\t" if table?
-
-          begin
-            cask = CaskLoader.load(cask_token)
-          rescue StandardError
-            opoo "Cask '#{cask_token}' was not found" unless quiet?
-            puts ""
-            next
-          end
+        casks(alternative: -> { Hbc.all }).each do |cask|
+          print "#{cask}\t" if table?
 
           unless cask.respond_to?(stanza)
-            opoo "no such stanza '#{stanza}' on Cask '#{cask_token}'" unless quiet?
+            opoo "no such stanza '#{stanza}' on Cask '#{cask}'" unless quiet?
             puts ""
             next
           end
@@ -111,13 +95,13 @@ module Hbc
           begin
             value = cask.send(@stanza)
           rescue StandardError
-            opoo "failure calling '#{stanza}' on Cask '#{cask_token}'" unless quiet?
+            opoo "failure calling '#{stanza}' on Cask '#{cask}'" unless quiet?
             puts ""
             next
           end
 
           if artifact_name && !value.key?(artifact_name)
-            opoo "no such stanza '#{artifact_name}' on Cask '#{cask_token}'" unless quiet?
+            opoo "no such stanza '#{artifact_name}' on Cask '#{cask}'" unless quiet?
             puts ""
             next
           end
@@ -131,10 +115,7 @@ module Hbc
           else
             puts value.to_s
           end
-
-          count += 1
         end
-        count.zero? ? nil : count == cask_tokens.length
       end
 
       def self.help
diff --git a/Library/Homebrew/cask/lib/hbc/cli/list.rb b/Library/Homebrew/cask/lib/hbc/cli/list.rb
index 9d2ded4be5..9d978360eb 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/list.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/list.rb
@@ -11,44 +11,22 @@ module Hbc
 
       def run
         retval = args.any? ? list : list_installed
-        # retval is ternary: true/false/nil
-        if retval.nil? && args.none?
-          opoo "nothing to list" # special case: avoid exit code
-        elsif retval.nil?
-          raise CaskError, "nothing to list"
-        elsif !retval
-          raise CaskError, "listing incomplete"
-        end
+        raise CaskError, "Listing incomplete." if retval == :incomplete
       end
 
       def list
-        count = 0
-
-        args.each do |cask_token|
-          odebug "Listing files for Cask #{cask_token}"
-          begin
-            cask = CaskLoader.load(cask_token)
+        casks.each do |cask|
+          raise CaskNotInstalledError, cask unless cask.installed?
 
-            if cask.installed?
-              if one?
-                puts cask.token
-              elsif versions?
-                puts self.class.format_versioned(cask)
-              else
-                cask = CaskLoader.load_from_file(cask.installed_caskfile)
-                self.class.list_artifacts(cask)
-              end
-
-              count += 1
-            else
-              opoo "#{cask} is not installed"
-            end
-          rescue CaskUnavailableError => e
-            onoe e
+          if one?
+            puts cask.token
+          elsif versions?
+            puts self.class.format_versioned(cask)
+          else
+            cask = CaskLoader.load_from_file(cask.installed_caskfile)
+            self.class.list_artifacts(cask)
           end
         end
-
-        count.zero? ? nil : count == args.length
       end
 
       def self.list_artifacts(cask)
@@ -69,7 +47,7 @@ module Hbc
           puts Formatter.columns(installed_casks.map(&:to_s))
         end
 
-        installed_casks.empty? ? nil : true
+        installed_casks.empty? ? :empty : :complete
       end
 
       def self.format_versioned(cask)
diff --git a/Library/Homebrew/cask/lib/hbc/cli/outdated.rb b/Library/Homebrew/cask/lib/hbc/cli/outdated.rb
index 7877ead05d..b0a84e8d26 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/outdated.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/outdated.rb
@@ -10,9 +10,7 @@ module Hbc
       end
 
       def run
-        casks_to_check = args.empty? ? Hbc.installed : args.map(&CaskLoader.public_method(:load))
-
-        casks_to_check.each do |cask|
+        casks(alternative: -> { Hbc.installed }).each do |cask|
           odebug "Checking update info of Cask #{cask}"
           self.class.list_if_outdated(cask, greedy?, verbose?)
         end
diff --git a/Library/Homebrew/cask/lib/hbc/cli/reinstall.rb b/Library/Homebrew/cask/lib/hbc/cli/reinstall.rb
index d90317892e..337a2eb9d6 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/reinstall.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/reinstall.rb
@@ -2,27 +2,13 @@ module Hbc
   class CLI
     class Reinstall < Install
       def install_casks
-        count = 0
-        args.each do |cask_token|
-          begin
-            cask = CaskLoader.load(cask_token)
-
-            Installer.new(cask,
-                          binaries:       binaries?,
-                          verbose: verbose?,
-                          force:          force?,
-                          skip_cask_deps: skip_cask_deps?,
-                          require_sha:    require_sha?).reinstall
-
-            count += 1
-          rescue CaskUnavailableError => e
-            self.class.warn_unavailable_with_suggestion cask_token, e
-          rescue CaskError => e
-            onoe e.message
-          end
+        casks.each do |cask|
+          Installer.new(cask, binaries:       binaries?,
+                              verbose:        verbose?,
+                              force:          force?,
+                              skip_cask_deps: skip_cask_deps?,
+                              require_sha:    require_sha?).reinstall
         end
-
-        count.zero? ? nil : count == args.length
       end
 
       def self.help
diff --git a/Library/Homebrew/cask/lib/hbc/cli/style.rb b/Library/Homebrew/cask/lib/hbc/cli/style.rb
index c9417f5092..86fc98eaa2 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/style.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/style.rb
@@ -31,7 +31,7 @@ module Hbc
         elsif args.any? { |file| File.exist?(file) }
           args
         else
-          args.map { |token| CaskLoader.path(token) }
+          casks.map(&:sourcefile_path)
         end
       end
 
diff --git a/Library/Homebrew/cask/lib/hbc/cli/uninstall.rb b/Library/Homebrew/cask/lib/hbc/cli/uninstall.rb
index 33ee5afa9a..c0697c8080 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/uninstall.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/uninstall.rb
@@ -9,9 +9,12 @@ module Hbc
       end
 
       def run
-        args.each do |cask_token|
-          odebug "Uninstalling Cask #{cask_token}"
-          cask = CaskLoader.load(cask_token)
+        raise CaskError, "Uninstall incomplete." if uninstall_casks == :incomplete
+      end
+
+      def uninstall_casks
+        casks.each do |cask|
+          odebug "Uninstalling Cask #{cask}"
 
           raise CaskNotInstalledError, cask unless cask.installed? || force?
 
@@ -27,8 +30,8 @@ module Hbc
           single = versions.count == 1
 
           puts <<-EOS.undent
-            #{cask_token} #{versions.join(", ")} #{single ? "is" : "are"} still installed.
-            Remove #{single ? "it" : "them all"} with `brew cask uninstall --force #{cask_token}`.
+            #{cask} #{versions.join(", ")} #{single ? "is" : "are"} still installed.
+            Remove #{single ? "it" : "them all"} with `brew cask uninstall --force #{cask}`.
           EOS
         end
       end
diff --git a/Library/Homebrew/cask/lib/hbc/cli/zap.rb b/Library/Homebrew/cask/lib/hbc/cli/zap.rb
index 3c07ff9e88..d129431062 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/zap.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/zap.rb
@@ -7,9 +7,12 @@ module Hbc
       end
 
       def run
-        args.each do |cask_token|
-          odebug "Zapping Cask #{cask_token}"
-          cask = CaskLoader.load(cask_token)
+        raise CaskError, "Zap incomplete." if zap_casks == :incomplete
+      end
+
+      def zap_casks
+        casks.each do |cask|
+          odebug "Zapping Cask #{cask}"
           Installer.new(cask, verbose: verbose?).zap
         end
       end
diff --git a/Library/Homebrew/test/cask/cli/audit_spec.rb b/Library/Homebrew/test/cask/cli/audit_spec.rb
index 412db1481e..01f506c8c4 100644
--- a/Library/Homebrew/test/cask/cli/audit_spec.rb
+++ b/Library/Homebrew/test/cask/cli/audit_spec.rb
@@ -1,5 +1,5 @@
 describe Hbc::CLI::Audit, :cask do
-  let(:cask) { double }
+  let(:cask) { double("cask", token: nil) }
 
   describe "selection of Casks to audit" do
     it "audits all Casks if no tokens are given" do
diff --git a/Library/Homebrew/test/cask/cli/cat_spec.rb b/Library/Homebrew/test/cask/cli/cat_spec.rb
index 28089b2f1f..b726a0b366 100644
--- a/Library/Homebrew/test/cask/cli/cat_spec.rb
+++ b/Library/Homebrew/test/cask/cli/cat_spec.rb
@@ -34,9 +34,9 @@ describe Hbc::CLI::Cat, :cask do
   end
 
   it "raises an exception when the Cask does not exist" do
-    expect {
-      Hbc::CLI::Cat.run("notacask")
-    }.to raise_error(Hbc::CaskUnavailableError)
+    expect { Hbc::CLI::Cat.run("notacask") }
+      .to output(/is unavailable/).to_stderr
+      .and raise_error(Hbc::CaskError, "Cat incomplete.")
   end
 
   describe "when no Cask is specified" do
diff --git a/Library/Homebrew/test/cask/cli/fetch_spec.rb b/Library/Homebrew/test/cask/cli/fetch_spec.rb
index 9f3056631b..54bdfc0c84 100644
--- a/Library/Homebrew/test/cask/cli/fetch_spec.rb
+++ b/Library/Homebrew/test/cask/cli/fetch_spec.rb
@@ -54,7 +54,7 @@ describe Hbc::CLI::Fetch, :cask do
       shutup do
         Hbc::CLI::Fetch.run("notacask")
       end
-    }.to raise_error(Hbc::CaskUnavailableError)
+    }.to raise_error(Hbc::CaskError, "Fetch incomplete.")
   end
 
   describe "when no Cask is specified" do
diff --git a/Library/Homebrew/test/cask/cli/install_spec.rb b/Library/Homebrew/test/cask/cli/install_spec.rb
index 0720d0d775..cf69b5d86e 100644
--- a/Library/Homebrew/test/cask/cli/install_spec.rb
+++ b/Library/Homebrew/test/cask/cli/install_spec.rb
@@ -70,7 +70,7 @@ describe Hbc::CLI::Install, :cask do
       shutup do
         Hbc::CLI::Install.run("notacask")
       end
-    }.to raise_error(Hbc::CaskError)
+    }.to raise_error(Hbc::CaskError, "Install incomplete.")
   end
 
   it "returns a suggestion for a misspelled Cask" do
@@ -80,7 +80,7 @@ describe Hbc::CLI::Install, :cask do
       rescue Hbc::CaskError
         nil
       end
-    }.to output(/Cask 'localcaffeine' is unavailable\. Did you mean:\nlocal-caffeine/).to_stderr
+    }.to output(/Cask 'localcaffeine' is unavailable: No Cask with this name exists\. Did you mean:\nlocal-caffeine/).to_stderr
   end
 
   it "returns multiple suggestions for a Cask fragment" do
@@ -90,7 +90,7 @@ describe Hbc::CLI::Install, :cask do
       rescue Hbc::CaskError
         nil
       end
-    }.to output(/Cask 'local-caf' is unavailable\. Did you mean one of:\nlocal-caffeine/).to_stderr
+    }.to output(/Cask 'local-caf' is unavailable: No Cask with this name exists\. Did you mean one of:\nlocal-caffeine/).to_stderr
   end
 
   describe "when no Cask is specified" do
diff --git a/Library/Homebrew/test/cask/cli/style_spec.rb b/Library/Homebrew/test/cask/cli/style_spec.rb
index a5dcf6f6f9..640eca5f44 100644
--- a/Library/Homebrew/test/cask/cli/style_spec.rb
+++ b/Library/Homebrew/test/cask/cli/style_spec.rb
@@ -107,7 +107,7 @@ describe Hbc::CLI::Style, :cask do
       end
 
       it "tries to find paths for all tokens" do
-        expect(Hbc::CaskLoader).to receive(:path).twice
+        expect(Hbc::CaskLoader).to receive(:load).twice.and_return(double("cask", sourcefile_path: nil))
         subject
       end
     end
diff --git a/Library/Homebrew/test/cask/cli/uninstall_spec.rb b/Library/Homebrew/test/cask/cli/uninstall_spec.rb
index bc1f526134..cc640fad70 100644
--- a/Library/Homebrew/test/cask/cli/uninstall_spec.rb
+++ b/Library/Homebrew/test/cask/cli/uninstall_spec.rb
@@ -17,15 +17,15 @@ describe Hbc::CLI::Uninstall, :cask do
   end
 
   it "shows an error when a bad Cask is provided" do
-    expect {
-      Hbc::CLI::Uninstall.run("notacask")
-    }.to raise_error(Hbc::CaskUnavailableError)
+    expect { Hbc::CLI::Uninstall.run("notacask") }
+      .to output(/is unavailable/).to_stderr
+      .and raise_error(Hbc::CaskError, "Uninstall incomplete.")
   end
 
   it "shows an error when a Cask is provided that's not installed" do
-    expect {
-      Hbc::CLI::Uninstall.run("local-caffeine")
-    }.to raise_error(Hbc::CaskNotInstalledError)
+    expect { Hbc::CLI::Uninstall.run("local-caffeine") }
+    .to output(/is not installed/).to_stderr
+    .and raise_error(Hbc::CaskError, "Uninstall incomplete.")
   end
 
   it "tries anyway on a non-present Cask when --force is given" do
@@ -89,11 +89,9 @@ describe Hbc::CLI::Uninstall, :cask do
 
     Hbc.appdir.join("MyFancyApp.app").rmtree
 
-    expect {
-      shutup do
-        Hbc::CLI::Uninstall.run("with-uninstall-script-app")
-      end
-    }.to raise_error(Hbc::CaskError, /does not exist/)
+    expect { shutup { Hbc::CLI::Uninstall.run("with-uninstall-script-app") } }
+    .to output(/does not exist/).to_stderr
+    .and raise_error(Hbc::CaskError, "Uninstall incomplete.")
 
     expect(cask).to be_installed
 
diff --git a/Library/Homebrew/test/cask/cli/zap_spec.rb b/Library/Homebrew/test/cask/cli/zap_spec.rb
index f3af0e66f3..e39ca61f8b 100644
--- a/Library/Homebrew/test/cask/cli/zap_spec.rb
+++ b/Library/Homebrew/test/cask/cli/zap_spec.rb
@@ -1,8 +1,8 @@
 describe Hbc::CLI::Zap, :cask do
   it "shows an error when a bad Cask is provided" do
-    expect {
-      Hbc::CLI::Zap.run("notacask")
-    }.to raise_error(Hbc::CaskUnavailableError)
+    expect { Hbc::CLI::Zap.run("notacask") }
+      .to output(/is unavailable/).to_stderr
+      .and raise_error(Hbc::CaskError, "Zap incomplete.")
   end
 
   it "can zap and unlink multiple Casks at once" do
-- 
GitLab