tap-merge.pl (3011B)
1#! /usr/bin/env perl 2# Copyright (C) 2018 Red Hat, Inc. 3# 4# Author: Paolo Bonzini <pbonzini@redhat.com> 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 2, or (at your option) 9# any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <https://www.gnu.org/licenses/>. 18 19# ---------------------------------- # 20# Imports, static data, and setup. # 21# ---------------------------------- # 22 23use warnings FATAL => 'all'; 24use strict; 25use Getopt::Long (); 26use TAP::Parser; 27 28my $ME = "tap-merge.pl"; 29my $VERSION = "2018-11-30"; 30 31my $HELP = "$ME: merge multiple TAP inputs from stdin."; 32 33use constant DIAG_STRING => "#"; 34 35# ----------------- # 36# Option parsing. # 37# ----------------- # 38 39Getopt::Long::GetOptions 40 ( 41 'help' => sub { print $HELP; exit 0; }, 42 'version' => sub { print "$ME $VERSION\n"; exit 0; }, 43 ); 44 45# -------------- # 46# Subroutines. # 47# -------------- # 48 49sub main () 50{ 51 my $iterator = TAP::Parser::Iterator::Stream->new(\*STDIN); 52 my $parser = TAP::Parser->new ({iterator => $iterator }); 53 my $testno = 0; # Number of test results seen so far. 54 my $bailed_out = 0; # Whether a "Bail out!" directive has been seen. 55 56 STDOUT->autoflush(1); 57 while (defined (my $cur = $parser->next)) 58 { 59 if ($cur->is_bailout) 60 { 61 $bailed_out = 1; 62 print DIAG_STRING . " " . $cur->as_string . "\n"; 63 next; 64 } 65 elsif ($cur->is_plan) 66 { 67 $bailed_out = 0; 68 next; 69 } 70 elsif ($cur->is_test) 71 { 72 $bailed_out = 0 if $cur->number == 1; 73 $testno++; 74 $cur = TAP::Parser::Result::Test->new({ 75 ok => $cur->ok, 76 test_num => $testno, 77 directive => $cur->directive, 78 explanation => $cur->explanation, 79 description => $cur->description 80 }); 81 } 82 elsif ($cur->is_version) 83 { 84 next if $testno > 0; 85 } 86 print $cur->as_string . "\n" unless $bailed_out; 87 } 88 print "1..$testno\n"; 89} 90 91# ----------- # 92# Main code. # 93# ----------- # 94 95main; 96 97# Local Variables: 98# perl-indent-level: 2 99# perl-continued-statement-offset: 2 100# perl-continued-brace-offset: 0 101# perl-brace-offset: 0 102# perl-brace-imaginary-offset: 0 103# perl-label-offset: -2 104# cperl-indent-level: 2 105# cperl-brace-offset: 0 106# cperl-continued-brace-offset: 0 107# cperl-label-offset: -2 108# cperl-extra-newline-before-brace: t 109# cperl-merge-trailing-else: nil 110# cperl-continued-statement-offset: 2 111# End: