326 lines
9.8 KiB
Bash
326 lines
9.8 KiB
Bash
# Copyright 2015 Koichi Murase <myoga.murase@gmail.com>. All rights reserved.
|
|
# This script is a part of blesh (https://github.com/akinomyoga/ble.sh)
|
|
# provided under the BSD-3-Clause license. Do not edit this file because this
|
|
# is not the original source code: Various pre-processing has been applied.
|
|
# Also, the code comments and blank lines are stripped off in the installation
|
|
# process. Please find the corresponding source file(s) in the repository
|
|
# "akinomyoga/ble.sh".
|
|
#
|
|
# Source: /lib/test-bash.sh
|
|
ble-import lib/core-test
|
|
ble/test/start-section 'bash' 69
|
|
(
|
|
a='x y'
|
|
ble/test code:'ret=$a' ret="x y"
|
|
ble/test '[[ $a == "x y" ]]'
|
|
ble/test 'case $a in ("x y") true ;; (*) false ;; esac'
|
|
a='x y'
|
|
ble/test code:'ret=$a' ret="x y"
|
|
ble/test '[[ $a == "x y" ]]'
|
|
ble/test 'case $a in ("x y") true ;; (*) false ;; esac'
|
|
IFS=abc a='xabcy'
|
|
ble/test code:'ret=$a' ret="xabcy"
|
|
ble/test '[[ $a == "xabcy" ]]'
|
|
ble/test 'case $a in ("xabcy") true ;; (*) false ;; esac'
|
|
IFS=$' \t\n'
|
|
a='x y'
|
|
ble/test 'read -r ret <<< $a' ret="x y"
|
|
a='x y'
|
|
if ((_ble_bash<40400)); then
|
|
ble/test 'read -r ret <<< $a' ret="x y"
|
|
else
|
|
ble/test 'read -r ret <<< $a' ret="x y"
|
|
fi
|
|
IFS=abc a='xabcy'
|
|
if ((_ble_bash<40400)); then
|
|
ble/test 'read -r ret <<< $a' ret="x y"
|
|
else
|
|
ble/test 'read -r ret <<< $a' ret="xabcy"
|
|
fi
|
|
IFS=$' \t\n'
|
|
b='/*'
|
|
ble/test code:'ret=$b' ret="/*"
|
|
ble/test 'case $b in ("/*") true ;; (*) false ;; esac'
|
|
ble/test 'read -r ret <<< $b' ret="/*"
|
|
)
|
|
(
|
|
a=("")
|
|
function f1 { ret=$1; }
|
|
if ((30100<=_ble_bash&&_ble_bash<30200)); then
|
|
ble/test 'f1 "a${a[*]}b"' ret=$'a\177b'
|
|
ble/test code:'ret="a${a[*]}b"' ret=$'a\177b'
|
|
ble/test 'case "a${a[*]}b" in ($'\''a\177b'\'') true ;; (*) false ;; esac'
|
|
ble/test 'read -r ret <<< "a${a[*]}b"' ret=$'a\177b'
|
|
else
|
|
ble/test 'f1 "a${a[*]}b"' ret='ab'
|
|
ble/test code:'ret="a${a[*]}b"' ret='ab'
|
|
ble/test 'case "a${a[*]}b" in (ab) true ;; (*) false ;; esac'
|
|
ble/test 'read -r ret <<< "a${a[*]}b"' ret=ab
|
|
fi
|
|
var=X%dX%dX
|
|
if ((_ble_bash<30200)); then
|
|
ble/test code:'ret=${var//%d/.}' ret='X%dX%dX'
|
|
else
|
|
ble/test code:'ret=${var//%d/.}' ret='X.X.X'
|
|
fi
|
|
ble/test/chdir || exit
|
|
touch {a..c}.txt
|
|
function f1 { local GLOBIGNORE='*.txt'; }
|
|
if ((_ble_bash<30200)); then
|
|
ble/test 'f1; echo *' stdout='*'
|
|
else
|
|
ble/test 'f1; echo *' stdout='a.txt b.txt c.txt'
|
|
fi
|
|
function f1 { local POSIXLY_CORRECT=y; builtin unset -v POSIXLY_CORRECT; }
|
|
set +o posix
|
|
if ((_ble_bash<30200)); then
|
|
ble/test 'f1; [[ -o posix ]]'
|
|
else
|
|
ble/test 'f1; [[ ! -o posix ]]'
|
|
fi
|
|
builtin unset -v POSIXLY_CORRECT
|
|
ble/test '[[ ! -o posix ]]'
|
|
set +o posix
|
|
function f1 { local POSIXLY_CORRECT; builtin unset -v POSIXLY_CORRECT; [[ ! -o posix ]]; }
|
|
if ((_ble_bash<40400)); then
|
|
ble/test '! f1'
|
|
else
|
|
ble/test 'f1'
|
|
fi
|
|
set +o posix
|
|
function f1/sub { true; }
|
|
if ((_ble_bash<50300)); then
|
|
ble/test 'set -o posix; f1/sub; ret=$?; set +o posix' ret=0
|
|
else
|
|
ble/test 'set -o posix; f1/sub; ret=$?; set +o posix' ret=0
|
|
fi
|
|
if ((_ble_bash<30004)); then
|
|
ble/test code:'a=あ ret=${#a}' ret=3
|
|
else
|
|
ble/test code:'a=あ ret=${#a}' ret=1
|
|
fi
|
|
builtin unset -v v
|
|
v=$'a\nb'
|
|
if ((_ble_bash<30100)); then
|
|
ble/test code:'declare -p v' stdout=$'declare -- v="a\\\nb"'
|
|
elif ((_ble_bash<50200)); then
|
|
ble/test code:'declare -p v' stdout=$'declare -- v="a\nb"'
|
|
else
|
|
ble/test code:'declare -p v' stdout='declare -- v=$'\''a\nb'\'
|
|
fi
|
|
builtin unset -v scalar
|
|
if ((_ble_bash<30100)); then
|
|
ble/test code:'ret="[${scalar-$'\''hello'\''}]"' ret="['hello']" # disable=#D1774
|
|
else
|
|
ble/test code:'ret="[${scalar-$'\''hello'\''}]"' ret='[hello]' # disable=#D1774
|
|
fi
|
|
)
|
|
(
|
|
function f1 { local -a a; local -A a; }
|
|
if ((_ble_bash<40000)); then
|
|
ble/test f1 exit=2
|
|
elif ((_ble_bash<50000)); then
|
|
ble/test '(f1)' exit=139 # SIGSEGV
|
|
else
|
|
ble/test f1 exit=1
|
|
fi
|
|
c=(a b c)
|
|
IFS=x
|
|
if ((_ble_bash<50000)); then
|
|
ble/test 'case ${c[*]} in ("a b c") true ;; (*) false ;; esac'
|
|
ble/test 'read -r ret <<< ${c[*]}' ret="a b c"
|
|
else
|
|
ble/test 'case ${c[*]} in ("axbxc") true ;; (*) false ;; esac'
|
|
ble/test 'read -r ret <<< ${c[*]}' ret="axbxc"
|
|
fi
|
|
ble/test 'case "${c[*]}" in ("axbxc") true ;; (*) false ;; esac'
|
|
ble/test 'read -r ret <<< "${c[*]}"' ret="axbxc"
|
|
IFS=$' \t\n'
|
|
c=(a b c)
|
|
ble/test code:'ret=${c[*]}' ret="a b c"
|
|
ble/test 'case ${c[*]} in ("a b c") true ;; (*) false ;; esac'
|
|
ble/test 'read -r ret <<< ${c[*]}' ret="a b c"
|
|
IFS=x
|
|
if ((_ble_bash<40300)); then
|
|
ble/test code:'ret=${c[*]}' ret="a b c"
|
|
else
|
|
ble/test code:'ret=${c[*]}' ret="axbxc"
|
|
fi
|
|
ble/test code:'ret="${c[*]}"' ret="axbxc"
|
|
IFS=$' \t\n'
|
|
builtin unset -v arr1 arr2
|
|
local arr1
|
|
local -a arr2
|
|
if ((_ble_bash<40200)); then
|
|
ble/test code:'ret=${#arr1[@]}' ret=1
|
|
else
|
|
ble/test code:'ret=${#arr1[@]}' ret=0
|
|
fi
|
|
ble/test code:'ret=${#arr2[@]}' ret=0
|
|
a=($'\x7F' $'\x01')
|
|
if ((_ble_bash<40000)); then
|
|
ble/test 'declare -p a' stdout=$'declare -a a=\'([0]="\x01\x01\x01\x7F" [1]="\x01\x01\x01\x01")\'' # '
|
|
elif ((_ble_bash<40400)); then
|
|
ble/test 'declare -p a' stdout=$'declare -a a=\'([0]="\x01\x7F" [1]="\x01\x01")\'' # '
|
|
else
|
|
ble/test 'declare -p a' stdout='declare -a a=([0]=$'\''\177'\'' [1]=$'\''\001'\'')' # disable=#D0525
|
|
fi
|
|
function f1 { local -a arr=(b b b); ble/util/print "(${arr[*]})"; }
|
|
function f2 { local -a arr=(a a a); f1; }
|
|
if ((30100<=_ble_bash&&_ble_bash<30104)); then
|
|
ble/test f2 stdout='()'
|
|
else
|
|
ble/test f2 stdout='(b b b)'
|
|
fi
|
|
if ((30100<=_ble_bash&&_ble_bash<30104)); then
|
|
ble/test 'function f1 { local -a alpha=(); local -a beta=(); }'
|
|
else
|
|
ble/test 'function f1 { local -a alpha=() beta=(); }'
|
|
fi
|
|
if ((_ble_bash<30200)); then
|
|
ble/test code:'ret=あ ret=${#ret[0]}' ret=3 # disable=#D0182
|
|
else
|
|
ble/test code:'ret=あ ret=${#ret[0]}' ret=1 # disable=#D0182
|
|
fi
|
|
declare ret=(1 2 3) # disable=#D0184
|
|
if ((_ble_bash<30100)); then
|
|
ble/test ret='(1 2 3)'
|
|
else
|
|
ble/test ret='1'
|
|
fi
|
|
declare -a ret=("1 2") # disable=#D0525
|
|
if ((_ble_bash<30100)); then
|
|
ble/test ret='1'
|
|
else
|
|
ble/test ret='1 2'
|
|
fi
|
|
v="1 2 3"
|
|
declare -a ret=("$v") # disable=#D0525
|
|
if ((_ble_bash<30100)); then
|
|
ble/test ret='1'
|
|
else
|
|
ble/test ret='1 2 3'
|
|
fi
|
|
a=(1 2 3)
|
|
IFS=x
|
|
declare -a a1=("${a[@]}") # disable=#D0525
|
|
a2=("${a[@]}") # disable=#D0525
|
|
IFS=$' \t\n'
|
|
if ((_ble_bash<30100)); then
|
|
ble/test code:'ret=$a1' ret=1x2x3
|
|
ble/test code:'ret=$a2' ret=1
|
|
else
|
|
ble/test code:'ret=$a1' ret=1
|
|
ble/test code:'ret=$a2' ret=1
|
|
fi
|
|
IFS=x
|
|
v=1x2x3
|
|
declare -a a1=($v)
|
|
a2=($v)
|
|
if ((_ble_bash<30100)); then
|
|
ble/test code:'ret=$a1' ret=1x2x3
|
|
ble/test code:'ret=$a2' ret=1
|
|
else
|
|
ble/test code:'ret=$a1' ret=1
|
|
ble/test code:'ret=$a2' ret=1
|
|
fi
|
|
v='1 2 3'
|
|
declare -a a1=($v)
|
|
a2=($v)
|
|
if ((_ble_bash<30100)); then
|
|
ble/test code:'ret=$a1' ret=1
|
|
ble/test code:'ret=$a2' ret='1 2 3'
|
|
else
|
|
ble/test code:'ret=$a1' ret='1 2 3'
|
|
ble/test code:'ret=$a2' ret='1 2 3'
|
|
fi
|
|
IFS=$' \t\n'
|
|
builtin unset -v scalar
|
|
scalar=abcd
|
|
if ((_ble_bash<30100)); then
|
|
ble/test code:'ret=${scalar[@]//[bc]}' ret='' # disable=#D1570
|
|
elif ((40300<=_ble_bash&&_ble_bash<40400)); then
|
|
ble/test code:'ret=${scalar[@]//[bc]}' ret=$'\001a\001\001\001d' # disable=#D1570
|
|
else
|
|
ble/test code:'ret=${scalar[@]//[bc]}' ret='ad' # disable=#D1570
|
|
fi
|
|
)
|
|
(
|
|
q=\' line='$'$q'\'$q'!!'$q'\'$q
|
|
code='(builtin history -s histentry; builtin history -p "$line")'
|
|
if ((_ble_bash<30100)); then
|
|
ble/test "$code" stdout=
|
|
elif ((_ble_bash<40100)) || [[ $- != *[iH]* ]]; then
|
|
ble/test "$code" stdout="${line//!!/histentry}"
|
|
else
|
|
ble/test "$code" stdout="$line"
|
|
fi
|
|
if ((_ble_bash<40100)); then
|
|
ble/test '(set -H; builtin history -c; builtin history -p "$line")' stdout= exit=1
|
|
else
|
|
ble/test '(set -H; builtin history -c; builtin history -p "$line")' stdout="$line"
|
|
fi
|
|
if [[ -d /proc/$$/fd ]] && { ((1)) >/dev/tty; } 2>/dev/null; then
|
|
(
|
|
exec 7>/dev/null 77>/dev/null # disable=#D0857
|
|
exec 7>/dev/tty 77>/dev/tty # disable=#D0857
|
|
ble/util/getpid
|
|
if ((30100<=_ble_bash&&_ble_bash<40000)); then
|
|
ble/test '[[ -t 7 ]]'
|
|
ble/test '[[ ! -t 77 ]]'
|
|
else
|
|
ble/test '[[ -t 7 ]]'
|
|
ble/test '[[ -t 77 ]]'
|
|
fi
|
|
)
|
|
fi
|
|
if [[ -d /proc/$$/fd ]] && { ((1)) >/dev/tty; } 2>/dev/null; then
|
|
(
|
|
exec 7>/dev/null 77>/dev/null # disable=#D0857
|
|
exec 7>&- 77>&- # disable=#D2164
|
|
ble/util/getpid
|
|
if ((30100<=_ble_bash&&_ble_bash<30200)); then
|
|
ble/test '[[ ! -e /proc/$BASHPID/fd/7 ]]'
|
|
ble/test '[[ -e /proc/$BASHPID/fd/77 ]]'
|
|
else
|
|
ble/test '[[ ! -e /proc/$BASHPID/fd/7 ]]'
|
|
ble/test '[[ ! -e /proc/$BASHPID/fd/77 ]]'
|
|
fi
|
|
)
|
|
fi
|
|
function f1 { ble/util/print hello; } >&"$fd1"
|
|
function f2 { ble/util/print hello >&"$fd1"; }
|
|
function f3 { { ble/util/print hello; } >&"$fd1"; }
|
|
function test1 {
|
|
local fd1=
|
|
ble/fd#alloc fd1 '>&1'
|
|
"$1" >/dev/null & local pid=$!
|
|
wait "$pid"
|
|
ble/fd#close fd1
|
|
}
|
|
if ((_ble_bash<30100)); then
|
|
ble/test 'test1 f1' stdout=
|
|
else
|
|
ble/test 'test1 f1' stdout=hello
|
|
fi
|
|
ble/test 'test1 f2' stdout=hello
|
|
ble/test 'test1 f3' stdout=hello
|
|
)
|
|
(
|
|
shopt -s expand_aliases
|
|
alias e='ble/util/print hello'
|
|
ble/test 'eval "e"' stdout=hello
|
|
ble/test 'true && eval "e"' stdout=hello
|
|
ble/test 'eval "e" & wait' stdout=hello
|
|
if [[ $- == *i* ]]; then
|
|
ble/test '(eval "e") & wait' stdout=
|
|
ble/test '{ eval "e"; } & wait' stdout=
|
|
ble/test 'true && eval "e" & wait' stdout=
|
|
else
|
|
ble/test '(eval "e") & wait' stdout=hello
|
|
ble/test '{ eval "e"; } & wait' stdout=hello
|
|
ble/test 'true && eval "e" & wait' stdout=hello
|
|
fi
|
|
builtin unalias e
|
|
)
|
|
ble/test/end-section
|