tap-log.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #! /bin/sh
  2. # Copyright (C) 2011-2017 Free Software Foundation, Inc.
  3. #
  4. # This program is free software; you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation; either version 2, or (at your option)
  7. # any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License
  15. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. # TAP support:
  17. # - log file creation
  18. # - log file removal
  19. # - stdout and stderr of a script go in its log file
  20. # - TEST_SUITE_LOG redefinition, at either automake or make time
  21. # - VERBOSE environment variable support
  22. # Keep in sync with 'test-log.sh'.
  23. . test-init.sh
  24. cat > Makefile.am << 'END'
  25. TESTS = pass.test skip.test xfail.test fail.test xpass.test error.test
  26. TEST_SUITE_LOG = global.log
  27. END
  28. . tap-setup.sh
  29. # Custom markers, for use in grepping checks.
  30. cmarker=::: # comment marker
  31. pmarker=%%% # plain maker
  32. cat > pass.test <<END
  33. #! /bin/sh -e
  34. echo 1..1
  35. echo "$pmarker pass $pmarker" >&2
  36. echo "# $cmarker pass $cmarker" >&2
  37. echo "ok 1"
  38. END
  39. cat > skip.test <<END
  40. #! /bin/sh -e
  41. echo 1..1
  42. echo "$pmarker skip $pmarker"
  43. echo "# $cmarker skip $cmarker"
  44. echo "ok 1 # SKIP"
  45. END
  46. cat > xfail.test <<END
  47. #! /bin/sh -e
  48. echo 1..1
  49. echo "$pmarker xfail $pmarker" >&2
  50. echo "# $cmarker xfail $cmarker" >&2
  51. echo "not ok 1 # TODO"
  52. END
  53. cat > fail.test <<END
  54. #! /bin/sh -e
  55. echo 1..1
  56. echo "$pmarker fail $pmarker"
  57. echo "# $cmarker fail $cmarker"
  58. echo "not ok 1"
  59. END
  60. cat > xpass.test <<END
  61. #! /bin/sh -e
  62. echo 1..1
  63. echo "$pmarker xpass $pmarker" >&2
  64. echo "# $cmarker xpass $cmarker" >&2
  65. echo "ok 1 # TODO"
  66. END
  67. cat > error.test <<END
  68. #! /bin/sh -e
  69. echo 1..1
  70. echo "$pmarker error $pmarker"
  71. echo "# $cmarker error $cmarker"
  72. echo 'Bail out!'
  73. END
  74. chmod a+x *.test
  75. run_make -e FAIL TEST_SUITE_LOG=my.log check
  76. ls -l # For debugging.
  77. test ! -e test-suite.log
  78. test ! -e global.log
  79. test -f my.log
  80. st=0
  81. for result in pass fail xfail xpass skip error; do
  82. cat $result.log # For debugging.
  83. $FGREP "$pmarker $result $pmarker" $result.log || st=1
  84. $FGREP "$cmarker $result $cmarker" $result.log || st=1
  85. done
  86. test $st -eq 0 || exit 1
  87. cat my.log # For debugging.
  88. for result in xfail fail xpass skip error; do
  89. cat $result.log # For debugging.
  90. $FGREP "$pmarker $result $pmarker" my.log || st=1
  91. $FGREP "$cmarker $result $cmarker" my.log || st=1
  92. done
  93. test $($FGREP -c "$pmarker" my.log) -eq 5
  94. test $($FGREP -c "$cmarker" my.log) -eq 5
  95. # Passed test scripts shouldn't be mentioned in the global log.
  96. $EGREP '(^pass|[^x]pass)\.test' my.log && exit 1
  97. # But failing (expectedly or not) and skipped ones should.
  98. $FGREP 'xfail.test' my.log
  99. $FGREP 'skip.test' my.log
  100. $FGREP 'fail.test' my.log
  101. $FGREP 'xpass.test' my.log
  102. $FGREP 'error.test' my.log
  103. touch error2.log test-suite.log global.log
  104. run_make TEST_SUITE_LOG=my.log mostlyclean
  105. ls -l # For debugging.
  106. test ! -e my.log
  107. test ! -e pass.log
  108. test ! -e fail.log
  109. test ! -e xfail.log
  110. test ! -e xpass.log
  111. test ! -e skip.log
  112. test ! -e error.log
  113. # "make mostlyclean" shouldn't remove unrelated log files.
  114. test -f error2.log
  115. test -f test-suite.log
  116. test -f global.log
  117. rm -f *.log
  118. run_make -O -e FAIL check VERBOSE=yes
  119. cat global.log
  120. test ! -e my.log
  121. test ! -e test-suite.log
  122. # Check that VERBOSE causes the global testsuite log to be
  123. # emitted on stdout.
  124. out=$(cat stdout)
  125. log=$(cat global.log)
  126. case $out in *"$log"*) ;; *) exit 1;; esac
  127. touch error2.log test-suite.log my.log
  128. $MAKE clean
  129. ls -l # For debugging.
  130. test ! -e global.log
  131. test ! -e pass.log
  132. test ! -e fail.log
  133. test ! -e xfail.log
  134. test ! -e xpass.log
  135. test ! -e skip.log
  136. test ! -e error.log
  137. # "make clean" shouldn't remove unrelated log files.
  138. test -f error2.log
  139. test -f test-suite.log
  140. test -f my.log
  141. rm -f *.log
  142. :