diff --git a/Library/Homebrew/cask/cask_loader.rb b/Library/Homebrew/cask/cask_loader.rb index 86a4885e2d..591daa9e47 100644 --- a/Library/Homebrew/cask/cask_loader.rb +++ b/Library/Homebrew/cask/cask_loader.rb @@ -498,6 +498,7 @@ module Cask $stderr.puts "#{$PROGRAM_NAME} (#{loader_class}): loading #{ref}" if debug? if [FromAPILoader, FromTapLoader].include?(loader_class) + ref = "#{CoreCaskTap.instance}/#{ref}" if CoreCaskTap.instance.cask_renames.key?(ref) token, tap, = tap_cask_token_type(ref, warn: warn) loader_class = T.cast(loader_class, T.any(T.class_of(FromAPILoader), T.class_of(FromTapLoader))) return loader_class.new("#{tap}/#{token}") @@ -511,7 +512,6 @@ module Cask return FromTapPathLoader.new(possible_tap_casks.first) when 2..Float::INFINITY loaders = possible_tap_casks.map(&FromTapPathLoader.method(:new)) - raise TapCaskAmbiguityError.new(ref, loaders) end diff --git a/Library/Homebrew/test/cask/cask_loader/from_api_loader_spec.rb b/Library/Homebrew/test/cask/cask_loader/from_api_loader_spec.rb index 90b6d91d56..deccbb9780 100644 --- a/Library/Homebrew/test/cask/cask_loader/from_api_loader_spec.rb +++ b/Library/Homebrew/test/cask/cask_loader/from_api_loader_spec.rb @@ -26,9 +26,7 @@ describe Cask::CaskLoader::FromAPILoader, :cask do context "when not using the API" do before do - allow(Homebrew::EnvConfig) - .to receive(:no_install_from_api?) - .and_return(true) + ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1" end it "returns false" do @@ -38,9 +36,7 @@ describe Cask::CaskLoader::FromAPILoader, :cask do context "when using the API" do before do - allow(Homebrew::EnvConfig) - .to receive(:no_install_from_api?) - .and_return(false) + ENV.delete("HOMEBREW_NO_INSTALL_FROM_API") end it "returns true for valid token" do diff --git a/Library/Homebrew/test/cask/cask_loader_spec.rb b/Library/Homebrew/test/cask/cask_loader_spec.rb new file mode 100644 index 0000000000..bcac558c0a --- /dev/null +++ b/Library/Homebrew/test/cask/cask_loader_spec.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +describe Cask::CaskLoader, :cask do + describe "::for" do + let(:tap) { CoreCaskTap.instance } + + context "when a cask is renamed" do + let(:old_token) { "version-newest" } + let(:new_token) { "version-latest" } + + let(:api_casks) do + [old_token, new_token].to_h do |token| + hash = described_class.load(new_token).to_hash_with_variations + json = JSON.pretty_generate(hash) + cask_json = JSON.parse(json) + + [token, cask_json.except("token")] + end + end + let(:cask_renames) do + { old_token => new_token } + end + + before do + allow(Homebrew::API::Cask) + .to receive(:all_casks) + .and_return(api_casks) + + allow(tap).to receive(:cask_renames) + .and_return(cask_renames) + end + + context "when not using the API" do + before do + ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1" + end + + it "warns" do + expect do + expect(described_class.for("version-newest")).to be_a Cask::CaskLoader::FromTapPathLoader + end.to output(/version-newest was renamed to version-latest/).to_stderr + end + end + + context "when using the API" do + before do + ENV.delete("HOMEBREW_NO_INSTALL_FROM_API") + end + + it "warns" do + expect do + expect(described_class.for("version-newest")).to be_a Cask::CaskLoader::FromAPILoader + end.to output(/version-newest was renamed to version-latest/).to_stderr + end + end + end + end +end