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