Add tests

This commit is contained in:
Douglas Eichelberger 2024-03-06 21:12:17 -08:00
parent 7d34717ccd
commit 6fc99d9569
3 changed files with 63 additions and 3 deletions

View File

@ -37,9 +37,9 @@ module Homebrew
sig { returns(CLI::Args) }
attr_reader :args
sig { void }
def initialize
@args = T.let(CLI::Parser.new(&self.class.parser_block).parse, CLI::Args)
sig { params(argv: T::Array[String]).void }
def initialize(argv = ARGV.freeze)
@args = T.let(CLI::Parser.new(&self.class.parser_block).parse(argv), CLI::Args)
end
sig { abstract.void }

View File

@ -0,0 +1,56 @@
# frozen_string_literal: true
require "abstract_command"
RSpec.describe Homebrew::AbstractCommand do
describe "subclasses" do
before do
cat = Class.new(described_class) do
cmd_args do
switch "--foo"
flag "--bar="
end
def run; end
end
stub_const("Cat", cat)
end
describe "parsing args" do
it "parses valid args" do
expect { Cat.new(["--foo"]).run }.not_to raise_error
end
it "allows access to args" do
expect(Cat.new(["--bar", "baz"]).args[:bar]).to eq("baz")
end
it "raises on invalid args" do
expect { Cat.new(["--bat"]) }.to raise_error(OptionParser::InvalidOption)
end
end
describe "command names" do
it "has a default command name" do
expect(Cat.command_name).to eq("cat")
end
it "can lookup command" do
expect(described_class.command("cat")).to be(Cat)
end
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
end

View File

@ -0,0 +1,4 @@
# typed: strict
class Cat < Homebrew::AbstractCommand; end
class Tac < Homebrew::AbstractCommand; end