Edit

kc3-lang/libiconv/tests/check-subst

Branch :

  • Show log

    Commit

  • Author : Bruno Haible
    Date : 2021-09-19 23:13:57
    Hash : 05b20c93
    Message : 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.

  • tests/check-subst
  • #!/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