Module Name: src
Committed By: rillig
Date: Mon Oct 18 20:18:00 UTC 2021
Modified Files:
src/distrib/sets/lists/tests: mi
src/tests/usr.bin/indent: Makefile t_options.sh
Added Files:
src/tests/usr.bin/indent: label.c t_options.awk
Removed Files:
src/tests/usr.bin/indent: label.0 label.0.pro label.0.stdout
Log Message:
tests/indent: extend tests for labels, extract test driver
Having the test driver in a separate file allows to run it on its own,
as 'awk -f t_options.awk label.c'. When the test driver warns, exit 1;
this is only needed for the standalone version, when run from inside ATF
the warnings on stderr already suffice to make the test fail in the end.
To generate a diff of this commit:
cvs rdiff -u -r1.1143 -r1.1144 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.18 -r1.19 src/tests/usr.bin/indent/Makefile
cvs rdiff -u -r1.2 -r0 src/tests/usr.bin/indent/label.0 \
src/tests/usr.bin/indent/label.0.stdout
cvs rdiff -u -r1.1 -r0 src/tests/usr.bin/indent/label.0.pro
cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/indent/label.c \
src/tests/usr.bin/indent/t_options.awk
cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/indent/t_options.sh
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1143 src/distrib/sets/lists/tests/mi:1.1144
--- src/distrib/sets/lists/tests/mi:1.1143 Mon Oct 18 19:36:29 2021
+++ src/distrib/sets/lists/tests/mi Mon Oct 18 20:18:00 2021
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1143 2021/10/18 19:36:29 rillig Exp $
+# $NetBSD: mi,v 1.1144 2021/10/18 20:18:00 rillig Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -4755,9 +4755,10 @@
./usr/tests/usr.bin/indent/indent_variables.0 tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/indent_variables.0.pro tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/indent_variables.0.stdout tests-usr.bin-tests compattestfile,atf
-./usr/tests/usr.bin/indent/label.0 tests-usr.bin-tests compattestfile,atf
-./usr/tests/usr.bin/indent/label.0.pro tests-usr.bin-tests compattestfile,atf
-./usr/tests/usr.bin/indent/label.0.stdout tests-usr.bin-tests compattestfile,atf
+./usr/tests/usr.bin/indent/label.0 tests-obsolete obsolete,atf
+./usr/tests/usr.bin/indent/label.0.pro tests-obsolete obsolete,atf
+./usr/tests/usr.bin/indent/label.0.stdout tests-obsolete obsolete,atf
+./usr/tests/usr.bin/indent/label.c tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/lex.0 tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/lex.0.pro tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/lex.0.stdout tests-usr.bin-tests compattestfile,atf
@@ -5034,6 +5035,7 @@
./usr/tests/usr.bin/indent/t_indent tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/t_misc tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/t_options tests-usr.bin-tests compattestfile,atf
+./usr/tests/usr.bin/indent/t_options.awk tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/token-binary_op.0 tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/token-binary_op.0.pro tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/indent/token-binary_op.0.stdout tests-usr.bin-tests compattestfile,atf
Index: src/tests/usr.bin/indent/Makefile
diff -u src/tests/usr.bin/indent/Makefile:1.18 src/tests/usr.bin/indent/Makefile:1.19
--- src/tests/usr.bin/indent/Makefile:1.18 Mon Oct 18 19:36:30 2021
+++ src/tests/usr.bin/indent/Makefile Mon Oct 18 20:18:00 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.18 2021/10/18 19:36:30 rillig Exp $
+# $NetBSD: Makefile,v 1.19 2021/10/18 20:18:00 rillig Exp $
.include <bsd.own.mk>
@@ -22,9 +22,7 @@ FILES+= f_decls.0.stdout
FILES+= indent_variables.0
FILES+= indent_variables.0.pro
FILES+= indent_variables.0.stdout
-FILES+= label.0
-FILES+= label.0.stdout
-FILES+= label.0.pro
+FILES+= label.c
FILES+= lex.0
FILES+= lex.0.pro
FILES+= lex.0.stdout
@@ -147,6 +145,7 @@ FILES+= struct.0.stdout
FILES+= surplusbad.0
FILES+= surplusbad.0.stdout
FILES+= surplusbad.0.pro
+FILES+= t_options.awk
FILES+= token-binary_op.0
FILES+= token-binary_op.0.pro
FILES+= token-binary_op.0.stdout
Index: src/tests/usr.bin/indent/t_options.sh
diff -u src/tests/usr.bin/indent/t_options.sh:1.7 src/tests/usr.bin/indent/t_options.sh:1.8
--- src/tests/usr.bin/indent/t_options.sh:1.7 Mon Oct 18 19:36:30 2021
+++ src/tests/usr.bin/indent/t_options.sh Mon Oct 18 20:18:00 2021
@@ -1,5 +1,5 @@
#! /bin/sh
-# $NetBSD: t_options.sh,v 1.7 2021/10/18 19:36:30 rillig Exp $
+# $NetBSD: t_options.sh,v 1.8 2021/10/18 20:18:00 rillig Exp $
#
# Copyright (c) 2021 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -51,149 +51,10 @@
srcdir=$(atf_get_srcdir)
indent=$(atf_config_get usr.bin.indent.test_indent /usr/bin/indent)
-# Read the test specification from stdin, output the actual test output on
-# stdout, write the expected test output to 'expected.out'.
-#
-# shellcheck disable=SC2016
-check_awk='
-function die(lineno, msg)
-{
- if (!died) {
- died = 1
- print FILENAME ":" lineno ": error: " msg > "/dev/stderr"
- exit(1)
- }
-}
-
-function warn(lineno, msg)
-{
- print FILENAME ":" lineno ": warning: " msg > "/dev/stderr"
-}
-
-function quote(s)
-{
- return "'\''" s "'\''"
-}
-
-BEGIN {
- section = "" # "", "input" or "run"
- section_excl_comm = "" # without dollar comments
- section_incl_comm = "" # with dollar comments
-
- input_excl_comm = "" # stdin for indent
- input_incl_comm = "" # used for duplicate checks
- unused_input_lineno = 0
-
- output_excl_comm = "" # expected output
- output_incl_comm = "" # used for duplicate checks
- output_lineno = 0
-}
-
-# Hide comments starting with dollar from indent; they are used for marking
-# bugs and adding other remarks directly in the input or output sections.
-/^[[:space:]]*\/[*][[:space:]]*[$].*[*]\/$/ ||
- /^[[:space:]]*\/\/[[:space:]]*[$]/ {
- if (section != "")
- section_incl_comm = section_incl_comm $0 "\n"
- next
-}
-
-function check_unused_input()
-{
- if (unused_input_lineno != 0)
- warn(unused_input_lineno, "input is not used")
-}
-
-function run_indent(inp, i, cmd)
-{
- cmd = ENVIRON["INDENT"]
- for (i = 3; i <= NF; i++)
- cmd = cmd " " $i
- printf("%s", inp) | cmd
- close(cmd)
-}
-
-/^#/ && $1 == "#indent" {
- print $0
- print $0 > "expected.out"
-
- if ($2 == "input") {
- check_unused_input()
- section = "input"
- section_excl_comm = ""
- section_incl_comm = ""
- unused_input_lineno = NR
-
- } else if ($2 == "run") {
- section = "run"
- output_lineno = NR
- section_excl_comm = ""
- section_incl_comm = ""
-
- run_indent(input_excl_comm)
- unused_input_lineno = 0
-
- } else if ($2 == "run-equals-input") {
- run_indent(input_excl_comm)
- printf("%s", input_excl_comm) > "expected.out"
- unused_input_lineno = 0
-
- } else if ($2 == "run-equals-prev-output") {
- run_indent(input_excl_comm)
- printf("%s", output_excl_comm) > "expected.out"
-
- } else if ($2 == "end" && section == "input") {
- if (section_incl_comm == input_incl_comm)
- warn(NR, "duplicate input; remove this section")
-
- input_excl_comm = section_excl_comm
- input_incl_comm = section_incl_comm
- section = ""
-
- } else if ($2 == "end" && section == "run") {
- if (section_incl_comm == input_incl_comm)
- warn(output_lineno,
- "output == input; use run-equals-input")
- if (section_incl_comm == output_incl_comm)
- warn(output_lineno,
- "duplicate output; use run-equals-prev-output")
-
- output_excl_comm = section_excl_comm
- output_incl_comm = section_incl_comm
- section = ""
-
- } else if ($2 == "end") {
- warn(NR, "misplaced " quote("#indent end"))
-
- } else {
- die(NR, "invalid line " quote($0))
- }
-
- next
-}
-
-section == "input" || section == "run" {
- section_excl_comm = section_excl_comm $0 "\n"
- section_incl_comm = section_incl_comm $0 "\n"
-}
-
-section == "run" {
- print $0 > "expected.out"
-}
-
-END {
- if (section != "")
- die(NR, "still in section " quote(section))
- check_unused_input()
-}
-'
-
check()
{
- printf '%s\n' "$check_awk" > check.awk
-
atf_check -o "file:expected.out" \
- env INDENT="$indent" awk -f check.awk "$srcdir/$1.c"
+ env INDENT="$indent" awk -f "$srcdir/t_options.awk" "$srcdir/$1.c"
}
atf_init_test_cases()
Added files:
Index: src/tests/usr.bin/indent/label.c
diff -u /dev/null src/tests/usr.bin/indent/label.c:1.1
--- /dev/null Mon Oct 18 20:18:00 2021
+++ src/tests/usr.bin/indent/label.c Mon Oct 18 20:18:00 2021
@@ -0,0 +1,124 @@
+/* $NetBSD: label.c,v 1.1 2021/10/18 20:18:00 rillig Exp $ */
+/* $FreeBSD: head/usr.bin/indent/tests/label.0 313544 2017-02-10 09:31:39Z pstef $ */
+
+/* See FreeBSD r303489 */
+
+#indent input
+void t(void) {
+ switch (1)
+ {
+ case 1: /* test */
+ case 2: /* test */
+ }
+CLEANUP:
+ ;
+V: ;
+U: ;
+}
+#indent end
+
+#indent run
+void
+t(void)
+{
+ switch (1) {
+ case 1: /* test */
+ case 2: /* test */
+ }
+CLEANUP:
+ ;
+V: ;
+U: ;
+}
+#indent end
+
+#indent input
+void
+label_width(void)
+{
+L:;
+L2:;
+L_3:;
+L__4:;
+L___5:;
+L____6:;
+L_____7:;
+L______8:;
+}
+#indent end
+
+#indent run
+void
+label_width(void)
+{
+L: ;
+L2: ;
+L_3: ;
+L__4: ;
+L___5: ;
+L____6: ;
+L_____7:;
+L______8:;
+}
+#indent end
+
+/*
+ * The indentation of statement labels is fixed to -2, it is not configurable.
+ */
+#indent input
+void
+label_indentation(void)
+{
+ if (level1) {
+ if (level2) {
+ if (level3) {
+ if (level4) {
+ if (level5) {
+ label5:
+ statement();
+ }
+ label4:
+ statement();
+ }
+ label3:
+ statement();
+ }
+ label2:
+ statement();
+ }
+ label1:
+ statement();
+ }
+ label0:
+ statement();
+}
+#indent end
+
+#indent run
+void
+label_indentation(void)
+{
+ if (level1) {
+ if (level2) {
+ if (level3) {
+ if (level4) {
+ if (level5) {
+ label5:
+ statement();
+ }
+ label4:
+ statement();
+ }
+ label3:
+ statement();
+ }
+ label2:
+ statement();
+ }
+label1:
+ statement();
+ }
+label0:
+ statement();
+}
+#indent end
Index: src/tests/usr.bin/indent/t_options.awk
diff -u /dev/null src/tests/usr.bin/indent/t_options.awk:1.1
--- /dev/null Mon Oct 18 20:18:00 2021
+++ src/tests/usr.bin/indent/t_options.awk Mon Oct 18 20:18:00 2021
@@ -0,0 +1,192 @@
+# $NetBSD: t_options.awk,v 1.1 2021/10/18 20:18:00 rillig Exp $
+#
+# Copyright (c) 2021 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+
+# Test driver for indent that focuses on comparing the effects of the various
+# command line options.
+#
+# The test files contain the input to be formatted, the formatting options
+# and the output, all as close together as possible. The test files use the
+# following directives:
+#
+# #indent input [description]
+# Specifies the input to be formatted.
+# #indent run [options]
+# Runs indent on the input, using the given options.
+# #indent end [description]
+# Finishes an '#indent input' or '#indent run' section.
+# #indent run-equals-input [options]
+# Runs indent on the input, expecting unmodified output.
+# #indent run-equals-prev-output [options]
+# Runs indent on the input, expecting the same output as from
+# the previous run.
+#
+# All text outside these directives is not passed to indent.
+
+# Read the test specification from stdin, output the actual test output on
+# stdout, write the expected test output to 'expected.out'.
+
+function die(lineno, msg)
+{
+ if (!died) {
+ died = 1 # suppress further actions in END block
+ print FILENAME ":" lineno ": error: " msg > "/dev/stderr"
+ exit(1)
+ }
+}
+
+function warn(lineno, msg)
+{
+ print FILENAME ":" lineno ": warning: " msg > "/dev/stderr"
+ warned = 1
+}
+
+function quote(s)
+{
+ return "'" s "'"
+}
+
+BEGIN {
+ warned = 0
+ died = 0
+
+ section = "" # "", "input" or "run"
+ section_excl_comm = "" # without dollar comments
+ section_incl_comm = "" # with dollar comments
+
+ input_excl_comm = "" # stdin for indent
+ input_incl_comm = "" # used for duplicate checks
+ unused_input_lineno = 0
+
+ output_excl_comm = "" # expected output
+ output_incl_comm = "" # used for duplicate checks
+ output_lineno = 0
+}
+
+# Hide comments starting with dollar from indent; they are used for marking
+# bugs and adding other remarks directly in the input or output sections.
+/^[[:space:]]*\/[*][[:space:]]*[$].*[*]\/$/ ||
+ /^[[:space:]]*\/\/[[:space:]]*[$]/ {
+ if (section != "")
+ section_incl_comm = section_incl_comm $0 "\n"
+ next
+}
+
+function check_unused_input()
+{
+ if (unused_input_lineno != 0)
+ warn(unused_input_lineno, "input is not used")
+}
+
+function run_indent(inp, i, cmd)
+{
+ cmd = ENVIRON["INDENT"]
+ if (cmd == "")
+ cmd = "indent"
+ for (i = 3; i <= NF; i++)
+ cmd = cmd " " $i
+ printf("%s", inp) | cmd
+ close(cmd)
+}
+
+/^#/ && $1 == "#indent" {
+ print $0
+ print $0 > "expected.out"
+
+ if ($2 == "input") {
+ check_unused_input()
+ section = "input"
+ section_excl_comm = ""
+ section_incl_comm = ""
+ unused_input_lineno = NR
+
+ } else if ($2 == "run") {
+ if (section != "")
+ warn(NR, "unfinished section " quote(section))
+ section = "run"
+ output_lineno = NR
+ section_excl_comm = ""
+ section_incl_comm = ""
+
+ run_indent(input_excl_comm)
+ unused_input_lineno = 0
+
+ } else if ($2 == "run-equals-input") {
+ run_indent(input_excl_comm)
+ printf("%s", input_excl_comm) > "expected.out"
+ unused_input_lineno = 0
+
+ } else if ($2 == "run-equals-prev-output") {
+ run_indent(input_excl_comm)
+ printf("%s", output_excl_comm) > "expected.out"
+
+ } else if ($2 == "end" && section == "input") {
+ if (section_incl_comm == input_incl_comm)
+ warn(NR, "duplicate input; remove this section")
+
+ input_excl_comm = section_excl_comm
+ input_incl_comm = section_incl_comm
+ section = ""
+
+ } else if ($2 == "end" && section == "run") {
+ if (section_incl_comm == input_incl_comm)
+ warn(output_lineno,
+ "output == input; use run-equals-input")
+ if (section_incl_comm == output_incl_comm)
+ warn(output_lineno,
+ "duplicate output; use run-equals-prev-output")
+
+ output_excl_comm = section_excl_comm
+ output_incl_comm = section_incl_comm
+ section = ""
+
+ } else if ($2 == "end") {
+ warn(NR, "misplaced " quote("#indent end"))
+
+ } else {
+ die(NR, "invalid line " quote($0))
+ }
+
+ next
+}
+
+section == "input" || section == "run" {
+ section_excl_comm = section_excl_comm $0 "\n"
+ section_incl_comm = section_incl_comm $0 "\n"
+}
+
+section == "run" {
+ print $0 > "expected.out"
+}
+
+END {
+ if (section != "")
+ die(NR, "still in section " quote(section))
+ check_unused_input()
+ if (warned)
+ exit(1)
+}