112 lines
2.9 KiB
Perl
112 lines
2.9 KiB
Perl
|
#! /usr/bin/env perl
|
||
|
# Copyright (C) 2018 Red Hat, Inc.
|
||
|
#
|
||
|
# Author: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||
|
# any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
|
|
||
|
# ---------------------------------- #
|
||
|
# Imports, static data, and setup. #
|
||
|
# ---------------------------------- #
|
||
|
|
||
|
use warnings FATAL => 'all';
|
||
|
use strict;
|
||
|
use Getopt::Long ();
|
||
|
use TAP::Parser;
|
||
|
|
||
|
my $ME = "tap-merge.pl";
|
||
|
my $VERSION = "2018-11-30";
|
||
|
|
||
|
my $HELP = "$ME: merge multiple TAP inputs from stdin.";
|
||
|
|
||
|
use constant DIAG_STRING => "#";
|
||
|
|
||
|
# ----------------- #
|
||
|
# Option parsing. #
|
||
|
# ----------------- #
|
||
|
|
||
|
Getopt::Long::GetOptions
|
||
|
(
|
||
|
'help' => sub { print $HELP; exit 0; },
|
||
|
'version' => sub { print "$ME $VERSION\n"; exit 0; },
|
||
|
);
|
||
|
|
||
|
# -------------- #
|
||
|
# Subroutines. #
|
||
|
# -------------- #
|
||
|
|
||
|
sub main ()
|
||
|
{
|
||
|
my $iterator = TAP::Parser::Iterator::Stream->new(\*STDIN);
|
||
|
my $parser = TAP::Parser->new ({iterator => $iterator });
|
||
|
my $testno = 0; # Number of test results seen so far.
|
||
|
my $bailed_out = 0; # Whether a "Bail out!" directive has been seen.
|
||
|
|
||
|
STDOUT->autoflush(1);
|
||
|
while (defined (my $cur = $parser->next))
|
||
|
{
|
||
|
if ($cur->is_bailout)
|
||
|
{
|
||
|
$bailed_out = 1;
|
||
|
print DIAG_STRING . " " . $cur->as_string . "\n";
|
||
|
next;
|
||
|
}
|
||
|
elsif ($cur->is_plan)
|
||
|
{
|
||
|
$bailed_out = 0;
|
||
|
next;
|
||
|
}
|
||
|
elsif ($cur->is_test)
|
||
|
{
|
||
|
$bailed_out = 0 if $cur->number == 1;
|
||
|
$testno++;
|
||
|
$cur = TAP::Parser::Result::Test->new({
|
||
|
ok => $cur->ok,
|
||
|
test_num => $testno,
|
||
|
directive => $cur->directive,
|
||
|
explanation => $cur->explanation,
|
||
|
description => $cur->description
|
||
|
});
|
||
|
}
|
||
|
elsif ($cur->is_version)
|
||
|
{
|
||
|
next if $testno > 0;
|
||
|
}
|
||
|
print $cur->as_string . "\n" unless $bailed_out;
|
||
|
}
|
||
|
print "1..$testno\n";
|
||
|
}
|
||
|
|
||
|
# ----------- #
|
||
|
# Main code. #
|
||
|
# ----------- #
|
||
|
|
||
|
main;
|
||
|
|
||
|
# Local Variables:
|
||
|
# perl-indent-level: 2
|
||
|
# perl-continued-statement-offset: 2
|
||
|
# perl-continued-brace-offset: 0
|
||
|
# perl-brace-offset: 0
|
||
|
# perl-brace-imaginary-offset: 0
|
||
|
# perl-label-offset: -2
|
||
|
# cperl-indent-level: 2
|
||
|
# cperl-brace-offset: 0
|
||
|
# cperl-continued-brace-offset: 0
|
||
|
# cperl-label-offset: -2
|
||
|
# cperl-extra-newline-before-brace: t
|
||
|
# cperl-merge-trailing-else: nil
|
||
|
# cperl-continued-statement-offset: 2
|
||
|
# End:
|