Home | History | Annotate | Line # | Download | only in indent
t_errors.sh revision 1.38.2.1
      1       1.1    rillig #! /bin/sh
      2  1.38.2.1  perseant # $NetBSD: t_errors.sh,v 1.38.2.1 2025/08/02 05:58:13 perseant Exp $
      3       1.1    rillig #
      4       1.1    rillig # Copyright (c) 2021 The NetBSD Foundation, Inc.
      5       1.1    rillig # All rights reserved.
      6       1.1    rillig #
      7       1.1    rillig # Redistribution and use in source and binary forms, with or without
      8       1.1    rillig # modification, are permitted provided that the following conditions
      9       1.1    rillig # are met:
     10       1.1    rillig # 1. Redistributions of source code must retain the above copyright
     11       1.1    rillig #    notice, this list of conditions and the following disclaimer.
     12       1.1    rillig # 2. Redistributions in binary form must reproduce the above copyright
     13       1.1    rillig #    notice, this list of conditions and the following disclaimer in the
     14       1.1    rillig #    documentation and/or other materials provided with the distribution.
     15       1.1    rillig #
     16       1.1    rillig # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     17       1.1    rillig # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     18       1.1    rillig # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19       1.1    rillig # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     20       1.1    rillig # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21       1.1    rillig # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22       1.1    rillig # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23       1.1    rillig # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24       1.1    rillig # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25       1.1    rillig # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26       1.1    rillig # POSSIBILITY OF SUCH DAMAGE.
     27       1.1    rillig 
     28       1.2    rillig # Tests for error handling in indent.
     29       1.2    rillig 
     30       1.1    rillig indent=$(atf_config_get usr.bin.indent.test_indent /usr/bin/indent)
     31       1.1    rillig 
     32       1.2    rillig expect_error()
     33       1.2    rillig {
     34       1.2    rillig 	local msg
     35       1.2    rillig 
     36       1.2    rillig 	msg="$1"
     37       1.2    rillig 	shift
     38       1.2    rillig 
     39       1.2    rillig 	atf_check -s 'exit:1' \
     40      1.21    rillig 	    -e "inline:$msg\n" \
     41       1.2    rillig 	    "$indent" "$@"
     42       1.2    rillig }
     43       1.2    rillig 
     44       1.1    rillig atf_test_case 'option_unknown'
     45       1.1    rillig option_unknown_body()
     46       1.1    rillig {
     47       1.2    rillig 	expect_error \
     48       1.2    rillig 	    'indent: Command line: unknown option "-Z-unknown"' \
     49       1.2    rillig 	    -Z-unknown
     50       1.1    rillig }
     51       1.1    rillig 
     52       1.1    rillig atf_test_case 'option_bool_trailing_garbage'
     53       1.1    rillig option_bool_trailing_garbage_body()
     54       1.1    rillig {
     55       1.2    rillig 	expect_error \
     56       1.2    rillig 	    'indent: Command line: unknown option "-bacchus"' \
     57       1.2    rillig 	    -bacchus
     58       1.1    rillig }
     59       1.1    rillig 
     60      1.38    rillig atf_test_case 'option_int_wrong_argument'
     61      1.38    rillig option_int_wrong_argument_body()
     62       1.1    rillig {
     63       1.2    rillig 	expect_error \
     64       1.7    rillig 	    'indent: Command line: argument "x" to option "-ts" must be an integer' \
     65       1.2    rillig 	    -tsx
     66       1.2    rillig }
     67       1.2    rillig 
     68       1.2    rillig atf_test_case 'option_profile_not_found'
     69       1.2    rillig option_profile_not_found_body()
     70       1.2    rillig {
     71       1.2    rillig 	expect_error \
     72       1.2    rillig 	    'indent: profile ./nonexistent: No such file or directory' \
     73       1.2    rillig 	    -P./nonexistent
     74       1.2    rillig }
     75       1.2    rillig 
     76       1.2    rillig atf_test_case 'option_typedefs_not_found'
     77       1.2    rillig option_typedefs_not_found_body()
     78       1.2    rillig {
     79       1.2    rillig 	expect_error \
     80       1.2    rillig 	    'indent: cannot open file ./nonexistent' \
     81       1.2    rillig 	    -U./nonexistent
     82       1.2    rillig }
     83       1.2    rillig 
     84       1.3    rillig atf_test_case 'option_tabsize_negative'
     85       1.3    rillig option_tabsize_negative_body()
     86       1.3    rillig {
     87       1.3    rillig 	expect_error \
     88       1.7    rillig 	    'indent: Command line: argument "-1" to option "-ts" must be between 1 and 80' \
     89       1.3    rillig 	    -ts-1
     90       1.3    rillig }
     91       1.3    rillig 
     92       1.3    rillig atf_test_case 'option_tabsize_zero'
     93       1.3    rillig option_tabsize_zero_body()
     94       1.3    rillig {
     95       1.3    rillig 	expect_error \
     96       1.7    rillig 	    'indent: Command line: argument "0" to option "-ts" must be between 1 and 80' \
     97       1.3    rillig 	    -ts0
     98       1.3    rillig }
     99       1.3    rillig 
    100       1.3    rillig atf_test_case 'option_tabsize_large'
    101       1.3    rillig option_tabsize_large_body()
    102       1.3    rillig {
    103       1.3    rillig 	expect_error \
    104       1.7    rillig 	    'indent: Command line: argument "81" to option "-ts" must be between 1 and 80' \
    105       1.3    rillig 	    -ts81
    106       1.3    rillig }
    107       1.3    rillig 
    108       1.3    rillig atf_test_case 'option_tabsize_very_large'
    109       1.3    rillig option_tabsize_very_large_body()
    110       1.3    rillig {
    111       1.3    rillig 	# Integer overflow, on both ILP32 and LP64 platforms.
    112       1.3    rillig 	expect_error \
    113       1.7    rillig 	    'indent: Command line: argument "3000000000" to option "-ts" must be between 1 and 80' \
    114       1.3    rillig 	    -ts3000000000
    115       1.3    rillig }
    116       1.3    rillig 
    117       1.3    rillig atf_test_case 'option_indent_size_zero'
    118       1.3    rillig option_indent_size_zero_body()
    119       1.3    rillig {
    120       1.3    rillig 	expect_error \
    121       1.7    rillig 	    'indent: Command line: argument "0" to option "-i" must be between 1 and 80' \
    122       1.3    rillig 	    -i0
    123       1.3    rillig }
    124       1.3    rillig 
    125       1.4    rillig atf_test_case 'option_int_trailing_garbage'
    126       1.4    rillig option_int_trailing_garbage_body()
    127       1.4    rillig {
    128       1.4    rillig 	expect_error \
    129       1.7    rillig 	    'indent: Command line: argument "3garbage" to option "-i" must be an integer' \
    130       1.4    rillig 	    -i3garbage
    131       1.4    rillig }
    132       1.4    rillig 
    133       1.6    rillig atf_test_case 'option_cli_trailing_garbage'
    134       1.6    rillig option_cli_trailing_garbage_body()
    135       1.6    rillig {
    136       1.6    rillig 	expect_error \
    137       1.6    rillig 	    'indent: Command line: argument "3garbage" to option "-cli" must be numeric' \
    138       1.6    rillig 	    -cli3garbage
    139       1.6    rillig }
    140       1.6    rillig 
    141      1.19    rillig atf_test_case 'option_npro_trailing_garbage'
    142      1.19    rillig option_npro_trailing_garbage_body()
    143      1.19    rillig {
    144      1.20    rillig 	atf_check -s 'exit:1' \
    145      1.21    rillig 	    -e 'inline:indent: Command line: unknown option "-npro-garbage"\n' \
    146      1.19    rillig 	    "$indent" -npro-garbage
    147      1.19    rillig }
    148      1.19    rillig 
    149      1.19    rillig atf_test_case 'option_st_trailing_garbage'
    150      1.19    rillig option_st_trailing_garbage_body()
    151      1.19    rillig {
    152      1.20    rillig 	atf_check -s 'exit:1' \
    153      1.21    rillig 	    -e 'inline:indent: Command line: unknown option "-stdio"\n' \
    154      1.19    rillig 	    "$indent" -stdio
    155      1.19    rillig }
    156      1.19    rillig 
    157      1.19    rillig atf_test_case 'option_version_trailing_garbage'
    158      1.19    rillig option_version_trailing_garbage_body()
    159      1.19    rillig {
    160      1.20    rillig 	atf_check -s 'exit:1' \
    161      1.21    rillig 	    -e 'inline:indent: Command line: unknown option "--version-dump"\n' \
    162      1.19    rillig 	    "$indent" --version-dump
    163      1.19    rillig }
    164      1.19    rillig 
    165       1.2    rillig atf_test_case 'option_buffer_overflow'
    166       1.2    rillig option_buffer_overflow_body()
    167       1.2    rillig {
    168       1.2    rillig 	opt='12345678123456781234567812345678'	# 32
    169       1.2    rillig 	opt="$opt$opt$opt$opt$opt$opt$opt$opt"	# 256
    170       1.2    rillig 	opt="$opt$opt$opt$opt$opt$opt$opt$opt"	# 2048
    171       1.2    rillig 	opt="$opt$opt$opt$opt$opt$opt$opt$opt"	# 16384
    172       1.2    rillig 	printf '%s\n' "-$opt" > indent.pro
    173       1.2    rillig 
    174       1.2    rillig 	expect_error \
    175       1.8    rillig 	    'indent: buffer overflow in indent.pro, starting with '\''-123456781'\''' \
    176       1.2    rillig 	    -Pindent.pro
    177       1.2    rillig }
    178       1.2    rillig 
    179       1.2    rillig atf_test_case 'option_special_missing_param'
    180       1.2    rillig option_special_missing_param_body()
    181       1.2    rillig {
    182       1.2    rillig 	expect_error \
    183      1.28    rillig 	    'indent: Command line: option "-cli" requires an argument' \
    184       1.2    rillig 	    -cli
    185       1.2    rillig 
    186       1.2    rillig 	expect_error \
    187      1.28    rillig 	    'indent: Command line: option "-T" requires an argument' \
    188       1.2    rillig 	    -T
    189       1.2    rillig 
    190       1.2    rillig 	expect_error \
    191      1.28    rillig 	    'indent: Command line: option "-U" requires an argument' \
    192       1.2    rillig 	    -U
    193       1.2    rillig }
    194       1.2    rillig 
    195      1.18    rillig atf_test_case 'unterminated_comment_wrap'
    196      1.18    rillig unterminated_comment_wrap_body()
    197       1.2    rillig {
    198       1.2    rillig 	echo '/*' > comment.c
    199       1.2    rillig 
    200       1.1    rillig 	atf_check -s 'exit:1' \
    201      1.21    rillig 	    -o 'inline:/*\n *\n' \
    202      1.21    rillig 	    -e 'inline:error: Standard Input:2: Unterminated comment\n' \
    203       1.2    rillig 	    "$indent" -st < comment.c
    204       1.1    rillig }
    205       1.1    rillig 
    206      1.18    rillig atf_test_case 'unterminated_comment_nowrap'
    207      1.18    rillig unterminated_comment_nowrap_body()
    208      1.18    rillig {
    209      1.18    rillig 	echo '/*-' > comment.c
    210      1.18    rillig 
    211      1.18    rillig 	atf_check -s 'exit:1' \
    212      1.21    rillig 	    -o 'inline:/*-\n\n' \
    213      1.21    rillig 	    -e 'inline:error: Standard Input:2: Unterminated comment\n' \
    214      1.18    rillig 	    "$indent" -st < comment.c
    215      1.18    rillig }
    216      1.18    rillig 
    217      1.32    rillig atf_test_case 'unterminated_char_constant'
    218      1.32    rillig unterminated_char_constant_body()
    219      1.32    rillig {
    220      1.32    rillig 	echo "char ch = 'x" > char.c
    221      1.32    rillig 
    222      1.32    rillig 	atf_check -s 'exit:1' \
    223      1.32    rillig 	    -o "inline:char ch = 'x\n" \
    224      1.32    rillig 	    -e 'inline:error: Standard Input:1: Unterminated literal\n' \
    225      1.32    rillig 	    "$indent" -st -di0 < char.c
    226      1.32    rillig }
    227      1.32    rillig 
    228      1.32    rillig atf_test_case 'unterminated_string_literal'
    229      1.32    rillig unterminated_string_literal_body()
    230      1.32    rillig {
    231      1.32    rillig 	echo 'const char str[] = "x' > string.c
    232      1.32    rillig 
    233      1.32    rillig 	atf_check -s 'exit:1' \
    234      1.32    rillig 	    -o 'inline:const char str[] = "x\n' \
    235      1.32    rillig 	    -e 'inline:error: Standard Input:1: Unterminated literal\n' \
    236      1.32    rillig 	    "$indent" -st -di0 < string.c
    237      1.32    rillig }
    238      1.32    rillig 
    239       1.3    rillig atf_test_case 'in_place_wrong_backup'
    240       1.3    rillig in_place_wrong_backup_body()
    241       1.3    rillig {
    242       1.3    rillig 	cat <<-\EOF > code.c
    243       1.3    rillig 		int decl;
    244       1.3    rillig 	EOF
    245       1.3    rillig 	cp code.c code.c.orig
    246       1.3    rillig 
    247       1.3    rillig 	# Due to the strange backup suffix '/subdir', indent tries to create
    248       1.3    rillig 	# a file named 'code.c/subdir', but 'code.c' is already a regular
    249       1.3    rillig 	# file, not a directory.
    250       1.3    rillig 	atf_check -s 'exit:1' \
    251      1.21    rillig 	    -e 'inline:indent: code.c/subdir: Not a directory\n' \
    252       1.3    rillig 	    env SIMPLE_BACKUP_SUFFIX="/subdir" "$indent" code.c
    253       1.3    rillig 
    254       1.3    rillig 	# Since there was an early error, the original file is kept as is.
    255       1.3    rillig 	atf_check -o 'file:code.c.orig' \
    256       1.3    rillig 	    cat code.c
    257       1.3    rillig }
    258       1.3    rillig 
    259       1.3    rillig atf_test_case 'argument_input_enoent'
    260       1.3    rillig argument_input_enoent_body()
    261       1.3    rillig {
    262       1.3    rillig 	atf_check -s 'exit:1' \
    263      1.21    rillig 	    -e 'inline:indent: ./nonexistent.c: No such file or directory\n' \
    264       1.3    rillig 	    "$indent" ./nonexistent.c
    265       1.3    rillig }
    266       1.3    rillig 
    267       1.3    rillig atf_test_case 'argument_output_equals_input_name'
    268       1.3    rillig argument_output_equals_input_name_body()
    269       1.3    rillig {
    270       1.3    rillig 	echo '/* comment */' > code.c
    271       1.3    rillig 
    272       1.3    rillig 	atf_check -s 'exit:1' \
    273      1.21    rillig 	    -e 'inline:indent: input and output files must be different\n' \
    274       1.3    rillig 	    "$indent" code.c code.c
    275       1.3    rillig }
    276       1.3    rillig 
    277       1.3    rillig atf_test_case 'argument_output_equals_input_file'
    278       1.3    rillig argument_output_equals_input_file_body()
    279       1.3    rillig {
    280       1.3    rillig 	echo '/* comment */' > code.c
    281       1.3    rillig 
    282       1.3    rillig 	atf_check \
    283       1.3    rillig 	    "$indent" code.c ./code.c
    284       1.3    rillig 
    285       1.3    rillig 	# Oops, the file has become empty since the output is first emptied,
    286       1.3    rillig 	# before reading any of the input.
    287       1.3    rillig 	atf_check \
    288       1.3    rillig 	    cat code.c
    289       1.3    rillig }
    290       1.3    rillig 
    291       1.3    rillig atf_test_case 'argument_output_enoent'
    292       1.3    rillig argument_output_enoent_body()
    293       1.3    rillig {
    294       1.3    rillig 	expect_error \
    295       1.3    rillig 	    'indent: subdir/nonexistent.c: No such file or directory' \
    296       1.3    rillig 	    /dev/null subdir/nonexistent.c
    297       1.3    rillig }
    298       1.3    rillig 
    299       1.3    rillig atf_test_case 'argument_too_many'
    300       1.3    rillig argument_too_many_body()
    301       1.3    rillig {
    302       1.3    rillig 	echo '/* comment */' > arg1.c
    303       1.3    rillig 
    304       1.3    rillig 	expect_error \
    305       1.7    rillig 	    'indent: too many arguments: arg3.c' \
    306       1.3    rillig 	    arg1.c arg2.c arg3.c arg4.c
    307       1.3    rillig }
    308       1.3    rillig 
    309       1.3    rillig atf_test_case 'unexpected_end_of_file'
    310       1.3    rillig unexpected_end_of_file_body()
    311       1.3    rillig {
    312       1.3    rillig 	echo 'struct{' > code.c
    313       1.3    rillig 
    314       1.3    rillig 	expect_error \
    315       1.5    rillig 	    'error: code.c:1: Stuff missing from end of file' \
    316       1.3    rillig 	    code.c
    317       1.3    rillig 
    318       1.3    rillig 	atf_check \
    319      1.21    rillig 	    -o 'inline:struct {\n' \
    320       1.3    rillig 	    cat code.c
    321       1.3    rillig }
    322       1.3    rillig 
    323       1.3    rillig atf_test_case 'unexpected_closing_brace_top_level'
    324       1.3    rillig unexpected_closing_brace_top_level_body()
    325       1.3    rillig {
    326       1.3    rillig 	echo '}' > code.c
    327       1.3    rillig 
    328       1.3    rillig 	expect_error \
    329       1.5    rillig 	    'error: code.c:1: Statement nesting error' \
    330       1.3    rillig 	    code.c
    331       1.3    rillig 	atf_check \
    332      1.21    rillig 	    -o 'inline:}\n' \
    333       1.3    rillig 	    cat code.c
    334       1.3    rillig }
    335       1.3    rillig 
    336       1.3    rillig atf_test_case 'unexpected_closing_brace_decl'
    337       1.3    rillig unexpected_closing_brace_decl_body()
    338       1.3    rillig {
    339       1.3    rillig 	echo 'int i = 3};' > code.c
    340       1.3    rillig 
    341       1.3    rillig 	expect_error \
    342       1.5    rillig 	    'error: code.c:1: Statement nesting error' \
    343       1.3    rillig 	    code.c
    344       1.3    rillig 	# Despite the error message, the original file got overwritten with a
    345       1.3    rillig 	# best-effort rewrite of the code.
    346       1.3    rillig 	atf_check \
    347      1.21    rillig 	    -o 'inline:int		i = 3};\n' \
    348       1.3    rillig 	    cat code.c
    349       1.3    rillig }
    350       1.3    rillig 
    351      1.34    rillig atf_test_case 'unbalanced_parentheses'
    352      1.34    rillig unbalanced_parentheses_body()
    353       1.9    rillig {
    354       1.9    rillig 	cat <<-\EOF > code.c
    355       1.9    rillig 		int var =
    356       1.9    rillig 		(
    357       1.9    rillig 		;
    358       1.9    rillig 		)
    359       1.9    rillig 		;
    360       1.9    rillig 	EOF
    361       1.9    rillig 	cat <<-\EOF > stderr.exp
    362      1.11    rillig 		error: code.c:3: Unbalanced parentheses
    363      1.11    rillig 		warning: code.c:4: Extra ')'
    364       1.9    rillig 	EOF
    365       1.9    rillig 
    366       1.9    rillig 	atf_check -s 'exit:1' -e 'file:stderr.exp' \
    367       1.9    rillig 	    "$indent" code.c
    368       1.9    rillig }
    369       1.9    rillig 
    370      1.34    rillig atf_test_case 'gcc_statement_expression'
    371      1.34    rillig gcc_statement_expression_body()
    372      1.10    rillig {
    373      1.10    rillig 	# '({...})' is the GCC extension "Statement expression".
    374      1.10    rillig 	cat <<-\EOF > code.c
    375      1.10    rillig 		int var =
    376      1.10    rillig 		(
    377      1.10    rillig 		1
    378      1.10    rillig 		}
    379      1.10    rillig 		;
    380      1.10    rillig 	EOF
    381      1.10    rillig 	cat <<-\EOF > stderr.exp
    382      1.11    rillig 		error: code.c:4: Unbalanced parentheses
    383      1.10    rillig 		error: code.c:4: Statement nesting error
    384      1.10    rillig 	EOF
    385      1.10    rillig 
    386      1.10    rillig 	atf_check -s 'exit:1' -e 'file:stderr.exp' \
    387      1.10    rillig 	    "$indent" code.c
    388      1.10    rillig }
    389      1.10    rillig 
    390      1.27    rillig atf_test_case 'crash_comment_after_controlling_expression'
    391      1.27    rillig crash_comment_after_controlling_expression_body()
    392      1.12    rillig {
    393      1.25    rillig 	# Before 2023-05-11, indent crashed while
    394      1.14    rillig 	# trying to format the following artificial code.
    395      1.14    rillig 
    396      1.12    rillig 	printf '{if(expr\n)/*c*/;}\n' > code.c
    397      1.12    rillig 
    398      1.14    rillig 	cat <<\EOF > code.exp
    399      1.14    rillig {
    400      1.14    rillig 	if (expr
    401  1.38.2.1  perseant 		)		/* c */
    402  1.38.2.1  perseant 		;
    403      1.14    rillig }
    404      1.14    rillig EOF
    405      1.15    rillig 
    406      1.25    rillig 	atf_check -o 'file:code.exp' \
    407      1.12    rillig 	    "$indent" code.c -st
    408      1.12    rillig }
    409       1.9    rillig 
    410      1.27    rillig atf_test_case 'comment_fits_in_one_line'
    411      1.27    rillig comment_fits_in_one_line_body()
    412      1.16    rillig {
    413      1.30    rillig 	# The comment is placed after 'if (0) ...'. Before NetBSD pr_comment.c
    414      1.30    rillig 	# 1.91 from 2021-10-30, this produced an assertion failure in
    415      1.30    rillig 	# fits_in_one_line.
    416      1.16    rillig 	cat <<EOF > code.c
    417      1.16    rillig int f(void)
    418      1.16    rillig {
    419      1.16    rillig 	if (0)
    420      1.16    rillig 		/* 0123456789012345678901 */;
    421      1.16    rillig }
    422      1.16    rillig EOF
    423      1.16    rillig 
    424      1.17    rillig 	# Indent tries hard to make the comment fit to the 34-character line
    425      1.17    rillig 	# length, but it is just not possible.
    426      1.17    rillig 	cat <<EOF > expected.out
    427      1.17    rillig int
    428      1.17    rillig f(void)
    429      1.17    rillig {
    430      1.17    rillig 	if (0)
    431      1.17    rillig 		/*
    432      1.17    rillig 		 * 0123456789012345678901
    433      1.33    rillig 		 */;
    434      1.17    rillig }
    435      1.17    rillig EOF
    436      1.17    rillig 
    437      1.17    rillig 	atf_check -o 'file:expected.out' \
    438      1.16    rillig 	    "$indent" -l34 code.c -st
    439      1.16    rillig }
    440      1.16    rillig 
    441      1.35    rillig atf_test_case 'stack_overflow'
    442      1.35    rillig stack_overflow_body()
    443      1.35    rillig {
    444      1.35    rillig 	cat <<-EOF > code.c
    445      1.35    rillig 		{{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{
    446      1.35    rillig 		{{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{
    447      1.35    rillig 		{{{{{{{{{{ {{{{{{{{{{ {{{{{{{
    448      1.35    rillig 	EOF
    449      1.35    rillig 
    450      1.35    rillig 	atf_check \
    451      1.35    rillig 	    -s 'exit:1' \
    452      1.35    rillig 	    -e 'inline:error: code.c:3: Stuff missing from end of file\n' \
    453      1.35    rillig 	    "$indent" code.c
    454      1.35    rillig 
    455      1.35    rillig 	cat <<-EOF > code.c
    456      1.35    rillig 		{{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{
    457      1.35    rillig 		{{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{ {{{{{{{{{{
    458      1.35    rillig 		{{{{{{{{{{ {{{{{{{{{{ {{{{{{{ {
    459      1.35    rillig 	EOF
    460      1.35    rillig 
    461      1.35    rillig 	atf_check \
    462      1.35    rillig 	    -s 'exit:1' \
    463      1.37    rillig 	    -e 'inline:error: code.c:3: Stuff missing from end of file\n' \
    464      1.35    rillig 	    "$indent" code.c
    465      1.35    rillig }
    466      1.35    rillig 
    467      1.16    rillig 
    468       1.1    rillig atf_init_test_cases()
    469       1.1    rillig {
    470       1.1    rillig 	atf_add_test_case 'option_unknown'
    471       1.1    rillig 	atf_add_test_case 'option_bool_trailing_garbage'
    472      1.38    rillig 	atf_add_test_case 'option_int_wrong_argument'
    473       1.2    rillig 	atf_add_test_case 'option_profile_not_found'
    474       1.2    rillig 	atf_add_test_case 'option_buffer_overflow'
    475       1.2    rillig 	atf_add_test_case 'option_typedefs_not_found'
    476       1.2    rillig 	atf_add_test_case 'option_special_missing_param'
    477       1.3    rillig 	atf_add_test_case 'option_tabsize_negative'
    478       1.3    rillig 	atf_add_test_case 'option_tabsize_zero'
    479       1.3    rillig 	atf_add_test_case 'option_tabsize_large'
    480       1.3    rillig 	atf_add_test_case 'option_tabsize_very_large'
    481       1.4    rillig 	atf_add_test_case 'option_int_trailing_garbage'
    482       1.6    rillig 	atf_add_test_case 'option_cli_trailing_garbage'
    483      1.19    rillig 	atf_add_test_case 'option_npro_trailing_garbage'
    484      1.19    rillig 	atf_add_test_case 'option_st_trailing_garbage'
    485      1.19    rillig 	atf_add_test_case 'option_version_trailing_garbage'
    486       1.3    rillig 	atf_add_test_case 'option_indent_size_zero'
    487      1.18    rillig 	atf_add_test_case 'unterminated_comment_wrap'
    488      1.18    rillig 	atf_add_test_case 'unterminated_comment_nowrap'
    489      1.32    rillig 	atf_add_test_case 'unterminated_char_constant'
    490      1.32    rillig 	atf_add_test_case 'unterminated_string_literal'
    491       1.3    rillig 	atf_add_test_case 'in_place_wrong_backup'
    492       1.3    rillig 	atf_add_test_case 'argument_input_enoent'
    493       1.3    rillig 	atf_add_test_case 'argument_output_equals_input_name'
    494       1.3    rillig 	atf_add_test_case 'argument_output_equals_input_file'
    495       1.3    rillig 	atf_add_test_case 'argument_output_enoent'
    496       1.3    rillig 	atf_add_test_case 'argument_too_many'
    497       1.3    rillig 	atf_add_test_case 'unexpected_end_of_file'
    498       1.3    rillig 	atf_add_test_case 'unexpected_closing_brace_top_level'
    499       1.3    rillig 	atf_add_test_case 'unexpected_closing_brace_decl'
    500      1.34    rillig 	atf_add_test_case 'unbalanced_parentheses'
    501      1.34    rillig 	atf_add_test_case 'gcc_statement_expression'
    502      1.27    rillig 	atf_add_test_case 'crash_comment_after_controlling_expression'
    503      1.27    rillig 	atf_add_test_case 'comment_fits_in_one_line'
    504      1.35    rillig 	atf_add_test_case 'stack_overflow'
    505       1.1    rillig }
    506