Branch
Hash :
05b20c93
Author :
Date :
2021-09-19T23:13:57
tests: Avoid check-subst failures in QEMU user-mode environments. * Makefile.devel (GNULIB_MODULES): Add stdbool. (gnulib-imported-files): Copy also tests/qemu.h. * tests/is-native.c: New file. * tests/Makefile.in (is-native, is-native.@OBJEXT@): New targets. (clean): Remove the 'is-native' program. (SOURCE_FILES): Add is-native.c. (IMPORTED_FILES): Add qemu.h. * tests/check-subst: Invoke 'locale charmap' only in native environments.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
#!/bin/sh
# Check of --unicode-subst, --byte-subst, --widechar-subst options.
set -e
iconv=../src/iconv_no_i18n
options_ascii='--unicode-subst=<U+%04X> --byte-subst=<0x%02x> --widechar-subst=<%08x>'
options_utf8='--unicode-subst=«U+%04X» --byte-subst=«0x%02x» --widechar-subst=«%08x»'
# Test of --byte-subst with an ASCII substitution.
cat > tmp-in <<\EOF
Böse Bübchen
EOF
$iconv $options_ascii -f ASCII -t ASCII < tmp-in > tmp-out
cat > tmp-ok <<\EOF
B<0xc3><0xb6>se B<0xc3><0xbc>bchen
EOF
cmp tmp-out tmp-ok
# Test of --byte-subst with a non-ASCII substitution.
if ./is-native && test "`(locale charmap) 2>/dev/null`" = UTF-8; then
cat > tmp-in <<\EOF
Böse Bübchen
EOF
$iconv $options_utf8 -f ASCII -t UTF-8 2>/dev/null < tmp-in > tmp-out
cat > tmp-ok <<\EOF
B«0xc3»«0xb6»se B«0xc3»«0xbc»bchen
EOF
cmp tmp-out tmp-ok
fi
if ./is-native && test "`(locale charmap) 2>/dev/null`" = UTF-8; then
cat > tmp-in <<\EOF
Böse Bübchen
EOF
$iconv $options_utf8 -f ASCII -t ISO-8859-1 2>/dev/null < tmp-in > tmp-out
$iconv -f ISO-8859-1 -t UTF-8 < tmp-out > tmp-out2
cat > tmp-ok <<\EOF
B«0xc3»«0xb6»se B«0xc3»«0xbc»bchen
EOF
cmp tmp-out2 tmp-ok
fi
# Test of --byte-subst with a very long substitution.
cat > tmp-in <<\EOF
Böse Bübchen
EOF
$iconv --byte-subst='<0x%010000x>' -f ASCII -t ASCII < tmp-in > tmp-out
# This printf command crashes on Solaris 10.
# See <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6550204>.
# Likewise on OSF/1 5.1.
if printf 'B<0x%010000x><0x%010000x>se B<0x%010000x><0x%010000x>bchen\n' 0xC3 0xB6 0xC3 0xBC > tmp-ok 2>/dev/null; then
cmp tmp-out tmp-ok
fi
# Test of --unicode-subst with an ASCII substitution.
cat > tmp-in <<\EOF
Böse Bübchen
EOF
$iconv $options_ascii -f UTF-8 -t ASCII < tmp-in > tmp-out
cat > tmp-ok <<\EOF
B<U+00F6>se B<U+00FC>bchen
EOF
cmp tmp-out tmp-ok
cat > tmp-in <<\EOF
Russian (Русский)
EOF
$iconv $options_ascii -f UTF-8 -t ISO-8859-1 2>/dev/null < tmp-in | $iconv -f ISO-8859-1 -t UTF-8 > tmp-out
cat > tmp-ok <<\EOF
Russian (<U+0420><U+0443><U+0441><U+0441><U+043A><U+0438><U+0439>)
EOF
cmp tmp-out tmp-ok
# Test of --unicode-subst with a non-ASCII substitution.
if ./is-native && test "`(locale charmap) 2>/dev/null`" = UTF-8; then
cat > tmp-in <<\EOF
Russian (Русский)
EOF
$iconv $options_utf8 -f UTF-8 -t ISO-8859-1 2>/dev/null < tmp-in > tmp-out
$iconv -f ISO-8859-1 -t UTF-8 < tmp-out > tmp-out2
cat > tmp-ok <<\EOF
Russian («U+0420»«U+0443»«U+0441»«U+0441»«U+043A»«U+0438»«U+0439»)
EOF
cmp tmp-out2 tmp-ok
fi
# Test of --unicode-subst with a very long substitution.
cat > tmp-in <<\EOF
Böse Bübchen
EOF
$iconv --unicode-subst='<U+%010000X>' -f UTF-8 -t ASCII < tmp-in > tmp-out
# This printf command crashes on Solaris 10.
# See <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6550204>.
if printf 'B<U+%010000X>se B<U+%010000X>bchen\n' 0x00F6 0x00FC > tmp-ok 2>/dev/null; then
cmp tmp-out tmp-ok
fi
cat > tmp-in <<\EOF
Böse Bübchen
EOF
$iconv --byte-subst='<0x%010000x>' -f ASCII -t ASCII < tmp-in > tmp-out
# This printf command crashes on Solaris 10.
# See <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6550204>.
# Likewise on OSF/1 5.1.
if printf 'B<0x%010000x><0x%010000x>se B<0x%010000x><0x%010000x>bchen\n' 0xC3 0xB6 0xC3 0xBC > tmp-ok 2>/dev/null; then
cmp tmp-out tmp-ok
fi
# Test of --widechar-subst:
# wcrtomb() doesn't exist on FreeBSD 4.0 and is broken on MacOS X 10.3.
# So far this has been tested only on a glibc system with !__STDC_ISO_10646__.
if false && ./is-native && test "`(locale charmap) 2>/dev/null`" = UTF-8; then
cat > tmp-in <<\EOF
Russian (Русский)
EOF
$iconv -f char -t wchar_t < tmp-in > tmp-inw
LC_ALL=C $iconv $options_ascii -f wchar_t -t ASCII < tmp-inw > tmp-out1
LC_ALL=de_DE.ISO-8859-1 $iconv $options_ascii -f wchar_t -t ASCII < tmp-inw > tmp-out2
cat > tmp-ok <<\EOF
Russian (<00000420><00000443><00000441><00000441><0000043a><00000438><00000439>)
EOF
cmp tmp-out1 tmp-ok
cmp tmp-out2 tmp-ok
if ./is-native && test "`(LC_ALL=de_DE.ISO-8859-1 locale charmap) 2>/dev/null`" = ISO-8859-1; then
options_latin1=`echo " $options_utf8" | $iconv -f UTF-8 -t ISO-8859-1`
LC_ALL=de_DE.ISO-8859-1 $iconv $options_latin1 -f wchar_t -t UTF-8 < tmp-inw > tmp-out1
cat > tmp-ok <<\EOF
Russian («00000420»«00000443»«00000441»«00000441»«0000043a»«00000438»«00000439»)
EOF
cmp tmp-out1 tmp-ok
fi
fi
rm -f tmp-in* tmp-out* tmp-ok
exit 0