bug#79301: fold-spaces test failure

Collin Funk <[email protected]>
Newsgroups gmane.comp.gnu.core-utils.bugs
Message-ID <[email protected]>
Pádraig Brady <[email protected]> writes:

> You might be able to use the uniq trick
> to determine if a character is blank?
>
> https://bugs.gnu.org/cgi/79300#32

Oops, sorry, forgot about that email.

That works perfect, though, thanks. I pushed the attached patch. Tested
in an alpine container, but I am confident it will fix the
others. Closing this bug report.

Collin
0001-tests-fold-check-if-multi-byte-spaces-are-treated-as.patch (text/x-patch, 2.5 KB)
From 24fb014092ba8d831c25cd8757a6a738927bb743 Mon Sep 17 00:00:00 2001
Message-ID: <24fb014092ba8d831c25cd8757a6a738927bb743.1757040561.git.collin.funk1@gmail.com>
From: Collin Funk <[email protected]>
Date: Thu, 4 Sep 2025 19:30:00 -0700
Subject: [PATCH] tests: fold: check if multi-byte spaces are treated as blank
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This avoids a test failure on FreeBSD 14, MacOS 15, and musl.
Fix suggested by Pádraig Brady in:
<https://bugs.gnu.org/79301#32>.
* tests/fold/fold-spaces.sh (isblank): New function. Only run the tests
if the character is treated as blank.
Fixes https://bugs.gnu.org/79301
---
 tests/fold/fold-spaces.sh | 39 ++++++++++++++++++++++++++-------------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/tests/fold/fold-spaces.sh b/tests/fold/fold-spaces.sh
index 9ea95bf02..e30a2bcbb 100755
--- a/tests/fold/fold-spaces.sh
+++ b/tests/fold/fold-spaces.sh
@@ -24,18 +24,31 @@ test "$LOCALE_FR_UTF8" != none || skip_ "French UTF-8 locale not available"
 LC_ALL=$LOCALE_FR_UTF8
 export LC_ALL
 
-# One U+2002 EN SPACE characters.
-env printf 'abcdefghijklmnop\u2002qrstuvwxyz\n' > input1 || framework_failure_
-env printf 'abcdefghij\nklmnop\u2002\nqrstuvwxyz\n'> exp1 || framework_failure_
-fold --spaces --width 10 input1 > out1 || fail=1
-compare exp1 out1 || fail=1
-
-# Two U+2003 EM SPACE characters.
-env printf 'abcdefghijklmnop\u2003\u2003qrstuvwxyz\n' > input2 \
-  || framework_failure_
-env printf 'abcdefghij\nklmnop\u2003\u2003\nqrstuvwxyz\n'> exp2 \
-  || framework_failure_
-fold --spaces --width 10 input2 > out2 || fail=1
-compare exp2 out2 || fail=1
+# Check if a character is considered blank.  Some systems, such as FreeBSD,
+# only consider ASCII spaces and tabs blank.
+isblank ()
+{
+  test $(printf "a$1a\nb$1b\n" | uniq -f1 | wc -l) = 2;
+}
+
+if isblank '\u2002'; then
+  # One U+2002 EN SPACE characters.
+  env printf 'abcdefghijklmnop\u2002qrstuvwxyz\n' > input1 \
+    || framework_failure_
+  env printf 'abcdefghij\nklmnop\u2002\nqrstuvwxyz\n'> exp1 \
+    || framework_failure_
+  fold --spaces --width 10 input1 > out1 || fail=1
+  compare exp1 out1 || fail=1
+fi
+
+if isblank '\u2003'; then
+  # Two U+2003 EM SPACE characters.
+  env printf 'abcdefghijklmnop\u2003\u2003qrstuvwxyz\n' > input2 \
+    || framework_failure_
+  env printf 'abcdefghij\nklmnop\u2003\u2003\nqrstuvwxyz\n'> exp2 \
+    || framework_failure_
+  fold --spaces --width 10 input2 > out2 || fail=1
+  compare exp2 out2 || fail=1
+fi
 
 Exit $fail
-- 
2.51.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.