1*1c66f876Srillig# $NetBSD: t_morse.sh,v 1.3 2024/10/12 20:44:11 rillig Exp $ 2c16b7ffaSrillig# 3c16b7ffaSrillig# Copyright (c) 2024 The NetBSD Foundation, Inc. 4c16b7ffaSrillig# All rights reserved. 5c16b7ffaSrillig# 6c16b7ffaSrillig# Redistribution and use in source and binary forms, with or without 7c16b7ffaSrillig# modification, are permitted provided that the following conditions 8c16b7ffaSrillig# are met: 9c16b7ffaSrillig# 1. Redistributions of source code must retain the above copyright 10c16b7ffaSrillig# notice, this list of conditions and the following disclaimer. 11c16b7ffaSrillig# 2. Redistributions in binary form must reproduce the above copyright 12c16b7ffaSrillig# notice, this list of conditions and the following disclaimer in the 13c16b7ffaSrillig# documentation and/or other materials provided with the distribution. 14c16b7ffaSrillig# 15c16b7ffaSrillig# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16c16b7ffaSrillig# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17c16b7ffaSrillig# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18c16b7ffaSrillig# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19c16b7ffaSrillig# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20c16b7ffaSrillig# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21c16b7ffaSrillig# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22c16b7ffaSrillig# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23c16b7ffaSrillig# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24c16b7ffaSrillig# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25c16b7ffaSrillig# POSSIBILITY OF SUCH DAMAGE. 26c16b7ffaSrillig# 27c16b7ffaSrillig 28c16b7ffaSrilligatf_test_case digits 29*1c66f876Srilligdigits_head() 30*1c66f876Srillig{ 31ab0758f2Srillig atf_set 'require.progs' '/usr/games/morse' 32ab0758f2Srillig} 33*1c66f876Srilligdigits_body() 34*1c66f876Srillig{ 35c16b7ffaSrillig trailing_space=' ' 36c16b7ffaSrillig morse_s_digits="\ 37c16b7ffaSrillig ----- 38c16b7ffaSrillig .---- 39c16b7ffaSrillig ..--- 40c16b7ffaSrillig ...-- 41c16b7ffaSrillig ....- 42c16b7ffaSrillig ..... 43c16b7ffaSrillig -.... 44c16b7ffaSrillig --... 45c16b7ffaSrillig ---.. 46c16b7ffaSrillig ----. 47c16b7ffaSrillig$trailing_space 48c16b7ffaSrillig ...-.- 49c16b7ffaSrillig" 50c16b7ffaSrillig atf_check -o "inline:$morse_s_digits" \ 51c16b7ffaSrillig /usr/games/morse -s 0123456789 52c16b7ffaSrillig 53c16b7ffaSrillig morse_digits="\ 54c16b7ffaSrillig daw daw daw daw daw 55c16b7ffaSrillig dit daw daw daw daw 56c16b7ffaSrillig dit dit daw daw daw 57c16b7ffaSrillig dit dit dit daw daw 58c16b7ffaSrillig dit dit dit dit daw 59c16b7ffaSrillig dit dit dit dit dit 60c16b7ffaSrillig daw dit dit dit dit 61c16b7ffaSrillig daw daw dit dit dit 62c16b7ffaSrillig daw daw daw dit dit 63c16b7ffaSrillig daw daw daw daw dit 64c16b7ffaSrillig 65c16b7ffaSrillig dit dit dit daw dit daw 66c16b7ffaSrillig" 67c16b7ffaSrillig atf_check -o "inline:$morse_digits" \ 68c16b7ffaSrillig /usr/games/morse 0123456789 69c16b7ffaSrillig} 70c16b7ffaSrillig 71*1c66f876Srillig 72c16b7ffaSrillig# Before 2024-06-16, non-ASCII characters invoked undefined behavior, 73c16b7ffaSrillig# possibly crashing morse. 74c16b7ffaSrilligatf_test_case nonascii 75*1c66f876Srillignonascii_head() 76*1c66f876Srillig{ 77ab0758f2Srillig atf_set 'require.progs' '/usr/games/morse' 78ab0758f2Srillig} 79c16b7ffaSrillignonascii_body() 80c16b7ffaSrillig{ 81c16b7ffaSrillig expected="\ 82c16b7ffaSrillig 83c16b7ffaSrillig dit dit dit daw dit daw 84c16b7ffaSrillig" 85c16b7ffaSrillig atf_check -o "inline:$expected" \ 86c16b7ffaSrillig /usr/games/morse äöü 87c16b7ffaSrillig} 88c16b7ffaSrillig 89*1c66f876Srillig 90*1c66f876Srilligatf_test_case roundtrip 91*1c66f876Srilligroundtrip_head() { 92*1c66f876Srillig atf_set 'require.progs' '/usr/games/morse' 93*1c66f876Srillig} 94*1c66f876Srilligroundtrip_body() 95*1c66f876Srillig{ 96*1c66f876Srillig # Most punctuation is ignored during encoding. 97*1c66f876Srillig # Missing are: !#$%&*;<>[\]^{|}~ 98*1c66f876Srillig 99*1c66f876Srillig input=\ 100*1c66f876Srillig' !"#$%&'\''()*+,-./'\ 101*1c66f876Srillig'0123456789:;<=>?'\ 102*1c66f876Srillig'@ABCDEFGHIJKLMNO'\ 103*1c66f876Srillig'PQRSTUVWXYZ[\]^_'\ 104*1c66f876Srillig'`abcdefghijklmno'\ 105*1c66f876Srillig'pqrstuvwxyz{|}~' 106*1c66f876Srillig 107*1c66f876Srillig expected=\ 108*1c66f876Srillig' "'\''()+,-./'\ 109*1c66f876Srillig'0123456789:=?'\ 110*1c66f876Srillig'@ABCDEFGHIJKLMNO'\ 111*1c66f876Srillig'PQRSTUVWXYZ_'\ 112*1c66f876Srillig'ABCDEFGHIJKLMNO'\ 113*1c66f876Srillig'PQRSTUVWXYZ \n' 114*1c66f876Srillig 115*1c66f876Srillig atf_check -o 'save:roundtrip.morse' \ 116*1c66f876Srillig /usr/games/morse -s "$input" 117*1c66f876Srillig atf_check -o "inline:$expected" \ 118*1c66f876Srillig /usr/games/morse -d < roundtrip.morse 119*1c66f876Srillig} 120*1c66f876Srillig 121*1c66f876Srillig 122c16b7ffaSrilligatf_init_test_cases() 123c16b7ffaSrillig{ 124c16b7ffaSrillig atf_add_test_case digits 125c16b7ffaSrillig atf_add_test_case nonascii 126*1c66f876Srillig atf_add_test_case roundtrip 127c16b7ffaSrillig} 128