[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[groff] 02/05: [tests]: Fix portability problems.
From: |
G. Branden Robinson |
Subject: |
[groff] 02/05: [tests]: Fix portability problems. |
Date: |
Thu, 28 Oct 2021 22:38:19 -0400 (EDT) |
gbranden pushed a commit to branch master
in repository groff.
commit f51cf27208e70ccb60afc4a245f293a0146f77ed
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
AuthorDate: Thu Oct 28 00:00:33 2021 +1100
[tests]: Fix portability problems.
* src/devices/grotty/tests/osc8_works.sh: Fix typo in test. Multiple
regex quantifiers after an atom were not flagged with a diagnostic by
GNU grep 3.3, but were by BSD grep 2.5.1-FreeBSD.
* src/roff/groff/tests/smoke-test_html_device.sh: Stop trying to set
$LC_CTYPE to "C.UTF-8"; some systems don't support this expediency.
Skip the test if the tester hasn't configured the environment
adequately.
* tmac/tests/s_TC-works-with-percent-in-custom-titles.sh: Fix
portability problems exposed by FreeBSD sed (which version is
unclear). {1} Use POSIX BREs, dropping use of '+' quantifier. {2}
Add semicolons to terminate commands before braces on the same line.
Simplify surrounding test structure.
* tmac/tests/e_footnotes-work-with-columns.sh: Fix same two sed
problems.
* tmac/tests/andoc_flush-between-packages.sh:
* tmac/tests/doc_accept-mixed-case-section-headings.sh:
* tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh: Fix same sed
semicolon problem.
* src/roff/groff/tests/on_latin1_device_oq_is_0x27.sh: Rewrite test to
stop using a here document inside a command substitution, which is
broken in GNU Bash 3.2 and some other versions. Instead construct the
input with printf(1). Also gets rid of a Bashism (process
substitution) that Ingo pointed out years ago.
* src/utils/grog/tests/recognize-perl-pod.sh: Same problem, different
solution. The Perl POD output is far too large to construct
programmatically, so move it into an external file...
* src/utils/grog/tests/foo.man: ...here.
* src/utils/grog/grog.am (EXTRA_DIST): Ship new test artifact.
---
ChangeLog | 37 +++++
src/devices/grotty/tests/osc8_works.sh | 2 +-
.../groff/tests/on_latin1_device_oq_is_0x27.sh | 15 +-
src/roff/groff/tests/smoke-test_html_device.sh | 1 -
src/utils/grog/grog.am | 3 +-
.../grog/tests/{recognize-perl-pod.sh => foo.man} | 34 -----
src/utils/grog/tests/recognize-perl-pod.sh | 153 +--------------------
tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh | 2 +-
tmac/tests/andoc_flush-between-packages.sh | 4 +-
.../doc_accept-mixed-case-section-headings.sh | 8 +-
tmac/tests/e_footnotes-work-with-columns.sh | 2 +-
.../s_TC-works-with-percent-in-custom-titles.sh | 14 +-
12 files changed, 60 insertions(+), 215 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 366ecb0..a819e79 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,40 @@
+2021-10-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Improve portability.
+
+ * src/devices/grotty/tests/osc8_works.sh: Fix typo in test.
+ Multiple regex quantifiers after an atom were not flagged with a
+ diagnostic by GNU grep 3.3, but were by BSD grep 2.5.1-FreeBSD.
+
+ * src/roff/groff/tests/smoke-test_html_device.sh: Stop trying to
+ set $LC_CTYPE to "C.UTF-8"; some systems don't support this
+ expediency. Skip the test if the tester hasn't configured the
+ environment adequately.
+
+ * tmac/tests/s_TC-works-with-percent-in-custom-titles.sh: Fix
+ portability problems exposed by FreeBSD sed (which version is
+ unclear). {1} Use POSIX BREs, dropping use of '+' quantifier.
+ {2} Add semicolons to terminate commands before braces on the
+ same line. Simplify surrounding test structure.
+ * tmac/tests/e_footnotes-work-with-columns.sh: Fix same two sed
+ problems.
+ * tmac/tests/andoc_flush-between-packages.sh:
+ * tmac/tests/doc_accept-mixed-case-section-headings.sh:
+ * tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh: Fix same
+ sed semicolon problem.
+
+ * src/roff/groff/tests/on_latin1_device_oq_is_0x27.sh: Rewrite
+ test to stop using a here document inside a command
+ substitution, which is broken in GNU Bash 3.2 and some other
+ versions. Instead construct the input with printf(1). Also
+ gets rid of a Bashism (process substitution) that Ingo pointed
+ out years ago.
+ * src/utils/grog/tests/recognize-perl-pod.sh: Same problem,
+ different solution. The Perl POD output is far too large to
+ construct programmatically, so move it into an external file...
+ * src/utils/grog/tests/foo.man: ...here.
+ * src/utils/grog/grog.am (EXTRA_DIST): Ship new test artifact.
+
2021-10-27 G. Branden Robinson <g.branden.robinson@gmail.com>
* doc/doc.am: Make sed-based insertion of `lf` requests more
diff --git a/src/devices/grotty/tests/osc8_works.sh
b/src/devices/grotty/tests/osc8_works.sh
index 950c0d8..db6480d 100755
--- a/src/devices/grotty/tests/osc8_works.sh
+++ b/src/devices/grotty/tests/osc8_works.sh
@@ -93,7 +93,7 @@ echo "testing http URI (4)" >&2
echo "$output" | grep -Eq '0000060 +033 +\\'
echo "testing mailto URI (1)" >&2
-echo "$output" | grep -Eq '0000120 +.*+033 +] +8 +;$'
+echo "$output" | grep -Eq '0000120 +.* +033 +] +8 +;$'
echo "testing mailto URI (2)" >&2
echo "$output" | grep -Eq '0000140 +; +m +a +i +l +t +o +: +g +\. +b'
diff --git a/src/roff/groff/tests/on_latin1_device_oq_is_0x27.sh
b/src/roff/groff/tests/on_latin1_device_oq_is_0x27.sh
index 2ee885f..0fce270 100755
--- a/src/roff/groff/tests/on_latin1_device_oq_is_0x27.sh
+++ b/src/roff/groff/tests/on_latin1_device_oq_is_0x27.sh
@@ -20,12 +20,11 @@
groff="${abs_top_builddir:-.}/test-groff"
-expected="' = '"
-
-actual=$("$groff" -Tlatin1 <<EOF
-.pl 1v
-\[oq] = '
-EOF
-)
+# This test fails with some versions of GNU Bash, such as 3.2; the here
+# document nested within a command substitution confuses it.
+#
+# https://lists.gnu.org/archive/html/bug-bash/2017-02/msg00024.html
-diff -u <(echo "$expected") <(echo "$actual")
+expected="' = '"
+actual=$(printf '.pl 1v\n\\[oq] = '"'"'\n' | "$groff" -Tlatin1)
+test "$actual" = "$expected"
diff --git a/src/roff/groff/tests/smoke-test_html_device.sh
b/src/roff/groff/tests/smoke-test_html_device.sh
index 80ab078..c58d8ea 100755
--- a/src/roff/groff/tests/smoke-test_html_device.sh
+++ b/src/roff/groff/tests/smoke-test_html_device.sh
@@ -21,7 +21,6 @@
groff="${abs_top_builddir:-.}/test-groff"
# We can't run these tests if the environment doesn't support UTF-8.
-LC_CTYPE=C.UTF-8
test "$(locale charmap)" = UTF-8 || exit 77 # skip
set -e
diff --git a/src/utils/grog/grog.am b/src/utils/grog/grog.am
index e9f5f38..8e9e1da 100644
--- a/src/utils/grog/grog.am
+++ b/src/utils/grog/grog.am
@@ -20,7 +20,8 @@ bin_SCRIPTS += grog
man1_MANS += src/utils/grog/grog.1
EXTRA_DIST += \
src/utils/grog/grog.1.man \
- src/utils/grog/grog.pl
+ src/utils/grog/grog.pl \
+ src/utils/grog/tests/foo.man
grog: $(grog_srcdir)/grog.pl $(SH_DEPS_SED_SCRIPT)
$(AM_V_GEN)$(RM) $@ \
diff --git a/src/utils/grog/tests/recognize-perl-pod.sh
b/src/utils/grog/tests/foo.man
old mode 100755
new mode 100644
similarity index 80%
copy from src/utils/grog/tests/recognize-perl-pod.sh
copy to src/utils/grog/tests/foo.man
index 1e38008..28e9fe6
--- a/src/utils/grog/tests/recognize-perl-pod.sh
+++ b/src/utils/grog/tests/foo.man
@@ -1,31 +1,3 @@
-#!/bin/sh
-#
-# Copyright (C) 2021 Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-
-grog="${abs_top_builddir:-.}/grog"
-
-# Regression test Savannah #59622.
-#
-# Recognize the strongly-accented dialect of man(7) produced by
-# pod2man(1).
-
-DOC=$(cat <<'EOF'
.\" Automatically generated by Pod::Man 4.10 (Pod::Simple 3.35)
.\"
.\" Standard preamble:
@@ -172,9 +144,3 @@ foo \- a frobnicator
.SH "Description"
.IX Header "Description"
This is my program.
-EOF
-)
-
-echo "$DOC" | "$grog" | grep -Fqx 'groff -man -'
-
-# vim:set ai et sw=4 ts=4 tw=72:
diff --git a/src/utils/grog/tests/recognize-perl-pod.sh
b/src/utils/grog/tests/recognize-perl-pod.sh
index 1e38008..bc13ece 100755
--- a/src/utils/grog/tests/recognize-perl-pod.sh
+++ b/src/utils/grog/tests/recognize-perl-pod.sh
@@ -19,162 +19,13 @@
#
grog="${abs_top_builddir:-.}/grog"
+doc="${abs_top_srcdir:-..}/src/utils/grog/tests/foo.man"
# Regression test Savannah #59622.
#
# Recognize the strongly-accented dialect of man(7) produced by
# pod2man(1).
-DOC=$(cat <<'EOF'
-.\" Automatically generated by Pod::Man 4.10 (Pod::Simple 3.35)
-.\"
-.\" Standard preamble:
-.\" ========================================================================
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Vb \" Begin verbatim text
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve \" End verbatim text
-.ft R
-.fi
-..
-.\" Set up some character translations and predefined strings. \*(-- will
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
-.\" double quote, and \*(R" will give a right double quote. \*(C+ will
-.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
-.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
-.\" nothing in troff, for use with C<>.
-.tr \(*W-
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.ie n \{\
-. ds -- \(*W-
-. ds PI pi
-. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-. ds L" ""
-. ds R" ""
-. ds C` ""
-. ds C' ""
-'br\}
-.el\{\
-. ds -- \|\(em\|
-. ds PI \(*p
-. ds L" ``
-. ds R" ''
-. ds C`
-. ds C'
-'br\}
-.\"
-.\" Escape single quotes in literal strings from groff's Unicode transform.
-.ie \n(.g .ds Aq \(aq
-.el .ds Aq '
-.\"
-.\" If the F register is >0, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
-.\" entries marked with X<> in POD. Of course, you'll have to process the
-.\" output yourself in some meaningful fashion.
-.\"
-.\" Avoid warning from groff about undefined register 'F'.
-.de IX
-..
-.nr rF 0
-.if \n(.g .if rF .nr rF 1
-.if (\n(rF:(\n(.g==0)) \{\
-. if \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
-..
-. if !\nF==2 \{\
-. nr % 0
-. nr F 2
-. \}
-. \}
-.\}
-.rr rF
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear. Run. Save yourself. No user-serviceable parts.
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds /
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds :
\\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds o
\\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
-.\" ========================================================================
-.\"
-.IX Title "FOO 1"
-.TH FOO 1 "2021-06-30" "perl v5.28.1" "User Contributed Perl Documentation"
-.\" For nroff, turn off justification. Always turn off hyphenation; it makes
-.\" way too many mistakes in technical documents.
-.if n .ad l
-.nh
-.SH "Name"
-.IX Header "Name"
-foo \- a frobnicator
-.SH "Description"
-.IX Header "Description"
-This is my program.
-EOF
-)
-
-echo "$DOC" | "$grog" | grep -Fqx 'groff -man -'
+"$grog" "$doc" | grep '^groff -man .*/src/utils/grog/tests/foo\.man'
# vim:set ai et sw=4 ts=4 tw=72:
diff --git a/tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh
b/tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh
index d63e076..b392494 100755
--- a/tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh
+++ b/tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh
@@ -46,6 +46,6 @@ l.
.TE'
OUTPUT=$(printf "%s\n" "$EXAMPLE" | "$groff" -Tascii -P-cbou -t -man)
-test -n "$(echo "$OUTPUT" | sed -n '/52/{N;/53/p}')"
+test -n "$(echo "$OUTPUT" | sed -n '/52/{N;/53/p;}')"
# vim:set ai et sw=4 ts=4 tw=72:
diff --git a/tmac/tests/andoc_flush-between-packages.sh
b/tmac/tests/andoc_flush-between-packages.sh
index 6447d2e..6b24f84 100755
--- a/tmac/tests/andoc_flush-between-packages.sh
+++ b/tmac/tests/andoc_flush-between-packages.sh
@@ -58,7 +58,7 @@ FAIL=
if [ -z "$(echo "$OUTPUT" \
| sed '/^$/d' \
- | sed -n '/collected/{N;/test page 1/p}')" ]
+ | sed -n '/collected/{N;/test page 1/p;}')" ]
then
FAIL=yes
echo "man to mdoc transition failed" >&2
@@ -66,7 +66,7 @@ fi
if [ -z "$(echo "$OUTPUT" \
| sed '/^$/d' \
- | sed -n '/partially-collected/{N;/test page 2/p}')" ]
+ | sed -n '/partially-collected/{N;/test page 2/p;}')" ]
then
FAIL=yes
echo "mdoc to man transition failed" >&2
diff --git a/tmac/tests/doc_accept-mixed-case-section-headings.sh
b/tmac/tests/doc_accept-mixed-case-section-headings.sh
index 0f68847..a38afd6 100755
--- a/tmac/tests/doc_accept-mixed-case-section-headings.sh
+++ b/tmac/tests/doc_accept-mixed-case-section-headings.sh
@@ -47,25 +47,25 @@ This page has fully-capitalized section headings.\
OUTPUT=$(printf "%s\n" "$EXAMPLE" | "$groff" -Tascii -P-cbou -mdoc)
FAIL=
-if [ -z "$(echo "$OUTPUT" | sed -n '/Name/{N;/smoke/p}')" ]
+if [ -z "$(echo "$OUTPUT" | sed -n '/Name/{N;/smoke/p;}')" ]
then
FAIL=yes
echo "section \"Name\" check failed" >&2
fi
-if [ -z "$(echo "$OUTPUT" | sed -n '/Description/{N;/mixed-case/p}')" ]
+if [ -z "$(echo "$OUTPUT" | sed -n '/Description/{N;/mixed-case/p;}')" ]
then
FAIL=yes
echo "section \"Description\" check failed" >&2
fi
-if [ -z "$(echo "$OUTPUT" | sed -n '/NAME/{N;/smoke/p}')" ]
+if [ -z "$(echo "$OUTPUT" | sed -n '/NAME/{N;/smoke/p;}')" ]
then
FAIL=yes
echo "section \"NAME\" check failed" >&2
fi
-if [ -z "$(echo "$OUTPUT" | sed -n '/DESCRIPTION/{N;/fully-cap/p}')" ]
+if [ -z "$(echo "$OUTPUT" | sed -n '/DESCRIPTION/{N;/fully-cap/p;}')" ]
then
FAIL=yes
echo "section \"DESCRIPTION\" check failed" >&2
diff --git a/tmac/tests/e_footnotes-work-with-columns.sh
b/tmac/tests/e_footnotes-work-with-columns.sh
index ab195a7..fbf3238 100755
--- a/tmac/tests/e_footnotes-work-with-columns.sh
+++ b/tmac/tests/e_footnotes-work-with-columns.sh
@@ -38,6 +38,6 @@ qux'
test -n "$(echo "$EXAMPLE" \
| "$groff" -Tascii -P-cbou -me \
- | sed -n '/foo/{N;/bar \+baz/{N;/qux/p}}')"
+ | sed -n '/foo/{N;/bar *baz/{N;/qux/p;};}')"
# vim:set ai et sw=4 ts=4 tw=72:
diff --git a/tmac/tests/s_TC-works-with-percent-in-custom-titles.sh
b/tmac/tests/s_TC-works-with-percent-in-custom-titles.sh
index ce74bcc..53b90f8 100755
--- a/tmac/tests/s_TC-works-with-percent-in-custom-titles.sh
+++ b/tmac/tests/s_TC-works-with-percent-in-custom-titles.sh
@@ -38,19 +38,11 @@ Bar.
'
OUTPUT=$(echo "$EXAMPLE" | "$groff" -Tascii -P-cbou -ms)
-
-FAIL=
-
# Strip blank lines from the output first; all we care about for this
# test is the presence, adjacency, and ordering of non-blank lines.
-
-if [ -z "$(echo "$OUTPUT" \
+FILTERED_OUTPUT=$(echo "$OUTPUT" \
| sed '/^$/d' \
- | sed -n '/i/{N;/Table of Contents/{N;/Foo[. ]\+1/p}}')" ]
-then
- FAIL=yes
-fi
-
-test -z "$FAIL"
+ | sed -n '/i/{N;/Table of Contents/{N;/Foo[. ][. ]*1/p;};}')
+test -n "$FILTERED_OUTPUT"
# vim:set ai et sw=4 ts=4 tw=72:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [groff] 02/05: [tests]: Fix portability problems.,
G. Branden Robinson <=