#!/bin/sh
#
# These are not ash tests, we use ash as a way to test lineedit!
#
# Copyright 2010 by Denys Vlasenko
# Licensed under GPL v2, see file LICENSE for details.

. ./testing.sh
test -f "$bindir/.config" && . "$bindir/.config"

test x"CONFIG_SCRIPT" = x"y" || exit 0
test x"CONFIG_HEXDUMP" = x"y" || exit 0
test x"CONFIG_FEATURE_DEVPTS" = x"y" || exit 0

# testing "test name" "options" "expected result" "file input" "stdin"

if test x"$CONFIG_UNICODE_PRESERVE_BROKEN" = x"y"; then
testing "One byte which is not valid unicode char followed by valid input" \
	"script -q -c 'ash' /dev/null >/dev/null; cat ash.output" \
	"\
00000000  ff 2d 0a                                          |.-.|
00000003
" \
	"" \
	"echo \xff- | hexdump -C >ash.output; exit; exit; exit; exit\n"

testing "30 bytes which are not valid unicode chars followed by valid input" \
	"script -q -c 'ash' /dev/null >/dev/null; cat ash.output" \
	"\
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff 2d 0a  |..............-.|
00000020
" \
	"" \
	"echo \xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff- | hexdump -C >ash.output; exit; exit; exit; exit\n"
else
testing "One byte which is not valid unicode char followed by valid input" \
	"script -q -c 'ash' /dev/null >/dev/null; cat ash.output" \
	"\
00000000  3f 2d 0a                                          |?-.|
00000003
" \
	"" \
	"echo \xff- | hexdump -C >ash.output; exit; exit; exit; exit\n"

testing "30 bytes which are not valid unicode chars followed by valid input" \
	"script -q -c 'ash' /dev/null >/dev/null; cat ash.output" \
	"\
00000000  3f 3f 3f 3f 3f 3f 3f 3f  3f 3f 3f 3f 3f 3f 3f 3f  |????????????????|
00000010  3f 3f 3f 3f 3f 3f 3f 3f  3f 3f 3f 3f 3f 3f 2d 0a  |??????????????-.|
00000020
" \
	"" \
	"echo \xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff- | hexdump -C >ash.output; exit; exit; exit; exit\n"
fi


# Not sure this behavior is perfect: we lose all invalid input which precedes
# arrow keys and such. In this example, \xff\xff are lost
testing "2 bytes which are not valid unicode chars followed by left arrow key" \
	"script -q -c 'ash' /dev/null >/dev/null; cat ash.output" \
	"\
00000000  3d 2d 0a                                          |=-.|
00000003
" \
	"" \
	"echo =+\xff\xff\x1b\x5b\x44- | hexdump -C >ash.output; exit; exit; exit; exit\n"

# ash should see "echo \xff\n",pause -> execute it as "echo ?" (which is
# not checked by the test), then read and execute the rest: "echo A | ..."
# The bug was that ash was eating the beginning of "echo A" despite the pause.
testing "Invalid unicode chars followed by a pause do not eat next chars" \
	"{ $ECHO -ne 'echo \xff\n'; sleep 1; $ECHO -ne 'echo A | hexdump -C >ash.output; exit; exit; exit; exit\n'; } \
         | script -q -c 'ash' /dev/null >/dev/null; cat ash.output" \
	"\
00000000  41 0a                                             |A.|
00000002
" \
	"" ""

rm ash.output

exit $FAILCOUNT
