From c3362aefa2e762211409923cfff065541bebf9e7 Mon Sep 17 00:00:00 2001 From: Saumit Dinesan Date: Sun, 22 May 2022 00:37:40 +0530 Subject: ble.sh & z4h addition --- .local/src/blesh/lib/test-util.sh | 1555 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1555 insertions(+) create mode 100644 .local/src/blesh/lib/test-util.sh (limited to '.local/src/blesh/lib/test-util.sh') diff --git a/.local/src/blesh/lib/test-util.sh b/.local/src/blesh/lib/test-util.sh new file mode 100644 index 0000000..4ec1155 --- /dev/null +++ b/.local/src/blesh/lib/test-util.sh @@ -0,0 +1,1555 @@ +# this script is a part of blesh (https://github.com/akinomyoga/ble.sh) under BSD-3-Clause license +ble-import lib/core-test +ble/test/start-section 'ble/util' 1198 +( + ble/test 'bleopt a=1' \ + exit=2 + ble/test 'bleopt a' \ + stdout= exit=2 + ble/test 'bleopt a:=2' + ble/test 'bleopt a' \ + stdout="bleopt a=2" + ble/test '[[ $bleopt_a == 2 ]]' + ble/test "bleopt | grep 'bleopt a='" \ + stdout="bleopt a=2" + ble/test 'bleopt a=3' + ble/test 'bleopt a' \ + stdout="bleopt a=3" + function bleopt/check:a { value=123; } + ble/test 'bleopt a=4 && bleopt a' + stdout="bleopt a=123" + function bleopt/check:a { false; } + ble/test 'bleopt a=5' \ + exit=1 + ble/test 'bleopt a' \ + stdout="bleopt a=123" + ble/test bleopt f:=10 g:=11 + ble/test bleopt f g \ + stdout="bleopt f=10${_ble_term_nl}bleopt g=11" + ble/test bleopt f=12 g=13 + ble/test bleopt f g \ + stdout="bleopt f=12${_ble_term_nl}bleopt g=13" + ble/test bleopt/declare -v b 6 + ble/test bleopt b stdout="bleopt b=6" + ble/test bleopt/declare -n c 7 + ble/test bleopt c stdout="bleopt c=7" + ble/test bleopt d:= e:= + ble/test bleopt/declare -v d 8 + ble/test bleopt/declare -n e 9 + ble/test bleopt d stdout="bleopt d=" + ble/test bleopt e stdout="bleopt e=9" +) +ble/test ble/util/setexit 0 exit=0 +ble/test ble/util/setexit 1 exit=1 +ble/test ble/util/setexit 9 exit=9 +ble/test ble/util/setexit 128 exit=128 +ble/test ble/util/setexit 255 exit=255 +( + a=1 + function f1 { + echo g:$a + local a=2 + echo l:$a + ble/util/unlocal a + echo g:$a + a=3 + } + ble/test 'f1; echo g:$a' \ + stdout=g:1 \ + stdout=l:2 \ + stdout=g:1 \ + stdout=g:3 + function f2 { + echo f1:$a@f2 + local a=3 + echo f2:$a@f2 + ble/util/unlocal a + echo f1:$a@f2 + a=$a+ + } + function f1 { + echo g:$a@f1 + local a=2 + echo f1:$a@f1 + f2 + echo f1:$a@f1 + ble/util/unlocal a + echo g:$a@f1 + a=$a+ + } + ble/test 'a=1; f1; echo g:$a@g' \ + stdout=g:1@f1 \ + stdout=f1:2@f1 \ + stdout=f1:2@f2 \ + stdout=f2:3@f2 \ + stdout=f1:2@f2 \ + stdout=f1:2+@f1 \ + stdout=g:1@f1 \ + stdout=g:1+@g +) +( + function f1 { + local a=1 b=2 + local result=$((a+b)) + local "$1" && ble/util/upvar "$1" "$result" + } + ble/test 'f1 x; ret=$x' ret=3 + ble/test 'f1 a; ret=$a' ret=3 + ble/test 'f1 result; ret=$result' ret=3 + function f2 { + local a=1 + local -a b=(2) + local -a result=($((a+b[0])) y z) + local "$1" && ble/util/uparr "$1" "${result[@]}" + } + ble/test 'f2 x; ret="(${x[*]})"' ret='(3 y z)' + ble/test 'f2 a; ret="(${a[*]})"' ret='(3 y z)' + ble/test 'f2 b; ret="(${b[*]})"' ret='(3 y z)' + ble/test 'f2 result; ret="(${result[*]})"' ret='(3 y z)' +) +( + VARNAMES=(name x y count data) + function print-status { + echo "name=$name x=$x y=$y count=$count data=(${data[*]})" + } + function f1 { + local "${VARNAMES[@]/%/=}" # WA #D1570 checked + name=1 x=2 y=3 count=4 data=(aa bb cc dd) + print-status + ble/util/save-vars save1_ "${VARNAMES[@]}" + name=one x= y=A count=1 data=(Q) + print-status + ble/util/save-vars save2_ "${VARNAMES[@]}" + ble/util/restore-vars save1_ "${VARNAMES[@]}" + print-status + ble/util/restore-vars save2_ "${VARNAMES[@]}" + print-status + } + ble/test f1 \ + stdout='name=1 x=2 y=3 count=4 data=(aa bb cc dd)' \ + stdout='name=one x= y=A count=1 data=(Q)' \ + stdout='name=1 x=2 y=3 count=4 data=(aa bb cc dd)' \ + stdout='name=one x= y=A count=1 data=(Q)' +) +( + declare v=1 + declare -i i=1 + export x=2 + readonly r=3 + declare -a a=() + if ((_ble_bash>=40000)); then + declare -A A=() + declare -u u=a + declare -l l=B + declare -c c=c + fi + if ((_ble_bash>=40300)); then + declare -n n=r + fi + ble/test 'ble/variable#get-attr v; ret=$attr' ret= + ble/test 'ble/variable#get-attr i; ret=$attr' ret=i + ble/test 'ble/variable#get-attr x; ret=$attr' ret=x + ble/test 'ble/variable#get-attr r; ret=$attr' ret=r + ble/test 'ble/variable#get-attr a; ret=$attr' ret=a + if ((_ble_bash>=40000)); then + ble/test 'ble/variable#get-attr u; ret=$attr' ret=u + ble/test 'ble/variable#get-attr l; ret=$attr' ret=l + ble/test 'ble/variable#get-attr c; ret=$attr' ret=c + ble/test 'ble/variable#get-attr A; ret=$attr' ret=A + fi + ble/test 'ble/variable#has-attr i i' + ble/test 'ble/variable#has-attr x x' + ble/test 'ble/variable#has-attr r r' + ble/test 'ble/variable#has-attr a a' + ble/test 'ble/variable#has-attr v i' exit=1 + ble/test 'ble/variable#has-attr v x' exit=1 + ble/test 'ble/variable#has-attr v r' exit=1 + ble/test 'ble/variable#has-attr v a' exit=1 + if ((_ble_bash>=40000)); then + ble/test 'ble/variable#has-attr u u' + ble/test 'ble/variable#has-attr l l' + ble/test 'ble/variable#has-attr c c' + ble/test 'ble/variable#has-attr A A' + ble/test 'ble/variable#has-attr v u' exit=1 + ble/test 'ble/variable#has-attr v l' exit=1 + ble/test 'ble/variable#has-attr v c' exit=1 + ble/test 'ble/variable#has-attr v A' exit=1 + fi + ble/test 'ble/is-inttype i' + ble/test 'ble/is-inttype v' exit=1 + ble/test 'ble/is-readonly r' + ble/test 'ble/is-readonly v' exit=1 + if ((_ble_bash>=40000)); then + ble/test 'ble/is-transformed u' + ble/test 'ble/is-transformed l' + ble/test 'ble/is-transformed c' + ble/test 'ble/is-transformed v' exit=1 + fi +) +function is-global() (readonly "$1"; ! local "$1" 2>/dev/null) +( + v1=1 v2=2 + ((_ble_bash>=40200)) && + declare -g v1u v2u + function f1 { + local v2=22 v3=33 + local v2u v3u + f2 + } + function f2 { + local v4=444 v4u + ble/test 'is-global v0' + ble/test 'is-global v1' + ble/test 'is-global v2' exit=1 + ble/test 'is-global v3' exit=1 + ble/test 'is-global v4' exit=1 + ble/test 'ble/variable#is-global v0' + ble/test 'ble/variable#is-global v1' + ble/test 'ble/variable#is-global v2' exit=1 + ble/test 'ble/variable#is-global v3' exit=1 + ble/test 'ble/variable#is-global v4' exit=1 + ble/test 'ble/variable#is-global v0u' + if ((_ble_bash>=40200)); then + ble/test 'ble/variable#is-global v1u' + ble/test 'ble/variable#is-global v2u' exit=1 + fi + ble/test 'ble/variable#is-global v3u' exit=1 + ble/test 'ble/variable#is-global v4u' exit=1 + } + f1 +) +( + _ble_array_prototype=() + ble/test 'echo ${#_ble_array_prototype[@]}' stdout=0 + ble/array#reserve-prototype 10 + ble/test 'echo ${#_ble_array_prototype[@]}' stdout=10 + ble/test 'x=("${_ble_array_prototype[@]::10}"); echo ${#x[@]}' stdout=10 + ble/array#reserve-prototype 3 + ble/test 'echo ${#_ble_array_prototype[@]}' stdout=10 + ble/test 'x=("${_ble_array_prototype[@]::3}"); echo ${#x[@]}' stdout=3 +) +( + declare -a a=() + declare b= + ble/test 'ble/is-array a' + ble/test 'ble/is-array b' exit=1 + ble/test 'ble/is-array c' exit=1 + if ((_ble_bash>=40000)); then + declare -A A=() + ble/test 'ble/is-array A' exit=1 + ble/test 'ble/is-assoc a' exit=1 + ble/test 'ble/is-assoc A' + ble/test 'ble/is-assoc b' exit=1 + ble/test 'ble/is-assoc c' exit=1 + fi +) +( + ble/test 'ble/array#set a; echo "${#a[@]}:(${a[*]})"' stdout='0:()' + ble/test 'ble/array#set a Q; echo "${#a[@]}:(${a[*]})"' stdout='1:(Q)' + ble/test 'ble/array#set a 1 2 3; echo "${#a[@]}:(${a[*]})"' stdout='3:(1 2 3)' + ble/test 'ble/array#set a; echo "${#a[@]}:(${a[*]})"' stdout='0:()' +) +( + declare -a a=() + ble/array#push a + ble/test 'echo "${#a[@]}:(${a[*]})"' stdout='0:()' + ble/array#push a A + ble/test 'echo "${#a[@]}:(${a[*]})"' stdout='1:(A)' + ble/array#push a B C + ble/test 'echo "${#a[@]}:(${a[*]})"' stdout='3:(A B C)' + ble/array#push a + ble/test 'echo "${#a[@]}:(${a[*]})"' stdout='3:(A B C)' +) +( + function result { echo "$ret:${#arr[*]}:(${arr[*]})"; } + ble/test 'arr=() ; ble/array#pop arr; result' stdout=':0:()' + ble/test 'arr=(1) ; ble/array#pop arr; result' stdout='1:0:()' + ble/test 'arr=(1 2) ; ble/array#pop arr; result' stdout='2:1:(1)' + ble/test 'arr=(0 0 0); ble/array#pop arr; result' stdout='0:2:(0 0)' + ble/test 'arr=(1 2 3); ble/array#pop arr; result' stdout='3:2:(1 2)' + ble/test 'arr=(" a a " " b b " " c c "); ble/array#pop arr; result' \ + stdout=' c c :2:( a a b b )' +) +( + function status { echo "${#a[@]}:(${a[*]})"; } + a=() + ble/array#unshift a + ble/test status stdout='0:()' + ble/array#unshift a A + ble/test status stdout='1:(A)' + ble/array#unshift a + ble/test status stdout='1:(A)' + ble/array#unshift a B + ble/test status stdout='2:(B A)' + ble/array#unshift a C D E + ble/test status stdout='5:(C D E B A)' + a=() + ble/array#unshift a A B + ble/test status stdout='2:(A B)' +) +( + function status { echo "${#a[@]}:(${a[*]})"; } + a=(); ble/array#reverse a + ble/test status stdout='0:()' + a=(1); ble/array#reverse a + ble/test status stdout='1:(1)' + a=(xy zw); ble/array#reverse a + ble/test status stdout='2:(zw xy)' + a=(a 3 x); ble/array#reverse a + ble/test status stdout='3:(x 3 a)' + a=({1..10}) b=({10..1}); ble/array#reverse a + ble/test status stdout="10:(${b[*]})" + a=({1..9}) b=({9..1}); ble/array#reverse a + ble/test status stdout="9:(${b[*]})" +) +( + function status { echo "${#a[@]}:(${a[*]})"; } + a=(); ble/array#insert-at a 0 A B C + ble/test status stdout='3:(A B C)' + a=(); ble/array#insert-at a 1 A B C + ble/test status stdout='3:(A B C)' + a=(x y z); ble/array#insert-at a 0 A + ble/test status stdout='4:(A x y z)' + a=(x y z); ble/array#insert-at a 1 A + ble/test status stdout='4:(x A y z)' + a=(x y z); ble/array#insert-at a 3 A + ble/test status stdout='4:(x y z A)' + a=(x y z); ble/array#insert-at a 0 A B C + ble/test status stdout='6:(A B C x y z)' + a=(x y z); ble/array#insert-at a 1 A B C + ble/test status stdout='6:(x A B C y z)' + a=(x y z); ble/array#insert-at a 3 A B C + ble/test status stdout='6:(x y z A B C)' + a=(x y z); ble/array#insert-at a 0 + ble/test status stdout='3:(x y z)' + a=(x y z); ble/array#insert-at a 1 + ble/test status stdout='3:(x y z)' + a=(x y z); ble/array#insert-at a 3 + ble/test status stdout='3:(x y z)' +) +( + function status { echo "${#a[@]}:(${a[*]})"; } + a=(hello world hello world) + ble/array#insert-after a hello 1 2 3 + ble/test status stdout='7:(hello 1 2 3 world hello world)' + a=(heart world hello world) + ble/array#insert-after a hello 1 2 3 + ble/test status stdout='7:(heart world hello 1 2 3 world)' + a=(hello world hello world) + ble/test 'ble/array#insert-after a check 1 2 3' exit=1 + ble/test status stdout='4:(hello world hello world)' +) +( + function status { echo "${#a[@]}:(${a[*]})"; } + a=(hello world this) + ble/array#insert-before a this with check + ble/test status stdout='5:(hello world with check this)' + a=(hello world this) + ble/test 'ble/array#insert-before a haystack kick check' exit=1 + ble/test status stdout='3:(hello world this)' +) +( + function status { echo "${#a[@]}:(${a[*]})"; } + a=(xxx yyy xxx yyy yyy xxx fdsa fdsa) + ble/array#remove a xxx + ble/test status stdout='5:(yyy yyy yyy fdsa fdsa)' + a=(aa aa aa aa aa) + ble/array#remove a bb + ble/test status stdout='5:(aa aa aa aa aa)' + ble/array#remove a aa + ble/test status stdout='0:()' + ble/array#remove a cc + ble/test status stdout='0:()' +) +( + a=(hello world this hello world) + ble/test 'ble/array#index a hello' ret=0 + a=(world hep this hello world) + ble/test 'ble/array#index a hello' ret=3 + a=(hello world this hello world) + ble/test 'ble/array#index a check' ret=-1 +) +( + a=(hello world this hello world) + ble/test 'ble/array#last-index a hello' ret=3 + a=(world hep this hello world) + ble/test 'ble/array#last-index a hello' ret=3 + a=(hello world this hello world) + ble/test 'ble/array#last-index a check' ret=-1 +) +( + function status { echo "${#a[@]}:(${a[*]})"; } + a=() + ble/test 'ble/array#remove-at a 0; status' stdout='0:()' + ble/test 'ble/array#remove-at a 10; status' stdout='0:()' + a=(x y z) + ble/test 'ble/array#remove-at a 4; status' stdout='3:(x y z)' + ble/test 'ble/array#remove-at a 3; status' stdout='3:(x y z)' + ble/test 'ble/array#remove-at a 1; status' stdout='2:(x z)' + ble/test 'ble/array#remove-at a 0; status' stdout='1:(z)' + ble/test 'ble/array#remove-at a 0; status' stdout='0:()' + a=({a..z}) a1=({a..y}) a2=({b..y}) a3=({b..h} {j..y}) + ble/test 'ble/array#remove-at a 25; status' stdout="25:(${a1[*]})" + ble/test 'ble/array#remove-at a 0; status' stdout="24:(${a2[*]})" + ble/test 'ble/array#remove-at a 7; status' stdout="23:(${a3[*]})" +) +( + _ble_string_prototype=' ' + ble/test 'echo ${#_ble_string_prototype}' stdout=8 + ble/string#reserve-prototype 10 + ble/test 'echo ${#_ble_string_prototype}' stdout=16 + ble/test 'x=${_ble_string_prototype::10}; echo ${#x}' stdout=10 + ble/string#reserve-prototype 3 + ble/test 'echo ${#_ble_string_prototype}' stdout=16 + ble/test 'x=${_ble_string_prototype::3}; echo ${#x}' stdout=3 + ble/string#reserve-prototype 77 + ble/test 'echo ${#_ble_string_prototype}' stdout=128 + ble/test 'x=${_ble_string_prototype::77}; echo ${#x}' stdout=77 +) +( + ble/test 'ble/string#repeat' ret= + ble/test 'ble/string#repeat ""' ret= + ble/test 'ble/string#repeat a' ret= + ble/test 'ble/string#repeat abc' ret= + ble/test 'ble/string#repeat "" ""' ret= + ble/test 'ble/string#repeat a ""' ret= + ble/test 'ble/string#repeat abc ""' ret= + ble/test 'ble/string#repeat "" 0' ret= + ble/test 'ble/string#repeat a 0' ret= + ble/test 'ble/string#repeat abc 0' ret= + ble/test 'ble/string#repeat "" 1' ret= + ble/test 'ble/string#repeat "" 10' ret= + ble/test 'ble/string#repeat a 1' ret=a + ble/test 'ble/string#repeat a 2' ret=aa + ble/test 'ble/string#repeat a 5' ret=aaaaa + ble/test 'ble/string#repeat abc 1' ret=abc + ble/test 'ble/string#repeat abc 2' ret=abcabc + ble/test 'ble/string#repeat abc 5' ret=abcabcabcabcabc + ble/test 'ble/string#repeat ";&|<>" 5' ret=';&|<>;&|<>;&|<>;&|<>;&|<>' +) +( + ble/test 'ble/string#common-prefix' ret= + ble/test 'ble/string#common-prefix ""' ret= + ble/test 'ble/string#common-prefix a' ret= + ble/test 'ble/string#common-prefix "" ""' ret= + ble/test 'ble/string#common-prefix a ""' ret= + ble/test 'ble/string#common-prefix a b' ret= + ble/test 'ble/string#common-prefix a a' ret=a + ble/test 'ble/string#common-prefix abc abc' ret=abc + ble/test 'ble/string#common-prefix abc aaa' ret=a + ble/test 'ble/string#common-prefix abc ccc' ret= + ble/test 'ble/string#common-prefix abc xyz' ret= +) +( + ble/test 'ble/string#common-suffix' ret= + ble/test 'ble/string#common-suffix ""' ret= + ble/test 'ble/string#common-suffix a' ret= + ble/test 'ble/string#common-suffix "" ""' ret= + ble/test 'ble/string#common-suffix a ""' ret= + ble/test 'ble/string#common-suffix a b' ret= + ble/test 'ble/string#common-suffix a a' ret=a + ble/test 'ble/string#common-suffix abc abc' ret=abc + ble/test 'ble/string#common-suffix abc aaa' ret= + ble/test 'ble/string#common-suffix abc ccc' ret=c + ble/test 'ble/string#common-suffix abc xyz' ret= +) +( + function status { echo "${#a[@]}:(""${a[*]}"")"; } + nl=$'\n' + ble/test 'ble/string#split a , "" ; status' stdout='1:()' + ble/test 'ble/string#split a , "1" ; status' stdout='1:(1)' + ble/test 'ble/string#split a , "," ; status' stdout='2:( )' + ble/test 'ble/string#split a , "1," ; status' stdout='2:(1 )' + ble/test 'ble/string#split a , ",2" ; status' stdout='2:( 2)' + ble/test 'ble/string#split a , "1,,3" ; status' stdout='3:(1 3)' + ble/test 'ble/string#split a , "1,2,3" ; status' stdout='3:(1 2 3)' + ble/test 'ble/string#split a " " "1 2 3"; status' stdout='3:(1 2 3)' + ble/test 'ble/string#split a " " "1 2 3"; status' stdout='1:(1 2 3)' + ble/test 'ble/string#split a " " "1'"$nl"'2'"$nl"'3"; status' stdout="1:(1${nl}2${nl}3)" +) +( + function status { echo "${#a[@]}:(${a[*]})"; } + nl=$'\n' ht=$'\t' + ble/test 'ble/string#split-words a "" ; status' stdout='0:()' + ble/test 'ble/string#split-words a "1" ; status' stdout='1:(1)' + ble/test 'ble/string#split-words a " " ; status' stdout='0:()' + ble/test 'ble/string#split-words a "1 " ; status' stdout='1:(1)' + ble/test 'ble/string#split-words a " 2" ; status' stdout='1:(2)' + ble/test 'ble/string#split-words a "1 3" ; status' stdout='2:(1 3)' + ble/test 'ble/string#split-words a "1 2 3"; status' stdout='3:(1 2 3)' + ble/test 'ble/string#split-words a " 1'"$ht"'2'"$ht"'3 "; status' stdout='3:(1 2 3)' + ble/test 'ble/string#split-words a " 1'"$nl"'2'"$nl"'3 "; status' stdout='3:(1 2 3)' +) +( + function status { echo "${#a[@]}:(""${a[*]}"")"; } + nl=$'\n' ht=$'\t' + ble/test 'ble/string#split-lines a "" ; status' stdout='1:()' + ble/test 'ble/string#split-lines a "1" ; status' stdout='1:(1)' + ble/test 'ble/string#split-lines a "'"$nl"'" ; status' stdout='2:( )' + ble/test 'ble/string#split-lines a "1'"$nl"'" ; status' stdout='2:(1 )' + ble/test 'ble/string#split-lines a "'"$nl"'2" ; status' stdout='2:( 2)' + ble/test 'ble/string#split-lines a "1'"$nl$nl"'3" ; status' stdout='3:(1 3)' + ble/test 'ble/string#split-lines a "1'"$nl"'2'"$nl"'3"; status' stdout='3:(1 2 3)' + ble/test 'ble/string#split-lines a "1'"$ht"'2'"$ht"'3"; status' stdout="1:(1${ht}2${ht}3)" + ble/test 'ble/string#split-lines a "1 2 3"; status' stdout="1:(1 2 3)" +) +( + ble/test 'ble/string#count-char hello a' ret=0 + ble/test 'ble/string#count-char hello あ' ret=0 + ble/test 'ble/string#count-char hello e' ret=1 + ble/test 'ble/string#count-char hello l' ret=2 + ble/test 'ble/string#count-char hello olh' ret=4 + ble/test 'ble/string#count-char hello hello' ret=5 + ble/test 'ble/string#count-char "" a' ret=0 + ble/test 'ble/string#count-char "" ab' ret=0 +) +( + ble/test 'ble/string#count-string hello a' ret=0 + ble/test 'ble/string#count-string hello あ' ret=0 + ble/test 'ble/string#count-string hello ee' ret=0 + ble/test 'ble/string#count-string hello e' ret=1 + ble/test 'ble/string#count-string hello l' ret=2 + ble/test 'ble/string#count-string hello ll' ret=1 + ble/test 'ble/string#count-string hello hello' ret=1 + ble/test 'ble/string#count-string "" a' ret=0 + ble/test 'ble/string#count-string "" ab' ret=0 + ble/test 'ble/string#count-string ababababa aba' ret=2 +) +( + ble/test 'ble/string#index-of hello a' ret=-1 + ble/test 'ble/string#index-of hello あ' ret=-1 + ble/test 'ble/string#index-of hello ee' ret=-1 + ble/test 'ble/string#index-of hello e' ret=1 + ble/test 'ble/string#index-of hello l' ret=2 + ble/test 'ble/string#index-of hello ll' ret=2 + ble/test 'ble/string#index-of hello hello' ret=0 + ble/test 'ble/string#index-of "" a' ret=-1 + ble/test 'ble/string#index-of "" ab' ret=-1 + ble/test 'ble/string#index-of ababababa aba' ret=0 +) +( + ble/test 'ble/string#last-index-of hello a' ret=-1 + ble/test 'ble/string#last-index-of hello あ' ret=-1 + ble/test 'ble/string#last-index-of hello ee' ret=-1 + ble/test 'ble/string#last-index-of hello e' ret=1 + ble/test 'ble/string#last-index-of hello l' ret=3 + ble/test 'ble/string#last-index-of hello ll' ret=2 + ble/test 'ble/string#last-index-of hello hello' ret=0 + ble/test 'ble/string#last-index-of "" a' ret=-1 + ble/test 'ble/string#last-index-of "" ab' ret=-1 + ble/test 'ble/string#last-index-of ababababa aba' ret=6 +) +( + ble/test 'ble/string#toggle-case' ret= + ble/test 'ble/string#tolower ' ret= + ble/test 'ble/string#toupper ' ret= + ble/test 'ble/string#capitalize ' ret= + ble/test 'ble/string#toggle-case ""' ret= + ble/test 'ble/string#tolower ""' ret= + ble/test 'ble/string#toupper ""' ret= + ble/test 'ble/string#capitalize ""' ret= + ble/test 'ble/string#toggle-case a' ret=A + ble/test 'ble/string#tolower a' ret=a + ble/test 'ble/string#toupper a' ret=A + ble/test 'ble/string#capitalize a' ret=A + ble/test 'ble/string#toggle-case あ' ret=あ + ble/test 'ble/string#tolower あ' ret=あ + ble/test 'ble/string#toupper あ' ret=あ + ble/test 'ble/string#capitalize あ' ret=あ + ble/test 'ble/string#toggle-case +' ret=+ + ble/test 'ble/string#tolower +' ret=+ + ble/test 'ble/string#toupper +' ret=+ + ble/test 'ble/string#capitalize +' ret=+ + ble/test 'ble/string#toggle-case abc' ret=ABC + ble/test 'ble/string#tolower abc' ret=abc + ble/test 'ble/string#toupper abc' ret=ABC + ble/test 'ble/string#capitalize abc' ret=Abc + ble/test 'ble/string#toggle-case ABC' ret=abc + ble/test 'ble/string#tolower ABC' ret=abc + ble/test 'ble/string#toupper ABC' ret=ABC + ble/test 'ble/string#capitalize ABC' ret=Abc + ble/test 'ble/string#toggle-case aBc' ret=AbC + ble/test 'ble/string#tolower aBc' ret=abc + ble/test 'ble/string#toupper aBc' ret=ABC + ble/test 'ble/string#capitalize aBc' ret=Abc + ble/test 'ble/string#toggle-case +aBc' ret=+AbC + ble/test 'ble/string#tolower +aBc' ret=+abc + ble/test 'ble/string#toupper +aBc' ret=+ABC + ble/test 'ble/string#capitalize +aBc' ret=+Abc + ble/test 'ble/string#capitalize "hello world"' ret='Hello World' + LC_ALL=en_US.utf8 + ble/test 'ble/string#toggle-case +aBc' ret=+AbC + ble/test 'ble/string#tolower +aBc' ret=+abc + ble/test 'ble/string#toupper +aBc' ret=+ABC + ble/test 'ble/string#capitalize +aBc' ret=+Abc + ble/test 'ble/string#capitalize "hello world"' ret='Hello World' +) +( + ble/test 'ble/string#trim ' ret= + ble/test 'ble/string#ltrim' ret= + ble/test 'ble/string#rtrim' ret= + ble/test 'ble/string#trim ""' ret= + ble/test 'ble/string#ltrim ""' ret= + ble/test 'ble/string#rtrim ""' ret= + ble/test 'ble/string#trim "a"' ret=a + ble/test 'ble/string#ltrim "a"' ret=a + ble/test 'ble/string#rtrim "a"' ret=a + ble/test 'ble/string#trim " a "' ret=a + ble/test 'ble/string#ltrim " a "' ret='a ' + ble/test 'ble/string#rtrim " a "' ret=' a' + ble/test 'ble/string#trim " a b "' ret='a b' + ble/test 'ble/string#ltrim " a b "' ret='a b ' + ble/test 'ble/string#rtrim " a b "' ret=' a b' + ble/test 'ble/string#trim "abc"' ret='abc' + ble/test 'ble/string#ltrim "abc"' ret='abc' + ble/test 'ble/string#rtrim "abc"' ret='abc' + ble/test 'ble/string#trim " abc "' ret='abc' + ble/test 'ble/string#ltrim " abc "' ret='abc ' + ble/test 'ble/string#rtrim " abc "' ret=' abc' + for pad in $' \t\n \t\n' $'\t\t\t' $'\n\n\n'; do + ble/test 'ble/string#trim "'"$pad"'abc'"$pad"'"' ret='abc' + ble/test 'ble/string#ltrim "'"$pad"'abc'"$pad"'"' ret="abc${pad}" + ble/test 'ble/string#rtrim "'"$pad"'abc'"$pad"'"' ret="${pad}abc" + done +) +( + ble/test 'ble/string#escape-characters hello' ret=hello + ble/test 'ble/string#escape-characters hello ""' ret=hello + ble/test 'ble/string#escape-characters hello xyz' ret=hello + ble/test 'ble/string#escape-characters hello el' ret='h\e\l\lo' + ble/test 'ble/string#escape-characters hello hl XY' ret='\Xe\Y\Yo' + ble/test 'ble/string#escape-for-sed-regex "A\.[*?+|^\$(){}/"' \ + ret='A\\\.\[\*?+|\^\$(){}\/' + ble/test 'ble/string#escape-for-awk-regex "A\.[*?+|^\$(){}/"' \ + ret='A\\\.\[\*\?\+\|\^\$\(\)\{\}\/' + ble/test 'ble/string#escape-for-extended-regex "A\.[*?+|^\$(){}/"' \ + ret='A\\\.\[\*\?\+\|\^\$\(\)\{\}/' + ble/test 'ble/string#escape-for-bash-glob "A\*?[("' ret='A\\\*\?\[\(' + ble/test 'ble/string#escape-for-bash-single-quote "A'\''B"' ret="A'\''B" + ble/test 'ble/string#escape-for-bash-double-quote "hello \$ \` \\ ! world"' ret='hello \$ \` \\ "\!" world' + input=A$'\\\a\b\e\f\n\r\t\v'\'B output=A'\\\a\b\e\f\n\r\t\v\'\'B + ble/test 'ble/string#escape-for-bash-escape-string "$input"' ret="$output" + ble/test 'ble/string#escape-for-bash-specialchars "[hello] (world) {this,is} "' \ + ret='\[hello\]\ \(world\)\ {this,is}\ \' + ble/test 'ble/string#escape-for-bash-specialchars "[hello] (world) {this,is} " b' \ + ret='\[hello\]\ \(world\)\ \{this\,is\}\ \' + ble/test 'ble/string#escape-for-bash-specialchars "a=b:c:d" c' \ + ret='a\=b\:c\:d' + ble/test $'ble/string#escape-for-bash-specialchars "a\tb\tc"' \ + ret=$'a\\\tb\\\tc' +) +( + ble/test 'ble/string#quote-command' ret= + ble/test 'ble/string#quote-command echo' ret='echo' + ble/test 'ble/string#quote-command echo hello world' ret="echo 'hello' 'world'" + ble/test 'ble/string#quote-command echo "hello world"' ret="echo 'hello world'" + ble/test 'ble/string#quote-command echo "'\''test'\''"' ret="echo ''\''test'\'''" + ble/test 'ble/string#quote-command echo "" "" ""' ret="echo '' '' ''" + ble/test 'ble/string#quote-command echo a{1..4}' ret="echo 'a1' 'a2' 'a3' 'a4'" + ble/test 'ble/util/print-quoted-command' stdout= + ble/test 'ble/util/print-quoted-command echo' stdout='echo' + ble/test 'ble/util/print-quoted-command echo hello world' stdout="echo 'hello' 'world'" + ble/test 'ble/util/print-quoted-command echo "hello world"' stdout="echo 'hello world'" + ble/test 'ble/util/print-quoted-command echo "'\''test'\''"' stdout="echo ''\''test'\'''" + ble/test 'ble/util/print-quoted-command echo "" "" ""' stdout="echo '' '' ''" + ble/test 'ble/util/print-quoted-command echo a{1..4}' stdout="echo 'a1' 'a2' 'a3' 'a4'" +) +( + ble/test 'ble/string#quote-word' ret= + ble/test 'ble/string#quote-word echo' ret='echo' + ble/test 'ble/string#quote-word "hello world"' ret="'hello world'" + ble/test 'ble/string#quote-word "'\''test'\''"' ret="\'test\'" + ble/test 'ble/string#quote-word "a'\''b'\''c"' ret="a\'b\'c" +) +( + ble/test 'ble/string#create-unicode-progress-bar 0 24 3' ret=' ' + ble/test 'ble/string#create-unicode-progress-bar 1 24 3' ret='▏ ' + ble/test 'ble/string#create-unicode-progress-bar 2 24 3' ret='▎ ' + ble/test 'ble/string#create-unicode-progress-bar 3 24 3' ret='▍ ' + ble/test 'ble/string#create-unicode-progress-bar 4 24 3' ret='▌ ' + ble/test 'ble/string#create-unicode-progress-bar 5 24 3' ret='▋ ' + ble/test 'ble/string#create-unicode-progress-bar 6 24 3' ret='▊ ' + ble/test 'ble/string#create-unicode-progress-bar 7 24 3' ret='▉ ' + ble/test 'ble/string#create-unicode-progress-bar 8 24 3' ret='█ ' + ble/test 'ble/string#create-unicode-progress-bar 9 24 3' ret='█▏ ' + ble/test 'ble/string#create-unicode-progress-bar 15 24 3' ret='█▉ ' + ble/test 'ble/string#create-unicode-progress-bar 16 24 3' ret='██ ' + ble/test 'ble/string#create-unicode-progress-bar 17 24 3' ret='██▏' + ble/test 'ble/string#create-unicode-progress-bar 24 24 3' ret='███' + ble/test 'ble/string#create-unicode-progress-bar 0 24 4 unlimited' ret=$'█ ' + ble/test 'ble/string#create-unicode-progress-bar 1 24 4 unlimited' ret=$'\e[7m▏\e[27m▏ ' + ble/test 'ble/string#create-unicode-progress-bar 2 24 4 unlimited' ret=$'\e[7m▎\e[27m▎ ' + ble/test 'ble/string#create-unicode-progress-bar 3 24 4 unlimited' ret=$'\e[7m▍\e[27m▍ ' + ble/test 'ble/string#create-unicode-progress-bar 4 24 4 unlimited' ret=$'\e[7m▌\e[27m▌ ' + ble/test 'ble/string#create-unicode-progress-bar 5 24 4 unlimited' ret=$'\e[7m▋\e[27m▋ ' + ble/test 'ble/string#create-unicode-progress-bar 6 24 4 unlimited' ret=$'\e[7m▊\e[27m▊ ' + ble/test 'ble/string#create-unicode-progress-bar 7 24 4 unlimited' ret=$'\e[7m▉\e[27m▉ ' + ble/test 'ble/string#create-unicode-progress-bar 8 24 4 unlimited' ret=$' █ ' + ble/test 'ble/string#create-unicode-progress-bar 9 24 4 unlimited' ret=$' \e[7m▏\e[27m▏ ' + ble/test 'ble/string#create-unicode-progress-bar 15 24 4 unlimited' ret=$' \e[7m▉\e[27m▉ ' + ble/test 'ble/string#create-unicode-progress-bar 16 24 4 unlimited' ret=$' █ ' + ble/test 'ble/string#create-unicode-progress-bar 17 24 4 unlimited' ret=$' \e[7m▏\e[27m▏' + ble/test 'ble/string#create-unicode-progress-bar 24 24 4 unlimited' ret=$'█ ' +) +( + ble/test 'ble/util/strlen' ret=0 + ble/test 'ble/util/strlen ""' ret=0 + ble/test 'ble/util/strlen a' ret=1 + ble/test 'ble/util/strlen abc' ret=3 + ble/test 'ble/util/strlen α' ret=2 + ble/test 'ble/util/strlen αβγ' ret=6 + ble/test 'ble/util/strlen あ' ret=3 + ble/test 'ble/util/strlen あいう' ret=9 + ble/test 'ble/util/strlen aα' ret=3 + ble/test 'ble/util/strlen aαあ' ret=6 + LC_ALL=en_US.utf8 + ble/test 'ble/util/strlen a' ret=1 + ble/test 'ble/util/strlen α' ret=2 + ble/test 'ble/util/strlen あ' ret=3 +) +( + ble/test 'ble/util/substr' ret= + ble/test 'ble/util/substr ""' ret= + ble/test 'ble/util/substr a' ret= + ble/test 'ble/util/substr "" 0' ret= + ble/test 'ble/util/substr "" 1' ret= + ble/test 'ble/util/substr a 0' ret= + ble/test 'ble/util/substr a 1' ret= + ble/test 'ble/util/substr a 2' ret= + ble/test 'ble/util/substr "" 0 0' ret= + ble/test 'ble/util/substr "" 0 1' ret= + ble/test 'ble/util/substr "" 1 1' ret= + ble/test 'ble/util/substr a 0 0' ret= + ble/test 'ble/util/substr a 1 0' ret= + ble/test 'ble/util/substr a 0 1' ret=a + ble/test 'ble/util/substr a 1 1' ret= + ble/test 'ble/util/substr abc 1 0' ret= + ble/test 'ble/util/substr abc 1 1' ret=b + ble/test 'ble/util/substr abc 1 2' ret=bc + ble/test 'ble/util/substr abc 0 0' ret= + ble/test 'ble/util/substr abc 0 1' ret=a + ble/test 'ble/util/substr abc 0 3' ret=abc + ble/test 'ble/util/substr abc 0 4' ret=abc + ble/test 'ble/util/substr abc 3 0' ret= + ble/test 'ble/util/substr abc 3 1' ret= + ble/test 'ble/util/substr abc 4 0' ret= + ble/test 'ble/util/substr abc 4 1' ret= + ble/test 'ble/util/substr あいう 0 3' ret=あ + ble/test 'ble/util/substr あいう 3 6' ret=いう + ble/test 'ble/util/substr あいう 0 1' ret=$'\xe3' + ble/test 'ble/util/substr あいう 1 2' ret=$'\x81\x82' + ble/test 'ble/util/substr あいう 1 4' ret=$'\x81\x82\xe3\x81' + ble/test 'ble/util/substr あいう 7 5' ret=$'\x81\x86' +) +( + for cmd in ble/path#{remove,remove-glob}; do + ble/test code:'ret=; '$cmd' ret' ret= + ble/test code:'ret=; '$cmd' ret ""' ret= + ble/test code:'ret=a; '$cmd' ret ""' ret=a + ble/test code:'ret=a; '$cmd' ret a' ret= + ble/test code:'ret=a; '$cmd' ret b' ret=a + ble/test code:'ret=a:a:a; '$cmd' ret a' ret= + ble/test code:'ret=aa; '$cmd' ret a' ret=aa + ble/test code:'ret=xyz:abc; '$cmd' ret ""' ret=xyz:abc + ble/test code:'ret=xyz:abc; '$cmd' ret xyz' ret=abc + ble/test code:'ret=xyz:abc; '$cmd' ret abc' ret=xyz + ble/test code:'ret=xyz:abc:tuv; '$cmd' ret xyz' ret=abc:tuv + ble/test code:'ret=xyz:abc:tuv; '$cmd' ret abc' ret=xyz:tuv + ble/test code:'ret=xyz:abc:tuv; '$cmd' ret tuv' ret=xyz:abc + ble/test code:'ret=xyz:xyz; '$cmd' ret xyz' ret= + ble/test code:'ret=xyz:abc:xyz; '$cmd' ret xyz' ret=abc + ble/test code:'ret=xyz:abc:xyz; '$cmd' ret abc' ret=xyz:xyz + ble/test code:'ret=xyz:xyz:xyz; '$cmd' ret xyz' ret= + done + ble/test code:'ret=a; ble/path#remove ret \?' ret=a + ble/test code:'ret=aa; ble/path#remove ret \?' ret=aa + ble/test code:'ret=a:b; ble/path#remove ret \?' ret=a:b + ble/test code:'ret=a:b:c; ble/path#remove ret \?' ret=a:b:c + ble/test code:'ret=aa:b:cc; ble/path#remove ret \?' ret=aa:b:cc + ble/test code:'ret=stdX:stdY:usrZ; ble/path#remove ret "std[a-zX-Z]"' ret=stdX:stdY:usrZ + ble/test code:'ret=stdX:usrZ:stdY; ble/path#remove ret "std[a-zX-Z]"' ret=stdX:usrZ:stdY + ble/test code:'ret=usrZ:stdX:stdY; ble/path#remove ret "std[a-zX-Z]"' ret=usrZ:stdX:stdY + ble/test code:'ret=a; ble/path#remove-glob ret \?' ret= + ble/test code:'ret=aa; ble/path#remove-glob ret \?' ret=aa + ble/test code:'ret=a:b; ble/path#remove-glob ret \?' ret= + ble/test code:'ret=a:b:c; ble/path#remove-glob ret \?' ret= + ble/test code:'ret=aa:b:cc; ble/path#remove-glob ret \?' ret=aa:cc + ble/test code:'ret=stdX:stdY:usrZ; ble/path#remove-glob ret "std[a-zX-Z]"' ret=usrZ + ble/test code:'ret=stdX:usrZ:stdY; ble/path#remove-glob ret "std[a-zX-Z]"' ret=usrZ + ble/test code:'ret=usrZ:stdX:stdY; ble/path#remove-glob ret "std[a-zX-Z]"' ret=usrZ +) +( + ble/test code:'ret=; ble/path#append ret a' ret=a + ble/test code:'ret=a; ble/path#append ret a' ret=a:a + ble/test code:'ret=a; ble/path#append ret b' ret=a:b + ble/test code:'ret=a:b; ble/path#append ret cd' ret=a:b:cd + ble/test code:'ret=; ble/path#prepend ret a' ret=a + ble/test code:'ret=a; ble/path#prepend ret a' ret=a:a + ble/test code:'ret=a; ble/path#prepend ret b' ret=b:a + ble/test code:'ret=a:b; ble/path#prepend ret cd' ret=cd:a:b + ble/test code:'ret=a:b:c; ble/path#contains ret a' + ble/test code:'ret=a:b:c; ble/path#contains ret b' + ble/test code:'ret=a:b:c; ble/path#contains ret c' + ble/test code:'ret=a:b:c; ! ble/path#contains ret x' + ble/test code:'ret=a:b:c; ! ble/path#contains ret aa' + ble/test code:'ret=a:b:c; ! ble/path#contains ret bb' + ble/test code:'ret=a:b:c; ! ble/path#contains ret cc' + ble/test code:'ret=a:b:c; ! ble/path#contains ret "?"' + ble/test code:'ret=a:b:c; ! ble/path#contains ret "*"' + ble/test code:'ret=abc:def; ble/path#contains ret abc' + ble/test code:'ret=abc:def; ble/path#contains ret def' + ble/test code:'ret=abc:def; ! ble/path#contains ret a' + ble/test code:'ret=abc:def; ! ble/path#contains ret ab' + ble/test code:'ret=abc:def; ! ble/path#contains ret abcdef' + ble/test code:'ret=abc:def; ! ble/path#contains ret "???"' + ble/test code:'ret=xyz; ble/path#contains ret xyz' + ble/test code:'ret=xyz; ! ble/path#contains ret xyz:xyz' + ble/test code:'ret=xyz; ! ble/path#contains ret "???"' +) +( + builtin eval -- "${_ble_util_dict_declare//NAME/dict1}" + builtin eval -- "${_ble_util_gdict_declare//NAME/dict2}" + builtin eval -- "${_ble_util_adict_declare//NAME/dict3}" + index=1 + for Dict in ble/{,g,a}dict; do + dict=dict$((index++)) + ret=unchanged + ble/test '! '$Dict'#has '$dict' banana' ret=unchanged + ble/test '! '$Dict'#has '$dict' ""' ret=unchanged + $Dict#set $dict apple red + $Dict#set $dict banana yellow + $Dict#set $dict orange orange + $Dict#set $dict melon green + ret=unchanged + ble/test $Dict'#has '$dict' banana' ret=unchanged # 先頭 + ble/test $Dict'#has '$dict' apple' ret=unchanged # 中 + ble/test $Dict'#has '$dict' melon' ret=unchanged # 末尾 + ble/test '! '$Dict'#has '$dict' pear' ret=unchanged # 存在しない項目 + ble/test $Dict'#get '$dict' banana' ret=yellow # 先頭 + ble/test $Dict'#get '$dict' apple' ret=red # 中 + ble/test $Dict'#get '$dict' melon' ret=green # 末尾 + ble/test '! '$Dict'#get '$dict' pear' ret= # 存在しない項目 + ble/test '! '$Dict'#has '$dict' ""' # 末尾空要素で引けるか + ble/test '! '$Dict'#get '$dict' ""' # 末尾空要素で引けるか + $Dict#set $dict '' transparent + ble/test $Dict'#has '$dict' ""' # 末尾空要素で引けるか + ble/test $Dict'#get '$dict' ""' ret=transparent # 末尾空要素で引けるか + $Dict#set $dict 'alpha beta' pink + ble/test $Dict'#has '$dict' ""' # 中央空要素で引けるか + ble/test $Dict'#has '$dict' "alpha beta"' # 空白を含む見出し + ble/test $Dict'#get '$dict' ""' ret=transparent # 中央空要素で引けるか + ble/test $Dict'#get '$dict' "alpha beta"' ret=pink # 空白を含む見出し + $Dict#set $dict ' apple ' ' red ' + ble/test $Dict'#has '$dict' " apple "' # 空白で trim されないか + ble/test $Dict'#has '$dict' apple' # 既存項目を破壊していないか + ble/test $Dict'#get '$dict' " apple "' ret=' red ' # 空白で trim されないか + ble/test $Dict'#get '$dict' apple' ret=red # 既存項目を破壊していないか + ble/test '! '$Dict'#has '$dict' "${_ble_term_FS}"' # 単一FS + ble/test '! '$Dict'#has '$dict' ":"' # 単一コロン + ble/test '! '$Dict'#has '$dict' "apple${_ble_term_FS}banana"' # FSを含む見出し + ble/test '! '$Dict'#has '$dict' apple:banana' # コロンを含む見出し + ble/test '! '$Dict'#get '$dict' "${_ble_term_FS}"' ret= # 単一FS + ble/test '! '$Dict'#get '$dict' ":"' ret= # 単一コロン + ble/test '! '$Dict'#get '$dict' "apple${_ble_term_FS}banana"' ret= # FSを含む見出し + ble/test '! '$Dict'#get '$dict' apple:banana' ret= # コロンを含む見出し + $Dict#set $dict "${_ble_term_FS}" Empty + $Dict#set $dict ":" Colon + $Dict#set $dict "apple${_ble_term_FS}banana" RedYellow + $Dict#set $dict "apple:banana" __red_yellow__ + ble/test $Dict'#has '$dict' "${_ble_term_FS}"' # 単一FS + ble/test $Dict'#has '$dict' ":"' # 単一コロン + ble/test $Dict'#has '$dict' "apple${_ble_term_FS}banana"' # FSを含む見出し + ble/test $Dict'#has '$dict' apple:banana' # コロンを含む見出し + ble/test $Dict'#get '$dict' "${_ble_term_FS}"' ret=Empty # 単一FS + ble/test $Dict'#get '$dict' ":"' ret=Colon # 単一コロン + ble/test $Dict'#get '$dict' "apple${_ble_term_FS}banana"' ret=RedYellow # FSを含む見出し + ble/test $Dict'#get '$dict' apple:banana' ret=__red_yellow__ # コロンを含む見出し + $Dict#unset $dict banana + $Dict#unset $dict apple + $Dict#unset $dict melon + ble/test '! '$Dict'#has '$dict' banana' + ble/test '! '$Dict'#has '$dict' apple' + ble/test '! '$Dict'#has '$dict' melon' + $Dict#unset $dict "" + $Dict#unset $dict "alpha beta" + $Dict#unset $dict " apple " + ble/test '! '$Dict'#has '$dict' ""' # 中央空要素で引けるか + ble/test '! '$Dict'#has '$dict' "alpha beta"' # 空白を含む見出し + ble/test '! '$Dict'#has '$dict' " apple "' # 空白で trim されないか + $Dict#unset $dict "${_ble_term_FS}" + $Dict#unset $dict ":" + $Dict#unset $dict "apple${_ble_term_FS}banana" + $Dict#unset $dict apple:banana + ble/test '! '$Dict'#has '$dict' "${_ble_term_FS}"' # 単一FS + ble/test '! '$Dict'#has '$dict' ":"' # 単一コロン + ble/test '! '$Dict'#has '$dict' "apple${_ble_term_FS}banana"' # FSを含む見出し + ble/test '! '$Dict'#has '$dict' apple:banana' # コロンを含む見出し + done +) +( + blehook/declare FOO + ble/test 'blehook --color=never FOO' stdout='blehook FOO=' + ble/test 'blehook/has-hook FOO' exit=1 + blehook FOO+='echo hello' + ble/test 'blehook --color=never FOO' \ + stdout="blehook FOO+='echo hello'" + ble/test 'blehook/has-hook FOO' + blehook FOO+='echo world' + ble/test 'blehook --color=never FOO' \ + stdout="blehook FOO+='echo hello'" \ + stdout="blehook FOO+='echo world'" + ble/test 'blehook/has-hook FOO' + blehook FOO-='echo hello' + ble/test 'blehook --color=never FOO' \ + stdout="blehook FOO+='echo world'" + ble/test 'blehook/has-hook FOO' + blehook FOO-='echo world' + ble/test 'blehook --color=never FOO' \ + stdout='blehook FOO=' + ble/test 'blehook/has-hook FOO' exit=1 + blehook FOO+='echo hello' + blehook FOO+='echo world' + blehook FOO='echo empty' + ble/test 'blehook --color=never FOO' \ + stdout="blehook FOO+='echo empty'" + ble/test 'blehook/has-hook FOO' + blehook FOO+='echo hello' + blehook FOO+='echo world' + blehook FOO= + ble/test 'blehook --color=never FOO' \ + stdout='blehook FOO=' + ble/test 'blehook/has-hook FOO' exit=1 + blehook FOO+='echo hello' + blehook FOO+='echo world' + blehook FOO!='echo hello' + ble/test 'blehook --color=never FOO' \ + stdout="blehook FOO+='echo hello'${_ble_term_nl}blehook FOO+='echo world'" + blehook FOO-+='echo hello' + ble/test 'blehook --color=never FOO' \ + stdout="blehook FOO+='echo world'${_ble_term_nl}blehook FOO+='echo hello'" + blehook FOO+-='echo hello' + ble/test 'blehook --color=never FOO' \ + stdout="blehook FOO+='echo hello'${_ble_term_nl}blehook FOO+='echo world'" + blehook FOO= + blehook FOO+='echo hello' + blehook FOO+='echo empty' + blehook FOO+='echo world' + ble/test 'blehook/invoke FOO' \ + stdout=hello \ + stdout=empty \ + stdout=world + blehook FOO='echo A$?' + blehook FOO+='echo B$?' + blehook FOO+='echo C$?' + ble/test 'ble/util/setexit 123; blehook/invoke FOO' \ + stdout=A123 \ + stdout=B123 \ + stdout=C123 + blehook/declare bar_load + blehook bar_load='echo bar_load' + ble/test 'blehook/eval-after-load bar "echo yes"' stdout= + ble/test 'blehook/invoke bar_load' \ + stdout=bar_load \ + stdout=yes + ble/test 'blehook/eval-after-load bar "echo next"' stdout=next + function func { ret="[$1]"; } + blehook FOO=func + ble/test 'blehook/invoke FOO xQAHbcpMFyFyQ' ret='[xQAHbcpMFyFyQ]' +) +( + ble/builtin/trap 'echo TRAPEXIT1' 0 + ble/test 'ble/builtin/trap/invoke 0' stdout=TRAPEXIT1 + ble/test 'ble/builtin/trap/invoke EXIT' stdout=TRAPEXIT1 + ble/builtin/trap 0 + ble/test 'ble/builtin/trap/invoke 0' stdout= + ble/builtin/trap 'echo TRAPEXIT2' EXIT + ble/test 'ble/builtin/trap/invoke 0' stdout=TRAPEXIT2 + ble/test 'ble/builtin/trap/invoke EXIT' stdout=TRAPEXIT2 + ble/builtin/trap EXIT + ble/test 'ble/builtin/trap/invoke 0' stdout= + ble/builtin/trap 'echo TRAPHUP1' 1 + ble/test 'ble/builtin/trap/invoke 1' stdout=TRAPHUP1 + ble/test 'ble/builtin/trap/invoke HUP' stdout=TRAPHUP1 + ble/test 'ble/builtin/trap/invoke SIGHUP' stdout=TRAPHUP1 + ble/builtin/trap 1 + ble/test 'ble/builtin/trap/invoke 1' stdout= + ble/builtin/trap 'echo TRAPHUP2' HUP + ble/test 'ble/builtin/trap/invoke 1' stdout=TRAPHUP2 + ble/test 'ble/builtin/trap/invoke HUP' stdout=TRAPHUP2 + ble/test 'ble/builtin/trap/invoke SIGHUP' stdout=TRAPHUP2 + ble/builtin/trap HUP + ble/test 'ble/builtin/trap/invoke HUP' stdout= + ble/builtin/trap 'echo TRAPHUP3' SIGHUP + ble/test 'ble/builtin/trap/invoke 1' stdout=TRAPHUP3 + ble/test 'ble/builtin/trap/invoke HUP' stdout=TRAPHUP3 + ble/test 'ble/builtin/trap/invoke SIGHUP' stdout=TRAPHUP3 + ble/builtin/trap SIGHUP + ble/test 'ble/builtin/trap/invoke HUP' stdout= + ble/builtin/trap/.register 9999 CUSTOM + ble/builtin/trap/reserve CUSTOM + ble/builtin/trap 'echo custom trap' CUSTOM + ble/test 'ble/builtin/trap/invoke CUSTOM' stdout='custom trap' + function ble/builtin/trap:CUSTOM { echo "__set_handler__ ($2) $1"; } + ble/test 'ble/builtin/trap "echo hello world" CUSTOM' \ + stdout='__set_handler__ (CUSTOM) echo hello world' + ble/test 'ble/builtin/trap/invoke CUSTOM' stdout='hello world' +) +( + ble/test 'ble/util/readfile ret <(echo hello)' \ + ret=hello$'\n' + ble/test 'ble/util/readfile ret <(echo hello; echo world)' \ + ret=hello$'\n'world$'\n' + ble/test 'ble/util/readfile ret <(echo hello; echo -n world)' \ + ret=hello$'\n'world + ble/test 'ble/util/readfile ret <(:)' ret= + function status { echo "${#a[*]}:(""${a[*]}"")"; } + ble/test "ble/util/mapfile a < <(echo hello); status" stdout='1:(hello)' + ble/test "ble/util/mapfile a < <(echo -n hello); status" stdout='1:(hello)' + ble/test "ble/util/mapfile a < <(echo hello; echo world); status" stdout='2:(hello world)' + ble/test "ble/util/mapfile a < <(echo hello; echo -n world); status" stdout='2:(hello world)' + ble/test "ble/util/mapfile a < <(printf '%s\n' h1 h2 h3 h4); status" stdout='4:(h1 h2 h3 h4)' + ble/test "ble/util/mapfile a < <(:); status" stdout='0:()' + ble/test "ble/util/mapfile a < <(echo); status" stdout='1:()' + ble/test "ble/util/mapfile a < <(echo;echo); status" stdout='2:( )' + ble/test "ble/util/mapfile a < <(echo a;echo;echo b); status" stdout='3:(a b)' + nl=$'\n' + ble/test 'ble/util/assign ret ""' ret= + ble/test 'ble/util/assign ret ":"' ret= + ble/test 'ble/util/assign ret "echo"' ret= + ble/test 'ble/util/assign ret "echo hello"' ret=hello + ble/test 'ble/util/assign ret "seq 5"' ret="1${nl}2${nl}3${nl}4${nl}5" + function f1 { echo stdout; echo stderr >&2; } + function nested-assign { + ble/util/assign err 'ble/util/assign out f1 2>&1' + echo "out=$out err=$err" + } + ble/test nested-assign stdout='out=stdout err=stderr' + ble/test 'ble/util/assign-array a :; status' stdout='0:()' + ble/test 'ble/util/assign-array a echo; status' stdout='1:()' + ble/test 'ble/util/assign-array a "echo hello"; status' stdout='1:(hello)' + ble/test 'ble/util/assign-array a "seq 5"; status' stdout='5:(1 2 3 4 5)' + ble/test 'ble/util/assign-array a "echo; echo; echo"; status' stdout='3:( )' + ble/test 'ble/util/assign-array a "echo 1; echo; echo 2"; status' stdout='3:(1 2)' +) +( + x=($'\177' $'\1' $'\2' $'\32' ' ' $'\a' $'\b' $'\t' $'\n' $'\v' $'\f' $'\r' a \" \' \$ \! \` \~) + x[0]=$'\177' + x[1]=$'\1' + ble/test "ble/util/writearray -d '' x | sha256sum | awk '{print \$1}'" stdout=$(printf '%s\0' "${x[@]}" | sha256sum | awk '{print $1}') +) +( + var=variable + alias ali=fun + function fun { echo yes "$*"; } + function ble/fun { echo yes "$*"; return 99; } + function ble/fun:type { echo yes "$*"; return 100; } + function ble/fun#meth { echo yes "$*"; return 101; } + ble/test 'ble/is-function' exit=1 + ble/test 'ble/is-function ""' exit=1 + ble/test 'ble/is-function fun' + ble/test 'ble/is-function ble/fun' + ble/test 'ble/is-function ble/fun:type' + ble/test 'ble/is-function ble/fun#meth' + ble/test 'ble/is-function fun1' exit=1 + ble/test 'ble/is-function ble/fun1' exit=1 + ble/test 'ble/is-function ble/fun1:type' exit=1 + ble/test 'ble/is-function ble/fun1#meth' exit=1 + ble/test 'ble/is-function ali' exit=1 + ble/test 'ble/is-function var' exit=1 + ble/test 'ble/is-function compgen' exit=1 + ble/test 'ble/is-function declare' exit=1 + ble/test 'ble/is-function mkfifo' exit=1 + function compgen { :; } + function declare { :; } + function mkfifo { :; } + ble/test 'ble/is-function compgen' + ble/test 'ble/is-function declare' + ble/test 'ble/is-function mkfifo' + ble/test 'ble/function#try fun 1 2 3' stdout='yes 1 2 3' + ble/test 'ble/function#try ble/fun 1 2 3' stdout='yes 1 2 3' exit=99 + ble/test 'ble/function#try ble/fun:type 1 2 3' stdout='yes 1 2 3' exit=100 + ble/test 'ble/function#try ble/fun#meth 1 2 3' stdout='yes 1 2 3' exit=101 + ble/test 'ble/function#try fun1 1 2 3' stdout= exit=127 + ble/test 'ble/function#try ble/fun1 1 2 3' stdout= exit=127 + ble/test 'ble/function#try ble/fun1:type 1 2 3' stdout= exit=127 + ble/test 'ble/function#try ble/fun1#meth 1 2 3' stdout= exit=127 +) +( + function f1 { echo original $*; } + ble/test f1 stdout='original' + ble/function#advice before f1 'echo pre' + ble/test f1 stdout={pre,original} + ble/function#advice after f1 'echo post' + ble/test f1 stdout={pre,original,post} + ble/function#advice before f1 'echo A' + ble/test f1 stdout={A,original,post} + ble/function#advice after f1 'echo B' + ble/test f1 stdout={A,original,B} + ble/function#advice around f1 'echo [; ble/function#advice/do; echo ]' + ble/test f1 stdout={A,[,original,],B} + ble/function#advice around f1 ' + ADVICE_WORDS[1]=quick + echo [; ble/function#advice/do; echo ] + ADVICE_EXIT=99' + ble/test f1 stdout={A,[,'original quick',],B} exit=99 + ble/function#advice remove f1 + ble/test f1 stdout='original' exit=0 + ble/test 'f1 1' stdout='original 1' exit=0 +) +( + ble/test 'echo 1 2 3' stdout='1 2 3' + ble/test 'ble/is-function echo' exit=1 + ble/function#push echo 'builtin echo "[$*]"' + ble/test 'ble/is-function echo' + ble/test 'echo 1 2 3' stdout='[1 2 3]' + ble/function#push echo 'builtin echo "($*)"' + ble/test 'echo 1 2 3' stdout='(1 2 3)' + ble/function#push echo 'builtin echo A; ble/function#push/call-top "$@"; builtin echo Z' + ble/test 'echo 1 2 3' stdout={A,'(1 2 3)',Z} + ble/function#push echo 'builtin echo [; ble/function#push/call-top "$@"; builtin echo ]' + ble/test 'echo 1 2 3' stdout={[,A,'(1 2 3)',Z,]} + ble/test 'ble/function#pop echo' + ble/test 'echo 1 2 3' stdout={A,'(1 2 3)',Z} + ble/function#pop echo + ble/test 'echo 1 2 3' stdout='(1 2 3)' + ble/function#pop echo + ble/test 'echo 1 2 3' stdout='[1 2 3]' + ble/test 'ble/is-function echo' + ble/test 'ble/function#pop echo' + ble/test 'ble/is-function echo' exit=1 + ble/test 'echo 1 2 3' stdout='1 2 3' + ble/test 'ble/function#pop echo' exit=1 + ble/test 'echo 1 2 3' stdout='1 2 3' +) +( + ble/test 'ble/util/set ret hello' ret='hello' + ble/test 'ble/util/set ret "hello world"' ret='hello world' + ble/test 'ble/util/set ret ""' ret='' + ble/test 'ble/util/set ret " "' ret=' ' + ble/test 'ble/util/set ret " a"' ret=' a' + ble/test 'ble/util/set ret "a "' ret='a ' + ble/test 'ble/util/set ret $'\''\n'\''' ret=$'\n' + ble/test 'ble/util/set ret A$'\''\n'\''' ret=A$'\n' + ble/test 'ble/util/set ret A$'\''\n'\''B' ret=A$'\n'B +) +( + ble/test 'ble/util/sprintf ret "[%s]" 1 2 3' ret='[1][2][3]' + ble/test 'ble/util/sprintf ret "[%5s]" 1' ret='[ 1]' + ble/test 'ble/util/sprintf ret "[%.2s]" 12345' ret='[12]' + ble/test 'ble/util/sprintf ret "[%d,%d]" 1 3' ret='[1,3]' + ble/test 'ble/util/sprintf ret "[%x]" 27' ret='[1b]' + ble/test 'ble/util/sprintf ret "[%#.2g]" 27' ret='[27.]' + ble/test 'ble/util/sprintf ret "[%#.2f]" 27' ret='[27.00]' +) +( + shopt -s expand_aliases + alias aaa=fun + function fun { :; } + function ble/fun { :; } + function ble/fun:type { :; } + function ble/fun#meth { :; } + ble/test 'ble/util/type ret aaa' ret=alias + ble/test 'ble/util/type ret fun' ret=function + ble/test 'ble/util/type ret alias' ret=builtin + ble/test 'ble/util/type ret mkfifo' ret=file + ble/test 'ble/util/type ret for' ret=keyword + ble/test 'ble/util/type ret ble/fun' ret=function + ble/test 'ble/util/type ret ble/fun:type' ret=function + ble/test 'ble/util/type ret ble/fun#meth' ret=function + ble/test 'ble/util/type ret fun1' ret= + ble/test 'ble/util/type ret ble/fun1' ret= + ble/test 'ble/util/type ret ble/fun1:type' ret= + ble/test 'ble/util/type ret ble/fun1#meth' ret= +) +( + shopt -s expand_aliases + alias aaa1='aaa2 world' + ble/test 'ble/alias#expand aaa1' ret='aaa2 world' + alias aaa2='aaa3 hello' + ble/test 'ble/alias#expand aaa2' ret='aaa3 hello' + ble/test 'ble/alias#expand aaa1' ret='aaa2 world' + alias aaa3='aaa4' + ble/test 'ble/alias#expand aaa3' ret='aaa4' + ble/test 'ble/alias#expand aaa2' ret='aaa3 hello' + ble/test 'ble/alias#expand aaa1' ret='aaa2 world' + alias aaa4='echo' + ble/test 'ble/alias#expand aaa4' ret='echo' + ble/test 'ble/alias#expand aaa3' ret='aaa4' + ble/test 'ble/alias#expand aaa2' ret='aaa3 hello' + ble/test 'ble/alias#expand aaa1' ret='aaa2 world' +) +if ((_ble_bash>=40000)); then + ( + ble/test 'echo 1 | { sleep 0.01; ble/util/is-stdin-ready; }' + ble/test 'sleep 0.01 | ble/util/is-stdin-ready' exit=1 + ble/test 'ble/util/is-stdin-ready <<< a' + ble/test 'ble/util/is-stdin-ready <<< ""' + ble/test ': | { sleep 0.01; ble/util/is-stdin-ready; }' + ble/test 'ble/util/is-stdin-ready < /dev/null' + ) +fi +ble/test ble/util/is-running-in-subshell exit=1 +( ble/test ble/util/is-running-in-subshell ) +( + ble/test/chdir + function getpid { + sh -c 'echo -n $PPID' >| a.txt + ble/util/readfile ppid a.txt + } + dummy=modification_to_environment.1 + ble/util/getpid + ble/test '[[ $BASHPID != $$ ]]' + getpid + ble/test code:'ret=$BASHPID' ret="$ppid" + pid1=$BASHPID + ( + dummy=modification_to_environment.2 + ble/util/getpid + ble/test '[[ $BASHPID != $$ && $BASHPID != $pid1 ]]' + getpid + ble/test '[[ $BASHPID == $ppid ]]' + ) + ble/test/rmdir +) +( + ble/test 'ble/fd#is-open 1' + ble/test 'ble/fd#is-open 2' + exec 9>&- + ble/test 'ble/fd#is-open 9' exit=1 + exec 9>/dev/null + ble/test 'ble/fd#is-open 9' + exec 9>&- + ble/test 'ble/fd#is-open 9' exit=1 +) +( + ble/test/chdir + ble/fd#alloc fd '> a.txt' + echo hello >&$fd + echo world >&$fd + if ((_ble_bash/100!=301)); then + ble/test 'ble/fd#close fd; echo test >&$fd' exit=1 + ble/test 'cat a.txt' stdout={hello,world} + fi + ble/test/rmdir +) +( + xv1='' + xv2a='a' xv2b='ab' + xv3a=' ' xv3b='a b' + xv4a=$'\n' xv4b=$'a\nb' + xv5a=$'\r' xv5b=$'a\rb' + xv6a=$'\x01' xv6b=a$'\x01'b + xv7a=$'\x02' xv7b=a$'\x02'b + xv8a=$'\x7F' xv8b=a$'\x7F'b + eval -- "$( + for name in v1 v{2..8}{a,b}; do + eval "$name=\$x$name" + done + ble/util/declare-print-definitions vn v1 v{2..8}{a,b} 2>/dev/null)" + ble/test '[[ ! ${vn+set} ]]' + for name in v1 v{2..8}{a,b}; do + ble/test "declare -p $name x$name | cat -A >&2; [[ \$$name == \$x$name ]]" + done + function status { eval 'ret="${#'$1'[*]}:(""${'$1'[*]}"")"'; } + xa0=() sa0='0:()' + xa1=('') sa1='1:()' + for k in {2..8}; do + eval "xa$k=(); xa$k[0]=\"\$xv${k}a\"; xa$k[1]=\"\$xv${k}b\"" + eval "sa$k=\"2:(\$xv${k}a \$xv${k}b)\"" + done + eval -- "$( + for name in a0 a1 a{2..8}; do + eval "$name=(\"\${x$name[@]}\")" + done + ble/util/declare-print-definitions a0 a1 a{2..8} 2>/dev/null)" + for name in a0 a1 a{2..8}; do + stdout_var=s$name + ble/test "status $name" ret="${!stdout_var}" + done +) +( + function status { builtin eval 'echo "${#'$1'[*]}:(""${'$1'[*]}"")"'; } + v1=123 v2=(1 2 3) v3=bbb v4=ccc + function f2 { + local v3=x v4=y + builtin eval -- "$(ble/util/print-global-definitions v{0..4})" + ble/test '[[ ! ${v0+set} ]]' + ble/test 'status v1' stdout='1:(123)' + ble/test 'status v2' stdout='3:(1 2 3)' + ble/test 'status v3' stdout='1:(bbb)' + ble/test 'status v4' stdout='1:(ccc)' + } + function f1 { + local v0=1 v1=2 v2=3 v4=5 + f2 + ble/test 'status v1' stdout='1:(2)' + ble/test 'status v2' stdout='1:(3)' + } + f1 + value="hello 'world'" + ble/test 'ble/util/print-global-definitions value' stdout="declare value='hello '\''world'\'''" +) +( + ble/test 'ble/util/has-glob-pattern "a*"' + ble/test 'ble/util/has-glob-pattern "a*b"' + ble/test 'ble/util/has-glob-pattern "?"' + ble/test 'ble/util/has-glob-pattern "a?"' + ble/test 'ble/util/has-glob-pattern "a?b"' + ble/test 'ble/util/has-glob-pattern "a?b*c"' + ble/test 'ble/util/has-glob-pattern "a[a-c]d"' + ble/test 'ble/util/has-glob-pattern "a[!a-c]d"' + ble/test 'ble/util/has-glob-pattern "*.txt"' + ble/test 'ble/util/has-glob-pattern "*.*"' + ble/test 'ble/util/has-glob-pattern ""' exit=1 + ble/test 'ble/util/has-glob-pattern "a"' exit=1 + ble/test 'ble/util/has-glob-pattern "abc"' exit=1 + ble/test 'ble/util/has-glob-pattern "/"' exit=1 + ble/test 'ble/util/has-glob-pattern "a/c"' exit=1 + ble/test 'ble/util/has-glob-pattern "a:b"' exit=1 + ble/test 'ble/util/has-glob-pattern "a=b"' exit=1 + ble/test 'ble/util/has-glob-pattern "\[xyz\]"' exit=1 +) +ble/util/msleep/.calibrate-loop &>/dev/null +ble/util/msleep/.calibrate-loop &>/dev/null +ble/util/msleep/.calibrate-loop &>/dev/null +( + ble/test 'ble-measure -q "ble/util/msleep 100"; echo "$ret usec" >&2; ((msec=ret/1000,90<=msec&&msec<=110))' + ble/test 'ble-measure -q "ble/util/sleep 0.1"; echo "$ret usec" >&2; ((msec=ret/1000,90<=msec&&msec<=110))' +) +( + time=0 + ble/function#push ble/util/msleep '((time+=$1));echo $time' + ble/test "ble/util/conditional-sync 'sleep 10' '((time<1000))' 100" \ + stdout={1..10}00 + ble/test "ble/util/conditional-sync 'sleep 10' '((time<1000))' 100 progressive-weight" \ + stdout={1,3,7,15,31,63,{1..10}27} + ble/function#pop ble/util/msleep +) +( + ble/test ":| ble/util/cat | cat -A" stdout= + ble/test "printf a | ble/util/cat | cat -A" stdout=a + ble/test "printf '\0' | ble/util/cat | cat -A" stdout=^@ + ble/test "printf 'hello\nworld\n'| ble/util/cat | cat -A" stdout={hello\$,world\$} + ble/test "printf 'hello\nworld'| ble/util/cat | cat -A" stdout={hello\$,world} + ble/test "printf 'hello\0world\0'| ble/util/cat | cat -A" stdout=hello^@world^@ + ble/test "printf 'hello\0world'| ble/util/cat | cat -A" stdout=hello^@world +) +( + bleopt_pager=xxx PAGER=yyy + ble/test 'ble/util/get-pager ret' ret=xxx + bleopt_pager=xxx PAGER= + ble/test 'ble/util/get-pager ret' ret=xxx + bleopt_pager= PAGER=yyy + ble/test 'ble/util/get-pager ret' ret=yyy + bleopt_pager= PAGER= + ble/test 'ble/util/get-pager ret' ret=less +) +( + bleopt_pager=cat + ble/test 'ble/util/pager <<< hello' stdout=hello +) +( + ble/util/buffer.clear + ble/test 'ble/util/buffer.flush' stdout= + ble/util/buffer hello + ble/util/buffer world + ble/test 'ble/util/buffer.flush' stdout=helloworld + ble/test 'ble/util/buffer.flush' stdout= + ble/util/buffer.print hello + ble/util/buffer.print world + ble/test 'ble/util/buffer.flush' stdout={hello,world} + ble/test 'ble/util/buffer.flush' stdout= + ble/util/buffer.print hello + ble/util/buffer.print world + ble/util/buffer.clear + ble/test 'ble/util/buffer.flush' stdout= +) +( + ubeg=3 uend=10 uend0=5 + beg=0 end=5 end0=3 + ble/dirty-range#load --prefix=u + ble/test 'echo "$beg:$end:$end0"' stdout=3:10:5 + ubeg=3 uend=10 uend0=5 + ble/dirty-range#clear --prefix=u + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=-1:-1:-1 + ble/dirty-range#update --prefix=u 0 5 2 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=0:5:2 + ble/dirty-range#update --prefix=u 10 10 12 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=0:10:9 + ble/dirty-range#clear --prefix=u + ble/dirty-range#update --prefix=u 2 2 3 + ble/dirty-range#update --prefix=u 2 2 3 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=2:2:4 + ble/dirty-range#clear --prefix=u + ble/dirty-range#update --prefix=u 1 5 3 + ble/dirty-range#update --prefix=u 7 11 9 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=1:11:7 + ble/dirty-range#clear --prefix=u + ble/dirty-range#update --prefix=u 1 7 5 + ble/dirty-range#update --prefix=u 4 15 11 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=1:15:9 + ble/dirty-range#clear --prefix=u + ble/dirty-range#update --prefix=u 1 7 5 + ble/dirty-range#update --prefix=u 3 4 5 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=1:6:5 + ble/dirty-range#clear --prefix=u + ble/dirty-range#update --prefix=u 4 8 6 + ble/dirty-range#update --prefix=u 2 8 10 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=2:8:8 + ble/dirty-range#clear --prefix=u + ble/dirty-range#update --prefix=u 6 12 8 + ble/dirty-range#update --prefix=u 3 7 8 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=3:11:8 + ble/dirty-range#clear --prefix=u + ble/dirty-range#update --prefix=u 10 13 11 + ble/dirty-range#update --prefix=u 3 7 8 + ble/test 'echo "$ubeg:$uend:$uend0"' stdout=3:12:11 +) +( + ble/test $'ble/util/s2c "\n"' ret=10 + ble/test 'ble/util/c2s 10' ret=$'\n' + ble/test $'ble/util/s2c "\x1b"' ret=27 + ble/test 'ble/util/c2s 27' ret=$'\x1b' + ble/test $'ble/util/s2c "\x1F"' ret=31 + ble/test 'ble/util/c2s 31' ret=$'\x1F' + c=$'\x7F' ble/test 'ble/util/s2c $c' ret=127 # bash-3.0 bug WA + ble/test 'ble/util/c2s 127' ret=$'\x7F' + ble/test 'ble/util/s2c " "' ret=32 + ble/test 'ble/util/c2s 32' ret=' ' + ble/test 'ble/util/s2c a' ret=97 + ble/test 'ble/util/c2s 97' ret=a + ble/test 'ble/util/s2c μ' ret=956 + ble/test 'ble/util/c2s 956' ret=μ + ble/test 'ble/util/s2c あ' ret=12354 + ble/test 'ble/util/c2s 12354' ret=あ + ble/test 'ble/util/s2c' ret=0 + ble/test 'ble/util/s2c abc' ret=97 + ble/test 'ble/util/s2c μν' ret=956 + ble/test 'ble/util/s2c あいう' ret=12354 + ble/test 'ble/util/c2s.cached 32' ret=' ' + ble/test 'ble/util/c2s.cached 97' ret=a + ble/test 'ble/util/c2s.cached 956' ret=μ + ble/test 'ble/util/c2s.cached 12354' ret=あ + LANG=C + ble/test 'ble/util/c2s 97' ret=a + ble/test 'ble/util/c2s 956; [[ $ret != μ ]]' + ble/test 'ble/util/c2s 12354; [[ $ret != あ ]]' +) +( + ble/test 'ble/util/c2bc 97' ret=1 + ble/test 'ble/util/c2bc 956' ret=2 + ble/test 'ble/util/c2bc 12354' ret=3 + ble/test 'ble/util/c2bc 0' ret=1 + ble/test 'ble/util/c2bc 127' ret=1 + ble/test 'ble/util/c2bc 128' ret=2 + ble/test 'ble/util/c2bc 2047' ret=2 + ble/test 'ble/util/c2bc 2048' ret=3 + ble/test 'ble/util/c2bc 65535' ret=3 + ble/test 'ble/util/c2bc 65536' ret=4 +) +( + ble/test 'ble/util/s2chars AaBbCc; ret="${ret[*]}"' ret='65 97 66 98 67 99' + ble/test 'ble/util/chars2s 65 97 66 98 67 99' ret=AaBbCc + ble/test 'ble/util/s2chars あいう; ret="${ret[*]}"' ret='12354 12356 12358' + ble/test 'ble/util/chars2s 12354 12356 12358' ret=あいう + ble/test 'ble/util/s2chars; ret="${ret[*]}"' ret= + ble/test 'ble/util/s2chars 0; ret="${ret[*]}"' ret=48 + ble/test 'ble/util/s2chars a; ret="${ret[*]}"' ret=97 + ble/test 'ble/util/s2chars μ; ret="${ret[*]}"' ret=956 + ble/test 'ble/util/s2chars あ; ret="${ret[*]}"' ret=12354 + ble/test 'ble/util/chars2s' ret= + ble/test 'ble/util/chars2s 48' ret=0 + ble/test 'ble/util/chars2s 97' ret=a + ble/test 'ble/util/chars2s 956' ret=μ + ble/test 'ble/util/chars2s 12354' ret=あ +) +( + check1() { + local char=$1 keyseq=$2 + ble/test "ble/util/c2keyseq $char" ret="$keyseq" + ble/test "ble/util/chars2keyseq $char" ret="$keyseq" + ble/test "ble/util/keyseq2chars '$keyseq'; ret=\"\${ret[*]}\"" ret="${3:-$char}" + ble/test "ble/util/chars2keyseq 98 $char 99" ret="b${keyseq}c" + ble/test "ble/util/keyseq2chars 'b${keyseq}c'; ret=\"\${ret[*]}\"" ret="98 ${3:-$char} 99" + } + check1 '7' '\a' + check1 '8' '\b' + check1 '9' '\t' + check1 '10' '\n' + check1 '11' '\v' + check1 '12' '\f' + check1 '13' '\r' + check1 '27' '\e' + check1 '127' '\d' + check1 '92' '\\' + check1 '28' '\x1c' # workaround bashbug \C-\, \C-\\ + check1 '156' '\x9c' # workaround bashbug \C-\, \C-\\ + check1 '0' '\C-@' + check1 '1' '\C-a' + check1 '26' '\C-z' + check1 '29' '\C-]' + check1 '30' '\C-^' + check1 '31' '\C-_' + check1 '128' '\M-\C-@' '27 0' + check1 '64' '@' + check1 '97' 'a' + check1 '956' 'μ' + check1 '12354' 'あ' + ble/test ble/util/c2keyseq ret='\C-@' + ble/test ble/util/chars2keyseq ret= + ble/test ble/util/keyseq2chars ret= +) +( + function pack { ret="${bytes[*]}"; } + ble/test 'ble/encoding:UTF-8/b2c ' ret=0 + ble/test 'ble/encoding:UTF-8/b2c 97' ret=97 + ble/test 'ble/encoding:UTF-8/b2c 97 98 99 99' ret=97 + ble/test 'ble/encoding:UTF-8/b2c 206 188 99 99' ret=956 + ble/test 'ble/encoding:UTF-8/b2c 227 129 130 99' ret=12354 + ble/test 'ble/encoding:UTF-8/c2b 97 ; pack' ret=97 + ble/test 'ble/encoding:UTF-8/c2b 956 ; pack' ret='206 188' + ble/test 'ble/encoding:UTF-8/c2b 12354; pack' ret='227 129 130' + ble/test 'ble/encoding:UTF-8/c2b ; pack' ret=0 + ble/test 'ble/encoding:UTF-8/c2b 0 ; pack' ret=0 + ble/test 'ble/encoding:UTF-8/c2b 127 ; pack' ret=127 + ble/test 'ble/encoding:UTF-8/c2b 128 ; pack' ret='194 128' + ble/test 'ble/encoding:UTF-8/c2b 2047; pack' ret='223 191' + ble/test 'ble/encoding:UTF-8/c2b 2048; pack' ret='224 160 128' +) +( + function pack { ret="${bytes[*]}"; } + ble/test 'ble/encoding:C/b2c ' ret=0 + ble/test 'ble/encoding:C/b2c 97' ret=97 + ble/test 'ble/encoding:C/b2c 97 98 99 99' ret=97 + ble/test 'ble/encoding:C/b2c 206 188 99 99' ret=206 + ble/test 'ble/encoding:C/b2c 227 129 130 99' ret=227 + ble/test 'ble/encoding:C/b2c 97 ' ret=97 + ble/test 'ble/encoding:C/b2c 956 ' ret=188 + ble/test 'ble/encoding:C/b2c 12354 ' ret=66 + ble/test 'ble/encoding:C/c2b ; pack' ret=0 + ble/test 'ble/encoding:C/c2b 0 ; pack' ret=0 + ble/test 'ble/encoding:C/c2b 127 ; pack' ret=127 + ble/test 'ble/encoding:C/c2b 128 ; pack' ret=128 + ble/test 'ble/encoding:C/c2b 2047; pack' ret=255 + ble/test 'ble/encoding:C/c2b 2048; pack' ret=0 +) +( + clear-locale() { LC_ALL= LANG= LC_CTYPE=; } + for lang in {C,en_US,ja{_JP,}}.{UTF-8,utf8} ja_JP.{utf8,UTF-8}@cjk{wide,narrow,single}; do + clear-locale + ble/test "LANG=$lang; ble/util/is-unicode-output" + clear-locale + ble/test "LANG=C LC_CTYPE=$lang; ble/util/is-unicode-output" + clear-locale + ble/test "LC_CTYPE=C LANG=C LC_ALL=$lang; ble/util/is-unicode-output" + done + for lang in '' C POSIX UTF-8 utf8 ja_JP.eucJP; do + clear-locale + ble/test "LANG=$lang; ble/util/is-unicode-output" exit=1 + clear-locale + ble/test "LANG=C LC_CTYPE=$lang; ble/util/is-unicode-output" exit=1 + clear-locale + ble/test "LC_CTYPE=C LANG=C LC_ALL=$lang; ble/util/is-unicode-output" exit=1 + done +) +ble/test/end-section -- cgit v1.2.3