1#!/bin/sh 2 3# 4# This file and its contents are supplied under the terms of the 5# Common Development and Distribution License ("CDDL"), version 1.0. 6# You may only use this file in accordance with the terms of version 7# 1.0 of the CDDL. 8# 9# A full copy of the text of the CDDL should have accompanied this 10# source. A copy of the CDDL is also available via the Internet at 11# http://www.illumos.org/license/CDDL. 12# 13 14# 15# Copyright 2012 Nexenta Systems, Inc. All rights reserved. 16# 17 18ICONV=${ICONV:-/usr/bin/iconv} 19#ICONV=${ROOT}/usr/bin/iconv 20 21# test name, file a, file b 22check() { 23 if ! cmp -s "$2" "$3" ; then 24 echo "TEST FAIL: $1" 25 exit 1 26 fi 27 echo "TEST PASS: $1" 28} 29 30 31# fromcs, tocs, in, out 32test_conv() { 33 echo "$3" > in 34 echo "$4" > o1 35 $ICONV -f "$1" -t "$2" < in > o2 36 check "${1}:${2}" o1 o2 37 rm in o1 o2 38} 39 40mkmap_one() { 41 echo '<code_set_name> one' 42 echo 'CHARMAP' 43 echo '<NULL>\t\x00' 44 for i in 8 9 a b c d e f 45 do 46 for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f 47 do 48 echo "<c1-$i$j>\t\x$i$j" 49 done 50 done 51 echo 'END CHARMAP' 52} 53 54mkmap_two() { 55 echo '<code_set_name> two' 56 echo 'CHARMAP' 57 echo '<NULL>\t\x00' 58 for i in 8 9 a b c d e f 59 do 60 for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f 61 do 62 echo "<c1-$i$j>\t\x20\x$i$j" 63 done 64 done 65 echo 'END CHARMAP' 66} 67 68# write 1023 bytes of space 69wr1023() { 70 n=1023 71 while [[ $n -gt 0 ]]; do 72 echo ' \c' 73 ((n-=1)) 74 done 75} 76 77# two-byte utf-8 crossing 1024 byte boundary 78mkbuf_utf8() { 79 wr1023 80 echo '\0303\0240' 81} 82 83# one-byte 8859-1 at 1024 byte boundary 84mkbuf_8859() { 85 wr1023 86 echo '\0340' 87} 88 89# Test some simple, built-in conversions 90 91test_conv ascii utf-8 abcdef abcdef 92test_conv utf-8 ascii abcdef abcdef 93test_conv ascii ucs-2le abc 'a\0b\0c\0\n\0\c' 94test_conv ucs-2le ascii 'a\0b\0c\0\n\0\c' abc 95 96# Test user-provided charmap 97 98mkmap_one > one.cm 99mkmap_two > two.cm 100test_conv ./one.cm ./two.cm '\0200\0201\0202\c' ' \0200 \0201 \0202\c' 101rm one.cm two.cm 102 103# test crossing 1024 byte buffer boundary 104 105mkbuf_utf8 > in 106mkbuf_8859 > o1 107$ICONV -f UTF-8 -t 8859-1 < in > o2 108check "boundary" o1 o2 109rm in o1 o2 110 111exit 0 112