Blame tests/sjis-mb

Packit 709fb3
#!/bin/sh
Packit 709fb3
# similar to euc-mb and fgrep-infloop, but tests SJIS encoding.
Packit 709fb3
# in this encoding, an ASCII character is both a valid single-byte
Packit 709fb3
# character, and a suffix of a valid double-byte character
Packit 709fb3
Packit 709fb3
. "${srcdir=.}/init.sh"; path_prepend_ ../src
Packit 709fb3
Packit 709fb3
# Add "." to PATH for the use of get-mb-cur-max.
Packit 709fb3
path_prepend_ .
Packit 709fb3
Packit 709fb3
require_compiled_in_MB_support
Packit 709fb3
require_timeout_
Packit 709fb3
Packit 709fb3
# Sequences used in this test ("%" and "@" become 8-bit characters, while "A"
Packit 709fb3
# is the real ASCII character for "A"):
Packit 709fb3
# - "%" becomes an half-width katakana in SJIS, but it is an invalid sequence
Packit 709fb3
#   in UTF-8.
Packit 709fb3
# - "@@" and "@A" are both valid sequences in SJIS.  We try to fool grep into
Packit 709fb3
#   matching "A" against "@A", or mistaking a valid "A" match for the second
Packit 709fb3
#   byte of a multi-byte character.
Packit 709fb3
Packit 709fb3
encode() { echo "$1" | tr @% '\203\301'; }
Packit 709fb3
Packit 709fb3
for locale in ja_JP.SHIFT_JIS ja_JP.SJIS ja_JP.PCK ''; do
Packit 709fb3
  test "$(get-mb-cur-max $locale)" = 2 && break
Packit 709fb3
done
Packit 709fb3
test -n "$locale" || skip_ 'SJIS locale not found'
Packit 709fb3
Packit 709fb3
k=0
Packit 709fb3
test_grep_reject() {
Packit 709fb3
  k=$(expr $k + 1)
Packit 709fb3
  encode "$2" > in || return 1
Packit 709fb3
  returns_ 1 env LC_ALL=$locale timeout 10s \
Packit 709fb3
    grep $1 $(encode "$3") in >out$k 2>&1 \
Packit 709fb3
      && compare /dev/null out$k
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
test_grep() {
Packit 709fb3
  k=$(expr $k + 1)
Packit 709fb3
  encode "$2" > exp$k
Packit 709fb3
  LC_ALL=$locale \
Packit 709fb3
    timeout 10s grep $1 $(encode "$3") exp$k > out$k 2>&1
Packit 709fb3
  test $? = 0 && compare exp$k out$k
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
failure_tests=@A
Packit 709fb3
successful_tests='%%AA @AA @A@@A'
Packit 709fb3
Packit 709fb3
fail=0
Packit 709fb3
for i in $successful_tests; do
Packit 709fb3
  test_grep -F $i A || fail=1
Packit 709fb3
  test_grep -E $i A || fail=1
Packit 709fb3
done
Packit 709fb3
Packit 709fb3
for i in $failure_tests; do
Packit 709fb3
  test_grep_reject -F $i A || fail=1
Packit 709fb3
  test_grep_reject -E $i A || fail=1
Packit 709fb3
done
Packit 709fb3
Packit 709fb3
test_grep_reject -E @A '^$|A' || fail=1
Packit 709fb3
Packit 709fb3
Exit $fail