Upgrade to Test::Harness 3.05
[p5sagit/p5-mst-13.2.git] / lib / Test / Harness / t / testargs.t
1 #!/usr/bin/perl -w
2
3 BEGIN {
4     chdir 't' and @INC = '../lib' if $ENV{PERL_CORE};
5 }
6
7 use strict;
8 use lib 't/lib';
9
10 use Test::More tests => 19;
11 use File::Spec;
12 use TAP::Parser;
13 use TAP::Harness;
14 use App::Prove;
15
16 my $test = File::Spec->catfile( ($ENV{PERL_CORE} ? 'lib' : 't'),
17                                 'sample-tests', 'echo' );
18
19 diag( "\n\n", bigness( join ' ', @ARGV ), "\n\n" ) if @ARGV;
20
21 sub echo_ok {
22     my $options = shift;
23     my @args    = @_;
24     my $parser  = TAP::Parser->new( { %$options, test_args => \@args } );
25     my @got     = ();
26     while ( my $result = $parser->next ) {
27         push @got, $result;
28     }
29     my $plan = shift @got;
30     ok $plan->is_plan;
31     for (@got) {
32         is $_->description, shift(@args),
33           join( ', ', keys %$options ) . ": option passed OK";
34     }
35 }
36
37 for my $args ( [qw( yes no maybe )], [qw( 1 2 3 )] ) {
38     echo_ok( { source => $test }, @$args );
39     echo_ok( { exec => [ $^X, $test ] }, @$args );
40 }
41
42 {
43     my $harness = TAP::Harness->new(
44         { verbosity => -9, test_args => [qw( magic hat brigade )] } );
45     my $aggregate = $harness->runtests($test);
46
47     is $aggregate->total,  3, "ran the right number of tests";
48     is $aggregate->passed, 3, "and they passed";
49 }
50
51 package Test::Prove;
52
53 use vars qw(@ISA);
54 @ISA = 'App::Prove';
55
56 sub _runtests {
57     my $self = shift;
58     push @{ $self->{_log} }, [@_];
59     return;
60 }
61
62 sub get_run_log {
63     my $self = shift;
64     return $self->{_log};
65 }
66
67 package main;
68
69 {
70     my $app = Test::Prove->new;
71
72     $app->process_args( '--norc', $test, '::', 'one', 'two', 'huh' );
73     $app->run();
74     my $log = $app->get_run_log;
75     is_deeply $log->[0]->[0]->{test_args}, [ 'one', 'two', 'huh' ],
76       "prove args match";
77 }
78
79 sub bigness {
80     my $str = join '', @_;
81     my @cdef = (
82         '0000000000000000', '1818181818001800', '6c6c6c0000000000',
83         '36367f367f363600', '0c3f683e0b7e1800', '60660c1830660600',
84         '386c6c386d663b00', '0c18300000000000', '0c18303030180c00',
85         '30180c0c0c183000', '00187e3c7e180000', '0018187e18180000',
86         '0000000000181830', '0000007e00000000', '0000000000181800',
87         '00060c1830600000', '3c666e7e76663c00', '1838181818187e00',
88         '3c66060c18307e00', '3c66061c06663c00', '0c1c3c6c7e0c0c00',
89         '7e607c0606663c00', '1c30607c66663c00', '7e060c1830303000',
90         '3c66663c66663c00', '3c66663e060c3800', '0000181800181800',
91         '0000181800181830', '0c18306030180c00', '00007e007e000000',
92         '30180c060c183000', '3c660c1818001800', '3c666e6a6e603c00',
93         '3c66667e66666600', '7c66667c66667c00', '3c66606060663c00',
94         '786c6666666c7800', '7e60607c60607e00', '7e60607c60606000',
95         '3c66606e66663c00', '6666667e66666600', '7e18181818187e00',
96         '3e0c0c0c0c6c3800', '666c7870786c6600', '6060606060607e00',
97         '63777f6b6b636300', '6666767e6e666600', '3c66666666663c00',
98         '7c66667c60606000', '3c6666666a6c3600', '7c66667c6c666600',
99         '3c66603c06663c00', '7e18181818181800', '6666666666663c00',
100         '66666666663c1800', '63636b6b7f776300', '66663c183c666600',
101         '6666663c18181800', '7e060c1830607e00', '7c60606060607c00',
102         '006030180c060000', '3e06060606063e00', '183c664200000000',
103         '00000000000000ff', '1c36307c30307e00', '00003c063e663e00',
104         '60607c6666667c00', '00003c6660663c00', '06063e6666663e00',
105         '00003c667e603c00', '1c30307c30303000', '00003e66663e063c',
106         '60607c6666666600', '1800381818183c00', '1800381818181870',
107         '6060666c786c6600', '3818181818183c00', '0000367f6b6b6300',
108         '00007c6666666600', '00003c6666663c00', '00007c66667c6060',
109         '00003e66663e0607', '00006c7660606000', '00003e603c067c00',
110         '30307c3030301c00', '0000666666663e00', '00006666663c1800',
111         '0000636b6b7f3600', '0000663c183c6600', '00006666663e063c',
112         '00007e0c18307e00', '0c18187018180c00', '1818180018181800',
113         '3018180e18183000', '316b460000000000'
114     );
115     my @chars = unpack( 'C*', $str );
116     my @out = ();
117     for my $row ( 0 .. 7 ) {
118         for my $char (@chars) {
119             next if $char < 32 || $char > 126;
120             my $size = scalar(@cdef);
121             my $byte = hex( substr( $cdef[ $char - 32 ], $row * 2, 2 ) );
122             my $bits = sprintf( '%08b', $byte );
123             $bits =~ tr/01/ #/;
124             push @out, $bits;
125         }
126         push @out, "\n";
127     }
128     return join '', @out;
129 }