diff options
Diffstat (limited to 'Test/V11db_gdbm.ztst')
-rw-r--r-- | Test/V11db_gdbm.ztst | 327 |
1 files changed, 327 insertions, 0 deletions
diff --git a/Test/V11db_gdbm.ztst b/Test/V11db_gdbm.ztst new file mode 100644 index 000000000..6d74cef2c --- /dev/null +++ b/Test/V11db_gdbm.ztst @@ -0,0 +1,327 @@ +# Tests for the zsh/db/gdbm module. +# This contains literal UTF-8 characters; if editing, use +# UTF-8 mode. + +%prep + + modname="zsh/db/gdbm" + dbfile=db.gdbm + if ! zmodload $modname 2>/dev/null; then + ZTST_unimplemented="can't load $modname module for testing" + fi + rm -f db.gdbm + +%test + + (zmodload -u $modname && zmodload $modname) +0:unload and reload the module without crashing + + ztie -d db/gdbm -f $dbfile dbase + zuntie dbase +0:create the database + + ztie -r -d db/gdbm -f $dbfile dbase + zuntie -u dbase +0:open the database read-only + + ztie -d db/gdbm -f $dbfile dbase + dbase[testkey]=testdata + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + echo $dbase[testkey] + zuntie -u dbase +0:store key in database +>testdata + + ztie -d db/gdbm -f $dbfile dbase2 + unset 'dbase2[testkey]' + zuntie dbase2 + ztie -d db/gdbm -f $dbfile dbase + echo $dbase[testkey] + zuntie dbase +0:remove key from database (different variables) +> + + ztie -d db/gdbm -f $dbfile dbase + dbase[testkey]=testdata + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + echo $dbase[testkey] + zuntie -u dbase + ztie -d db/gdbm -f $dbfile dbase + unset 'dbase[testkey]' + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + echo $dbase[testkey] + zuntie -u dbase +0:store & remove key from database (the same variables) +>testdata +> + + ztie -d db/gdbm -f $dbfile dbase + dbase[testkey]=testdata + dbase[testkey2]=$dbase[testkey] + dbase[testkey3]=$dbase[testkey]x$dbase[testkey2] + zuntie dbase + ztie -d db/gdbm -f $dbfile dbase + echo $dbase[testkey] + echo $dbase[testkey2] + echo $dbase[testkey3] + zuntie dbase +0:store 2 keys fetching 1st +>testdata +>testdata +>testdataxtestdata + + ztie -d db/gdbm -f $dbfile dbase + val=$dbase[testkey2] + unset 'dbase[testkey2]' + echo $val + zuntie dbase +0:unset key that was fetched +>testdata + + ztie -r -d db/gdbm -f $dbfile dbase + local -a result=( "${(kv)dbase[@]}" ) + print -rl -- "${(o)result[@]}" + zuntie -u dbase +0:scan read-only tied hash, directly assign local -a +>testdata +>testdataxtestdata +>testkey +>testkey3 + + ztie -d db/gdbm -f $dbfile dbase + dbase=( a a ) + print -rl -- "${(kv)dbase[@]}" + zuntie dbase +0:Use scan directly, read-write mode +>a +>a + + ztie -d db/gdbm -f $dbfile dbase + dbase=( a b c d ) + zuntie dbase + ztie -d db/gdbm -f $dbfile dbase + result=( "${(kv)dbase[@]}" ) + print -rl -- "${(o)result[@]}" + zuntie dbase +0:replace hash / database, scan +>a +>b +>c +>d + + ztie -d db/gdbm -f $dbfile dbase + local -a arr + arr=( "${dbase[@]}" ) + print -rl -- "${(o)arr[@]}" + zuntie dbase +0:scan with no (kv) +>b +>d + + ztie -d db/gdbm -f $dbfile dbase + result=( "${(k)dbase[@]}" ) + print -rl -- "${(o)result[@]}" + zuntie dbase +0:scan with keys only (k) +>a +>c + + ztie -d db/gdbm -f $dbfile dbase + result=( "${(v)dbase[@]}" ) + print -rl -- "${(o)result[@]}" + zuntie dbase +0:scan with keys only explicit (v) +>b +>d + + rm -f $dbfile + ztie -r -d db/gdbm -f $dbfile dbase 2>/dev/null +1:read-only open non-existent database + + ztie -d db/gdbm -f $dbfile dbase + dbase+=( a b ) + echo $dbase[a] + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + echo $dbase[a] + result=( "${(kv)dbase[@]}" ) + print -rl -- "${(o)result[@]}" + zuntie -u dbase + ztie -d db/gdbm -f $dbfile dbase + dbase+=( c d ) + echo $dbase[a] + echo $dbase[c] + result=( "${(kv)dbase[@]}" ) + print -rl -- "${(o)result[@]}" + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + echo $dbase[a] + echo $dbase[c] + result=( "${(kv)dbase[@]}" ) + print -rl -- "${(o)result[@]}" + zuntie -u dbase +0:Append with +=( ), also with existing data, also (kv) scan +>b +>b +>a +>b +>b +>d +>a +>b +>c +>d +>b +>d +>a +>b +>c +>d + + ztie -d db/gdbm -f $dbfile dbase + echo ${(t)dbase} + zuntie dbase +0:Type of tied parameter +>association-special + + typeset -ga dbase + ztie -d db/gdbm -f $dbfile dbase + echo ${(t)dbase} + zuntie dbase +0:Type of tied parameter, with preceding unset +>association-special + + local -a dbase + ztie -d db/gdbm -f $dbfile dbase + echo ${(t)dbase} + zuntie dbase +0:Type of tied parameter, with local parameter already existing +>association-local-special + + local -a dbase + dbase=( fromarray ) + () { + local -a dbase + ztie -d db/gdbm -f $dbfile dbase + echo ${(t)dbase} + zuntie dbase + } + echo $dbase[1] + ztie -d db/gdbm -f $dbfile dbase2 + echo "Can connect, so untie happened:" $dbase2[a] + zuntie dbase2 +0:Test of automatic untie (use of local scope) and of scoping +>association-local-special +>fromarray +>Can connect, so untie happened: b + + echo $zgdbm_tied ${#zgdbm_tied} + ztie -r -d db/gdbm -f $dbfile dbase + echo $zgdbm_tied ${#zgdbm_tied} + ztie -d db/gdbm -f ${dbfile}2 dbase2 + echo $zgdbm_tied ${#zgdbm_tied} + zuntie -u dbase + echo $zgdbm_tied ${#zgdbm_tied} + zuntie dbase2 + echo $zgdbm_tied ${#zgdbm_tied} +0:zgdbm_tied parameter +>0 +>dbase 1 +>dbase dbase2 2 +>dbase2 1 +>0 + + unset zgdbm_tied 2>/dev/null +1:unset of read-only zgdbm_tied parameter + + ztie -d db/gdbm -f $dbfile dbase + dbase[漢字]=漢字 + echo $dbase[漢字] + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + echo $dbase[漢字] + zuntie -u dbase +0:Unicode test +>漢字 +>漢字 + + key="ab"$'\0'"ef" + ztie -d db/gdbm -f $dbfile dbase + dbase[$key]=value + echo $dbase[$key] + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + echo $dbase[$key] + zuntie -u dbase + ztie -d db/gdbm -f $dbfile dbase + dbase[$key]=$key + zuntie dbase + ztie -d db/gdbm -f $dbfile dbase + [[ "$dbase[$key]" = "$key" ]] && echo correct + zuntie dbase +0:Metafication of $'\0' +>value +>value +>correct + + ztie -d db/gdbm -f $dbfile dbase + dbase=( 漢字 漢字 ) + echo $dbase[漢字] + zuntie dbase + ztie -d db/gdbm -f $dbfile dbase + echo $dbase[漢字] + zuntie dbase + key="ab"$'\0'"ef" + ztie -d db/gdbm -f $dbfile dbase + dbase+=( $key $key ) + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + [[ "$dbase[$key]" = "$key" ]] && echo correct + zuntie -u dbase +0:Unicode & metafication test, different hash access +>漢字 +>漢字 +>correct + + ztie -d db/gdbm -f $dbfile dbase + dbase=( 漢字 漢字 ) + zuntie dbase + ztie -d db/gdbm -f $dbfile dbase + noglob print -rl ${(kv)dbase[@]} + zuntie dbase +0:Hash scanning and metafication +>漢字 +>漢字 + + ztie -d db/gdbm -f $dbfile dbase + noglob print -rl ${(okv)dbase[@]} + zuntie dbase +0:Sorted hash scanning and metafication +>漢字 +>漢字 + + ztie -d db/gdbm -f $dbfile dbase + zgdbmpath dbase + [[ $REPLY = */Test/db.gdbm ]] && echo correct + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + zgdbmpath dbase + [[ $REPLY = */Test/db.gdbm ]] && echo correct + zuntie -u dbase +0:zgdbmpath builtin +>correct +>correct + + ztie -d db/gdbm -f $dbfile dbase + fun() { while read line; do echo $line; done } + eval "dbase[testkey]=value1" | fun + echo $dbase[testkey] +0:Test store in forked Zsh +>value1 + +%clean + + rm -f ${dbfile}* |