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

>From 24fb014092ba8d831c25cd8757a6a738927bb743 Mon Sep 17 00:00:00 2001
Message-ID: <24fb014092ba8d831c25cd8757a6a738927bb743.1757040561.git.collin.fu...@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

Reply via email to