bash/.local/share/blesh/lib/test-bash.sh
2024-08-18 03:40:38 +02:00

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