1654 lines
67 KiB
Bash
1654 lines
67 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-util.sh
|
||
ble-import lib/core-test
|
||
ble/test/start-section 'ble/util' 1243
|
||
(
|
||
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 {
|
||
ble/util/print "g:$a"
|
||
local a=2
|
||
ble/util/print "l:$a"
|
||
ble/util/unlocal a
|
||
ble/util/print "g:$a"
|
||
a=3
|
||
}
|
||
ble/test 'f1; ble/util/print "g:$a"' \
|
||
stdout=g:1 \
|
||
stdout=l:2 \
|
||
stdout=g:1 \
|
||
stdout=g:3
|
||
function f2 {
|
||
ble/util/print "f1:$a@f2"
|
||
local a=3
|
||
ble/util/print "f2:$a@f2"
|
||
ble/util/unlocal a
|
||
ble/util/print "f1:$a@f2"
|
||
a=$a+
|
||
}
|
||
function f1 {
|
||
ble/util/print "g:$a@f1"
|
||
local a=2
|
||
ble/util/print "f1:$a@f1"
|
||
f2
|
||
ble/util/print "f1:$a@f1"
|
||
ble/util/unlocal a
|
||
ble/util/print "g:$a@f1"
|
||
a=$a+
|
||
}
|
||
ble/test 'a=1; f1; ble/util/print "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; 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 {
|
||
ble/util/print "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
|
||
builtin 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 { (builtin 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 { ble/util/print "$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 { ble/util/print "${#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 { ble/util/print "${#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 { ble/util/print "${#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 { ble/util/print "${#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 { ble/util/print "${#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 { ble/util/print "${#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 { ble/util/print "${#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 { ble/util/print "${#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 { ble/util/print "${#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 { ble/util/print "${#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} <test>"' \
|
||
ret='\[hello\]\ \(world\)\ {this,is}\ \<test\>'
|
||
ble/test 'ble/string#escape-for-bash-specialchars "[hello] (world) {this,is} <test>" b' \
|
||
ret='\[hello\]\ \(world\)\ \{this\,is\}\ \<test\>'
|
||
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
|
||
export LC_ALL= LC_COLLATE=C 2>/dev/null # suppress locale error #D1440
|
||
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+='ble/util/print hello'
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout="blehook FOO='ble/util/print hello'"
|
||
ble/test 'blehook/has-hook FOO'
|
||
blehook FOO+='ble/util/print world'
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout="blehook FOO='ble/util/print hello'" \
|
||
stdout="blehook FOO+='ble/util/print world'"
|
||
ble/test 'blehook/has-hook FOO'
|
||
blehook FOO-='ble/util/print hello'
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout="blehook FOO='ble/util/print world'"
|
||
ble/test 'blehook/has-hook FOO'
|
||
blehook FOO-='ble/util/print world'
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout='blehook FOO='
|
||
ble/test 'blehook/has-hook FOO' exit=1
|
||
blehook FOO+='ble/util/print hello'
|
||
blehook FOO+='ble/util/print world'
|
||
blehook FOO='ble/util/print empty'
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout="blehook FOO='ble/util/print empty'"
|
||
ble/test 'blehook/has-hook FOO'
|
||
blehook FOO+='ble/util/print hello'
|
||
blehook FOO+='ble/util/print world'
|
||
blehook FOO=
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout='blehook FOO='
|
||
ble/test 'blehook/has-hook FOO' exit=1
|
||
blehook FOO+='ble/util/print hello'
|
||
blehook FOO+='ble/util/print world'
|
||
blehook FOO!='ble/util/print hello'
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout="blehook FOO='ble/util/print hello'${_ble_term_nl}blehook FOO+='ble/util/print world'"
|
||
blehook FOO-+='ble/util/print hello'
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout="blehook FOO='ble/util/print world'${_ble_term_nl}blehook FOO+='ble/util/print hello'"
|
||
blehook FOO+-='ble/util/print hello'
|
||
ble/test 'blehook --color=never FOO' \
|
||
stdout="blehook FOO='ble/util/print hello'${_ble_term_nl}blehook FOO+='ble/util/print world'"
|
||
blehook FOO=
|
||
blehook FOO+='ble/util/print hello'
|
||
blehook FOO+='ble/util/print empty'
|
||
blehook FOO+='ble/util/print world'
|
||
ble/test 'blehook/invoke FOO' \
|
||
stdout=hello \
|
||
stdout=empty \
|
||
stdout=world
|
||
blehook FOO='ble/util/print "A$?"'
|
||
blehook FOO+='ble/util/print "B$?"'
|
||
blehook FOO+='ble/util/print "C$?"'
|
||
ble/test 'ble/util/setexit 123; blehook/invoke FOO' \
|
||
stdout=A123 \
|
||
stdout=B123 \
|
||
stdout=C123
|
||
blehook/declare bar_load
|
||
blehook bar_load='ble/util/print bar_load'
|
||
ble/test 'blehook/eval-after-load bar "ble/util/print yes"' stdout=
|
||
ble/test 'blehook/invoke bar_load' \
|
||
stdout=bar_load \
|
||
stdout=yes
|
||
ble/test 'blehook/eval-after-load bar "ble/util/print next"' stdout=next
|
||
function func { ret="[$1]"; }
|
||
blehook FOO=func
|
||
ble/test 'blehook/invoke FOO xQAHbcpMFyFyQ' ret='[xQAHbcpMFyFyQ]'
|
||
)
|
||
(
|
||
ble/builtin/trap 'ble/util/print 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 'ble/util/print 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 'ble/util/print 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 'ble/util/print 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 'ble/util/print 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/sig#new CUSTOM
|
||
ble/builtin/trap 'ble/util/print "custom trap"' CUSTOM
|
||
ble/test 'ble/builtin/trap/invoke CUSTOM' stdout='custom trap'
|
||
function ble/builtin/trap:CUSTOM { ble/util/print "__set_handler__ ($2) $1"; }
|
||
ble/test 'ble/builtin/trap "ble/util/print \"hello world\"" CUSTOM' \
|
||
stdout='__set_handler__ (CUSTOM) ble/util/print "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 { ble/util/print "${#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 { ble/util/print stdout; ble/util/print stderr >&2; }
|
||
function nested-assign {
|
||
ble/util/assign err 'ble/util/assign out f1 2>&1'
|
||
ble/util/print "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'
|
||
function ble/test/hash {
|
||
local tmpfile=$_ble_base_run/$$.test.$RANDOM ret
|
||
ble/bin/cat >| "$tmpfile"
|
||
ble/file#hash "$tmpfile"
|
||
>| "$tmpfile"
|
||
ble/util/print "$ret"
|
||
}
|
||
ble/test "ble/util/writearray -d '' x | ble/test/hash" stdout=$(printf '%s\0' "${x[@]}" | ble/test/hash)
|
||
x=($'\302\203' alpha)
|
||
ble/test "ble/util/writearray -d '' x | ble/test/hash" stdout=$(printf '%s\0' "${x[@]}" | ble/test/hash)
|
||
for pair in $'\a:007' $'\b:010' $'\t:011' $'\v:013' $'\f:014' $'\r:015'; do
|
||
for awk in awk nawk mawk gawk; do
|
||
if ble/is-function ble/bin/"$awk"; then
|
||
ctrl=${pair%:*}
|
||
seq=${pair#*:}
|
||
value=$(ble/bin/"$awk" '{gsub(/\'"$seq"'/, "<DEL>");print $0 "x";}' <<< "x${ctrl}y")
|
||
value=${value%x}
|
||
ble/test code:"ret=\$value # \"$awk gsub(/\\$seq/)\"" ret="x<DEL>y"
|
||
fi
|
||
done
|
||
done
|
||
)
|
||
(
|
||
var=variable
|
||
alias ali=fun
|
||
function fun { ble/util/print "yes $*"; }
|
||
function ble/fun { ble/util/print "yes $*"; return 99; }
|
||
function ble/fun:type { ble/util/print "yes $*"; return 100; }
|
||
function ble/fun#meth { ble/util/print "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 { return 0; }
|
||
function declare { return 0; }
|
||
function mkfifo { return 0; }
|
||
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 { ble/util/print "original${*:+ $*}"; }
|
||
ble/test f1 stdout='original'
|
||
ble/function#advice before f1 'ble/util/print pre'
|
||
ble/test f1 stdout={pre,original}
|
||
ble/function#advice after f1 'ble/util/print post'
|
||
ble/test f1 stdout={pre,original,post}
|
||
ble/function#advice before f1 'ble/util/print A'
|
||
ble/test f1 stdout={A,original,post}
|
||
ble/function#advice after f1 'ble/util/print B'
|
||
ble/test f1 stdout={A,original,B}
|
||
ble/function#advice around f1 'ble/util/print [; ble/function#advice/do; ble/util/print ]'
|
||
ble/test f1 stdout={A,[,original,],B}
|
||
ble/function#advice around f1 '
|
||
ADVICE_WORDS[1]=quick
|
||
ble/util/print [; ble/function#advice/do; ble/util/print ]
|
||
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 { return 0; }
|
||
function ble/fun { return 0; }
|
||
function ble/fun:type { return 0; }
|
||
function ble/fun#meth { return 0; }
|
||
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; }'
|
||
[[ ${CI-} == true && ${GITHUB_ACTION-} && $OSTYPE == msys* ]] ||
|
||
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 || exit
|
||
function getpid {
|
||
sh -c 'printf %s $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 || exit
|
||
ble/fd#alloc fd '> a.txt'
|
||
ble/util/print hello >&"$fd"
|
||
ble/util/print 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
|
||
builtin eval -- "$(
|
||
for name in v1 v{2..8}{a,b}; do
|
||
builtin 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 -v >&2; [[ \$$name == \$x$name ]]"
|
||
done
|
||
function status { builtin eval 'ret="${#'$1'[*]}:(""${'$1'[*]}"")"'; }
|
||
xa0=() sa0='0:()'
|
||
xa1=('') sa1='1:()'
|
||
for k in {2..8}; do
|
||
builtin eval "xa$k=(); xa$k[0]=\"\$xv${k}a\"; xa$k[1]=\"\$xv${k}b\""
|
||
builtin eval "sa$k=\"2:(\$xv${k}a \$xv${k}b)\""
|
||
done
|
||
builtin eval -- "$(
|
||
for name in a0 a1 a{2..8}; do
|
||
builtin 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
|
||
[[ $name == a5 && $OSTYPE == msys* ]] && continue
|
||
stdout_var=s$name
|
||
ble/test "status $name" ret="${!stdout_var}"
|
||
done
|
||
)
|
||
(
|
||
function status { builtin eval 'ble/util/print "${#'$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
|
||
)
|
||
(
|
||
shopt -s failglob
|
||
shopt -s nullglob
|
||
shopt -s extglob
|
||
ble/util/eval-pathname-expansion 'non-existent-*-file' canonical
|
||
ble/test 'shopt -q failglob'
|
||
ble/test 'shopt -q nullglob'
|
||
ble/test 'shopt -q extglob'
|
||
)
|
||
if ! [[ ${CI-} == true && ${GITHUB_ACTION-} ]]; then
|
||
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<=120))'
|
||
ble/test 'ble-measure -q "ble/util/sleep 0.1"; echo "$ret usec" >&2; ((msec=ret/1000,90<=msec&&msec<=120))'
|
||
)
|
||
fi
|
||
(
|
||
time=0
|
||
ble/function#push ble/util/msleep '((time+=$1));ble/util/print $time'
|
||
ble/test "ble/util/conditional-sync 'ble/bin/sleep 10' '((time<1000))' 100" \
|
||
stdout={1..10}00
|
||
ble/test "ble/util/conditional-sync 'ble/bin/sleep 10' '((time<1000))' 100 progressive-weight" \
|
||
stdout={1,3,7,15,31,63,{1..10}27}
|
||
ble/test "ble/util/conditional-sync 'ble/bin/sleep 10' 'true' 100 timeout=10" stdout=10 exit=142
|
||
ble/test "ble/util/conditional-sync 'echo unexpected' 'true' 100 timeout=0" stdout= exit=142
|
||
ble/bin/sleep 10 & pid1=$!
|
||
ble/test "ble/util/conditional-sync 'echo unexpected' 'true' 100 timeout=0:pid=$pid1" stdout= exit=142
|
||
ble/bin/sleep 10 & pid2=$!
|
||
ble/test "ble/util/conditional-sync 'echo unexpected' 'true' 100 timeout=-1:pid=$pid2" stdout= exit=142
|
||
set -m; ble/bin/sleep 10 & pid3=$!; set +m
|
||
ble/test "ble/util/conditional-sync 'echo unexpected' 'true' 100 timeout=0:pid=-$pid3" stdout= exit=142
|
||
if [[ $OSTYPE == cygwin* || $OSTYPE == msys* ]]; then
|
||
ble/bin/sleep 0.20
|
||
else
|
||
ble/bin/sleep 0.02
|
||
fi
|
||
ble/test 'kill -0 "$pid1"' exit=1
|
||
ble/test 'kill -0 "$pid2"' exit=1
|
||
ble/test 'kill -0 "$pid3"' exit=1
|
||
ble/function#pop ble/util/msleep
|
||
)
|
||
(
|
||
function ble/test:ble/util/cat { { ble/util/cat; ble/util/print x; } | cat -v; }
|
||
ble/test ":| ble/test:ble/util/cat" stdout=x
|
||
ble/test "printf a | ble/test:ble/util/cat" stdout=ax
|
||
ble/test "printf '\0' | ble/test:ble/util/cat" stdout=^@x
|
||
ble/test "printf 'hello\nworld\n'| ble/test:ble/util/cat" stdout={hello,world,x}
|
||
ble/test "printf 'hello\nworld'| ble/test:ble/util/cat" stdout={hello,worldx}
|
||
ble/test "printf 'hello\0world\0'| ble/test:ble/util/cat" stdout=hello^@world^@x
|
||
ble/test "printf 'hello\0world'| ble/test:ble/util/cat" stdout=hello^@worldx
|
||
)
|
||
(
|
||
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_fd_tui_stderr=1 # ble/util/buffer.flush write outputs to this fd.
|
||
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/function#try ble/util/idle.clear
|
||
ble/util/buffer.clear
|
||
blehook idle_after_task=
|
||
ble/function#push ble/util/idle/IS_IDLE '((1))'
|
||
ble/test/chdir || exit
|
||
ble/util/print 'ble/util/print FILE1' >| FILE1.txt
|
||
ble/util/print 'ble/util/print FILE2' >| FILE2.txt
|
||
ble/util/print 'ble/util/print FILE3' >| FILE3.txt
|
||
(
|
||
ble-import FILE1.txt -C 'ble/util/print loaded1'
|
||
ble-import FILE1.txt -C 'ble/util/print loaded2'
|
||
ble-import FILE1.txt -C 'ble/util/print loaded3' -C 'ble/util/print loaded4'
|
||
ble-import FILE1.txt FILE2.txt -C 'ble/util/print both1' -C 'ble/util/print both2'
|
||
(
|
||
if ble/is-function ble/util/idle.push; then
|
||
ble/test 'ble/util/idle.do' stdout=
|
||
fi
|
||
ble/test 'ble-import FILE1.txt' stdout=$'FILE1\nloaded1\nloaded2\nloaded3\nloaded4'
|
||
ble/test 'ble-import FILE2.txt' stdout=$'FILE2\nboth1\nboth2'
|
||
)
|
||
(
|
||
ble/test 'ble-import FILE2.txt' stdout='FILE2'
|
||
ble/test 'ble-import FILE1.txt' stdout=$'FILE1\nloaded1\nloaded2\nloaded3\nloaded4\nboth1\nboth2'
|
||
)
|
||
)
|
||
(
|
||
ble-import FILE1.txt FILE2.txt FILE3.txt -C 'ble/util/print triple'
|
||
ble/test 'ble-import FILE2.txt' stdout='FILE2'
|
||
ble/test 'ble-import FILE3.txt' stdout='FILE3'
|
||
ble/test 'ble-import FILE1.txt' stdout=$'FILE1\ntriple'
|
||
)
|
||
if ble/is-function ble/util/idle.push; then
|
||
(
|
||
ble-import FILE1.txt FILE2.txt -dC 'ble/util/print both'
|
||
ble/test 'ble/util/idle.do' stdout=$'FILE1\nFILE2\nboth'
|
||
)
|
||
fi
|
||
ble/test/rmdir
|
||
)
|
||
(
|
||
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=あ
|
||
LC_ALL=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=あ
|
||
)
|
||
(
|
||
function 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
|
||
)
|
||
(
|
||
function 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
|