Offset 0, 0 lines modifiedOffset 1, 153 lines modified
 1 #!·/bin/sh
 2 #·test-driver·-·basic·testsuite·driver·script.
  
 3 scriptversion=2018-03-07.03;·#·UTC
  
 4 #·Copyright·(C)·2011-2021·Free·Software·Foundation,·Inc.
 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 #·As·a·special·exception·to·the·GNU·General·Public·License,·if·you
 19 #·distribute·this·file·as·part·of·a·program·that·contains·a
 20 #·configuration·script·generated·by·Autoconf,·you·may·include·it·under
 21 #·the·same·distribution·terms·that·you·use·for·the·rest·of·that·program.
  
 22 #·This·file·is·maintained·in·Automake,·please·report
 23 #·bugs·to·<bug-automake@gnu.org>·or·send·patches·to
 24 #·<automake-patches@gnu.org>.
  
 25 #·Make·unconditional·expansion·of·undefined·variables·an·error.··This
 26 #·helps·a·lot·in·preventing·typo-related·bugs.
 27 set·-u
  
 28 usage_error·()
 29 {
 30 ··echo·"$0:·$*"·>&2
 31 ··print_usage·>&2
 32 ··exit·2
 33 }
  
 34 print_usage·()
 35 {
 36 ··cat·<<END
 37 Usage:
 38 ··test-driver·--test-name·NAME·--log-file·PATH·--trs-file·PATH
 39 ··············[--expect-failure·{yes|no}]·[--color-tests·{yes|no}]
 40 ··············[--enable-hard-errors·{yes|no}]·[--]
 41 ··············TEST-SCRIPT·[TEST-SCRIPT-ARGUMENTS]
  
 42 The·'--test-name',·'--log-file'·and·'--trs-file'·options·are·mandatory.
 43 See·the·GNU·Automake·documentation·for·information.
 44 END
 45 }
  
 46 test_name=·#·Used·for·reporting.
 47 log_file=··#·Where·to·save·the·output·of·the·test·script.
 48 trs_file=··#·Where·to·save·the·metadata·of·the·test·run.
 49 expect_failure=no
 50 color_tests=no
 51 enable_hard_errors=yes
 52 while·test·$#·-gt·0;·do
 53 ··case·$1·in
 54 ··--help)·print_usage;·exit·$?;;
 55 ··--version)·echo·"test-driver·$scriptversion";·exit·$?;;
 56 ··--test-name)·test_name=$2;·shift;;
 57 ··--log-file)·log_file=$2;·shift;;
 58 ··--trs-file)·trs_file=$2;·shift;;
 59 ··--color-tests)·color_tests=$2;·shift;;
 60 ··--expect-failure)·expect_failure=$2;·shift;;
 61 ··--enable-hard-errors)·enable_hard_errors=$2;·shift;;
 62 ··--)·shift;·break;;
 63 ··-*)·usage_error·"invalid·option:·'$1'";;
 64 ···*)·break;;
 65 ··esac
 66 ··shift
 67 done
  
 68 missing_opts=
 69 test·x"$test_name"·=·x·&&·missing_opts="$missing_opts·--test-name"
 70 test·x"$log_file"··=·x·&&·missing_opts="$missing_opts·--log-file"
 71 test·x"$trs_file"··=·x·&&·missing_opts="$missing_opts·--trs-file"
 72 if·test·x"$missing_opts"·!=·x;·then
 73 ··usage_error·"the·following·mandatory·options·are·missing:$missing_opts"
 74 fi
  
 75 if·test·$#·-eq·0;·then
 76 ··usage_error·"missing·argument"
 77 fi
  
 78 if·test·$color_tests·=·yes;·then
 79 ··#·Keep·this·in·sync·with·'lib/am/check.am:$(am__tty_colors)'.
 80 ··red='\x1b[0;31m'·#·Red.
 81 ··grn='\x1b[0;32m'·#·Green.
 82 ··lgn='\x1b[1;32m'·#·Light·green.
 83 ··blu='\x1b[1;34m'·#·Blue.
 84 ··mgn='\x1b[0;35m'·#·Magenta.
 85 ··std='\x1b[m'·····#·No·color.
 86 else
 87 ··red=·grn=·lgn=·blu=·mgn=·std=
 88 fi
  
 89 do_exit='rm·-f·$log_file·$trs_file;·(exit·$st);·exit·$st'
 90 trap·"st=129;·$do_exit"·1
 91 trap·"st=130;·$do_exit"·2
 92 trap·"st=141;·$do_exit"·13
 93 trap·"st=143;·$do_exit"·15
  
 94 #·Test·script·is·run·here.·We·create·the·file·first,·then·append·to·it,
 95 #·to·ameliorate·tests·themselves·also·writing·to·the·log·file.·Our·tests
 96 #·don't,·but·others·can·(automake·bug#35762).
 97 :·>"$log_file"
 98 "$@"·>>"$log_file"·2>&1
 99 estatus=$?
  
 100 if·test·$enable_hard_errors·=·no·&&·test·$estatus·-eq·99;·then
 101 ··tweaked_estatus=1
 102 else
 103 ··tweaked_estatus=$estatus
 104 fi
  
 105 case·$tweaked_estatus:$expect_failure·in
 106 ··0:yes)·col=$red·res=XPASS·recheck=yes·gcopy=yes;;
 107 ··0:*)···col=$grn·res=PASS··recheck=no··gcopy=no;;
 108 ··77:*)··col=$blu·res=SKIP··recheck=no··gcopy=yes;;
 109 ··99:*)··col=$mgn·res=ERROR·recheck=yes·gcopy=yes;;
 110 ··*:yes)·col=$lgn·res=XFAIL·recheck=no··gcopy=yes;;
 111 ··*:*)···col=$red·res=FAIL··recheck=yes·gcopy=yes;;
 112 esac
  
 113 #·Report·the·test·outcome·and·exit·status·in·the·logs,·so·that·one·can
 114 #·know·whether·the·test·passed·or·failed·simply·by·looking·at·the·'.log'
 115 #·file,·without·the·need·of·also·peaking·into·the·corresponding·'.trs'
 116 #·file·(automake·bug#11814).
 117 echo·"$res·$test_name·(exit·status:·$estatus)"·>>"$log_file"
  
 118 #·Report·outcome·to·console.
 119 echo·"${col}${res}${std}:·$test_name"
  
 120 #·Register·the·test·result,·and·other·relevant·metadata.
 121 echo·":test-result:·$res"·>·$trs_file
 122 echo·":global-test-result:·$res"·>>·$trs_file
 123 echo·":recheck:·$recheck"·>>·$trs_file
 124 echo·":copy-in-global-log:·$gcopy"·>>·$trs_file
  
 125 #·Local·Variables:
 126 #·mode:·shell-script
 127 #·sh-indentation:·2
 128 #·eval:·(add-hook·'before-save-hook·'time-stamp)
 129 #·time-stamp-start:·"scriptversion="
 130 #·time-stamp-format:·"%:y-%02m-%02d.%02H"
 131 #·time-stamp-time-zone:·"UTC0"
 132 #·time-stamp-end:·";·#·UTC"
 133 #·End: