The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use strict;
use warnings;

use Test::More;
use lib 't';
use Util;

{
    my $help_options;

    sub _populate_help_options {
        my ( $output, undef ) = run_ack_with_stderr( '--help' );

        $help_options = [];

        foreach my $line (@{$output}) {
            if ( $line =~ /^\s+-/ ) {
                while ( $line =~ /(-[^\s=,]+)/g ) {
                    my $option = $1;
                    chop $option if $option =~ /\[$/;

                    if ( $option =~ s/^--\[no\]/--/ ) {
                        my $negated_option = $option;
                        substr $negated_option, 2, 0, 'no';
                        push @{$help_options}, $negated_option;
                    }

                    push @{$help_options}, $option;
                }
            }
        }

        return;
    }

    sub get_help_options {
        _populate_help_options() unless $help_options;

        return @{ $help_options };
    }
}

sub option_in_usage {
    my ( $expected_option ) = @_;

    my @help_options = get_help_options();
    my $found;

    foreach my $option ( @help_options ) {
        if ( $option eq $expected_option ) {
            $found = 1;
            last;
        }
    }

    ok( $found, "Option '$expected_option' found in --help output" );

    return;
}

my @options = get_options();

plan tests => scalar(@options);

prep_environment();

foreach my $option ( @options ) {
    option_in_usage( $option );
}