#!/bin/sh
# Check of --unicode-subst, --byte-subst, --widechar-subst options.
set -e
iconv=../src/iconv_no_i18n
# Make sure the charset.alias file is found.
CHARSETALIASDIR=../lib
export CHARSETALIASDIR

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 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 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>.
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 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>.
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 && 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 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
