2025-09-05 09:42:21 +02:00

75 lines
2.1 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use warnings;
use Fcm::CLI::Option;
use Test::More qw{no_plan};
main();
sub main {
my $class = 'Fcm::CLI::Subcommand';
use_ok($class);
test_constructor($class);
test_has_a_name($class);
test_as_string($class);
}
################################################################################
# Tests the constructor
sub test_constructor {
my ($class) = @_;
my $prefix = 'constructor';
my %OPTION_OF = (
description => 'description value',
invoker_class => 'invoker_class value',
invoker_config => 'invoker_config value',
is_vc => 'is_vc value',
names => 'names value',
options => 'options value',
synopsis => 'synopsis value',
usage => 'usage value',
);
my $subcommand = Fcm::CLI::Subcommand->new(\%OPTION_OF);
isa_ok($subcommand, $class, $prefix);
for my $key (keys(%OPTION_OF)) {
my $getter = index($key, 'is') == 0 ? $key : "get_$key";
is($subcommand->$getter(), $OPTION_OF{$key}, "$prefix: $getter");
}
}
################################################################################
# Tests match a string name to a subcommand
sub test_has_a_name {
my ($class) = @_;
my $prefix = 'has a name';
my @NAMES = ('foo', 'bar', 'baz');
my $subcommand = $class->new({names => \@NAMES});
for my $name (@NAMES) {
ok($subcommand->has_a_name($name), "$prefix: $name");
}
for my $name (qw{egg ham mayo}) {
ok(!$subcommand->has_a_name($name), "$prefix: $name");
}
}
################################################################################
# Tests string representation of a subcommand
sub test_as_string {
my ($class) = @_;
my $prefix = 'as string';
my %OPTION_OF = (
'foo (bar, baz)' => ['foo', 'bar', 'baz'],
'foo (bar)' => ['foo', 'bar'],
'foo' => ['foo'],
q{} => [],
);
for my $key (keys(%OPTION_OF)) {
my $subcommand = $class->new({names => $OPTION_OF{$key}});
is($subcommand->as_string(), $key, "$prefix: $key");
}
}
__END__