brew/Library/Homebrew/test/abstract_command_spec.rb
2025-07-12 02:06:37 +08:00

79 lines
2.1 KiB
Ruby

# frozen_string_literal: true
require "abstract_command"
RSpec.describe Homebrew::AbstractCommand do
describe "subclasses" do
before do
test_cat = Class.new(described_class) do
cmd_args do
description "test"
switch "--foo"
flag "--bar="
end
define_method(:run) do
end
end
stub_const("TestCat", test_cat)
end
describe "parsing args" do
it "parses valid args" do
expect { TestCat.new(["--foo"]).run }.not_to raise_error
end
it "allows access to args" do
expect(TestCat.new(["--bar", "baz"]).args.bar).to eq("baz")
end
it "raises on invalid args" do
expect { TestCat.new(["--bat"]) }.to raise_error(OptionParser::InvalidOption)
end
end
describe "command names" do
it "has a default command name" do
expect(TestCat.command_name).to eq("test-cat")
end
it "can lookup command" do
expect(described_class.command("test-cat")).to be(TestCat)
end
it "removes -cmd suffix from command name" do
require "dev-cmd/formula"
expect(Homebrew::DevCmd::FormulaCmd.command_name).to eq("formula")
end
describe "when command name is overridden" do
before do
tac = Class.new(described_class) do
self.define_singleton_method(:command_name) do
"t-a-c"
define_method(:run) do
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
describe "command paths" do
it "match command name" do
["cmd", "dev-cmd"].each do |dir|
Dir[File.join(__dir__, "../#{dir}", "*.rb")].each do |file|
filename = File.basename(file, ".rb")
require(file)
command = described_class.command(filename)
expect(Pathname(File.join(__dir__, "../#{dir}/#{command.command_name}.rb"))).to exist
end
end
end
end
end