da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# This software is part of the ast package #
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 1982-2010 AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# and is licensed under the #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Common Public License, Version 1.0 #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# by AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# A copy of the License is available at #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# http://www.opensource.org/licenses/cpl1.0.txt #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Information and Software Systems Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# AT&T Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Florham Park NJ #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# David Korn <dgk@research.att.com> #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfunction err_exit
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print -u2 -n "\t"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print -u2 -r ${Command}[$1]: "${@:2}"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin let Errors+=1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias err_exit='err_exit $LINENO'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinCommand=${0##*/}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chininteger Errors=0
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztrap "cd /; rm -rf $tmp" EXIT
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias foo='print hello'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(foo) != hello ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'foo, where foo is alias for "print hello" failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(foo world) != 'hello world' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'foo world, where foo is alias for "print hello" failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias foo='print hello '
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias bar=world
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(foo bar) != 'hello world' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'foo bar, where foo is alias for "print hello " failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(foo \bar) != 'hello bar' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'foo \bar, where foo is alias for "print hello " failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias bar='foo world'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(bar) != 'hello world' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'bar, where bar is alias for "foo world" failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(alias bar) != "bar='foo world'" ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'alias bar, where bar is alias for "foo world" failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunalias foo || err_exit "unalias foo failed"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias foo 2> /dev/null && err_exit "alias for non-existent alias foo returns true"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset bar
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias bar="print foo$bar"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinbar=bar
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(bar) != foo ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'alias bar, where bar is alias for "print foo$bar" failed'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset bar
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias bar='print hello'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $bar != '' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'alias bar cause variable bar to be set'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias !!=print
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(!! hello 2>/dev/null) != hello ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'alias for !!=print not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzalias foo=echo
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(print "$(foo bar)" ) != bar ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'alias in command substitution not working'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin( unalias foo)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $(foo bar 2> /dev/null) != bar ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'alias not working after unalias in subshell'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinbuiltin -d rm 2> /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif whence rm > /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen [[ ! $(alias -t | grep rm= ) ]] && err_exit 'tracked alias not set'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin PATH=$PATH
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $(alias -t | grep rm= ) ]] && err_exit 'tracked alias not cleared'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinif hash -r 2>/dev/null && [[ ! $(hash) ]]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzthen PATH=$tmp:/bin:/usr/bin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin for i in foo -foo --
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz do print ':' > $tmp/$i
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz chmod +x $tmp/$i
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin hash -r -- $i 2>/dev/null || err_exit "hash -r -- $i failed"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz [[ $(hash) == $i=$tmp/$i ]] || err_exit "hash -r -- $i failed, expected $i=$tmp/$i, got $(hash)"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin done
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinelse err_exit 'hash -r failed'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin( alias :pr=print) 2> /dev/null || err_exit 'alias beginning with : fails'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin( alias p:r=print) 2> /dev/null || err_exit 'alias with : in name fails'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinexit $((Errors))