123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- use warnings;
- use strict;
- use utf8;
- use open qw(:std utf8);
- use Getopt::Long qw(:config auto_help gnu_compat);
- use Pod::Usage;
- my $verbose = 0;
- my @skip_patterns = ();
- GetOptions(
- 'skip=s' => \@skip_patterns,
- 'verbose|v:1' => \$verbose,
- ) or die;
- my @suites = grep { -x $_ || /\.exe$/ } glob 'test_suite_*';
- @suites = grep { !/\.c$/ && !/\.data$/ && -f } @suites;
- die "$0: no test suite found\n" unless @suites;
- my $skip_re =
- ( '\Atest_suite_(' .
- join('|', map {
- s/[ ,;]/|/g;
- s/\./\./g;
- $_
- } @skip_patterns) .
- ')(\z|\.)' );
- $ENV{'LD_LIBRARY_PATH'} = '../library';
- $ENV{'DYLD_LIBRARY_PATH'} = '../library';
- my $prefix = $^O eq "MSWin32" ? '' : './';
- my ($failed_suites, $total_tests_run, $failed, $suite_cases_passed,
- $suite_cases_failed, $suite_cases_skipped, $total_cases_passed,
- $total_cases_failed, $total_cases_skipped );
- my $suites_skipped = 0;
- sub pad_print_center {
- my( $width, $padchar, $string ) = @_;
- my $padlen = ( $width - length( $string ) - 2 ) / 2;
- print $padchar x( $padlen ), " $string ", $padchar x( $padlen ), "\n";
- }
- for my $suite (@suites)
- {
- print "$suite ", "." x ( 72 - length($suite) - 2 - 4 ), " ";
- if( $suite =~ /$skip_re/o ) {
- print "SKIP\n";
- ++$suites_skipped;
- next;
- }
- my $command = "$prefix$suite";
- if( $verbose ) {
- $command .= ' -v';
- }
- my $result = `$command`;
- $suite_cases_passed = () = $result =~ /.. PASS/g;
- $suite_cases_failed = () = $result =~ /.. FAILED/g;
- $suite_cases_skipped = () = $result =~ /.. ----/g;
- if( $? == 0 ) {
- print "PASS\n";
- if( $verbose > 2 ) {
- pad_print_center( 72, '-', "Begin $suite" );
- print $result;
- pad_print_center( 72, '-', "End $suite" );
- }
- } else {
- $failed_suites++;
- print "FAIL\n";
- if( $verbose ) {
- pad_print_center( 72, '-', "Begin $suite" );
- print $result;
- pad_print_center( 72, '-', "End $suite" );
- }
- }
- my ($passed, $tests, $skipped) = $result =~ /([0-9]*) \/ ([0-9]*) tests.*?([0-9]*) skipped/;
- $total_tests_run += $tests - $skipped;
- if( $verbose > 1 ) {
- print "(test cases passed:", $suite_cases_passed,
- " failed:", $suite_cases_failed,
- " skipped:", $suite_cases_skipped,
- " of total:", ($suite_cases_passed + $suite_cases_failed +
- $suite_cases_skipped),
- ")\n"
- }
- $total_cases_passed += $suite_cases_passed;
- $total_cases_failed += $suite_cases_failed;
- $total_cases_skipped += $suite_cases_skipped;
- }
- print "-" x 72, "\n";
- print $failed_suites ? "FAILED" : "PASSED";
- printf( " (%d suites, %d tests run%s)\n",
- scalar(@suites) - $suites_skipped,
- $total_tests_run,
- $suites_skipped ? ", $suites_skipped suites skipped" : "" );
- if( $verbose > 1 ) {
- print " test cases passed :", $total_cases_passed, "\n";
- print " failed :", $total_cases_failed, "\n";
- print " skipped :", $total_cases_skipped, "\n";
- print " of tests executed :", ( $total_cases_passed + $total_cases_failed ),
- "\n";
- print " of available tests :",
- ( $total_cases_passed + $total_cases_failed + $total_cases_skipped ),
- "\n";
- if( $suites_skipped != 0 ) {
- print "Note: $suites_skipped suites were skipped.\n";
- }
- }
- exit( $failed_suites ? 1 : 0 );
|