diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Test/V11db_gdbm.ztst | 307 |
2 files changed, 312 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 0b2f8f6f7..62145706d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-03-01 Peter Stephenson <p.stephenson@samsung.com> + + * Sebastian: 40562: Test/V11db_gdbm.ztst: this was missed out of + the previous commit. + 2017-02-28 Daniel Shahaf <d.s@daniel.shahaf.name> * 40641: Doc/Zsh/expn.yo, Doc/Zsh/roadmap.yo: docs: patterns: diff --git a/Test/V11db_gdbm.ztst b/Test/V11db_gdbm.ztst new file mode 100644 index 000000000..486ad4802 --- /dev/null +++ b/Test/V11db_gdbm.ztst @@ -0,0 +1,307 @@ +# Tests for the zsh/param/private module + +%prep + + modname="zsh/db/gdbm" + dbfile=db.gdbm + if ! zmodload $modname ; 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 + print -rl -- "${(kv)dbase[@]}" + zuntie -u dbase +0:scan read-only tied hash +>testkey +>testdata +>testkey3 +>testdataxtestdata + + ztie -d db/gdbm -f $dbfile dbase + local -a arr + arr=( "${(kv)dbase[@]}" ) + print -rl -- "${arr[@]}" + zuntie dbase +0:different scan, also read-write mode +>testkey +>testdata +>testkey3 +>testdataxtestdata + + ztie -d db/gdbm -f $dbfile dbase + dbase=( a b c d ) + zuntie dbase + ztie -d db/gdbm -f $dbfile dbase + print -rl -- "${(kv)dbase[@]}" + zuntie dbase +0:replace hash / database, scan +>c +>d +>a +>b + + ztie -d db/gdbm -f $dbfile dbase + local -a arr + arr=( "${dbase[@]}" ) + print -rl -- "${arr[@]}" + zuntie dbase +0:scan with no (kv) +>d +>b + + ztie -d db/gdbm -f $dbfile dbase + print -rl -- "${(k)dbase[@]}" + zuntie dbase +0:scan with keys only (k) +>c +>a + + ztie -d db/gdbm -f $dbfile dbase + print -rl -- "${(v)dbase[@]}" + zuntie dbase +0:scan with keys only explicit (v) +>d +>b + + 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] + print -rl -- "${(kv)dbase[@]}" + zuntie -u dbase + ztie -d db/gdbm -f $dbfile dbase + dbase+=( c d ) + echo $dbase[a] + echo $dbase[c] + print -rl -- "${(kv)dbase[@]}" + zuntie dbase + ztie -r -d db/gdbm -f $dbfile dbase + echo $dbase[a] + echo $dbase[c] + print -rl -- "${(kv)dbase[@]}" + zuntie -u dbase +0:Append with +=( ), also with existing data, also (kv) scan +>b +>b +>a +>b +>b +>d +>c +>d +>a +>b +>b +>d +>c +>d +>a +>b + + 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 + 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 + +%clean + + rm -f ${dbfile}* |