GNU bug report logs - #20986
tap-driver.sh replacement

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: automake; Reported by: "Arthur Schwarz" <aschwarz1309@HIDDEN>; dated Sun, 5 Jul 2015 21:10:05 UTC; Maintainer for automake is bug-automake@HIDDEN.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 5 Jul 2015 21:09:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jul 05 17:09:31 2015
Received: from localhost ([127.0.0.1]:41143 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.80)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1ZBrAJ-0003yT-J1
	for submit <at> debbugs.gnu.org; Sun, 05 Jul 2015 17:09:31 -0400
Received: from eggs.gnu.org ([208.118.235.92]:42484)
 by debbugs.gnu.org with esmtp (Exim 4.80)
 (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrAH-0003yE-IT
 for submit <at> debbugs.gnu.org; Sun, 05 Jul 2015 17:09:29 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrAB-0008VT-Bd
 for submit <at> debbugs.gnu.org; Sun, 05 Jul 2015 17:09:24 -0400
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level: **
X-Spam-Status: No, score=2.8 required=5.0 tests=BAYES_50,
 FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,T_DKIM_INVALID,URIBL_BLACK
 autolearn=disabled version=3.3.2
Received: from lists.gnu.org ([2001:4830:134:3::11]:53926)
 by eggs.gnu.org with esmtp (Exim 4.71)
 (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrAB-0008V5-65
 for submit <at> debbugs.gnu.org; Sun, 05 Jul 2015 17:09:23 -0400
Received: from eggs.gnu.org ([2001:4830:134:3::10]:55982)
 by lists.gnu.org with esmtp (Exim 4.71)
 (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrA9-0003V3-Qs
 for bug-automake@HIDDEN; Sun, 05 Jul 2015 17:09:23 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrA4-0008RO-Mv
 for bug-automake@HIDDEN; Sun, 05 Jul 2015 17:09:21 -0400
Received: from nm18-vm9.access.bullet.mail.gq1.yahoo.com ([216.39.62.65]:40174)
 by eggs.gnu.org with esmtp (Exim 4.71)
 (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrA3-0008Qx-Sm
 for bug-automake@HIDDEN; Sun, 05 Jul 2015 17:09:16 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=att.net; s=s1024;
 t=1436130554; bh=1mtPbfL0XUv4JdwN1mL8RxmG7VSPAi1tc4UAQLEG34s=;
 h=From:To:Subject:Date:From:Subject;
 b=Hkmko7Dl3cac2pcedI1Fc/dqLQjxMIliZCJ0uZ1sN3kSHwjxFbLtz9d7fbuzTKwbNJH3wP83UTGBhw2SWTs/MERKXMSAxEjZM5ektkB8et/Nfb15VtbAWiVHHfBpy7XgV08PFcJP2Q6qBOGRCXxylTnvaUmp3FOaUuTZiHAipus=
Received: from [216.39.60.170] by nm18.access.bullet.mail.gq1.yahoo.com with
 NNFMP; 05 Jul 2015 21:09:14 -0000
Received: from [98.138.104.98] by tm6.access.bullet.mail.gq1.yahoo.com with
 NNFMP; 05 Jul 2015 21:09:13 -0000
Received: from [127.0.0.1] by smtp118.sbc.mail.ne1.yahoo.com with NNFMP;
 05 Jul 2015 21:09:13 -0000
X-Yahoo-Newman-Id: 788010.78100.bm@HIDDEN
X-Yahoo-Newman-Property: ymail-3
X-YMail-OSG: PYXxducVM1nGhxq_adP0jkcjLtIsVJUGUTa2uv..UrOjUIK
 K7YyFM40WFOmioudjmzhpDmcvDG90NrbOUtxKCUJ_97IUaYpDxictihAoNUx
 Rub54H3T5NrnMORLsP0BPqJQAur81x_eEfz76UBrbYgHBuLAJ8cpcWSS_wZ4
 jkq6UE3zva080MM8XWRhgaywBJBtf1N4vsxF0PPxO0kyH3eRumbuNp_icaYj
 d9O49zhAQFm5jOq3UkBl.q94Ic.19qxS0xRGJ8YIQw9XZfbCrSQ2GQip0Xrt
 7LO5SjR6wfnHBUgwyEYX09oxjwwcG3JkSC0mCpID8AyT2hnE8wmLryMnTDwG
 xZpXGbwlxh3Zyu09TqGGmtgC_qX3HbIqeGkde4ZtvfS6Ga3hSJJXXxX3Ht9z
 2Xy6WtJ_zsl4_ieYyZgXR5445tZJsVFQm_Y0fXc08hAkD__o7rpW3L0lzvHv
 9iLmU9LzJLJdS5a6Y7DGVtEQH2oJN71rQirQ1hc95._.LrYra_iYQw1.zIXZ
 5haSQyzP3EQKoK2GHXl7FoI9io35XBKXUhYW2qR7QtxUcQfx4N_zYfwtI
X-Yahoo-SMTP: 0z5TJLmswBDohOc2QznCIeoaEiEalQiTSMLFNdKdTt4t
From: "Arthur Schwarz" <aschwarz1309@HIDDEN>
To: <bug-automake@HIDDEN>
Subject: tap-driver.sh replacement
Date: Sun, 5 Jul 2015 14:09:03 -0700
Message-ID: <51D3686C77104D96961C51250512DF6F@2600kPC>
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="----=_NextPart_000_0015_01D0B72C.26DD8480"
X-Mailer: Microsoft Office Outlook 11
Thread-Index: AdC3ZtIN3TV2Hc8AT1aERIOkgHj5ww==
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7601.17609
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x
X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address
 (bad octet value).
X-Received-From: 2001:4830:134:3::11
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

This is a multi-part message in MIME format.

------=_NextPart_000_0015_01D0B72C.26DD8480
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

The existing tap-driver.sh has flaws in detecting TAP input. The replacement
file removes all flaws, accepts the complete TAP Standard, and
1: Has extensive diagnostic messaging,
2: Is resilient to errors, 
3: Modular design,
4: Is documented,
5: Executes a suite of tests successfully,
6: etc.

I have previously assigned a copyright of stuff to the FSF, hopefully it
applies to this submission as well.

tap_setup.tar.xz has:
configure.ac     Autoconf configure file used
Makefile.am      root directory Makefile
buildscript.sh   The script I use to build and execute the tests
src/Makefile.am  TAP and a suite of 14 tests

tap_driver-0.5.tar.xz distribution tarball

The replacement version has one strong variance with the existing version.
The '--ignore-exit' option is ignored. I've looked at the implementation and
there is no rationale given stating its requirement or what issue is
resolved with it being present. At issue is that the implementation is
affected by its inclusion. So, it aint there.

The current implementation suffers from some issues. I believe all
outstanding issues are resolved with the new version.

Documentation for the test section, including complete documentation for
TAP, is included in another message (Replacing "15 Support for test
suites"). The document sent is some 100K and I realize is presents an issue.



Maintenance turns design into chaos


------=_NextPart_000_0015_01D0B72C.26DD8480
Content-Type: application/octet-stream;
	name="tap_setup.tar.xz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="tap_setup.tar.xz"

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

------=_NextPart_000_0015_01D0B72C.26DD8480
Content-Type: application/octet-stream;
	name="tap_driver-0.5.tar.xz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="tap_driver-0.5.tar.xz"

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

------=_NextPart_000_0015_01D0B72C.26DD8480
Content-Type: application/octet-stream;
	name="tap-driver.sh.new"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="tap-driver.sh.new"

#! /bin/sh=0A=
# Copyright (C) 2011-2013 Free Software Foundation, Inc.=0A=
#=0A=
# This program is free software; you can redistribute it and/or modify=0A=
# it under the terms of the GNU General Public License as published by=0A=
# the Free Software Foundation; either version 2, or (at your option)=0A=
# any later version.=0A=
#=0A=
# This program is distributed in the hope that it will be useful,=0A=
# but WITHOUT ANY WARRANTY; without even the implied warranty of=0A=
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the=0A=
# GNU General Public License for more details.=0A=
#=0A=
# You should have received a copy of the GNU General Public License=0A=
# along with this program.  If not, see <http://www.gnu.org/licenses/>.=0A=
=0A=
# As a special exception to the GNU General Public License, if you=0A=
# distribute this file as part of a program that contains a=0A=
# configuration script generated by Autoconf, you may include it under=0A=
# the same distribution terms that you use for the rest of that program.=0A=
=0A=
# This file is maintained in Automake, please report=0A=
# bugs to <bug-automake@HIDDEN> or send patches to=0A=
# <automake-patches@HIDDEN>.=0A=
=0A=
scriptversion=3D2013-12-23.17; # UTC=0A=
=0A=
# Make unconditional expansion of undefined variables an error.  This=0A=
# helps a lot in preventing typo-related bugs.=0A=
set -u=0A=
=0A=
me=3Dtap-driver.sh=0A=
=0A=
fatal ()=0A=
{=0A=
  echo "$me: fatal: $*" >&2=0A=
  exit 1=0A=
}=0A=
=0A=
usage_error ()=0A=
{=0A=
  echo "$me: $*" >&2=0A=
  print_usage >&2=0A=
  exit 2=0A=
}=0A=
=0A=
print_usage ()=0A=
{=0A=
  cat <<END=0A=
Usage:=0A=
  tap-driver.sh --test-name=3DNAME --log-file=3DPATH --trs-file=3DPATH=0A=
                [--expect-failure=3D{yes|no}] [--color-tests=3D{yes|no}]=0A=
                [--enable-hard-errors=3D{yes|no}] [--ignore-exit]=0A=
                [--diagnostic-string=3DSTRING] [--merge|--no-merge]=0A=
                [--comments|--no-comments] [--] TEST-COMMAND=0A=
The '--test-name', '-log-file' and '--trs-file' options are mandatory.=0A=
END=0A=
}=0A=
=0A=
# TODO: better error handling in option parsing (in particular, ensure=0A=
# TODO: $log_file, $trs_file and $test_name are defined).=0A=
test_name=3D # Used for reporting.=0A=
log_file=3D  # Where to save the result and output of the test script.=0A=
trs_file=3D  # Where to save the metadata of the test run.=0A=
expect_failure=3D0=0A=
color_tests=3D0=0A=
merge=3D0=0A=
ignore_exit=3D0=0A=
comments=3D0=0A=
diag_string=3D'#'=0A=
=0A=
while test $# -gt 0; do=0A=
  case $1 in=0A=
  --help) print_usage; exit $?;;=0A=
  --version) echo "$me $scriptversion"; exit $?;;=0A=
  --test-name) test_name=3D$2; shift;;=0A=
  --log-file) log_file=3D$2; shift;;=0A=
  --trs-file) trs_file=3D$2; shift;;=0A=
  --color-tests) color_tests=3D$2; shift;;=0A=
  --expect-failure) expect_failure=3D$2; shift;;=0A=
  --enable-hard-errors) shift;; # No-op.=0A=
  --merge) merge=3D1;;=0A=
  --no-merge) merge=3D0;;=0A=
  --ignore-exit) ignore_exit=3D1;;=0A=
  --comments) comments=3D1;;=0A=
  --no-comments) comments=3D0;;=0A=
  --diagnostic-string) diag_string=3D$2; shift;;=0A=
  --) shift; break;;=0A=
  -*) usage_error "invalid option: '$1'";;=0A=
  esac=0A=
  shift=0A=
done=0A=
=0A=
test $# -gt 0 || usage_error "missing test argument"=0A=
=0A=
=0A=
case $expect_failure in=0A=
  yes) expect_failure=3D1;;=0A=
    *) expect_failure=3D0;;=0A=
esac=0A=
=0A=
init_colors=3D''=0A=
if test $color_tests =3D yes; then=0A=
  init_colors=3D'=0A=
    color_map["red"]=3D"=1B[0;31m" # Red.=0A=
    color_map["grn"]=3D"=1B[0;32m" # Green.=0A=
    color_map["lgn"]=3D"=1B[1;32m" # Light green.=0A=
    color_map["blu"]=3D"=1B[1;34m" # Blue.=0A=
    color_map["mgn"]=3D"=1B[0;35m" # Magenta.=0A=
    color_map["std"]=3D"=1B[m"     # No color.=0A=
    color_for_result["ERROR"] =3D "mgn"=0A=
    color_for_result["PASS"]  =3D "grn"=0A=
    color_for_result["XPASS"] =3D "red"=0A=
    color_for_result["FAIL"]  =3D "red"=0A=
    color_for_result["XFAIL"] =3D "lgn"=0A=
    color_for_result["SKIP"]  =3D "blu"'=0A=
fi=0A=
=0A=
# :; is there to work around a bug in bash 3.2 (and earlier) which=0A=
# does not always set '$?' properly on redirection failure.=0A=
# See the Autoconf manual for more details.=0A=
:;{=0A=
  (=0A=
    # Ignore common signals (in this subshell only!), to avoid potential=0A=
    # problems with Korn shells.  Some Korn shells are known to propagate=0A=
    # to themselves signals that have killed a child process they were=0A=
    # waiting for; this is done at least for SIGINT (and usually only for=0A=
    # it, in truth).  Without the `trap' below, such a behaviour could=0A=
    # cause a premature exit in the current subshell, e.g., in case the=0A=
    # test command it runs gets terminated by a SIGINT.  Thus, the awk=0A=
    # script we are piping into would never see the exit status it=0A=
    # expects on its last input line (which is displayed below by the=0A=
    # last `echo $?' statement), and would thus die reporting an internal=0A=
    # error.=0A=
    # For more information, see the Autoconf manual and the threads:=0A=
    # =
<http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>=0A=
    # =
<http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-Feb=
ruary/004121.html>=0A=
    trap : 1 3 2 13 15=0A=
    if test $merge -gt 0; then=0A=
      exec 2>&1=0A=
    else=0A=
      exec 2>&3=0A=
    fi=0A=
    =0A=
    # Execute the test in tap-driver.sh [options] test=0A=
    "$@"=0A=
#    echo $?=0A=
  ) | LC_ALL=3DC ${AM_TAP_AWK-awk} \=0A=
        -v me=3D"$me" \=0A=
        -v test_script_name=3D"$test_name" \=0A=
        -v log_file=3D"$log_file" \=0A=
        -v trs_file=3D"$trs_file" \=0A=
        -v expect_failure=3D"$expect_failure" \=0A=
        -v merge=3D"$merge" \=0A=
        -v ignore_exit=3D"$ignore_exit" \=0A=
        -v comments=3D"$comments" \=0A=
        -v diag_string=3D"$diag_string" \=0A=
'=0A=
# TODO: the usages of "cat >&3" below could be optimized when using=0A=
#       GNU awk, and/on on systems that supports /dev/fd/.=0A=
=0A=
# NOTES:=0A=
#   There are two gawk issues which affect the way that arguments are =
used=0A=
#   and the passage of information from a function back to its caller. =0A=
#   1: gawk promotes the specification of local variables to the function=0A=
#      parameter list. Any parameter not specifically passed by the =
caller=0A=
#      is considered a local variable. =0A=
#      =0A=
#      Parameters and local variables are specified in the function =
statement=0A=
#      by separating the local variables by 3 spaces from the =
parameters, as =0A=
#      in:=0A=
#      =0A=
#        function fnc(P1, P2,   V1, V2) or=0A=
#        function fnc(   V1, V2)=0A=
#      =0A=
#      where the parameters are P1 and P2, and the local variables are =
V1 and =0A=
#      V2.=0A=
#      =0A=
#      In each use the caller must use all of the parameters. In =
descriptions=0A=
#      of the function, only the parameters will be listed. This means =
that=0A=
#      the caller will always use:=0A=
#      =0A=
#         fnc(P1, P2) and descriptions will use=0A=
#         fnc(P1, P2) without exception.=0A=
#      =0A=
#   2: Parameters are always IN and never INOUT or OUT. Passage of date =
from=0A=
#      a function to the caller is either by return value or by a global =
or=0A=
#      both. All globals are consumed by a caller before reuse. Each =
function=0A=
#      passing back data will have a side affect of altering a global. =
This=0A=
#      will be indicated in the function preamble with the annotation:=0A=
#      =0A=
#        sideeffect[OUT] or=0A=
#        sideeffect[INOUT]=0A=
#=0A=
=0A=
# -------------- function listing --------------=0A=
# function decorate_result(result)=0A=
# function handle_bail_out(line)=0A=
# function handle_diagnostics()=0A=
# function handle_not_ok(line)=0A=
# function handle_ok(line)=0A=
# function handle_test_plan(line)=0A=
# function handle_yaml()=0A=
# function input_check(st)=0A=
# function parse_test_line(line)=0A=
# function post_processing() {=0A=
# function preamble()=0A=
# function write_error(msg)=0A=
# function write_fail_test_results()=0A=
# function write_fatal_test_results()=0A=
# function write_log(str)=0A=
# function write_log_summary()=0A=
# function write_options()=0A=
# function write_pass_test_results()=0A=
# function write_skip_test_results()=0A=
# function write_result(result, str)=0A=
# ----------------------------------------------=0A=
=0A=
## ----------- ##=0A=
##  FUNCTIONS  ##=0A=
## ----------- ##=0A=
=0A=
#=0A=
# @fn decorate_result(result)=0A=
# @brief Determine a message color to use for console output.=0A=
# <p>Console output can be colorized. This function determines=0A=
#    what color to use for the given message type.</p>=0A=
# <p>The associatION of color to message type is done on script=0A=
#    entry in the shell script, not in awk.</p>=0A=
# <p>The result values are:</p>=0A=
# <ul>=0A=
#    <li>"ERROR" A parsing or I/O error was found</li>=0A=
#    <li>"PASS"  TAP ok</li>=0A=
#    <li>"XPASS" TAP ok with expect_failure =3D yes</li>=0A=
#    <li>"FAIL"  TAP not ok</li>=0A=
#    <li>"XFAIL" TAP not ok with expect_failure =3D yes</li>=0A=
#    <li>"SKIP"  TAP ok # SKIP</li>=0A=
# </ul>=0A=
# <p>If the output is not to be colorized then the input=0A=
#    result is returned.</p>=0A=
#=0A=
# side effects: none=0A=
#=0A=
# @param[in] result one of the message types=0A=
# @return either a colorized result or a non-colorized result=0A=
#=0A=
function decorate_result(result)=0A=
{=0A=
  color_name =3D color_for_result[result]=0A=
  if (color_name)=0A=
    return color_map[color_name] "" result "" color_map["std"]=0A=
    =0A=
  # If we are not using colorized output, or if we do not know how=0A=
  # to colorize the given result, we should return it unchanged.=0A=
  return result=0A=
}=0A=
=0A=
#=0A=
# @fn handle_bail_out(line)=0A=
# @brief Process Bail Out!.=0A=
# <p>Bail Out! is a fatal error. The assumed test case intent is=0A=
#    to terminate all processing because of some unexpected and=0A=
#    fatal condition. As an Automake extension Diagnostics and=0A=
#    comments following a Bail Out! are accepted. The first test=0A=
#    line is flagged as an error (one error per test case) and=0A=
#    all test lines are processed to determine if there are any=0A=
#    TAP syntax errors. The test results is discarded and the=0A=
#    output .trs file will not contain .trs metadata to represent=0A=
#    these test lines.</p>=0A=
# <p>If this is not the first Bail Out! seen post a message.</p>=0A=
# <p>There are two phases to the processing:</p>=0A=
# <ul>=0A=
#    <li>Phase I: This is the first time that a Bail Out! message=0A=
#        has been seen. Issue a message and then continue stripping=0A=
#        out all Diagnostics and YAML.</li>=0A=
#        <ul>=0A=
#           <li>If a test line, test plan is found, issue a one=0A=
#               time message and return to the main parsing loop.</li>=0A=
#           <li>If a Bail Out! is seend issue a message and=0A=
#               return to the main parsing loop.</li>=0A=
#           <li>Process all Diagnostics.</li>=0A=
#           <li>Process all YAML comments.</li>=0A=
#           <li>If Bail Out! is seen, issue a diagnostic message=0A=
#               and return to the main parsing loop.=0A=
#        </ul>=0A=
#    <li>Phase II: Issue a diagnostic message and return to the=0A=
#        main parsing loop.</li>=0A=
# </ul>=0A=
# <p>The read loop assumes that a line has been input. This=0A=
#    assumption affects the main parsing loop. When a return=0A=
#    from this function is made, the next line of input has=0A=
#    already been input. Therefore, the st =3D getline statement=0A=
#    in the main parsing loop has to be bypassed. This is =0A=
#    all to say that this jewel of a code fragment is sneaky =0A=
#    pete code.</p>=0A=
#=0A=
# sideeffect[inout] bailed_out value changed to 1 + testno=0A=
# sideeffect[OUT]   testno     +1 if test line command found=0A=
#=0A=
# @param[inout] line input line - destroyed during processing=0A=
# @return st status of I/O on input pipe=0A=
# =0A=
function handle_bail_out(line,   bailout_message, st)=0A=
{=0A=
    if (DEBUG) print "handle_bail_out(\"" line "\")" > log_file=0A=
=0A=
    if (bailed_out) =0A=
    {=0A=
       write_error("Multiple Bail Out!")=0A=
    }=0A=
    else =0A=
    {=0A=
       bailed_out =3D 1 + testno=0A=
       # Strip leading and trailing whitespace.=0A=
       sub("^[ \t]*Bail out!", "", line);         # leading whitespace=0A=
       sub("[ \t]*$", "", line);                  # trailing whitespace=0A=
       =0A=
       # Format the error message =0A=
       bailout_message =3D "Bail out! " line=0A=
       write_result("ERROR", bailout_message)=0A=
       =0A=
       st =3D getline=0A=
       while(st > 0) =0A=
       { =0A=
          write_log($0)=0A=
          if ($0 ~ /^not ok/) =0A=
          {=0A=
              testno++=0A=
              handle_not_ok($0)=0A=
              write_error("Illegal test line after Bail Out!")=0A=
          }=0A=
          # TAP test line ok.=0A=
          else if ($0 ~ /^ok/) =0A=
          {=0A=
              testno++=0A=
              handle_ok($0)=0A=
              write_error("Illegal test line after Bail Out!")=0A=
          }=0A=
          # TAP test plan 1..N=0A=
          else if ($0 ~ /^1/) =0A=
          {=0A=
              handle_test_plan($0)=0A=
              write_error("Illegal test plan after Bail Out!")=0A=
            }=0A=
          else if ($0 ~ /^[ \t]*Bail out!/) =0A=
          {=0A=
              write_error("Multiple Bail Out!")=0A=
          }=0A=
          # Diagnostics.=0A=
          else if ($0 ~ /^#/) =0A=
          {=0A=
              if (handle_diagnostics() > 0) continue=0A=
              else break;=0A=
          }=0A=
          else if (!($0 ~ /^[ \t]*$/))            # not a blank line=0A=
          {    # check for YAML & if not then ERROR=0A=
             if (DEBUG) print "check for YAML" > log_file=0A=
             if ($0 ~ /[ \t]+---[ \t]*$/)        # YAML start --- line=0A=
             {=0A=
                 if (handle_yaml() > 0) =0A=
                    continue=0A=
                 else =0A=
                 {=0A=
                     write_error("Missing  YAML end")=0A=
                     break=0A=
                 }=0A=
             }=0A=
             else if ($0 ~ /^[ \t]+\.\.\.[ \t]*$/) # YAML stop ... line=0A=
                 write_error("Missing  YAML begin")=0A=
                 =0A=
             else=0A=
                 write_error("Undefined TAP statement")=0A=
=0A=
            }=0A=
          st =3D getline=0A=
          if (DEBUG) print "test_suite_status " test_suite_status > =
log_file=0A=
       } =0A=
    }=0A=
    =0A=
    if (DEBUG) print "handle_bail_out: bailed_out " bailed_out " testno =
" testno > log_file=0A=
=0A=
    return st=0A=
}=0A=
=0A=
#=0A=
# @fn handle_diagnostics()=0A=
# @brief Process Diagnostics=0A=
# <p>Where one Diagnnostic exist there may be many. Continue=0A=
#    inputting lines from the input test case pipe until =0A=
#    either a non-Diagnostic if found, an EOF is found,=0A=
#    or there is an I/O error.</p>=0A=
# <p>The read loop assumes that a line has been input. This=0A=
#    assumption affects the main parsing loop. When a return=0A=
#    from this function is made, the next line of input has=0A=
#    already been input. Therefore, the st =3D getline statement=0A=
#    in the main parsing loop has to be bypassed. This is =0A=
#    all to say that this jewel of a code fragment is sneaky =0A=
#    pete code.</p>=0A=
#=0A=
# @return st status of input test case pipe=0A=
#=0A=
function handle_diagnostics(   st) =0A=
{=0A=
    if (DEBUG) print "handle_diagnostics:" > log_file=0A=
=0A=
    st =3D getline=0A=
    while(st > 0) {=0A=
        if ($0 ~ /^#/)  write_log($0)=0A=
        else break=0A=
        st =3D getline=0A=
    }=0A=
    return st=0A=
}=0A=
=0A=
#=0A=
# @fn handle_not_ok(line)=0A=
# @brief Process TAP not ok test line.=0A=
# <p>A test line is parsed and the result analyzed for=0A=
#    correctness.  The default result is given in COOKED-FAIL.=0A=
#    COOKED_FAIL values are "FAIL" or "XFAIL" if a failure=0A=
#    is expected.</p>=0A=
#=0A=
# sideeffect[OUT]   test_suite_status reflects global status=0A=
# sideeffect[IN]    N either testno or the parsed  statement test no=0A=
# sideeffect[IN]    comment the parsed statement comment=0A=
#=0A=
# @param[inout] line the line to be processed. Processing destroys the =
line.=0A=
# @return 0 for successful, 1 for failure.=0A=
#=0A=
function handle_not_ok(line,   result, parse) =0A=
{=0A=
    if (DEBUG) print "handle_not_ok(\"" line "\")  COOKED_FAIL " =
COOKED_FAIL > log_file=0A=
    =0A=
    result  =3D COOKED_FAIL=0A=
    sub(/^not ok/, "", line)=0A=
    if (line ~ /^[:graph:]/)       # check if not EOL or [ \t]=0A=
    {=0A=
       result =3D "ERROR"=0A=
    }=0A=
    else                           # [:blank:] or EOL=0A=
    {=0A=
       parse =3D parse_test_line(line)=0A=
       switch(parse)=0A=
       {=0A=
          case "":=0A=
          case "TODO":=0A=
              if (DEBUG) print "handle_not_ok N(" N ") " testno > =
log_file=0A=
              if (N !=3D testno)=0A=
              {=0A=
                  test_suite_status =3D or(test_suite_status, ERROR)=0A=
                  result =3D "ERROR"=0A=
                  write_error("Test line number wrong " N " !=3D " =
testno)=0A=
              }=0A=
              else if (result =3D=3D "XFAIL")=0A=
                  test_suite_status =3D or(test_suite_status, PASS)=0A=
              else=0A=
                  test_suite_status =3D or(test_suite_status, FAIL)=0A=
              break=0A=
              if (parse =3D=3D "TODO") result =3D COOKED_PASS=0A=
          case "SKIP":=0A=
              write_error("SKIP not allowed")=0A=
          case "ERROR":=0A=
              test_suite_status =3D ERROR=0A=
              result =3D "ERROR"=0A=
              break=0A=
       }=0A=
    }=0A=
    =0A=
    write_result(result, comment)=0A=
    return (result =3D=3D "ERROR")? 1: 0=0A=
}=0A=
=0A=
#=0A=
# @fn handle_ok(line)=0A=
# @brief Process TAP ok test line.=0A=
# <p>A test line is parsed and the result analyzed for=0A=
#    correctness.  The default result is given in COOKED_PASS.=0A=
#    COOKED_PASS values are "PASS" and "XPASS" if a PASS is=0A=
#    not expected expected.</p>=0A=
#=0A=
# sideeffect[OUT]   test_suite_status reflects global status=0A=
# sideeffect[IN]    N either testno or the parsed  statement test no=0A=
# sideeffect[IN]    comment the parsed statement comment=0A=
#=0A=
# @param[inout] line the line to be processed. Processing destroys the =
line.=0A=
# return 0 for successful, 1 for failure.=0A=
#=0A=
function handle_ok(line,   result, parse) =0A=
{    =0A=
    if (DEBUG) print "handle_ok(\"" line "\")" > log_file=0A=
=0A=
    result  =3D COOKED_PASS=0A=
    sub(/^ok/, "", line)=0A=
    if (line ~ /^[:graph:]/)       # check if EOL or not [:blank:]=0A=
    {=0A=
       result =3D "ERROR"=0A=
    }=0A=
    else                           # [:blank:] or EOL=0A=
    {=0A=
       parse =3D parse_test_line(line)=0A=
       switch(parse)=0A=
       {=0A=
          case "":=0A=
          case "TODO":=0A=
              if (DEBUG) print "handle_ok N(" N ") " testno > log_file=0A=
              if (N !=3D testno)=0A=
              {=0A=
                  test_suite_status =3D ERROR=0A=
                  result =3D "ERROR"=0A=
                  write_error("Test line number wrong " N " !=3D " =
testno)=0A=
              }=0A=
              else if ((result =3D=3D "XFAIL") || (result =3D=3D "PASS"))=0A=
                  test_suite_status =3D or(test_suite_status, PASS)=0A=
              else=0A=
                  test_suite_status =3D or(test_suite_status, FAIL)=0A=
              break=0A=
          case "SKIP":=0A=
              result =3D "SKIP"=0A=
              test_suite_status =3D or(test_suite_status, SKIP)=0A=
              break=0A=
          case "ERROR":=0A=
              test_suite_status =3D ERROR=0A=
              result =3D "ERROR"=0A=
              break=0A=
       }=0A=
    }=0A=
=0A=
    write_result(result, comment)=0A=
    return (result =3D=3D "ERROR")? 1: 0=0A=
}=0A=
=0A=
#=0A=
# @fn handle_test_plan(line)=0A=
# @brief Parse and process test plans=0A=
# <p>Test plans have the following format:</p>=0A=
# <tt><pre>=0A=
#    1..N [# [comment]]=0A=
#    1..0 [# [comment]]=0A=
# </pre></tt>=0A=
#=0A=
# <p>where N is a number >=3D 0 and</p>=0A=
# <ul>=0A=
#    <li><b>1..0</b> signifies that the test suite has been skipped.=0A=
#        Any test lines of any description are errors and will cause=0A=
#        the test suite to be in ERROR.</li>=0A=
#    <li><b>1..N</b> signifies that the maximum number of test lines=0A=
#        in the test suite are N. If there are k > N test lines the=0A=
#        test suite will be in ERROR. If there are k < N test lines=0A=
#        in the test suite, the the missing k+1..N lines will be =0A=
#        considered as SKIPed.</li>=0A=
# </ul>=0A=
# <p>Parsing consists of recognizing the correct format of the input=0A=
#    statement and recording N or 0 in the global planned_tests =
variable. =0A=
#    Comment lines are discarded.</p>=0A=
# <p>Successful processing of the test plan depends on knowing=0A=
#    whether the current plan is the first or the last or if the=0A=
#    plan precedes all test lines that have been processed. These=0A=
#    determinations are made with the global variables:</p>=0A=
#    </br>=0A=
#    plan_seen which indicates the status of the test plan.=0A=
#    </br>=0A=
#    testno which counts the test lines seen.=0A=
#    <p>The values for plan_seen are:</p>=0A=
# <ul>=0A=
#    <li><b>NO_PLAN</b>[0]    the plan has not been seen.</li>=0A=
#    <li><b>EARLY_PLAN</b>[1] the plan is at the top.</li>=0A=
#    <li><b>LATE_PLAN</b>[>1] the plan is at the bottom</li>=0A=
# </ul>=0A=
# <p>At termination, after and EOF or I/O failure, it is possible=0A=
#    to determine the status of the test plan. The Algorithm is:</p>=0A=
#  <ul>=0A=
#     <li>test_plan =3D=3D 0 A test plan has not been seen. This =0A=
#         violates Automake standards and is an error.</li>=0A=
#     <li>test_plan =3D=3D 1 A test plan is an EARLY_PLAN. This=0A=
#         accords to the Automake standard and is accepted.</li>=0A=
#     <li>test_plan >  2 A test plan can either be a LATE_PLAN=0A=
#         or can be intermingled with test lines. If the test=0A=
#         plan is a LATE_PLAN then this violates Automake =0A=
#         standards. If the test plan is intermingled, it is=0A=
#         illegal. To distinguish between the two cases:=0A=
#         <p>if ((plan_seen - 1) =3D=3D testno) then it is a =
LATE_PLAN</p>=0A=
#         </br>=0A=
#         else it is intermingled and illegal.=0A=
#     </li>=0A=
#  </ul>=0A=
#=0A=
# sideeffect[OUT]   test_suite_status reflects global status=0A=
# sideeffect[OUT]   plan_seen         1 + testno if plan ok=0A=
# sideeffect[OUT]   planned_tests     N in 1..N or MAX_TESTS for ERROR=0A=
#=0A=
# @param[inout] line the input line - the value is destroyed during =
parsing=0A=
# @return [BOOL] true if the plan is successfully validated.=0A=
#=0A=
function handle_test_plan(line)=0A=
{=0A=
    if (DEBUG) printf("handle_test_plan(\"%s\"\n                =
plan_seen %d testno %d\n", line, plan_seen, testno) > log_file=0A=
    =0A=
    if (line ~ /^1..[[:digit:]]+/)=0A=
    {=0A=
       if (plan_seen)=0A=
       {=0A=
          test_suite_status =3D ERROR=0A=
          write_error("Test plan duplicate.")=0A=
       }=0A=
       else =0A=
       {=0A=
          if (testno)=0A=
          {=0A=
             test_suite_status =3D ERROR=0A=
             write_error("Test plan follows first test.")=0A=
          }=0A=
          sub(/^1../, "", line)=0A=
          match(line, /^[[:digit:]]+/)=0A=
          planned_tests =3D strtonum(substr(line, RSTART, RLENGTH))=0A=
          plan_seen =3D 1 + testno=0A=
          sub(/^[[:digit:]]+/, "", line)=0A=
          sub(/^[[:blank:]]*/, "", line)=0A=
          if (planned_tests < 0) =0A=
          {=0A=
              planned_test =3D MAX_TESTS=0A=
              test_suite_status =3D ERROR=0A=
              write_error("Test plan number wrong")=0A=
          }=0A=
          else if ((length(line) > 0) && !(line ~ /^#/))=0A=
          {=0A=
              test_suite_status =3D ERROR=0A=
              write_error("Test plan syntax wrong. Comment starts with =
\"#\".")=0A=
          }=0A=
          else if (planned_tests =3D=3D 0)=0A=
          {=0A=
              test_suite_status =3D SKIP=0A=
              write_result("SKIP", "")=0A=
          }=0A=
       }=0A=
    }=0A=
    else=0A=
    {=0A=
       test_suite_status =3D ERROR=0A=
       write_error("Test plan syntax wrong. Should be \"1..digit\".")=0A=
    }=0A=
    if (DEBUG) print "handle_test_plan: planned_tests " planned_tests > =
log_file=0A=
}=0A=
=0A=
#=0A=
# @fn handle_yaml()=0A=
# @brief Process YAML comments.=0A=
# <p>YAML comments are part of th Test Results File interfae.=0A=
#    There is no way to return YAML to the Automake Test Harnes=0A=
#    all YAML comments are disgarded.</p>=0A=
# <p>This function searches for the YAML comment terminator.</p>=0A=
# <p>The read loop assumes that a line has been input and the=0A=
#    YAML lead (---) has been found. This assumption affects the =0A=
#    main parsing loop. When a return from this function is made, =0A=
#    the next line of input has already been input. Therefore, =0A=
#    the st =3D getline statement in the main parsing loop has to=0A=
#    be bypassed. This is all to say that this jewel of a code =0A=
#    fragment is sneaky pete code.</p>=0A=
#=0A=
# @return st  status of test case input file=0A=
#=0A=
function handle_yaml()=0A=
{=0A=
    if (DEBUG) print "handle_yaml(" line ")" > log_file=0A=
=0A=
    st =3D getline=0A=
    while(st > 0) =0A=
    {=0A=
       write_log($0)=0A=
       if ($0 ~ /^[ \t]+\.\.\.[ \t]*$/) break;=0A=
       st =3D getline=0A=
    }=0A=
    return st=0A=
}=0A=
=0A=
#=0A=
# @fn input_check(st)=0A=
# @brief Determine if an I/O error occurred.=0A=
# <p>Use the input status value to determine whether the =0A=
#    error was fatal (< 0) or and End Of File (=3D=3D 0).</p>=0A=
#=0A=
# @param[in] st I/O status =0A=
#=0A=
function input_check(st)=0A=
{=0A=
    if(st <=3D 0) =0A=
    {=0A=
       write_fatal_test_results()=0A=
       if (st < 0) # I/O error.=0A=
          write_error("I/O error in input stream")=0A=
       else if (st =3D=3D 0) # End-of-input=0A=
          write_error("No input lines")=0A=
    }=0A=
    return st=0A=
}=0A=
=0A=
#=0A=
# @fn parse_test_line(line)=0A=
# @brief Parse test line.=0A=
# <p>The test line is parsed.</p>=0A=
# <p>test line has the following formats</p>=0A=
# <tt><pre>=0A=
#     ok     [N] [comment] [# Directive [d_comment]]=0A=
#     not ok [N] [comment] [# Directive [d_comment]]=0A=
# </pre></tt>=0A=
#=0A=
# <p>There must be at least on <ws> separator between elements of=0A=
#    the test-line except that not ok must have a single blank=0A=
#    separator between not and ok.</p>=0A=
# <p>where</p>=0A=
# <ul>=0A=
#   <li>N[current test line number] Optional test line number.</li>=0A=
#   <li>comment[""] Optional test list comment. The comment can =0A=
#        not contain a #.</li>=0A=
#   <li>Directive[""] Optional TAP directive. The Directives are not=0A=
#       case sensitive. If a Directive is found it is treated as a =0A=
#       SKIP.The legal directives are:</li>=0A=
#      <ul>=0A=
#         <li>SKIP </li>=0A=
#         <li>TODO </li>=0A=
#      </ul>=0A=
#   <li>d_comment[""] Optional directive comment</li>=0A=
# </ul>=0A=
#=0A=
# <p>The trs :test-result: comment is:</p>=0A=
# <tt><pre>=0A=
#    [comment] [# Directive [d_comment]]=0A=
# </pre></tt>=0A=
# <p>And the :test-result: Test Results File output will look like:</p>=0A=
# <tt><pre>=0A=
#    :test-result: xxxxx [comment] [# Directive [d_comment]]=0A=
# </pre></pre>=0A=
# <p>Where xxxxx is the result left justified into a 5 character field=0A=
#    separated by a blank, from the comments.</p>=0A=
#=0A=
# sideeffect[OUT]    N either testno or the parsed  statement test no=0A=
# sideeffect[OUT]    comment the parsed statement comment=0A=
#=0A=
# @param[inout] line TAP test-line irremedially modified=0A=
# @return processing result {"", "SKIP", "ERROR"}=0A=
#=0A=
function parse_test_line(line,   d_loc, d_name, d_sep, directive)=0A=
{=0A=
    N         =3D testno=0A=
    comment   =3D ""=0A=
    directive =3D ""=0A=
    if (line ~ /^[[:blank:]]+[[:digit:]]/)      # check for N=0A=
    {=0A=
        sub(/^[[:blank:]]+/, "", line)          # remove leading <ws>=0A=
        match(line, /^[[:digit:]]+/)            # find N=0A=
        N =3D substr(line, RSTART, RLENGTH) + 0   # N=0A=
        sub(/^[[:digit:]]+/, "", line)         =0A=
    }=0A=
    comment =3D substr(line, 1)=0A=
    d_loc =3D match(line, /[[:blank:]]#[[:blank:]]/) # search for =
Directive separator=0A=
    if (DEBUG) print "parse_test_line; d_loc " d_loc "  N (" N ") \"" =
comment "\"" > log_file=0A=
    if (d_loc)                                  # d_loc > 0 =3D> found #=0A=
    {=0A=
        sub(/^.*#[[:blank:]]*/, "", line)       # remove .*#<ws>=0A=
        if (DEBUG) print "parse_test_line; \"" line "\"" > log_file=0A=
        directive =3D "SKIP"                      # assume SKIP=0A=
        d_name    =3D toupper(substr(line, 1, 4))=0A=
        if (!((d_name =3D=3D "SKIP") ||             # not SKIP or TODO=0A=
              (d_name =3D=3D "TODO")))=0A=
        {=0A=
            directive =3D "ERROR"=0A=
            write_error("Directive Unknown (" d_name ")")=0A=
        } =0A=
        else if ((length(line) > 4) && !(substr(line, 5, 1) ~ =
/[[:blank:]]/))=0A=
        {=0A=
            directive =3D "ERROR"=0A=
            write_error("SKIP or TODO not followed by whitespace \"" =
line "\"")=0A=
        }=0A=
        else if (d_name =3D=3D "TODO")=0A=
            directive =3D "TODO"=0A=
        =0A=
    }=0A=
    else =0A=
    {=0A=
       d_loc =3D index(line, "#")=0A=
       if (DEBUG) print "parse_test_line d_loc " d_loc " \"" comment =
"\""> log_file=0A=
       if (d_loc)=0A=
       { # is this wrong I ask you=0A=
           directive =3D "ERROR"=0A=
           d_sep     =3D substr(line, d_loc-1, 3)=0A=
           write_error("Directive Ill-formed (" d_sep ")")=0A=
       }=0A=
    }=0A=
    =0A=
    if (DEBUG) print "parse_test_line directive (" directive ") N (" N =
") \"" comment "\"" > log_file=0A=
    =0A=
    return directive=0A=
}=0A=
=0A=
#=0A=
# @fn post_processing()=0A=
# @brief Processing after the main parsing loop terminates.=0A=
#=0A=
# sideeffect[IN]    bailed_out        Bail Out! status=0A=
# sideeffect[IN]    plan_seen         test plan status=0A=
# sideeffect[OUT]   test_suite_status global test result=0A=
# sideeffect[IN]    testno            last test line numver processed=0A=
#=0A=
function post_processing() =0A=
{=0A=
   # A "Bail out!" directive should cause us to ignore any following TAP=0A=
   # error, as well as a non-zero exit status from the TAP producer.=0A=
    if (DEBUG) {=0A=
       print "post_processing: testno:            " testno            > =
log_file=0A=
       print "                 bailed_out:        " bailed_out        > =
log_file=0A=
       print "                 plan_seen:         " plan_seen - 1     > =
log_file=0A=
       print "                 planned_tests:     " planned_tests     > =
log_file=0A=
    }=0A=
    if (bailed_out) {=0A=
      test_suite_status =3D ERROR=0A=
      if (bailed_out =3D=3D testno)=0A=
         write_error("Illegal test line after Bail Out!")=0A=
      else if (bailed_out < testno)=0A=
         write_error("Illegal test lines after Bail Out!")=0A=
    }=0A=
    else if (planned_tests !=3D testno)=0A=
    {=0A=
       if (planned_tests =3D=3D MAX_TESTS) =0A=
       {=0A=
          test_suite_status =3D ERROR=0A=
          write_error("Test plan missing")=0A=
       }=0A=
       else if (testno < planned_tests)     # if k < N then k+1 .. N are =
SKIPs=0A=
       {=0A=
          for(; testno < planned_tests; testno++)=0A=
             write_result("SKIP", "")=0A=
       }=0A=
       else if (planned_tests !=3D MAX_TESTS)=0A=
       {=0A=
          test_suite_status =3D ERROR=0A=
          write_error("Test plan number wrong")=0A=
       }=0A=
    }=0A=
    if (((plan_seen) <=3D testno) && (plan_seen > 1)) =0A=
    {=0A=
      test_suite_status =3D ERROR=0A=
      write_error("Test plan found between two test lines.")=0A=
    }=0A=
    =0A=
    #=0A=
    # Output .trs test suite metadata =0A=
    #=0A=
        if (DEBUG) print "                 test_suite_status: " =
test_suite_status > log_file=0A=
=0A=
    switch(test_suite_status) =0A=
    {=0A=
        case 0:      # PASS=0A=
            write_pass_test_results()=0A=
            break=0A=
        case 1:      # FAIL=0A=
        case 3:      # FAIL | SKIP=0A=
            write_fail_test_results()=0A=
            break=0A=
        case 2:      # SKIP=0A=
            write_skip_test_results()=0A=
            break;=0A=
        case 4:      # ERROR=0A=
        case 5:      # ERROR | FAIL=0A=
        case 6:      # ERROR | SKIP=0A=
        case 7:      # ERROR | FAIL | SKIP=0A=
            write_fatal_test_results()=0A=
            break=0A=
    }=0A=
    =0A=
    close(trs_file)=0A=
    =0A=
#   if (!ignore_exit) {=0A=
#        # Fetch exit status from the last line.=0A=
#        exit_message =3D get_test_exit_message(nextline)=0A=
#        if (exit_message)=0A=
#          testsuite_error(exit_message)=0A=
#    }=0A=
    write_log_summary()=0A=
}=0A=
=0A=
#=0A=
# @fn preamble()=0A=
# @brief Check and log Diagnostics preceding the test.=0A=
# <p>This is an Automake extension of the TAP Standard.</p>=0A=
# <p>An unlimited number of Diagnostics and YAML comments =0A=
#    can precede the first statement in the TAP test. The =0A=
#    first statement of the test is any one of a test plan, =0A=
#    test line, or Bail Out!. </p>=0A=
#=0A=
# @return I/O status of last input=0A=
#=0A=
function preamble(   equal) {=0A=
    =0A=
    #=0A=
    # output executable name=0A=
    #=0A=
    len =3D length(test_script_name)=0A=
    equal =3D "## "=0A=
    while(len--) equal =3D equal "=3D"=0A=
    equal =3D equal " ##"=0A=
    printf "\n%s\n## %s ##\n%s\n\n", equal, test_script_name, equal > =
log_file=0A=
=0A=
    write_options()=0A=
    =0A=
    if (DEBUG) print "preamble:" > log_file=0A=
    =0A=
    #=0A=
    # .log file header=0A=
    print "lineno  statement" > log_file=0A=
=0A=
    return getline=0A=
}=0A=
=0A=
#=0A=
# @fn write_error(msg)=0A=
# @brief Output diagnostic messages.=0A=
# @param[in] msg error message=0A=
#=0A=
function write_error(msg) {=0A=
    print test_script_name ": ERROR  " msg > log_file=0A=
    if ($comments)  print test_script_name ": " decorate_result("ERROR") =
"  " msg;=0A=
}=0A=
=0A=
#=0A=
# @fn write_fail_test_results()=0A=
# @brief Output .trs file metadata if the test suite status is FAIL.=0A=
#=0A=
function write_fail_test_results() {=0A=
    print ":global-test-result: FAIL"  > trs_file=0A=
    print ":recheck: yes"              > trs_file=0A=
    print ":copy-in-global-log: yes"   > trs_file=0A=
}=0A=
=0A=
#=0A=
# @fn write_fatal_test_results()=0A=
# @brief Output .trs file metadat if the test suite status is ERROR.=0A=
#=0A=
function write_fatal_test_results() {=0A=
    print ":global-test-result: ERROR" > trs_file=0A=
    print ":recheck: yes"              > trs_file=0A=
    print ":copy-in-global-log: no"    > trs_file=0A=
}=0A=
=0A=
#=0A=
# @fn write_log(str)=0A=
# @brief Write to log file and update line counter.=0A=
#=0A=
# sideeffect[OUT} lineno  current input line number (updated)=0A=
# @param[in] str output string=0A=
function write_log(str)=0A=
{=0A=
    lineno++=0A=
    printf "%6d  %s\n", lineno, str > log_file=0A=
}=0A=
=0A=
#=0A=
# @fn write_log_summary()=0A=
# @brief Write log summary statistics=0A=
# <p>Not implemented. No idea of what to output</p>=0A=
#=0A=
function write_log_summary() {=0A=
=0A=
}=0A=
=0A=
#=0A=
# @fn write_options()=0A=
# @brief Pretty-print input options=0A=
#=0A=
function write_options(   comments_Option, expect_failure_Option, =
ignore_exit_Option, merge_Option) =0A=
{=0A=
    comments_Option       =3D (comments)? "yes": "no"=0A=
    expect_failure_Option =3D (expect_failure)? "yes": "no"=0A=
    ignore_exit_Option    =3D (ignore_exit)? "yes": "no"=0A=
    merge_Option          =3D (merge)? "yes": "no"=0A=
    =0A=
    print "Options      Custom TAP driver =3D " me                     > =
log_file=0A=
    print "             test_script_name  =3D " test_script_name        =
> log_file=0A=
    print "             log_file          =3D " log_file                =
> log_file=0A=
    print "             trs_file          =3D " trs_file                =
> log_file=0A=
    print "             comments          =3D " comments_Option         =
> log_file=0A=
    print "             expect_failure    =3D " expect_failure_Option   =
> log_file=0A=
    print "             ignore_exit       =3D " ignore_exit_Option      =
> log_file=0A=
    print "             merge             =3D " merge_Option            =
> log_file=0A=
    print "             diag_string       =3D " diag_string             =
> log_file=0A=
    print "---------------------------------------------\n"           > =
log_file=0A=
=0A=
}=0A=
=0A=
#=0A=
# @fn write_pass_test_results()=0A=
# @brief Output .trs file metadat if the test suite status is PASS.=0A=
#=0A=
function write_pass_test_results() {=0A=
    print ":global-test-result: PASS"  > trs_file=0A=
    print ":recheck: no"               > trs_file=0A=
    print ":copy-in-global-log: no"    > trs_file=0A=
}=0A=
=0A=
#=0A=
# @fn write_skip_test_results()=0A=
# @brief Output .trs file metadat if the test suite status is SKIP.=0A=
#=0A=
function write_skip_test_results() {=0A=
    print ":global-test-result: PASS"  > trs_file=0A=
    print ":recheck: yes"              > trs_file=0A=
    print ":copy-in-global-log: no"    > trs_file=0A=
}=0A=
=0A=
#=0A=
# @fn write_result(result, str)=0A=
# @brief Output TRS data to the trs file and the monitor=0A=
# <p>The results of a test are output to both the trs file=0A=
#    and to the users screen. The output format is:</p>=0A=
# </br>=0A=
# test_file_name: result: str=0A=
# <p>Where the result can be any one of:</p>=0A=
# <ul>=0A=
#     <li><b>PASS</b> Test Passed</li>=0A=
#     <li><b>FAIL</b> Test Failed</li>=0A=
#     <li><b>XFAIL</b> Test Failure expected</li>=0A=
#     <li><b>XPASS</b> Test PASS unexpected</li>=0A=
#     <li><b>SKIP</b> Test not run</li>=0A=
#     <li><b>ERROR</b> Test not run because of an error</li>=0A=
# </ul>=0A=
# <p>The result is colorized as required.</p>=0A=
#=0A=
# @param[in] result test execution result=0A=
# @param[in] comment test comment=0A=
function write_result(result, comment) {=0A=
   if (DEBUG) print "write_result(" result ", " comment ")" > log_file=0A=
   print ":test-result: " result " " comment > trs_file=0A=
   print decorate_result(result) ":" comment =0A=
   if ($merge) print ":test-result: " result " " comment > log_file;=0A=
}=0A=
=0A=
## ----------- ##=0A=
##   CONTROL   ##=0A=
## ----------- ##=0A=
=0A=
#=0A=
# Some prefatory comments.=0A=
# This gawk script translates TAP formatted messages into the=0A=
# Automake Test Results File (.trs) format. This format has=0A=
# metadata tags which support reporting the global result of=0A=
# executing all tests and local results of executing each=0A=
# individual task. The TAP Diagnostics and YAML structured=0A=
# comments are discarded, and the test line comments and=0A=
# Directive comments are concatenated.=0A=
# =0A=
# Terminology=0A=
# o Each Automake Test Case returns TAP Formatted data.=0A=
# o A Test Case: A script or compiled program which executes =0A=
#   individual tests. There may be zero or more tests within =0A=
#   a Test Case.=0A=
# o Test: A TAP test line. =0A=
# o Test Result: The result contained in a TAP test line =0A=
#   is any one of PASS, FAIL, XPASS, XFAIL, or SKIP or ERROR.=0A=
# o Test Suite Status: The cumulative result of executing =0A=
#   all tests within a Test Case. This status=0A=
#   is one of PASS, FAIL, SKIP, or ERROR.=0A=
# o ERROR:  syntax or semantic error. Automake treats it =0A=
#   as an external event causing a Test Case to fail or =0A=
#   to not be executed.=0A=
# o Test Results File(.trs): Interface file to Automake =0A=
#   containing Test Results File metadata.=0A=
# o .log file: Contains all TAP data from the Tests in a=0A=
#   Test Case plus diagnostic messages and optionally the=0A=
#   generated .trs data.=0A=
# =0A=
# GENERAL TAP SYNTAX=0A=
#    test plan    1..0 [# comment]=0A=
#    test plan    1..N [# comment]=0A=
#    test line    ok     [comment] [# SKIP [comment]]=0A=
#    test line    ok     [comment] [# TODO [comment]]=0A=
#    test line    not ok [comment] [# TODO [comment]]=0A=
#    Bail Out!    Bail Out! [# comment]=0A=
#    Diagnostic   # [comment]=0A=
#    YAML comment    --- =0A=
#    YAML comment  o o o=0A=
#    YAML comment    ...=0A=
#=0A=
# Automake Test Results File metadata tags=0A=
#    :copy-in-global-log:  copy .log file to test_suite_log file=0A=
#    :recheck:             execute Test Case on make check recheck=0A=
#    :test-global-result:  Test Suite Status=0A=
#    :test-result:         test line result=0A=
=0A=
BEGIN {=0A=
=0A=
## ------- ##=0A=
##  SETUP  ##=0A=
## ------- ##=0A=
=0A=
DEBUG =3D 0 # DEBUG =3D 1 output to log_file=0A=
=0A=
#=0A=
# This little bit of ugly code is a legacy item. It=0A=
# terminates the gawk program (the firs apostrophe)=0A=
# then expands the definition of init_colors in the=0A=
# sorrounding shell script, then reenters the gawk=0A=
# program (second apostrophe). The result is that the=0A=
# init_colors definition is inserted in this place.=0A=
#=0A=
# The code is perverse!=0A=
#=0A=
'"$init_colors"'=0A=
=0A=
=0A=
COOKED_PASS =3D expect_failure ? "XPASS": "PASS";=0A=
COOKED_FAIL =3D expect_failure ? "XFAIL": "FAIL";=0A=
=0A=
# =0A=
# test plan processing uses the test-plan variable to pass=0A=
# information concerning test plan status. The value of =0A=
# the variable is: test_plan =3D=0A=
# 1: 0    no test plan found=0A=
# 2: 1    test plan if first non-diagnostic line (EARLY_PLAN)=0A=
# 3: > 1  test plan is last test line seen       (LATE_PLAN)=0A=
#=0A=
# See handle_test_plan for a desciption of the algorithm=0A=
#=0A=
NO_PLAN =3D 0=0A=
plan_seen =3D NO_PLAN=0A=
=0A=
#=0A=
# The initial maximum test range is set to all test lines to=0A=
# be processed without error, until a test plan is seen. At=0A=
# the time a test plan is processed appropriate diagnostic=0A=
# messages are output (if test lines have been seend) and=0A=
# the planned_tests value is set to N in the 1..N test plan.=0A=
#=0A=
MAX_TESTS     =3D 20000=0A=
planned_tests =3D MAX_TESTS # Maximum number of test lines w/o a test =
plan=0A=
=0A=
# Enumeration constants for test suite status.=0A=
# Test suite status is calculated as:=0A=
#    test_suite_status =3D or(test_suite_status, status)=0A=
#=0A=
# With the proviso that:=0A=
#    test_suite_status =3D ERROR=0A=
#=0A=
# whenever an ERROR is seen=0A=
#=0A=
# For test_suite_status =3D=0A=
#   0: EXIT_PASS=0A=
#   1: EXIT_FAIL=0A=
#   2: EXIT_HARD=0A=
#   3: EXIT_HARD=0A=
# =0A=
#=0A=
PASS  =3D 0        # test line pass or XFAIL found=0A=
FAIL  =3D 1        # test line fail or XPASS found=0A=
SKIP  =3D 2        # test line is ok # SKIP=0A=
ERROR =3D 4        # syntax or processing error=0A=
test_suite_status =3D PASS=0A=
=0A=
# Exit enumerated constants=0A=
# =0A=
EXIT_PASS =3D 0    # no errors=0A=
EXIT_FAIL =3D 1    # FAIL or XPASS found=0A=
EXIT_SKIP =3D 77   # TODO or SKIP  found=0A=
EXIT_HARD =3D 99   # I/O error, input not TAP compliant, other=0A=
exit_value=3D EXIT_PASS=0A=
=0A=
#=0A=
# bailed_out is either 0 or 1 + the testno of the last =0A=
# test line seen before the Bail Out! TAP statement. During=0A=
# post-processing if the current testno is greater than=0A=
# the testno when Bail Out was processed, then a diagnostic=0A=
# is issued stating that there was a failure to communicate.=0A=
#=0A=
bailed_out =3D 0 # Whether a "Bail out!" directive has been seen.=0A=
skip_no    =3D 0 # Number of test lines that are skipped=0A=
testno     =3D 0 # Number of test lines seen so far.=0A=
lineno     =3D 0 # Number of input lines=0A=
=0A=
## --------- ##=0A=
##  PARSING  ##=0A=
## --------- ##=0A=
=0A=
#=0A=
# Process inital Diagnostics =0A=
# Exit if there is an I/O error or the test=0A=
# is not test.=0A=
#=0A=
if (preamble() <=3D 0) exit EXIT_HARD=0A=
=0A=
## ----------------- ##=0A=
## MAIN PARSING LOOP ##=0A=
## ----------------- ##=0A=
=0A=
do =0A=
  {=0A=
    write_log($0)       # copy input into log file=0A=
  =0A=
    # TAP test line not ok.=0A=
    if ($0 ~ /^not ok/) {=0A=
        testno +=3D 1=0A=
        handle_not_ok($0)=0A=
    }    =0A=
    # TAP test line ok.=0A=
    else if ($0 ~ /^ok/) {=0A=
        testno +=3D 1=0A=
        handle_ok($0)=0A=
    }    =0A=
    # TAP plan 1..N=0A=
    else if ($0 ~ /^1/)=0A=
        handle_test_plan($0)=0A=
        =0A=
    # "Bail out!" magic.=0A=
    # Older versions of prove and TAP::Harness (e.g., 3.17) did not=0A=
    # recognize a "Bail out!" directive when preceded by leading=0A=
    # whitespace, but more modern versions (e.g., 3.23) do.  So we=0A=
    # emulate the latter, "more modern" behaviour.=0A=
    else if ($0 ~ /^[ \t]*Bail out!/)=0A=
        if (handle_bail_out($0) <=3D 0) break=0A=
    # Diagnostics.=0A=
    else if ($0 ~ /^#/)  {=0A=
        if (handle_diagnostics() > 0) continue=0A=
        else break;=0A=
    }=0A=
    else if (!($0 ~ /^[ \t]*$/))            # not a blank line=0A=
    {    # check for YAML & if not then ERROR=0A=
       if (DEBUG) print "check for YAML" > log_file=0A=
       if ($0 ~ /[ \t]+---[ \t]*$/)        # YAML start --- line=0A=
       {=0A=
           if (handle_yaml() > 0) =0A=
              continue=0A=
           else =0A=
           {=0A=
               write_error("Missing  YAML end")=0A=
               break=0A=
           }=0A=
       }=0A=
       else if ($0 ~ /^[ \t]+\.\.\.[ \t]*$/) # YAML stop ... line=0A=
           write_error("Missing  YAML begin")=0A=
           =0A=
       else=0A=
           write_error("Undefined TAP statement")=0A=
=0A=
      }=0A=
    st =3D getline=0A=
    if (DEBUG) print "test_suite_status " test_suite_status > log_file=0A=
  } while(st > 0)=0A=
  =0A=
    if (st < 0) # I/O error.=0A=
      fatal("I/O error while reading from input stream")=0A=
=0A=
   if (DEBUG) print "exit input loop. lineno(" lineno ") testno(" testno =
")" > log_file=0A=
   =0A=
## -------- ##=0A=
##  FINISH  ##=0A=
## -------- ##=0A=
=0A=
    post_processing()=0A=
=0A=
# switch(test_suite_status) {=0A=
#     case 0:    # PASS=0A=
#         exit EXIT_PASS=0A=
#     case 1:    # FAIL=0A=
#         exit EXIT_FAIL=0A=
#     case 2:    # ERROR=0A=
#     case 3:    # ERROR=0A=
#         exit EXIT_ERROR=0A=
# }=0A=
    exit PASS=0A=
} # End of "BEGIN" block.=0A=
'=0A=
=0A=
# TODO: document that we consume the file descriptor 3 :-(=0A=
} 3>"$log_file"=0A=
=0A=
# test $? -eq 0 || fatal "I/O or internal error"=0A=
=0A=
# Local Variables:=0A=
# mode: shell-script=0A=
# sh-indentation: 4=0A=
# eval: (add-hook "write-file-hooks "time-stamp)=0A=
# time-stamp-start: "scriptversion=3D"=0A=
# time-stamp-format: "%:y-%02m-%02d.%02H"=0A=
# time-stamp-time-zone: "UTC"=0A=
# time-stamp-end: "; # UTC"=0A=
# End:=0A=
=0A=

------=_NextPart_000_0015_01D0B72C.26DD8480--





Acknowledgement sent to "Arthur Schwarz" <aschwarz1309@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-automake@HIDDEN. Full text available.
Report forwarded to bug-automake@HIDDEN:
bug#20986; Package automake. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Mon, 25 Nov 2019 12:00:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.