48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#!/bin/sh
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# This file and its contents are supplied under the terms of the
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# Common Development and Distribution License ("CDDL"), version 1.0.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# You may only use this file in accordance with the terms of version
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# 1.0 of the CDDL.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# A full copy of the text of the CDDL should have accompanied this
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# source. A copy of the CDDL is also available via the Internet at
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# http://www.illumos.org/license/CDDL.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# Copyright 2012 Nexenta Systems, Inc. All rights reserved.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon RossICONV=${ICONV:-/usr/bin/iconv}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#ICONV=${ROOT}/usr/bin/iconv
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# test name, file a, file b
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosscheck() {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross if ! cmp -s "$2" "$3" ; then
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo "TEST FAIL: $1"
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross exit 1
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross fi
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo "TEST PASS: $1"
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# fromcs, tocs, in, out
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosstest_conv() {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo "$3" > in
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo "$4" > o1
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross $ICONV -f "$1" -t "$2" < in > o2
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross check "${1}:${2}" o1 o2
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross rm in o1 o2
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossmkmap_one() {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo '<code_set_name> one'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo 'CHARMAP'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo '<NULL>\t\x00'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross for i in 8 9 a b c d e f
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross do
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross do
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo "<c1-$i$j>\t\x$i$j"
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross done
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross done
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo 'END CHARMAP'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossmkmap_two() {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo '<code_set_name> two'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo 'CHARMAP'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo '<NULL>\t\x00'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross for i in 8 9 a b c d e f
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross do
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross do
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo "<c1-$i$j>\t\x20\x$i$j"
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross done
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross done
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo 'END CHARMAP'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# write 1023 bytes of space
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosswr1023() {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross n=1023
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross while [[ $n -gt 0 ]]; do
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo ' \c'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross ((n-=1))
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross done
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# two-byte utf-8 crossing 1024 byte boundary
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossmkbuf_utf8() {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross wr1023
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo '\0303\0240'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# one-byte 8859-1 at 1024 byte boundary
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossmkbuf_8859() {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross wr1023
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross echo '\0340'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# Test some simple, built-in conversions
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosstest_conv ascii utf-8 abcdef abcdef
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosstest_conv utf-8 ascii abcdef abcdef
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosstest_conv ascii ucs-2le abc 'a\0b\0c\0\n\0\c'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosstest_conv ucs-2le ascii 'a\0b\0c\0\n\0\c' abc
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# Test user-provided charmap
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossmkmap_one > one.cm
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossmkmap_two > two.cm
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosstest_conv ./one.cm ./two.cm '\0200\0201\0202\c' ' \0200 \0201 \0202\c'
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossrm one.cm two.cm
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross# test crossing 1024 byte buffer boundary
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossmkbuf_utf8 > in
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossmkbuf_8859 > o1
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross$ICONV -f UTF-8 -t 8859-1 < in > o2
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosscheck "boundary" o1 o2
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossrm in o1 o2
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossexit 0