Module Name: src Committed By: rillig Date: Sat Sep 4 20:39:18 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint2: t_lint2.sh Log Message: tests/lint: test error handling when reading .ln files To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint2/t_lint2.sh Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/usr.bin/xlint/lint2/t_lint2.sh diff -u src/tests/usr.bin/xlint/lint2/t_lint2.sh:1.6 src/tests/usr.bin/xlint/lint2/t_lint2.sh:1.7 --- src/tests/usr.bin/xlint/lint2/t_lint2.sh:1.6 Tue Aug 24 21:30:52 2021 +++ src/tests/usr.bin/xlint/lint2/t_lint2.sh Sat Sep 4 20:39:17 2021 @@ -1,4 +1,4 @@ -# $NetBSD: t_lint2.sh,v 1.6 2021/08/24 21:30:52 rillig Exp $ +# $NetBSD: t_lint2.sh,v 1.7 2021/09/04 20:39:17 rillig Exp $ # # Copyright (c) 2021 The NetBSD Foundation, Inc. # All rights reserved. @@ -76,11 +76,108 @@ emit_lp64_body() std_emit_body 'emit_lp64' } +test_error() +{ + printf '%s\n' \ + "$1" + printf '%s\n' \ + '0sinput.ln' \ + 'Sinput.ln' \ + "$1" \ + > 'input.ln' + + atf_check -s 'exit:1' -e "match:input file error: input\\.ln,3 \($2\)\$" \ + "$lint2" 'input.ln' +} + +test_error_ignored() +{ + printf '%s\n' \ + "$1" + printf '%s\n' \ + '0sinput.ln' \ + 'Sinput.ln' \ + "$1" \ + > 'input.ln' + + atf_check -o 'ignore' \ + "$lint2" 'input.ln' +} + +error_cases_head() +{ + std_head +} +error_cases_body() +{ + test_error '' 'missing record type' + test_error '123' 'missing record type' + test_error '0X' 'not a number: ' + test_error '0d' 'not a number: ' + test_error '0dXYZ' 'not a number: XYZ' + test_error '0d123' 'bad line number' + test_error '0d123.XYZ' 'not a number: XYZ' + test_error '0X0.0' 'bad record type X' + + # function calls + test_error '0c0.0' 'not a number: ' + test_error '0c0.0uu' 'used or discovered: u' + test_error '0c0.0du' 'used or discovered: u' + test_error '0c0.0ui' 'used or discovered: i' + test_error '0c0.0di' 'used or discovered: i' + test_error '0c0.0ud' 'used or discovered: d' + test_error '0c0.0dd' 'used or discovered: d' + # Unlike 'd' and 'u', the 'i' may be repeated. + test_error '0c0.0iiiiiii1n_' 'bad type: _ ' + # Negative argument numbers like in 'z-1' are accepted but ignored. + test_error '0c0.0z-1d_' 'not a number: _' + # Argument 1 is both positive '1p' and negative '1n', which is + # impossible in practice. It is not worth handling this though since + # only lint1 generates these .ln files. + test_error '0c0.0p1n1d_' 'not a number: _' + test_error '0c0.0s' 'not a number: ' + test_error '0c0.0s2' 'not quote: ' + test_error '0c0.0s2|' 'not quote: |' + test_error '0c0.0s2"' 'trailing data: ' + test_error '0c0.0s2"%' 'missing closing quote' + # shellcheck disable=SC1003 + test_error '0c0.0s2"\' 'missing after \' + # shellcheck disable=SC1003 + test_error '0c0.0s2"%\' 'missing after \' + + # declarations and definitions + test_error '0d0' 'bad line number' + test_error '0d0.0' 'not a number: ' + test_error '0d0.0dd' 'def' + test_error '0d0.0de' 'decl' + test_error '0d0.0ee' 'decl' + test_error '0d0.0ii' 'inline' + test_error '0d0.0oo' 'osdef' + test_error '0d0.0rr' 'r' + test_error '0d0.0ss' 'static' + test_error '0d0.0tt' 'tdef' + test_error '0d0.0uu' 'used' + test_error '0d0.0v1v1' 'v' + test_error '0d0.0P1P1' 'P' + test_error '0d0.0S1S1' 'S' + test_error '0d0.0v1P1S_' 'not a number: _' + test_error '0d0.0d3var_' 'bad type: _ ' + test_error '0d0.0d3varPV_' 'trailing line: _' + + # usage of a variable or a function + test_error '0u0.0' 'bad delim ' + test_error '0u0.0_' 'bad delim _' + test_error '0u0.0x' 'not a number: ' + # trailing garbage is not detected + test_error_ignored '0u0.0x3var_' +} + atf_init_test_cases() { local i # shellcheck disable=SC2013 + # shellcheck disable=SC2035 for i in $(cd "$(atf_get_srcdir)" && echo *.ln); do i=${i%.ln} @@ -98,4 +195,6 @@ atf_init_test_cases() || eval "${i}_body() { std_body '$i'; }" atf_add_test_case "$i" done + + atf_add_test_case 'error_cases' }