From 65ced750e68029e161c95f900daeca75fd7f1a38 Mon Sep 17 00:00:00 2001 From: John Hood Date: Fri, 16 Oct 2015 12:10:31 -0400 Subject: [PATCH] Test ASCII and ISO-8859-1 output. --- src/tests/Makefile.am | 1 + src/tests/emulation-ascii-iso-8859.test | 102 ++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100755 src/tests/emulation-ascii-iso-8859.test diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index fe3b7f4..c45a671 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -10,6 +10,7 @@ AM_LDFLAGS = $(HARDEN_LDFLAGS) displaytests = \ e2e-success.test \ e2e-failure.test \ + emulation-ascii-iso-8859.test \ emulation-80th-column.test \ emulation-attributes-vt100.test \ emulation-attributes-16color.test \ diff --git a/src/tests/emulation-ascii-iso-8859.test b/src/tests/emulation-ascii-iso-8859.test new file mode 100755 index 0000000..9df910a --- /dev/null +++ b/src/tests/emulation-ascii-iso-8859.test @@ -0,0 +1,102 @@ +#!/bin/sh + +# +# This validates display of ASCII and ISO-8859-1 characters. +# +fail() +{ + printf "$@" 2>&1 + exit 99 +} + + + +PATH=$PATH:.:$srcdir +# Top-level wrapper. +if [ $# -eq 0 ]; then + e2e-test $0 baseline direct verify + exit +fi + +# OK, we have arguments, we're one of the test hooks. +if [ $# -ne 1 ]; then + fail "bad arguments %s\n" "$@" +fi + +sleepf() +{ + (sleep .1 || sleep 1) > /dev/null 2>&1 +} + +seq() +{ + if [ $# -lt 1 -o $# -gt 3 ]; then + echo "bad args" >&2 + fi + first=$1 + incr=1 + last=0 + case $# in + 3) + incr=$2 + last=$3 + ;; + 2) + last=$2 + ;; + 1) + ;; + esac + while :; do + printf '%d\n' $first + first=$(expr $first + $incr) + if [ $first -gt $last ]; then + break + fi + done +} + +chr() +{ + printf "\\$(printf %03o $1)" +} + +utf8cp() +{ + local c=$1 + if [ $c -gt $((0x10ffff)) ]; then + fail "illegal Unicode code point %x\n" $c + elif [ $c -lt $((0x80)) ]; then + chr $c + elif [ $c -lt $((0x800)) ]; then + chr $(( (($c >> 6) & 0x1f) | 0xc0 )) + chr $(( ($c & 0x3f) | 0x80 )) + elif [ $c -lt $((0x10000)) ]; then + chr $(( (($c >> 12) & 0x0f) | 0xe0 )) + chr $(( (($c >> 6) & 0x3f) | 0x80 )) + chr $(( ($c & 0x3f) | 0x80 )) + elif [ $c -lt $((0x200000)) ]; then + chr $(( (($c >> 18) & 0x03) | 0xf0 )) + chr $(( (($c >> 12) & 0x3f) | 0x80 )) + chr $(( (($c >> 6) & 0x3f) | 0x80 )) + chr $(( ($c & 0x3f) | 0x80 )) + fi +} + +baseline() +{ + printf '\033[H\033[J' + + # ASCII, then ISO-8859-1. + for char in $(seq 32 126) $(seq 160 255) ; do + printf '%02x %s ' $char "$(utf8cp $char)" + done + printf '\n' +} + +case $1 in + baseline|direct) + baseline;; + *) + fail "unknown test argument %s\n" $1;; +esac