Author: jkeenan
Date: Wed Apr  4 18:32:33 2007
New Revision: 17984

Added:
   trunk/t/configure/01-options.t   (contents, props changed)

Log:
(This should have been part of r17983.)


Added: trunk/t/configure/01-options.t
==============================================================================
--- (empty file)
+++ trunk/t/configure/01-options.t      Wed Apr  4 18:32:33 2007
@@ -0,0 +1,264 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id$
+# 01-options.t
+
+use strict;
+use warnings;
+
+BEGIN {
+    use FindBin qw($Bin);
+    use Cwd qw(cwd realpath);
+    realpath($Bin) =~ m{^(.*\/parrot)\/[^/]*\/[^/]*\/[^/]*$};
+    our $topdir = $1;
+    if ( defined $topdir ) {
+        print "\nOK:  Parrot top directory located\n";
+    }
+    else {
+        $topdir = realpath($Bin) . "/../..";
+    }
+    unshift @INC, qq{$topdir/lib};
+}
+use Test::More tests => 32;
+use Carp;
+use lib ("lib");
+use_ok('Parrot::Configure::Options', qw|
+    process_options
+    get_valid_options
+| );
+use_ok("Parrot::IO::Capture::Mini");
+
+
+my %valid;
+%valid = map {$_, 1} get_valid_options();
+ok(scalar keys %valid, "non-zero quantity of valid options found");
+ok(defined $valid{debugging}, "debugging option found");
+ok(defined $valid{maintainer}, "maintainer option found");
+ok(defined $valid{help}, "help option found");
+ok(defined $valid{version}, "version option found");
+ok(defined $valid{verbose}, "verbose option found");
+
+open my $FH, "$main::topdir/Configure.pl"
+    or croak "Unable to open handle to Configure.pl";
+my $bigstr;
+{
+    local $/ = undef;
+    $bigstr = <$FH>;
+}
+close $FH or croak "Unable to close handle to Configure.pl";
+
+# Ignore any POD I have moved to an __END__ block.
+$bigstr =~ s/__END__.*//s;
+my (@lines, @possible_methods);
[EMAIL PROTECTED] = grep { /^=item/ } (split /\n/, $bigstr);
+foreach my $l (@lines) {
+    my $method;
+    if ($l =~ /^=item C<--([-_\w]+)(?:[=>])/) {
+        $method = $1;
+        push @possible_methods, $method;
+    }
+}
+my $invalid = 0;
+foreach my $m (@possible_methods) {
+    unless (defined $valid{$m}) {
+        carp "Possibly invalid method: $m";
+        $invalid++;
+    }
+}
+ok(! $invalid, "No invalid methods described in POD");
+
+my $parrot_version = '0.4.10';
+my $svnid = '$Id$';
+my ($args);
+$args = process_options( {
+    argv            => [],
+    script          => $0,
+    parrot_version  => $parrot_version,
+    svnid           => $svnid,
+} );
+ok(defined $args, "process_options() returned successfully");
+ok($args->{debugging}, "debugging turned on by default");
+
+eval {
+    $args = process_options( {
+        argv            => [],
+        script          => $0,
+        svnid           => $svnid,
+    } );
+};
+like($@, qr/Must provide argument 'parrot_version'/,
+    "process_options() failed due to lack of argument 'parrot_version'");
+
+eval {
+    $args = process_options( {
+        argv            => [],
+        script          => $0,
+        parrot_version  => $parrot_version,
+    } );
+};
+like($@, qr/Must provide argument 'svnid'/,
+    "process_options() failed due to lack of argument 'svnid'");
+
+$args = process_options( {
+    script          => $0,
+    parrot_version  => $parrot_version,
+    svnid           => $svnid,
+} );
+ok(defined $args,
+    "process_options() returned successfully even though no explicit 'argv' 
key was provided");
+
+$args = process_options( {
+    argv            => [],
+    parrot_version  => $parrot_version,
+    svnid           => $svnid,
+} );
+ok(defined $args,
+    "process_options() returned successfully even though no explicit 'scripts' 
key was provided");
+
+my $CC = "/usr/bin/gcc-3.3";
+my $CX = "/usr/bin/g++-3.3";
+$args = process_options( {
+    argv            => [
+        q{--cc=$CC},
+        q{--cxx=$CX},
+        q{--link=$CX},
+        q{--ld=$CX},
+        q{--without-icu},
+        q{--without-gmp},
+    ],
+    script          => $0,
+    parrot_version  => $parrot_version,
+    svnid           => $svnid,
+} );
+ok(defined $args,
+    "process_options() returned successfully when options were specified");
+
+my $badoption = q{samsonanddelilah};
+eval {
+    $args = process_options( {
+        argv            => [ qq<--${badoption}=72> ],
+        script          => $0,
+        parrot_version  => $parrot_version,
+        svnid           => $svnid,
+    } );
+};
+like($@, qr/^Invalid option $badoption/,
+    "process_options() failed due to bad option '$badoption'");
+
+{
+    my ($tie, $rv, $msg);
+    $tie = tie *STDOUT, "Parrot::IO::Capture::Mini"
+            or croak "Unable to tie";
+    $args = process_options( {
+        argv            => [ q{--help} ],
+        script          => $0,
+        parrot_version  => $parrot_version,
+        svnid           => $svnid,
+    } );
+    ok(! defined $args,
+        "process_options() returned undef after 'help' option");
+    $msg = $tie->READLINE;
+    like($msg, qr/--help/i,
+        "got correct message after 'version' option");
+}
+
+{
+    my ($tie, $rv, $msg);
+    $tie = tie *STDOUT, "Parrot::IO::Capture::Mini"
+            or croak "Unable to tie";
+    $args = process_options( {
+        argv            => [ q{--} ],
+        script          => $0,
+        parrot_version  => $parrot_version,
+        svnid           => $svnid,
+    } );
+    ok(! defined $args,
+        "process_options() returned undef after 'help' option: case '--'");
+    $msg = $tie->READLINE;
+    like($msg, qr/--help/i,
+        "got correct message after 'version' option");
+}
+
+{
+    my ($tie, $rv, $msg);
+    $tie = tie *STDOUT, "Parrot::IO::Capture::Mini"
+            or croak "Unable to tie";
+    $args = process_options( {
+        argv            => [ q{--version} ],
+        script          => $0,
+        parrot_version  => $parrot_version,
+        svnid           => $svnid,
+    } );
+    ok(! defined $args,
+        "process_options() returned undef after 'version' option");
+    $msg = $tie->READLINE;
+    like($msg, qr/Parrot Version/i,
+        "got correct message after 'version' option");
+}
+
+$args = process_options( {
+    argv            => [ q{--lex}, ],
+    script          => $0,
+    parrot_version  => $parrot_version,
+    svnid           => $svnid,
+} );
+ok(defined $args,
+    "process_options() returned successfully after 'lex' option");
+ok($args->{maintainer}, "'maintainer' attribute is true after 'lex' option");
+
+$args = process_options( {
+    argv            => [ q{--yacc}, ],
+    script          => $0,
+    parrot_version  => $parrot_version,
+    svnid           => $svnid,
+} );
+ok(defined $args,
+    "process_options() returned successfully after 'yacc' option");
+ok($args->{maintainer}, "'maintainer' attribute is true after 'yacc' option");
+
+$args = process_options( {
+    argv            => [ q{--debugging=1} ],
+    script          => $0,
+    parrot_version  => $parrot_version,
+    svnid           => $svnid,
+} );
+ok(defined $args, "process_options() returned successfully");
+ok($args->{debugging}, "debugging turned on explicitly");
+
+$args = process_options( {
+    argv            => [ q{--debugging=0} ],
+    script          => $0,
+    parrot_version  => $parrot_version,
+    svnid           => $svnid,
+} );
+ok(defined $args, "process_options() returned successfully");
+ok(! $args->{debugging}, "debugging explicitly turned off");
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+01-options.t - test Parrot::Configure::Options
+
+=head1 SYNOPSIS
+
+    % prove t/configure/01-options.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test subroutines exported by
+Parrot::Configure::Options.
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::Configure::Options, F<Configure.pl>.
+
+=cut

Reply via email to