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