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