2024-03-06 21:12:17 -08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "abstract_command"
|
|
|
|
|
|
|
|
RSpec.describe Homebrew::AbstractCommand do
|
|
|
|
describe "subclasses" do
|
|
|
|
before do
|
2024-03-21 19:30:17 -04:00
|
|
|
test_cat = Class.new(described_class) do
|
2024-03-06 21:12:17 -08:00
|
|
|
cmd_args do
|
2024-03-21 17:46:35 -07:00
|
|
|
description "test"
|
2024-03-06 21:12:17 -08:00
|
|
|
switch "--foo"
|
|
|
|
flag "--bar="
|
|
|
|
end
|
|
|
|
def run; end
|
|
|
|
end
|
2024-03-21 19:30:17 -04:00
|
|
|
stub_const("TestCat", test_cat)
|
2024-03-06 21:12:17 -08:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "parsing args" do
|
|
|
|
it "parses valid args" do
|
2024-03-21 19:30:17 -04:00
|
|
|
expect { TestCat.new(["--foo"]).run }.not_to raise_error
|
2024-03-06 21:12:17 -08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows access to args" do
|
2024-03-21 19:30:17 -04:00
|
|
|
expect(TestCat.new(["--bar", "baz"]).args[:bar]).to eq("baz")
|
2024-03-06 21:12:17 -08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "raises on invalid args" do
|
2024-03-21 19:30:17 -04:00
|
|
|
expect { TestCat.new(["--bat"]) }.to raise_error(OptionParser::InvalidOption)
|
2024-03-06 21:12:17 -08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "command names" do
|
|
|
|
it "has a default command name" do
|
2024-03-21 19:30:17 -04:00
|
|
|
expect(TestCat.command_name).to eq("test-cat")
|
2024-03-06 21:12:17 -08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "can lookup command" do
|
2024-03-21 19:30:17 -04:00
|
|
|
expect(described_class.command("test-cat")).to be(TestCat)
|
2024-03-06 21:12:17 -08:00
|
|
|
end
|
|
|
|
|
2024-03-21 19:51:18 -07:00
|
|
|
it "removes -cmd suffix from command name" do
|
|
|
|
require "dev-cmd/formula"
|
|
|
|
expect(Homebrew::DevCmd::FormulaCmd.command_name).to eq("formula")
|
|
|
|
end
|
|
|
|
|
2024-03-06 21:12:17 -08:00
|
|
|
describe "when command name is overridden" do
|
|
|
|
before do
|
|
|
|
tac = Class.new(described_class) do
|
|
|
|
def self.command_name = "t-a-c"
|
|
|
|
def run; end
|
|
|
|
end
|
|
|
|
stub_const("Tac", tac)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "can be looked up by command name" do
|
|
|
|
expect(described_class.command("t-a-c")).to be(Tac)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2024-03-21 14:02:42 -07:00
|
|
|
|
|
|
|
describe "command paths" do
|
|
|
|
it "match command name" do
|
|
|
|
# Ensure all commands are loaded
|
|
|
|
["cmd", "dev-cmd"].each do |dir|
|
|
|
|
Dir[File.join(__dir__, "../#{dir}", "*.rb")].each { require(_1) }
|
|
|
|
end
|
2024-03-21 19:05:26 -07:00
|
|
|
test_classes = ["TestCat", "Tac"]
|
2024-03-21 14:02:42 -07:00
|
|
|
|
|
|
|
described_class.subclasses.each do |klass|
|
|
|
|
next if test_classes.include?(klass.name)
|
|
|
|
|
|
|
|
dir = klass.name.start_with?("Homebrew::DevCmd") ? "dev-cmd" : "cmd"
|
|
|
|
expect(Pathname(File.join(__dir__, "../#{dir}/#{klass.command_name}.rb"))).to exist
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2024-03-06 21:12:17 -08:00
|
|
|
end
|