xref: /openbsd-src/regress/lib/libedit/read/test_read_char.sh (revision d4e67a97b48f1b52d1ab469d4665694e452560c5)
1f21b0e4bSschwarze#!/bin/sh
2*d4e67a97Sbluhm# $OpenBSD: test_read_char.sh,v 1.3 2017/07/05 15:31:45 bluhm Exp $
3f21b0e4bSschwarze#
4f21b0e4bSschwarze# Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
5f21b0e4bSschwarze#
6f21b0e4bSschwarze# Permission to use, copy, modify, and distribute this software for any
7f21b0e4bSschwarze# purpose with or without fee is hereby granted, provided that the above
8f21b0e4bSschwarze# copyright notice and this permission notice appear in all copies.
9f21b0e4bSschwarze#
10f21b0e4bSschwarze# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11f21b0e4bSschwarze# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12f21b0e4bSschwarze# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13f21b0e4bSschwarze# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14f21b0e4bSschwarze# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15f21b0e4bSschwarze# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16f21b0e4bSschwarze# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17f21b0e4bSschwarze
18f21b0e4bSschwarzetestrc()
19f21b0e4bSschwarze{
20f21b0e4bSschwarze	stdin=$1
2101af085cSschwarze	e_utf8=$2
2201af085cSschwarze	e_ascii=$3
2301af085cSschwarze	[ -n "$e_ascii" ] || e_ascii=$e_utf8
2401af085cSschwarze	result=`echo -n "$stdin" | LC_CTYPE=en_US.UTF-8 ./test_read_char`
2501af085cSschwarze	if [ "$result" != "${e_utf8}" ]; then
26f21b0e4bSschwarze		echo "input:    >>>$stdin<<<"
2701af085cSschwarze		echo "expected: >>>$e_utf8<<< UTF-8"
2801af085cSschwarze		echo "result:   >>>$result<<<"
2901af085cSschwarze		exit 1;
3001af085cSschwarze	fi
3101af085cSschwarze	result=`echo -n "$stdin" | LC_CTYPE=C ./test_read_char`
3201af085cSschwarze	if [ "$result" != "${e_ascii}" ]; then
3301af085cSschwarze		echo "input:    >>>$stdin<<<"
3401af085cSschwarze		echo "expected: >>>$e_ascii<<< ASCII"
35f21b0e4bSschwarze		echo "result:   >>>$result<<<"
36f21b0e4bSschwarze		exit 1;
37f21b0e4bSschwarze	fi
38f21b0e4bSschwarze}
39f21b0e4bSschwarze
4001af085cSschwarze# Valid ASCII.
41f21b0e4bSschwarzetestrc "" "0."
42f21b0e4bSschwarzetestrc "a" "61,0."
43f21b0e4bSschwarzetestrc "ab" "61,62,0."
4401af085cSschwarze
4501af085cSschwarze# Valid UTF-8.
4601af085cSschwarzetestrc "\0303\0251" "e9,0." "c3,a9,0."
4701af085cSschwarze
4801af085cSschwarze# Incomplete UTF-8.
4901af085cSschwarzetestrc "\0303" "0." "c3,0."
5001af085cSschwarzetestrc "\0303a" "*61,0." "c3,61,0."
5101af085cSschwarzetestrc "\0303ab" "*61,62,0." "c3,61,62,0."
5201af085cSschwarze
5301af085cSschwarze# UTF-16 surrogate.
5401af085cSschwarzetestrc "\0355\0277\0277ab" "*61,62,0." "ed,bf,bf,61,62,0."
5501af085cSschwarze
5601af085cSschwarze# Isolated UTF-8 continuation bytes.
5701af085cSschwarzetestrc "\0200" "*0." "80,0."
5801af085cSschwarzetestrc "\0200ab" "*61,62,0." "80,61,62,0."
5901af085cSschwarzetestrc "a\0200bc" "61,*62,63,0." "61,80,62,63,0."
6001af085cSschwarzetestrc "\0200\0303\0251" "*e9,0." "80,c3,a9,0."
6101af085cSschwarzetestrc "\0200\0303ab" "*61,62,0." "80,c3,61,62,0."
6201af085cSschwarze
6301af085cSschwarze# Invalid bytes.
6401af085cSschwarzetestrc "\0377ab" "*61,62,0." "ff,61,62,0."
6501af085cSschwarzetestrc "\0355\0277\0377ab" "*61,62,0." "ed,bf,ff,61,62,0."
66f21b0e4bSschwarze
67f21b0e4bSschwarzeexit 0
68