Module Name:    src
Committed By:   rillig
Date:           Sat May 13 06:52:48 UTC 2023

Modified Files:
        src/tests/usr.bin/indent: fmt_block.c fmt_decl.c lsym_binary_op.c
            lsym_comma.c lsym_comment.c lsym_do.c lsym_unary_op.c lsym_while.c
            t_misc.sh

Log Message:
tests/indent: explain, clean up and add some tests


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/indent/fmt_block.c \
    src/tests/usr.bin/indent/lsym_comma.c \
    src/tests/usr.bin/indent/lsym_comment.c \
    src/tests/usr.bin/indent/lsym_do.c \
    src/tests/usr.bin/indent/lsym_unary_op.c
cvs rdiff -u -r1.37 -r1.38 src/tests/usr.bin/indent/fmt_decl.c
cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/indent/lsym_binary_op.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/indent/lsym_while.c
cvs rdiff -u -r1.22 -r1.23 src/tests/usr.bin/indent/t_misc.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/indent/fmt_block.c
diff -u src/tests/usr.bin/indent/fmt_block.c:1.5 src/tests/usr.bin/indent/fmt_block.c:1.6
--- src/tests/usr.bin/indent/fmt_block.c:1.5	Thu May 11 09:28:53 2023
+++ src/tests/usr.bin/indent/fmt_block.c	Sat May 13 06:52:48 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: fmt_block.c,v 1.5 2023/05/11 09:28:53 rillig Exp $ */
+/* $NetBSD: fmt_block.c,v 1.6 2023/05/13 06:52:48 rillig Exp $ */
 
 /*
  * Tests for formatting blocks of statements and declarations.
@@ -23,6 +23,10 @@ function(void)
 }
 //indent end
 
+/*
+ * Before 2023-05-11, indent incorrectly merged the '} {' into a single line,
+ * even though they are completely unrelated.
+ */
 //indent run-equals-input
 
 
Index: src/tests/usr.bin/indent/lsym_comma.c
diff -u src/tests/usr.bin/indent/lsym_comma.c:1.5 src/tests/usr.bin/indent/lsym_comma.c:1.6
--- src/tests/usr.bin/indent/lsym_comma.c:1.5	Sun Apr 24 09:04:12 2022
+++ src/tests/usr.bin/indent/lsym_comma.c	Sat May 13 06:52:48 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_comma.c,v 1.5 2022/04/24 09:04:12 rillig Exp $ */
+/* $NetBSD: lsym_comma.c,v 1.6 2023/05/13 06:52:48 rillig Exp $ */
 
 /*
  * Tests for the token lsym_comma, which represents a ',' in these contexts:
@@ -150,8 +150,6 @@ function(void)
 
 /*
  * In an initializer list, a ',' separates the initializer expressions.
- *
- * If a ',' starts a line, indent doesn't put a space before it.
  */
 //indent input
 int arr[] = {1, 2, 3};
Index: src/tests/usr.bin/indent/lsym_comment.c
diff -u src/tests/usr.bin/indent/lsym_comment.c:1.5 src/tests/usr.bin/indent/lsym_comment.c:1.6
--- src/tests/usr.bin/indent/lsym_comment.c:1.5	Thu May 11 09:28:53 2023
+++ src/tests/usr.bin/indent/lsym_comment.c	Sat May 13 06:52:48 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_comment.c,v 1.5 2023/05/11 09:28:53 rillig Exp $ */
+/* $NetBSD: lsym_comment.c,v 1.6 2023/05/13 06:52:48 rillig Exp $ */
 
 /*
  * Tests for the token lsym_comment, which starts a comment.
@@ -337,7 +337,7 @@ tab1+++	tab2---	tab3+++	tab4---	tab5+++	
 }
 //indent end
 
-/* The comment in the output has moved to the right of the '{'. */
+/* Before 2023-05-11, the comment moved to the right of the '{'. */
 //indent run
 {
 	if (0) /* comment */ {
Index: src/tests/usr.bin/indent/lsym_do.c
diff -u src/tests/usr.bin/indent/lsym_do.c:1.5 src/tests/usr.bin/indent/lsym_do.c:1.6
--- src/tests/usr.bin/indent/lsym_do.c:1.5	Thu May 11 10:39:26 2023
+++ src/tests/usr.bin/indent/lsym_do.c	Sat May 13 06:52:48 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_do.c,v 1.5 2023/05/11 10:39:26 rillig Exp $ */
+/* $NetBSD: lsym_do.c,v 1.6 2023/05/13 06:52:48 rillig Exp $ */
 
 /*
  * Tests for the token lsym_do, which represents the keyword 'do' that starts
@@ -49,3 +49,40 @@ else_do(int i)
 		} while (0);
 }
 //indent end
+
+
+//indent input
+void
+variants(void)
+{
+	do stmt(); while (0);
+
+	do { stmt(); } while (0);
+
+	do /* comment */ stmt(); while (0);
+
+	while (0) do {} while (0);
+}
+//indent end
+
+//indent run
+void
+variants(void)
+{
+	do
+		stmt();
+	while (0);
+
+	do {
+		stmt();
+	} while (0);
+
+	do			/* comment */
+		stmt();
+	while (0);
+
+	while (0)
+		do {
+		} while (0);
+}
+//indent end
Index: src/tests/usr.bin/indent/lsym_unary_op.c
diff -u src/tests/usr.bin/indent/lsym_unary_op.c:1.5 src/tests/usr.bin/indent/lsym_unary_op.c:1.6
--- src/tests/usr.bin/indent/lsym_unary_op.c:1.5	Sun Apr 24 10:36:37 2022
+++ src/tests/usr.bin/indent/lsym_unary_op.c	Sat May 13 06:52:48 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_unary_op.c,v 1.5 2022/04/24 10:36:37 rillig Exp $ */
+/* $NetBSD: lsym_unary_op.c,v 1.6 2023/05/13 06:52:48 rillig Exp $ */
 
 /*
  * Tests for the token lsym_unary_op, which represents a unary operator.
@@ -8,6 +8,12 @@
  *
  * In a type name, the "unary operator" '*' represents the derivation of a
  * pointer type.
+ *
+ * See also:
+ *	lsym_binary_op.c
+ *	lsym_postfix_op.c
+ *	C11 6.4.6 "Punctuators"
+ *	C11 6.5 "Expressions"
  */
 
 //indent input
@@ -54,3 +60,20 @@ int var = p -> member;
 //indent run -di0
 int var = p->member;
 //indent end
+
+
+//indent input
+void
+unary_operators(void)
+{
+	++prefix_increment;
+	--prefix_decrement;
+	int *address = &lvalue;
+	int dereferenced = *address;
+	int positive = +number;
+	int negative = -number;
+	bool negated = !condition;
+}
+//indent end
+
+//indent run-equals-input -di0

Index: src/tests/usr.bin/indent/fmt_decl.c
diff -u src/tests/usr.bin/indent/fmt_decl.c:1.37 src/tests/usr.bin/indent/fmt_decl.c:1.38
--- src/tests/usr.bin/indent/fmt_decl.c:1.37	Thu May 11 09:28:53 2023
+++ src/tests/usr.bin/indent/fmt_decl.c	Sat May 13 06:52:48 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: fmt_decl.c,v 1.37 2023/05/11 09:28:53 rillig Exp $	*/
+/*	$NetBSD: fmt_decl.c,v 1.38 2023/05/13 06:52:48 rillig Exp $	*/
 
 /*
  * Tests for declarations of global variables, external functions, and local
@@ -88,38 +88,8 @@ typedef struct Complex
 
 
 /*
- * As of 2021-11-07, indent parses the following function definition as these
- * tokens:
- *
- * line 1: type_outside_parentheses "void"
- * line 1: newline "\n"
- * line 2: funcname "t1"
- * line 2: newline "\n"		repeated, see search_stmt
- * line 3: funcname "t1"	XXX: wrong line_no
- * line 3: lparen_or_lbracket "("
- * line 3: type_in_parentheses "char"
- * line 3: unary_op "*"
- * line 3: word "a"
- * line 3: comma ","
- * line 3: type_in_parentheses "int"
- * line 3: word "b"
- * line 3: comma ","
- * line 3: newline "\n"
- * line 4: type_in_parentheses "void"
- * line 4: lparen_or_lbracket "("
- * line 4: unary_op "*"
- * line 4: word "fn"
- * line 4: rparen_or_rbracket ")"
- * line 4: lparen_or_lbracket "("
- * line 4: type_in_parentheses "void"
- * line 4: rparen_or_rbracket ")"
- * line 4: rparen_or_rbracket ")"
- * line 4: newline "\n"
- * line 5: lbrace "{"
- * line 5: lbrace "{"		repeated, see search_stmt
- * line 5: newline "\n"		FIXME: there is no newline in the source
- * line 6: rbrace "}"
- * line 6: eof "\n"
+ * Ensure that function definitions are reasonably indented.  Before
+ * 2023-05-11, tokens were repeatedly read, and the line numbers were wrong.
  */
 //indent input
 void
@@ -527,7 +497,10 @@ function_name_____20________30________40
 {}
 //indent end
 
-/* FIXME: The space between '){' is missing. */
+/*
+ * Before 2023-05-11, indent moved the '{' right after the '(void)', without
+ * any space in between.
+ */
 //indent run
 int	       *function_name_____20________30________40________50
 		(void)
@@ -547,6 +520,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 {}
 //indent end
 
+/*
+ * Before 2023-05-11, indent moved the '{' right after the '(void)', without
+ * any space in between.
+ */
 //indent run
 int	       *aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 		(void)
@@ -607,7 +584,8 @@ buffer_add(buffer *buf, char ch)
 
 
 /*
- * Indent gets easily confused by type names it does not know about.
+ * Before lexi.c 1.153 from 2021-11-25, indent did not recognize 'Token' as a
+ * type name and then messed up the positioning of the '{'.
  */
 //indent input
 static Token

Index: src/tests/usr.bin/indent/lsym_binary_op.c
diff -u src/tests/usr.bin/indent/lsym_binary_op.c:1.6 src/tests/usr.bin/indent/lsym_binary_op.c:1.7
--- src/tests/usr.bin/indent/lsym_binary_op.c:1.6	Sun Apr 24 10:36:37 2022
+++ src/tests/usr.bin/indent/lsym_binary_op.c	Sat May 13 06:52:48 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_binary_op.c,v 1.6 2022/04/24 10:36:37 rillig Exp $ */
+/* $NetBSD: lsym_binary_op.c,v 1.7 2023/05/13 06:52:48 rillig Exp $ */
 
 /*
  * Tests for the token lsym_binary_op, which represents a binary operator in
@@ -160,3 +160,14 @@ int		col_9		//
 =				//
 9;
 //indent end
+
+
+/*
+ * The ternary conditional operator is not a binary operator, but both its
+ * components '?' and ':' follow the same spacing rules.
+ */
+//indent input
+int conditional = condition ? number : number;
+//indent end
+
+//indent run-equals-input -di0

Index: src/tests/usr.bin/indent/lsym_while.c
diff -u src/tests/usr.bin/indent/lsym_while.c:1.4 src/tests/usr.bin/indent/lsym_while.c:1.5
--- src/tests/usr.bin/indent/lsym_while.c:1.4	Sun Apr 24 10:36:37 2022
+++ src/tests/usr.bin/indent/lsym_while.c	Sat May 13 06:52:48 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_while.c,v 1.4 2022/04/24 10:36:37 rillig Exp $ */
+/* $NetBSD: lsym_while.c,v 1.5 2023/05/13 06:52:48 rillig Exp $ */
 
 /*
  * Tests for the token 'lsym_while', which represents the keyword 'while' that
@@ -25,3 +25,26 @@ function(void)
 	while (cond);
 }
 //indent end
+
+
+/*
+ * The keyword 'while' must only be indented if it follows a psym_do_stmt,
+ * otherwise it starts a new statement and must start a new line.
+ */
+//indent input
+void
+function(void)
+{
+	{} while (0);
+}
+//indent end
+
+//indent run
+void
+function(void)
+{
+	{
+/* $ FIXME: The '} while' is misleading. */
+	} while (0);
+}
+//indent end

Index: src/tests/usr.bin/indent/t_misc.sh
diff -u src/tests/usr.bin/indent/t_misc.sh:1.22 src/tests/usr.bin/indent/t_misc.sh:1.23
--- src/tests/usr.bin/indent/t_misc.sh:1.22	Fri May 12 10:53:33 2023
+++ src/tests/usr.bin/indent/t_misc.sh	Sat May 13 06:52:48 2023
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $NetBSD: t_misc.sh,v 1.22 2023/05/12 10:53:33 rillig Exp $
+# $NetBSD: t_misc.sh,v 1.23 2023/05/13 06:52:48 rillig Exp $
 #
 # Copyright (c) 2021 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -26,7 +26,7 @@
 # POSSIBILITY OF SUCH DAMAGE.
 
 # Tests for indent that do not follow the input-profile-output scheme that is
-# used in t_indent.
+# used in t_options.
 
 indent=$(atf_config_get usr.bin.indent.test_indent /usr/bin/indent)
 

Reply via email to