From 7972d570c028fabe0d281f2aafbb9e4a8f797239 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 30 May 2021 12:49:45 -0700 Subject: [PATCH] segment-test: Make debugging easier for some kinds of test failures. --- tests/language/lexer/segment-test.c | 16 +++++++++++----- tests/language/lexer/segment.at | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/language/lexer/segment-test.c b/tests/language/lexer/segment-test.c index e7a6db11e8..a3b67b89b2 100644 --- a/tests/language/lexer/segment-test.c +++ b/tests/language/lexer/segment-test.c @@ -70,6 +70,8 @@ main (int argc, char *argv[]) set_program_name (argv[0]); file_name = parse_options (argc, argv); + setvbuf (stdout, NULL, _IONBF, 0); + /* Read from stdin into 'input'. Ensure that 'input' ends in a new-line followed by a null byte. */ input = (!strcmp (file_name, "-") @@ -157,12 +159,15 @@ check_segmentation (const char *input, size_t length, bool print_segments) if (type == SEG_NEWLINE) { - assert ((n == 1 && input[offset] == '\n') - || (n == 2 - && input[offset] == '\r' && input[offset + 1] == '\n')); + if (n == 1 ? input[offset] != '\n' + : n == 2 ? input[offset] != '\r' || input[offset + 1] != '\n' + : false) + error (EXIT_FAILURE, 0, "NEWLINE segment at offset %zu contains " + "non-newline content \"%.*s\"", offset, n, &input[offset]); } - else - assert (memchr (&input[offset], '\n', n) == NULL); + else if (memchr (&input[offset], '\n', n)) + error (EXIT_FAILURE, 0, "%s segment \"%.*s\" contains new-line", + segment_type_to_string (type), n, &input[offset]); if (!print_segments) { @@ -274,6 +279,7 @@ check_segmentation (const char *input, size_t length, bool print_segments) prompt = segmenter_get_prompt (&s); printf (" (%s)\n", prompt_style_to_string (prompt)); } + fflush (stdout); } while (type != SEG_END); diff --git a/tests/language/lexer/segment.at b/tests/language/lexer/segment.at index 8f82dd2e6e..86d967b5c5 100644 --- a/tests/language/lexer/segment.at +++ b/tests/language/lexer/segment.at @@ -16,7 +16,8 @@ dnl along with this program. If not, see . dnl AT_BANNER([syntax segmentation]) m4_define([PSPP_CHECK_SEGMENT], - [for strip in "" "-s"; do + [AT_CAPTURE_FILE([input]) + for strip in "" "-s"; do case $strip in # ( '') sed 's/^-//' < expout-base > expout ;; # ( -s) sed '/^-/d' < expout-base > expout ;; -- 2.30.2