groff-commit
[Top][All Lists]
Advanced

[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:



reply via email to

[Prev in Thread] Current Thread [Next in Thread]