The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- perl -*-
print "1..14\n";

use Tk::Getopt;

$bla  = 1;
$bla2 = 1;
$bla3 = 1;
$bla4 = 0;

@ARGV = qw(--arr 1 --arr 2 --arr 3
	   --hsh foo=bar --hsh bla=blubber --nobla -nobla2
	   --help --file foo --foo --nobar --num=5 -- file);

%getopt = 
  (
   'help'   => \$HELP,
   'file:s' => \$FILE,
   'foo!'   => \$FOO,
   'bar!'   => \$BAR,
   'bla!'   => \$bla,
   'bla2!'  => \$bla2,
   'bla3!'  => \$bla3,
   'bla4!'  => \$bla4,
   'num:i'  => \$NO,
   'arr=s@' => \@ARR,
   'hsh=s%' => \%HSH,
);

%getopt2 = 
  (
   'help'   => \$HELP2,
   'file:s' => \$FILE2,
   'foo!'   => \$FOO2,
   'bar!'   => \$BAR2,
   'num:i'  => \$NO2,
   'arr=s@' => \@ARR2,
   'hsh=s%' => \%HSH2,
);

$opt = new Tk::Getopt(-getopt => \%getopt);

if (!$opt->get_options) {
    print "not ";
}
print "ok 1\n";

print "not " unless $HELP && $FOO && !$BAR && $FILE eq 'foo' && $NO == 5;
print "ok 2\n";

print "not " unless $ARR[0] == 1 && $ARR[1] == 2 && $ARR[2] == 3;
print "ok 3\n";

print "not " unless $HSH{"foo"} eq "bar" && $HSH{"bla"} eq "blubber";
print "ok 4\n";

print "not " unless "@ARGV" eq "file";
print "ok 5\n";

my $tstfile = "getopt.tst";
unlink $tstfile;
$opt->save_options($tstfile);
print "not " if !-f $tstfile;
print "ok 6\n";

@ARGV = ();
$opt2 = new Tk::Getopt(-getopt => \%getopt2);
$r = $opt2->load_options($tstfile);
print "not " if !$r;
print "ok 7\n";

print "not " unless ($HELP2 && $FOO2 && !$BAR2 &&
		     $FILE eq $FILE2 && $NO == $NO2);
print "ok 8\n";

print "not " unless ($ARR[0] == $ARR2[0] && $ARR[1] == $ARR2[1] &&
		     $ARR[2] == $ARR2[2]);
print "ok 9\n";

print "not " unless ($HSH{"foo"} eq $HSH2{"foo"} &&
		     $HSH{"bla"} eq $HSH2{"bla"});
print "ok 10\n";


print "not " unless ($bla == 0);
print "ok 11\n";

print "not " unless ($bla2 == 0);
print "ok 12\n";

print "not " unless ($bla3 == 1);
print "ok 13\n";

print "not " unless ($bla4 == 0);
print "ok 14\n";

unlink $tstfile;