4 if ( $ENV{PERL_CORE} ) {
19 use Test::Harness qw(execute_tests);
21 # unset this global when self-testing ('testcover' and etc issue)
22 local $ENV{HARNESS_PERL_SWITCHES};
24 my $TEST_DIR = $ENV{PERL_CORE} ? 'lib/sample-tests' : 't/sample-tests';
28 # if the harness wants to save the resulting TAP we shouldn't
29 # do it for our internal calls
30 local $ENV{PERL_TEST_HARNESS_DUMP_TAP} = 0;
53 descriptive die die_head_end die_last_minute duplicates
54 head_end head_fail inc_taint junk_before_plan lone_not_bug
55 no_nums no_output schwern sequence_misparse shbang_misparse
56 simple simple_fail skip skip_nomsg skipall skipall_nomsg
57 stdout_stderr taint todo_inline
58 todo_misparse too_many vms_nit
67 'name' => "$TEST_DIR/die",
70 "$TEST_DIR/die_head_end" => {
75 'name' => "$TEST_DIR/die_head_end",
78 "$TEST_DIR/die_last_minute" => {
83 'name' => "$TEST_DIR/die_last_minute",
86 "$TEST_DIR/duplicates" => {
91 'name' => "$TEST_DIR/duplicates",
94 "$TEST_DIR/head_fail" => {
99 'name' => "$TEST_DIR/head_fail",
102 "$TEST_DIR/inc_taint" => {
107 'name' => "$TEST_DIR/inc_taint",
110 "$TEST_DIR/no_nums" => {
115 'name' => "$TEST_DIR/no_nums",
118 "$TEST_DIR/no_output" => {
123 'name' => "$TEST_DIR/no_output",
126 "$TEST_DIR/simple_fail" => {
131 'name' => "$TEST_DIR/simple_fail",
134 "$TEST_DIR/todo_misparse" => {
139 'name' => "$TEST_DIR/todo_misparse",
142 "$TEST_DIR/too_many" => {
147 'name' => "$TEST_DIR/too_many",
150 "$TEST_DIR/vms_nit" => {
155 'name' => "$TEST_DIR/vms_nit",
160 "$TEST_DIR/todo_inline" => {
165 'name' => "$TEST_DIR/todo_inline",
189 'name' => "$TEST_DIR/die",
209 "$TEST_DIR/die_head_end" => {
214 'name' => "$TEST_DIR/die_head_end",
232 'die_last_minute' => {
234 "$TEST_DIR/die_last_minute" => {
239 'name' => "$TEST_DIR/die_last_minute",
259 "$TEST_DIR/duplicates" => {
264 'name' => "$TEST_DIR/duplicates",
300 "$TEST_DIR/head_fail" => {
305 'name' => "$TEST_DIR/head_fail",
325 "$TEST_DIR/inc_taint" => {
330 'name' => "$TEST_DIR/inc_taint",
348 'junk_before_plan' => {
382 "$TEST_DIR/no_nums" => {
387 'name' => "$TEST_DIR/no_nums",
407 "$TEST_DIR/no_output" => {
412 'name' => "$TEST_DIR/no_output",
446 'sequence_misparse' => {
462 'shbang_misparse' => {
496 "$TEST_DIR/simple_fail" => {
501 'name' => "$TEST_DIR/simple_fail",
601 ( $ENV{PERL5OPT} || '' ) =~ m{(?:^|\s)-[dM]};
604 "$TEST_DIR/switches" => {
609 'name' => "$TEST_DIR/switches",
658 'require' => 5.008001,
663 "$TEST_DIR/todo_inline" => {
668 'name' => "$TEST_DIR/todo_inline",
687 "$TEST_DIR/todo_misparse" => {
692 'name' => "$TEST_DIR/todo_misparse",
712 "$TEST_DIR/too_many" => {
717 'name' => "$TEST_DIR/too_many",
737 "$TEST_DIR/vms_nit" => {
742 'name' => "$TEST_DIR/vms_nit",
762 my $num_tests = ( keys %$results ) * $PER_LOOP;
764 plan tests => $num_tests;
768 return File::Spec->catfile( split /\//, $name );
775 while ( my ( $file, $want ) = each %$hash ) {
776 if ( exists $want->{name} ) {
777 $want->{name} = local_name( $want->{name} );
779 $new->{ local_name($file) } = $want;
786 return $hash unless $^O eq 'VMS';
788 while ( my ( $file, $want ) = each %$hash ) {
789 for (qw( estat wstat )) {
790 if ( exists $want->{$_} ) {
791 $want->{$_} = $want->{$_} ? 1 : 0;
801 # Silence harness output
802 *TAP::Formatter::Console::_output = sub {
808 for my $test_key ( sort keys %$results ) {
809 my $result = $results->{$test_key};
811 if ( $result->{require} && $] < $result->{require} ) {
812 skip "Test requires Perl $result->{require}, we have $]", 4;
815 if ( my $skip_if = $result->{skip_if} ) {
817 "Test '$test_key' can't run properly in this environment", 4
821 my @test_names = split( /,/, $test_key );
823 = map { File::Spec->catfile( $TEST_DIR, $_ ) } @test_names;
825 # For now we supress STDERR because it crufts up /our/ test
826 # results. Should probably capture and analyse it.
827 local ( *OLDERR, *OLDOUT );
828 open OLDERR, '>&STDERR' or die $!;
829 open OLDOUT, '>&STDOUT' or die $!;
830 my $devnull = File::Spec->devnull;
831 open STDERR, ">$devnull" or die $!;
832 open STDOUT, ">$devnull" or die $!;
834 my ( $tot, $fail, $todo, $harness, $aggregate )
835 = execute_tests( tests => \@test_files );
837 open STDERR, '>&OLDERR' or die $!;
838 open STDOUT, '>&OLDOUT' or die $!;
840 my $bench = delete $tot->{bench};
841 isa_ok $bench, 'Benchmark';
843 # Localise filenames in failed, todo
844 my $lfailed = vague_status( local_result( $result->{failed} ) );
845 my $ltodo = vague_status( local_result( $result->{todo} ) );
848 # diag Dumper( [ $lfailed, $ltodo ] );
850 is_deeply $tot, $result->{totals}, "totals match for $test_key";
851 is_deeply vague_status($fail), $lfailed,
852 "failure summary matches for $test_key";
853 is_deeply vague_status($todo), $ltodo,
854 "todo summary matches for $test_key";