The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
# check usage for all perl scripts

use strict;
use warnings;
use Test::More;
use File::Find;

my @scripts = map { local $_ = $_; "script/$_" } qw(
    ciscoospf2yaml
    gated2yaml
    ospf2dot
    ospfconvert
    ospfd2yaml
    ospfview
);

plan tests => 3 * @scripts;

foreach (@scripts) {
    my $pid = open(my $fh, '-|');
    defined($pid) or die "Fork and open pipe failed: $!";
    if (!$pid) {
	# child
	open(STDERR, '>&', \*STDOUT) or die "Dup stdout to stderr failed: $!";
	$0 = $_;
	@ARGV = '-h';
	do $0;
	die "Do $0 did not exit";
    }
    my $out = eval { local $/; <$fh> };
    close($fh) || !$! or die "Fork and open pipe failed: $!";
    is($?, 2<<8, "$_ exit") or diag("Script $_ exit code is not 2<<8: $?");
    like($out, qr{^Usage: $_ }m, "$_ usage") or diag("No usage: $out");
}

my %files = map { $_ => 1 } @scripts;
sub wanted {
    ! /[A-Z]/ && ! /\.cgi$/ && -f or return;
    ok($files{$File::Find::name}, "$File::Find::name file")
	or diag("Executable file $File::Find::name not in script list");
}
find(\&wanted, "script");