Module Name:    src
Committed By:   rillig
Date:           Fri Nov 19 22:24:29 UTC 2021

Modified Files:
        src/tests/usr.bin/indent: fmt_block.c fmt_decl.c fmt_else_comment.c
            fmt_expr.c indent_off_on.c lex_char.c lex_ident.c lex_string.c
            lsym_offsetof.c opt_P.c opt_T.c opt_bacc.c opt_badp.c opt_bap.c
            opt_bap_sob.c opt_bbb.c opt_bc.c opt_bl_br.c opt_bs.c opt_c.c
            opt_cd.c t_misc.sh

Log Message:
tests/indent: refine and extend tests


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/indent/fmt_block.c \
    src/tests/usr.bin/indent/fmt_else_comment.c \
    src/tests/usr.bin/indent/fmt_expr.c src/tests/usr.bin/indent/lex_char.c \
    src/tests/usr.bin/indent/lex_string.c \
    src/tests/usr.bin/indent/lsym_offsetof.c src/tests/usr.bin/indent/opt_P.c \
    src/tests/usr.bin/indent/opt_T.c src/tests/usr.bin/indent/opt_bap_sob.c \
    src/tests/usr.bin/indent/opt_c.c src/tests/usr.bin/indent/opt_cd.c
cvs rdiff -u -r1.18 -r1.19 src/tests/usr.bin/indent/fmt_decl.c
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/indent/indent_off_on.c \
    src/tests/usr.bin/indent/opt_bap.c src/tests/usr.bin/indent/opt_bbb.c \
    src/tests/usr.bin/indent/opt_bc.c
cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/indent/lex_ident.c \
    src/tests/usr.bin/indent/opt_bl_br.c
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/indent/opt_bacc.c \
    src/tests/usr.bin/indent/opt_bs.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/indent/opt_badp.c
cvs rdiff -u -r1.15 -r1.16 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.1 src/tests/usr.bin/indent/fmt_block.c:1.2
--- src/tests/usr.bin/indent/fmt_block.c:1.1	Fri Oct 22 19:27:53 2021
+++ src/tests/usr.bin/indent/fmt_block.c	Fri Nov 19 22:24:29 2021
@@ -1,6 +1,15 @@
-/* $NetBSD: fmt_block.c,v 1.1 2021/10/22 19:27:53 rillig Exp $ */
+/* $NetBSD: fmt_block.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
+/*
+ * Tests for formatting blocks of statements and declarations.
+ *
+ * See also:
+ *	lsym_lbrace.c
+ *	psym_stmt.c
+ *	psym_stmt_list.c
+ */
+
 #indent input
 void
 function(void)
@@ -29,3 +38,43 @@ function(void)
 	}
 }
 #indent end
+
+
+/*
+ * Two adjacent blocks must not be merged.  They are typically used in C90 and
+ * earlier to declare local variables with a limited scope.
+ */
+#indent input
+void
+function(void)
+{
+	{}{}
+}
+#indent end
+
+#indent run
+void
+function(void)
+{
+	{
+/* $ FIXME: '{' must start a new line. */
+	} {
+	}
+}
+#indent end
+
+/*
+ * The buggy behavior only occurs with the default setting '-br', which
+ * places an opening brace to the right of the preceding 'if (expr)' or
+ * similar statements.
+ */
+#indent run -bl
+void
+function(void)
+{
+	{
+	}
+	{
+	}
+}
+#indent end
Index: src/tests/usr.bin/indent/fmt_else_comment.c
diff -u src/tests/usr.bin/indent/fmt_else_comment.c:1.1 src/tests/usr.bin/indent/fmt_else_comment.c:1.2
--- src/tests/usr.bin/indent/fmt_else_comment.c:1.1	Fri Oct 22 19:27:53 2021
+++ src/tests/usr.bin/indent/fmt_else_comment.c	Fri Nov 19 22:24:29 2021
@@ -1,19 +1,51 @@
-/*	$NetBSD: fmt_else_comment.c,v 1.1 2021/10/22 19:27:53 rillig Exp $	*/
+/*	$NetBSD: fmt_else_comment.c,v 1.2 2021/11/19 22:24:29 rillig Exp $	*/
 /* $FreeBSD: head/usr.bin/indent/tests/elsecomment.0.pro 314613 2017-03-03 20:15:22Z ngie $ */
 
-/* See r303484 and r309342 */
-
+/*
+ * Tests for comments after 'if (expr)' and 'else'. If the option '-br' is
+ * given (or rather, if '-bl' is not given), indent looks ahead to the
+ * following significant token to see whether it is a '{', it then moves the
+ * comments after the '{'.
+ *
+ * See also:
+ *	FreeBSD r303484
+ *	FreeBSD r309342
+ */
+
+/*
+ * The two 'if' statements below exercise two different code paths, even
+ * though they look very similar.
+ */
 #indent input
 void t(void) {
-	/* The two if statements below excercise two different code paths. */
-
 	if (1) /* a */ int a; else /* b */ int b;
 
 	if (1) /* a */
 		int a;
 	else /* b */
 		int b;
+}
+#indent end
 
+#indent run
+void
+t(void)
+{
+	if (1)			/* a */
+		int		a;
+	else			/* b */
+		int		b;
+
+	if (1)			/* a */
+		int		a;
+	else			/* b */
+		int		b;
+}
+#indent end
+
+
+#indent input
+void t(void) {
 	if (1) {
 
 	}
@@ -50,18 +82,6 @@ void t(void) {
 void
 t(void)
 {
-	/* The two if statements below excercise two different code paths. */
-
-	if (1)			/* a */
-		int		a;
-	else			/* b */
-		int		b;
-
-	if (1)			/* a */
-		int		a;
-	else			/* b */
-		int		b;
-
 	if (1)
 	{
 
Index: src/tests/usr.bin/indent/fmt_expr.c
diff -u src/tests/usr.bin/indent/fmt_expr.c:1.1 src/tests/usr.bin/indent/fmt_expr.c:1.2
--- src/tests/usr.bin/indent/fmt_expr.c:1.1	Sat Oct 23 20:17:08 2021
+++ src/tests/usr.bin/indent/fmt_expr.c	Fri Nov 19 22:24:29 2021
@@ -1,14 +1,16 @@
-/* $NetBSD: fmt_expr.c,v 1.1 2021/10/23 20:17:08 rillig Exp $ */
+/* $NetBSD: fmt_expr.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
  * Tests for all kinds of expressions that are not directly related to unary
  * or binary operators.
  *
- * See also: token_binary_op, token_unary_op.
+ * See also:
+ *	lsym_binary_op.c
+ *	lsym_unary_op.c
  */
 
-/* See FreeBSD r303718. */
+/* See lsym_offsetof.c. */
 #indent input
 void t(void) {
     int n = malloc(offsetof(struct s, f) + 1);
Index: src/tests/usr.bin/indent/lex_char.c
diff -u src/tests/usr.bin/indent/lex_char.c:1.1 src/tests/usr.bin/indent/lex_char.c:1.2
--- src/tests/usr.bin/indent/lex_char.c:1.1	Fri Oct 22 20:54:36 2021
+++ src/tests/usr.bin/indent/lex_char.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lex_char.c,v 1.1 2021/10/22 20:54:36 rillig Exp $ */
+/* $NetBSD: lex_char.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
@@ -21,6 +21,10 @@ int escape_v = '\v';
 int escape_single_quote = '\'';
 int escape_double_quote = '\"';
 int escape_backslash = '\\';
+int line_break_before = '\
+x';
+int line_break_after = 'x\
+';
 #indent end
 
 #indent run-equals-input -di0
Index: src/tests/usr.bin/indent/lex_string.c
diff -u src/tests/usr.bin/indent/lex_string.c:1.1 src/tests/usr.bin/indent/lex_string.c:1.2
--- src/tests/usr.bin/indent/lex_string.c:1.1	Fri Oct 22 20:54:36 2021
+++ src/tests/usr.bin/indent/lex_string.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lex_string.c,v 1.1 2021/10/22 20:54:36 rillig Exp $ */
+/* $NetBSD: lex_string.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
@@ -28,7 +28,10 @@ char escape_newline[] = "\
 
 #indent run-equals-input -di0
 
-/* Concatenated string literals are separated with a single space. */
+
+/*
+ * Concatenated string literals are separated with a single space.
+ */
 #indent input
 char concat[] = "line 1\n"
 "line2"		"has"   "several""words\n";
Index: src/tests/usr.bin/indent/lsym_offsetof.c
diff -u src/tests/usr.bin/indent/lsym_offsetof.c:1.1 src/tests/usr.bin/indent/lsym_offsetof.c:1.2
--- src/tests/usr.bin/indent/lsym_offsetof.c:1.1	Thu Nov 18 21:19:19 2021
+++ src/tests/usr.bin/indent/lsym_offsetof.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_offsetof.c,v 1.1 2021/11/18 21:19:19 rillig Exp $ */
+/* $NetBSD: lsym_offsetof.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
@@ -7,7 +7,16 @@
  */
 
 #indent input
-// TODO: add input
+size_t		offset = offsetof(struct s, member);
 #indent end
 
 #indent run-equals-input
+#indent run-equals-input -bs
+
+/*
+ * The option '-pcs' forces a blank after the function name.  That option
+ * applies to 'offsetof' as well, even though it is not really a function.
+ */
+#indent run -pcs
+size_t		offset = offsetof (struct s, member);
+#indent end
Index: src/tests/usr.bin/indent/opt_P.c
diff -u src/tests/usr.bin/indent/opt_P.c:1.1 src/tests/usr.bin/indent/opt_P.c:1.2
--- src/tests/usr.bin/indent/opt_P.c:1.1	Fri Oct 22 20:54:36 2021
+++ src/tests/usr.bin/indent/opt_P.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: opt_P.c,v 1.1 2021/10/22 20:54:36 rillig Exp $ */
+/* $NetBSD: opt_P.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
@@ -6,8 +6,10 @@
  * instead of '$HOME/.indent.pro'.
  *
  * The format of the tests in t_options.sh does not allow the tests to create
- * arbitrary files, therefore this test is rather restricted. See t_misc.sh
- * for more related tests with individual setup.
+ * arbitrary files, therefore this test is rather restricted.
+ *
+ * See also:
+ *	t_misc			for test with custom setup
  */
 
 #indent input
Index: src/tests/usr.bin/indent/opt_T.c
diff -u src/tests/usr.bin/indent/opt_T.c:1.1 src/tests/usr.bin/indent/opt_T.c:1.2
--- src/tests/usr.bin/indent/opt_T.c:1.1	Fri Oct 22 20:54:36 2021
+++ src/tests/usr.bin/indent/opt_T.c	Fri Nov 19 22:24:29 2021
@@ -1,28 +1,36 @@
-/* $NetBSD: opt_T.c,v 1.1 2021/10/22 20:54:36 rillig Exp $ */
+/* $NetBSD: opt_T.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
+/*
+ * Tests for the option '-T', which specifies a single identifier that indent
+ * will recognize as a type name.  This affects the formatting of
+ * syntactically ambiguous expressions that could be casts or multiplications,
+ * among others.
+ */
+
 #indent input
-void
-example(void *arg)
-{
-	int cast = (custom_type_name)   *   arg;
-
-	int mult = (unknown_type_name)   *   arg;
-
-	/* See the option -ta for handling these types. */
-	int suff = (unknown_type_name_t)   *   arg;
-}
+int cast = (custom_type_name)   *   arg;
+
+int mult = (unknown_type_name)   *   arg;
+
+/* See the option -ta for handling these types. */
+int suff = (unknown_type_name_t)   *   arg;
 #indent end
 
-#indent run -Tcustom_type_name
-void
-example(void *arg)
-{
-	int		cast = (custom_type_name)*arg;
-
-	int		mult = (unknown_type_name) * arg;
-
-	/* See the option -ta for handling these types. */
-	int		suff = (unknown_type_name_t) * arg;
-}
+#indent run -Tcustom_type_name -di0
+int cast = (custom_type_name)*arg;
+
+int mult = (unknown_type_name) * arg;
+
+/* See the option -ta for handling these types. */
+int suff = (unknown_type_name_t) * arg;
+#indent end
+
+#indent run -Tcustom_type_name -di0 -cs
+int cast = (custom_type_name) *arg;
+
+int mult = (unknown_type_name) * arg;
+
+/* See the option -ta for handling these types. */
+int suff = (unknown_type_name_t) * arg;
 #indent end
Index: src/tests/usr.bin/indent/opt_bap_sob.c
diff -u src/tests/usr.bin/indent/opt_bap_sob.c:1.1 src/tests/usr.bin/indent/opt_bap_sob.c:1.2
--- src/tests/usr.bin/indent/opt_bap_sob.c:1.1	Sat Oct 23 20:30:23 2021
+++ src/tests/usr.bin/indent/opt_bap_sob.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: opt_bap_sob.c,v 1.1 2021/10/23 20:30:23 rillig Exp $ */
+/* $NetBSD: opt_bap_sob.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
@@ -13,12 +13,19 @@ function1(void)
 {
 }
 
-///// separator /////
+///// C99 separator /////
 
 void
 function2(void)
 {
 }
+
+/* C block separator */
+
+void
+function3(void)
+{
+}
 #indent end
 
 #indent run -bap -sob
@@ -27,10 +34,29 @@ function1(void)
 {
 }
 /* $ FIXME: Keep the empty line between the '}' and the '//'. */
-///// separator /////
+///// C99 separator /////
 
 void
 function2(void)
 {
 }
+/* $ FIXME: Keep the empty line. */
+/* C block separator */
+
+void
+function3(void)
+{
+}
 #indent end
+
+/*
+ * XXX: Strangely, the option '-nbap' keeps the empty lines after the
+ * function bodies.  That's exactly the opposite of the behavior that's
+ * described in the manual.
+ */
+#indent run-equals-input -nbap -sob
+
+/*
+ * Without '-sob', the option '-bap' works as intended.
+ */
+#indent run-equals-input -bap
Index: src/tests/usr.bin/indent/opt_c.c
diff -u src/tests/usr.bin/indent/opt_c.c:1.1 src/tests/usr.bin/indent/opt_c.c:1.2
--- src/tests/usr.bin/indent/opt_c.c:1.1	Fri Oct 22 20:54:36 2021
+++ src/tests/usr.bin/indent/opt_c.c	Fri Nov 19 22:24:29 2021
@@ -1,6 +1,11 @@
-/* $NetBSD: opt_c.c,v 1.1 2021/10/22 20:54:36 rillig Exp $ */
+/* $NetBSD: opt_c.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
+/*
+ * Tests for the option '-c', which specifies the column in which the comments
+ * to the right of the code start.
+ */
+
 #indent input
 bool
 is_prime(int n)
@@ -24,3 +29,36 @@ is_prime(int n)
 	return true;
 }
 #indent end
+
+/*
+ * If the code is too wide to allow the comment in its preferred column, it is
+ * nevertheless indented with a single tab, to keep multiple comments
+ * vertically aligned.
+ */
+#indent run -c9
+bool
+is_prime(int n)
+{
+	if (n <= 3)
+		return n >= 2;	/* special case */
+	if (n % 2 == 0)
+		return false;	/* even numbers */
+	return true;
+}
+#indent end
+
+/*
+ * Usually, comments are aligned at a tabstop, but indent can also align them
+ * at any other column.
+ */
+#indent run -c37
+bool
+is_prime(int n)
+{
+	if (n <= 3)
+		return n >= 2;	    /* special case */
+	if (n % 2 == 0)
+		return false;	    /* even numbers */
+	return true;
+}
+#indent end
Index: src/tests/usr.bin/indent/opt_cd.c
diff -u src/tests/usr.bin/indent/opt_cd.c:1.1 src/tests/usr.bin/indent/opt_cd.c:1.2
--- src/tests/usr.bin/indent/opt_cd.c:1.1	Fri Oct 22 20:54:36 2021
+++ src/tests/usr.bin/indent/opt_cd.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: opt_cd.c,v 1.1 2021/10/22 20:54:36 rillig Exp $ */
+/* $NetBSD: opt_cd.c,v 1.2 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 #indent input
@@ -8,3 +8,6 @@ int aflag; /* Apply to all files. */
 #indent run -cd49
 int		aflag;				/* Apply to all files. */
 #indent end
+
+/* If '-cd' is not given, it falls back to '-c'. */
+#indent run-equals-prev-output -c49

Index: src/tests/usr.bin/indent/fmt_decl.c
diff -u src/tests/usr.bin/indent/fmt_decl.c:1.18 src/tests/usr.bin/indent/fmt_decl.c:1.19
--- src/tests/usr.bin/indent/fmt_decl.c:1.18	Fri Nov 19 19:37:13 2021
+++ src/tests/usr.bin/indent/fmt_decl.c	Fri Nov 19 22:24:29 2021
@@ -1,10 +1,22 @@
-/*	$NetBSD: fmt_decl.c,v 1.18 2021/11/19 19:37:13 rillig Exp $	*/
+/*	$NetBSD: fmt_decl.c,v 1.19 2021/11/19 22:24:29 rillig Exp $	*/
 /* $FreeBSD: head/usr.bin/indent/tests/declarations.0 334478 2018-06-01 09:41:15Z pstef $ */
 
+/*
+ * Tests for declarations of global variables, external functions, and local
+ * variables.
+ *
+ * See also:
+ *	opt_di.c
+ */
+
 /* See FreeBSD r303570 */
 
+/*
+ * A type definition usually declares a single type, so there is no need to
+ * align the newly declared type name with the other variables.
+ */
 #indent input
-typedef void	(*voidptr) (int *);
+typedef   void   (   *   voidptr   )   (   int   *   )   ;
 #indent end
 
 #indent run
@@ -12,6 +24,22 @@ typedef void (*voidptr)(int *);
 #indent end
 
 
+/*
+ * In variable declarations, the names of the first declarators are indented
+ * by the amount given in '-di', which defaults to 16.
+ */
+#indent input
+extern   void   (   *   function_pointer   )   (   int   *   )   ;
+extern   void   *   pointer;
+#indent end
+
+#indent run
+/* $ XXX: Why is the token 'function_pointer' not aligned with 'pointer'? */
+extern void	(*function_pointer)(int *);
+extern void    *pointer;
+#indent end
+
+
 #indent input
 static const struct
 {
@@ -108,6 +136,7 @@ t1(char *a, int b,
 #indent end
 
 
+/* See opt_bc.c. */
 #indent input
 void t2 (char *x, int y)
 {
@@ -214,13 +243,13 @@ print_error(const char *fmt, ...)
 /* See FreeBSD r309380 */
 #indent input
 static LIST_HEAD(, alq) ald_active;
-static int ald_shutingdown = 0;
+static int ald_shutting_down = 0;
 struct thread *ald_thread;
 #indent end
 
 #indent run
 static LIST_HEAD(, alq) ald_active;
-static int	ald_shutingdown = 0;
+static int	ald_shutting_down = 0;
 struct thread  *ald_thread;
 #indent end
 

Index: src/tests/usr.bin/indent/indent_off_on.c
diff -u src/tests/usr.bin/indent/indent_off_on.c:1.3 src/tests/usr.bin/indent/indent_off_on.c:1.4
--- src/tests/usr.bin/indent/indent_off_on.c:1.3	Tue Oct 19 21:21:07 2021
+++ src/tests/usr.bin/indent/indent_off_on.c	Fri Nov 19 22:24:29 2021
@@ -1,9 +1,10 @@
-/* $NetBSD: indent_off_on.c,v 1.3 2021/10/19 21:21:07 rillig Exp $ */
+/* $NetBSD: indent_off_on.c,v 1.4 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
  * Tests for the comments 'INDENT OFF' and 'INDENT ON', which temporarily
- * disable formatting.
+ * disable formatting, copying the input directly to the output.  Internally,
+ * indent still keeps track of the number of braces and other indentation.
  */
 
 #indent input
@@ -116,16 +117,16 @@ int decl;
  * between the two words.
  */
 #indent input
-int decl;
+int   decl   ;
 /*		INDENT		OFF		*/
 int   decl   ;
 /*		INDENT		ON		*/
-int decl;
+int   decl   ;
 #indent end
 
 /*
  * XXX: It is asymmetric that 'INDENT OFF' is indented, while 'INDENT ON'
- * is aligned.
+ * is pushed to the start of the line.
  */
 #indent run -di0
 int decl;
@@ -213,3 +214,50 @@ indent_still_on(void);		/* due to the co
 void
 indent_still_on(void);		/* due to the extra comment to the right */
 #indent end
+
+
+/*
+ * Try to confuse indent by having a string literal that has an embedded
+ * INDENT comment.  Indent doesn't get confused though because it requires the
+ * INDENT comment to go from the very beginning of the line to the very end of
+ * the line.
+ */
+#indent input
+const char *str = "\
+/* INDENT OFF */\
+"   ,   ch;
+#indent end
+
+#indent run
+const char     *str = "\
+/* INDENT OFF */\
+", ch;
+#indent end
+
+
+/*
+ * The keywords in the INDENT comments must all be uppercase.
+ */
+#indent input
+int   on   ;
+/* indent off */
+int   still_on   ;
+/* INDENT off */
+int   still_on   ;
+/* indent OFF */
+int   still_on   ;
+/* INDENT OFF */
+int   finally_off   ;
+#indent end
+
+#indent run -di0
+int on;
+/* indent off */
+int still_on;
+/* INDENT off */
+int still_on;
+/* indent OFF */
+int still_on;
+/* INDENT OFF */
+int   finally_off   ;
+#indent end
Index: src/tests/usr.bin/indent/opt_bap.c
diff -u src/tests/usr.bin/indent/opt_bap.c:1.3 src/tests/usr.bin/indent/opt_bap.c:1.4
--- src/tests/usr.bin/indent/opt_bap.c:1.3	Mon Oct 18 07:11:31 2021
+++ src/tests/usr.bin/indent/opt_bap.c	Fri Nov 19 22:24:29 2021
@@ -1,12 +1,16 @@
-/* $NetBSD: opt_bap.c,v 1.3 2021/10/18 07:11:31 rillig Exp $ */
+/* $NetBSD: opt_bap.c,v 1.4 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
- * Tests for the options '-bap' and '-nbap'.
+ * Tests for the options '-bap' and '-nbap' ("blank line after procedure
+ * body").
  *
  * The option '-bap' forces a blank line after every function body.
  *
  * The option '-nbap' keeps everything as is.
+ *
+ * FIXME: These options don't have any effect since at least 2000.
+ * TODO: Investigate how nobody could have noticed this for 20 years.
  */
 
 #indent input
Index: src/tests/usr.bin/indent/opt_bbb.c
diff -u src/tests/usr.bin/indent/opt_bbb.c:1.3 src/tests/usr.bin/indent/opt_bbb.c:1.4
--- src/tests/usr.bin/indent/opt_bbb.c:1.3	Sat Oct 16 21:32:10 2021
+++ src/tests/usr.bin/indent/opt_bbb.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: opt_bbb.c,v 1.3 2021/10/16 21:32:10 rillig Exp $ */
+/* $NetBSD: opt_bbb.c,v 1.4 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
@@ -21,11 +21,11 @@
 /*
  * Documentation of global_variable.
  */
-int global_variable;
+int		global_variable;
 /*
  * Documentation of function_declaration.
  */
-void function_declaration(void);
+void		function_declaration(void);
 /*
  * Documentation of function_definition.
  */
@@ -65,28 +65,4 @@ function_definition(void)
 }
 #indent end
 
-#indent run -nbbb
-/*
- * This is a block comment.
- */
-/* This is not a block comment since it is single-line. */
-/*
- * This is a second block comment.
- */
-/* This is not a block comment. */
-/*
- * Documentation of global_variable.
- */
-int		global_variable;
-/*
- * Documentation of function_declaration.
- */
-void		function_declaration(void);
-/*
- * Documentation of function_definition.
- */
-void
-function_definition(void)
-{
-}
-#indent end
+#indent run-equals-input -nbbb
Index: src/tests/usr.bin/indent/opt_bc.c
diff -u src/tests/usr.bin/indent/opt_bc.c:1.3 src/tests/usr.bin/indent/opt_bc.c:1.4
--- src/tests/usr.bin/indent/opt_bc.c:1.3	Sat Oct 16 21:32:10 2021
+++ src/tests/usr.bin/indent/opt_bc.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: opt_bc.c,v 1.3 2021/10/16 21:32:10 rillig Exp $ */
+/* $NetBSD: opt_bc.c,v 1.4 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
@@ -6,12 +6,17 @@
  *
  * The option '-bc' forces a newline after each comma in a declaration.
  *
- * The option '-nbc' keeps everything as is.
+ * The option '-nbc' removes line breaks between declarators.  In most other
+ * places, indent preserves line breaks.
  */
 
 #indent input
 int a,b,c;
 void function_declaration(int a,int b,int c);
+int m1,
+m2,
+m3;
+char plain, *pointer;
 #indent end
 
 #indent run -bc
@@ -19,9 +24,43 @@ int		a,
 		b,
 		c;
 void		function_declaration(int a, int b, int c);
+int		m1,
+		m2,
+		m3;
+char		plain,
+	       *pointer;
 #indent end
 
 #indent run -nbc
 int		a, b, c;
 void		function_declaration(int a, int b, int c);
+int		m1, m2, m3;
+char		plain, *pointer;
+#indent end
+
+
+#indent input
+old_style_definition(a, b, c)
+double a,b,c;
+{
+    return a+b+c;
+}
+#indent end
+
+#indent run -bc
+old_style_definition(a, b, c)
+double		a,
+		b,
+		c;
+{
+	return a + b + c;
+}
+#indent end
+
+#indent run -nbc
+old_style_definition(a, b, c)
+double		a, b, c;
+{
+	return a + b + c;
+}
 #indent end

Index: src/tests/usr.bin/indent/lex_ident.c
diff -u src/tests/usr.bin/indent/lex_ident.c:1.2 src/tests/usr.bin/indent/lex_ident.c:1.3
--- src/tests/usr.bin/indent/lex_ident.c:1.2	Sun Oct 31 19:13:41 2021
+++ src/tests/usr.bin/indent/lex_ident.c	Fri Nov 19 22:24:29 2021
@@ -1,8 +1,9 @@
-/* $NetBSD: lex_ident.c,v 1.2 2021/10/31 19:13:41 rillig Exp $ */
+/* $NetBSD: lex_ident.c,v 1.3 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
- * Test lexing of tokens, such as keywords, identifiers, operators.
+ * Test lexing of word-like tokens, such as keywords, identifiers, numeric
+ * constants, character constants, string literals.
  */
 
 /*
Index: src/tests/usr.bin/indent/opt_bl_br.c
diff -u src/tests/usr.bin/indent/opt_bl_br.c:1.2 src/tests/usr.bin/indent/opt_bl_br.c:1.3
--- src/tests/usr.bin/indent/opt_bl_br.c:1.2	Sun Nov  7 19:18:56 2021
+++ src/tests/usr.bin/indent/opt_bl_br.c	Fri Nov 19 22:24:29 2021
@@ -1,14 +1,10 @@
-/* $NetBSD: opt_bl_br.c,v 1.2 2021/11/07 19:18:56 rillig Exp $ */
+/* $NetBSD: opt_bl_br.c,v 1.3 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 #indent input
 void
 example(int n)
 {
-	/*
-	 * XXX: The '} else' looks strange in this style since the 'else' is
-	 * not at the left margin of the code.
-	 */
 	if (n > 99) { print("large"); }
 	else if (n > 9) { print("double-digit"); }
 	else if (n > 0) print("positive");
@@ -16,14 +12,14 @@ example(int n)
 }
 #indent end
 
+/*
+ * XXX: The '} else' looks strange in this style since the 'else' is
+ * not at the left margin of the code.
+ */
 #indent run -bl
 void
 example(int n)
 {
-	/*
-	 * XXX: The '} else' looks strange in this style since the 'else' is
-	 * not at the left margin of the code.
-	 */
 	if (n > 99)
 	{
 		print("large");
@@ -39,17 +35,6 @@ example(int n)
 }
 #indent end
 
-#indent input
-void
-example(int n)
-{
-	if (n > 99) { print("large"); }
-	else if (n > 9) { print("double-digit"); }
-	else if (n > 0) print("positive");
-	else { print("negative"); }
-}
-#indent end
-
 #indent run -br
 void
 example(int n)
@@ -68,7 +53,7 @@ example(int n)
 
 
 /*
- * Test C99 comments after 'if (expr)', which is handled by search_stmt.
+ * Test C99 comments after 'if (expr)', which are handled by search_stmt.
  */
 #indent input
 void function(void)
@@ -121,3 +106,35 @@ function(void)
 		stmt();
 }
 #indent end
+
+
+/*
+ *
+ */
+#indent input
+void
+function(void)
+{
+	if (cond)
+	{
+		stmt();
+	}
+	else
+	if (cond)
+	{
+		stmt();
+	}
+}
+#indent end
+
+#indent run -br
+void
+function(void)
+{
+	if (cond) {
+		stmt();
+	} else if (cond) {
+		stmt();
+	}
+}
+#indent end

Index: src/tests/usr.bin/indent/opt_bacc.c
diff -u src/tests/usr.bin/indent/opt_bacc.c:1.5 src/tests/usr.bin/indent/opt_bacc.c:1.6
--- src/tests/usr.bin/indent/opt_bacc.c:1.5	Fri Nov 19 19:37:13 2021
+++ src/tests/usr.bin/indent/opt_bacc.c	Fri Nov 19 22:24:29 2021
@@ -1,8 +1,9 @@
-/* $NetBSD: opt_bacc.c,v 1.5 2021/11/19 19:37:13 rillig Exp $ */
+/* $NetBSD: opt_bacc.c,v 1.6 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
- * Test the options '-bacc' and '-nbacc'.
+ * Tests for the options '-bacc' and '-nbacc' ("blank line around conditional
+ * compilation").
  *
  * The option '-bacc' forces a blank line around every conditional compilation
  * block.  For example, in front of every #ifdef and after every #endif.
@@ -22,8 +23,8 @@ int		c;
 #indent end
 
 /*
- * XXX: As of 2021-10-05, the option -bacc has no effect on declarations since
- * process_decl resets blank_line_before unconditionally.
+ * XXX: As of 2021-11-19, the option -bacc has no effect on declarations since
+ * process_type resets blank_line_before unconditionally.
  */
 #indent run -bacc
 int		a;
@@ -70,6 +71,7 @@ int		space_c;
 /* The option '-nbacc' does not remove anything. */
 #indent run-equals-input -nbacc
 
+
 /*
  * Preprocessing directives can also occur in function bodies.
  */
@@ -104,3 +106,44 @@ os_name(void)
 #indent end
 
 #indent run-equals-input -nbacc
+
+
+/*
+ * Test nested preprocessor directives.
+ */
+#indent input
+#if outer
+#if inner
+int decl;
+#endif
+#endif
+#indent end
+
+#indent run -di0 -bacc
+#if outer
+
+#if inner
+int decl;
+#endif
+
+#endif
+#indent end
+
+#indent run-equals-input -di0 -nbacc
+
+
+/*
+ * Test nested preprocessor directives that are interleaved with declarations.
+ */
+#indent input
+#ifdef outer
+int outer_above;
+#ifdef inner
+int inner;
+#endif
+int outer_below;
+#endif
+#indent end
+
+#indent run-equals-input -di0 -bacc
+#indent run-equals-input -di0 -nbacc
Index: src/tests/usr.bin/indent/opt_bs.c
diff -u src/tests/usr.bin/indent/opt_bs.c:1.5 src/tests/usr.bin/indent/opt_bs.c:1.6
--- src/tests/usr.bin/indent/opt_bs.c:1.5	Tue Oct 26 20:37:26 2021
+++ src/tests/usr.bin/indent/opt_bs.c	Fri Nov 19 22:24:29 2021
@@ -1,13 +1,13 @@
-/* $NetBSD: opt_bs.c,v 1.5 2021/10/26 20:37:26 rillig Exp $ */
+/* $NetBSD: opt_bs.c,v 1.6 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
- * Tests for the options '-bs' and '-nbs'.
+ * Tests for the options '-bs' and '-nbs' ("blank after sizeof").
  *
  * The option '-bs' forces a space after the keyword 'sizeof'.
  *
- * The option '-nbs' removes all whitespace after the keyword 'sizeof', unless
- * the next token is a word as well.
+ * The option '-nbs' removes horizontal whitespace after the keyword 'sizeof',
+ * unless the next token is a word as well.
  */
 
 #indent input

Index: src/tests/usr.bin/indent/opt_badp.c
diff -u src/tests/usr.bin/indent/opt_badp.c:1.4 src/tests/usr.bin/indent/opt_badp.c:1.5
--- src/tests/usr.bin/indent/opt_badp.c:1.4	Mon Oct 18 07:11:31 2021
+++ src/tests/usr.bin/indent/opt_badp.c	Fri Nov 19 22:24:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: opt_badp.c,v 1.4 2021/10/18 07:11:31 rillig Exp $ */
+/* $NetBSD: opt_badp.c,v 1.5 2021/11/19 22:24:29 rillig Exp $ */
 /* $FreeBSD$ */
 
 /*
@@ -9,71 +9,105 @@
  */
 
 #indent input
-static void
-no_declarations(void)
+void
+empty_body(void)
 {
-	action();
 }
+#indent end
 
-static void
-declarations_without_blank_line(void)
-{
-	int local_variable;
-	action();
-}
+#indent run-equals-input -badp
+#indent run-equals-input -nbadp
 
-static void
-declaration_with_blank_line(void)
+
+#indent input
+void
+empty_line(void)
 {
-	int local_variable;
 
-	action();
 }
+#indent end
 
-static void
-declaration_with_several_blank_lines(void)
+#indent run-equals-input -badp
+#indent run-equals-input -nbadp
+
+
+#indent input
+void
+only_declaration(void)
 {
-	int local_variable;
+	int		decl;
+}
+#indent end
 
+#indent run-equals-input -badp
+#indent run-equals-input -nbadp
 
 
-	action();
+#indent input
+void
+only_statement(void)
+{
+	stmt();
 }
 #indent end
 
 #indent run -badp
-static void
-no_declarations(void)
+void
+only_statement(void)
 {
 
-	action();
+	stmt();
 }
+#indent end
+#indent run-equals-input -nbadp
 
-static void
-declarations_without_blank_line(void)
+
+#indent input
+void
+declaration_and_statement(void)
 {
-	int		local_variable;
-	/* $ FIXME: need empty line here */
-	action();
+	int		decl;
+	stmt();
 }
+#indent end
 
+#indent run -badp
+void
+declaration_and_statement(void)
+{
+	int		decl;
+	/* $ FIXME: missing empty line */
+	stmt();
+}
+#indent end
+#indent run-equals-input -nbadp
+
+
+#indent input
 static void
-declaration_with_blank_line(void)
+declaration_blank_statement(void)
 {
-	int		local_variable;
+	int		decl;
 
-	action();
+	stmt();
 }
+#indent end
+
+#indent run-equals-input -badp
+#indent run-equals-input -nbadp
 
+
+#indent input
 static void
-declaration_with_several_blank_lines(void)
+declaration_blank_blank_statement(void)
 {
-	int		local_variable;
+	int		decl;
 
 
 
-	action();
+	stmt();
 }
 #indent end
 
-#indent run-equals-input -nbadp -ldi0
+#indent run-equals-input -badp
+#indent run-equals-input -nbadp

Index: src/tests/usr.bin/indent/t_misc.sh
diff -u src/tests/usr.bin/indent/t_misc.sh:1.15 src/tests/usr.bin/indent/t_misc.sh:1.16
--- src/tests/usr.bin/indent/t_misc.sh:1.15	Sun Nov  7 19:18:56 2021
+++ src/tests/usr.bin/indent/t_misc.sh	Fri Nov 19 22:24:29 2021
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $NetBSD: t_misc.sh,v 1.15 2021/11/07 19:18:56 rillig Exp $
+# $NetBSD: t_misc.sh,v 1.16 2021/11/19 22:24:29 rillig Exp $
 #
 # Copyright (c) 2021 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -364,6 +364,25 @@ several_profiles_body()
 	    "$indent" -Pnonexistent.pro -Perror.pro -Plast.pro code.c -st
 }
 
+
+atf_test_case 'command_line_vs_profile'
+command_line_vs_profile_body()
+{
+	# Options from the command line override those from a profile file,
+	# no matter if they appear earlier or later than the '-P' in the
+	# command line.
+
+	echo ' -di24' > custom.pro
+	printf 'int\t\tdecl;\n' > code.c
+
+	atf_check -o 'inline:int decl;\n' \
+	    "$indent" -di0 -Pcustom.pro code.c -st
+	atf_check -o 'inline:int decl;\n' \
+	    "$indent" -Pcustom.pro -di0 code.c -st
+	atf_check -o 'inline:int decl;\n' \
+	    "$indent" -Pcustom.pro code.c -st -di0
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case 'in_place'
@@ -377,4 +396,5 @@ atf_init_test_cases()
 	atf_add_test_case 'line_no_counting'
 	atf_add_test_case 'default_backup_extension'
 	atf_add_test_case 'several_profiles'
+	atf_add_test_case 'command_line_vs_profile'
 }

Reply via email to