# Tests for completion system matching control # Most tests follow this format: # test_code $matcher_string selection_list # comptest -c "$code" $' tst input_string' # test_code generates the string $codem which sets what words the completion # should be selecting from. The comptest function actually performs the # completion test, using the completion function generated by test_code. # # This test also tests error conditions that compadd reports, so output also # contains the compadd output. %prep . $ZTST_srcdir/comptest mkdir match.tmp cd match.tmp comptestinit -z $ZTST_testdir/../Src/zsh list1=(IndianRed IndianRed2 IndianRed3 IndianRed4) test_code () { matcher=$1; list=$2; code="compdef _tst tst ; _tst () { echo -n '';compadd -M '" code="$code$matcher" code="$code' - ${(P)list} ; echo -n ''}" comptesteval "$code" } %test test_code z: list1 comptest $'tst \t' 0:Match Error for "z:" >line: {tst }{} >COMPADD:{_tst:compadd: unknown match specification character `z'} test_code m: list1 comptest $'tst \t' 0:Match Error for "m:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} test_code M: list1 comptest $'tst \t' 0:Match Error for "M:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} test_code r: list1 comptest $'tst \t' 0:Match Error "r:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} test_code R: list1 comptest $'tst \t' 0:Match Error "R:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} test_code l: list1 comptest $'tst \t' 0:Match Error for "l:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} test_code L: list1 comptest $'tst \t' 0:Match Error for "L:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} test_code 'm:{0-9' list1 comptest $'tst \t' 0:Match Error for "m:{0-9" >line: {tst }{} >COMPADD:{_tst:compadd: unterminated character class} test_code 'm:{0-9}' list1 comptest $'tst \t' 0:Match Error for "m:{0-9}" >line: {tst }{} >COMPADD:{_tst:compadd: missing word pattern} test_code 'm:{0-9}={' list1 comptest $'tst \t' 0:Match Error for "m:{0-9}={" >line: {tst }{} >COMPADD:{_tst:compadd: unterminated character class} test_code 'm:{0-9}={0-' list1 comptest $'tst \t' 0:Match Error for "m:{0-9}={0-" >line: {tst }{} >COMPADD:{_tst:compadd: unterminated character class} test_code 'm:{0-9}={-' list1 comptest $'tst \t' 0:Match Error for "m:{0-9}={-" >line: {tst }{} >COMPADD:{_tst:compadd: unterminated character class} test_code r: list1 comptest $'tst \t' 0:Match Error "r:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} example1_list=( kshoptionprint shglob listambiguous shinstdin listbeep shnullcmd listpacked shoptionletters listrowsfirst shortloops listtypes shwordsplit ) options_matcher='L:|[nN][oO]= M:_= M:{A-Z}={a-z}' test_code $options_matcher example1_list comptest $'tst nolistbee\t' 0:Documentation example for options, input "nolistbee" >line: {tst nolistbeep }{} >COMPADD:{} test_code $options_matcher example1_list comptest $'tst list_bee\t' 0:Documentation example for options, input "list_bee" >line: {tst list_beep }{} >COMPADD:{} test_code $options_matcher example1_list comptest $'tst ListBee\t' 0:Documentation example for options, input "ListBee" >line: {tst ListBeep }{} >COMPADD:{} test_code $options_matcher example1_list comptest $'tst NOList\tB\t' 0:Documentation example for options, input "NOList" >line: {tst NOList}{} >COMPADD:{} >NO:{NOListambiguous} >NO:{NOListbeep} >NO:{NOListpacked} >NO:{NOListrowsfirst} >NO:{NOListtypes} >line: {tst NOListBeep }{} >COMPADD:{} test_code $options_matcher example1_list comptest $'tst NO_List\t__\tB\t' 0:Documentation example for options, input "NO_List\t__\tB\t" >line: {tst NO_List}{} >COMPADD:{} >NO:{NO_Listambiguous} >NO:{NO_Listbeep} >NO:{NO_Listpacked} >NO:{NO_Listrowsfirst} >NO:{NO_Listtypes} >line: {tst NO_List__}{} >COMPADD:{} >NO:{NO_List__ambiguous} >NO:{NO_List__beep} >NO:{NO_List__packed} >NO:{NO_List__rowsfirst} >NO:{NO_List__types} >line: {tst NO_List__Beep }{} >COMPADD:{} test_code $options_matcher example1_list comptest $'tst __\tN\t__o\t___\tlist_\tbeep__\t' 0:Documentation example for options, input "__\tN\t__o\t___\tlist_\tbeep__\t" >line: {tst __}{} >COMPADD:{} >NO:{__kshoptionprint} >NO:{__listambiguous} >NO:{__listbeep} >NO:{__listpacked} >NO:{__listrowsfirst} >NO:{__listtypes} >NO:{__shglob} >NO:{__shinstdin} >NO:{__shnullcmd} >NO:{__shoptionletters} >NO:{__shortloops} >NO:{__shwordsplit} >line: {tst __N}{} >COMPADD:{} >line: {tst __N__o}{} >COMPADD:{} >line: {tst __N__o___}{} >COMPADD:{} >line: {tst __N__o___list_}{} >COMPADD:{} >line: {tst __N__o___list_beep__}{} >COMPADD:{} test_code $options_matcher example1_list comptest $'tst __\tNo\t___\tlist_\tbeep__\t' 0:Documentation example for options, input "__\tNo\t___\tlist_\tbeep__\t" >line: {tst __}{} >COMPADD:{} >NO:{__kshoptionprint} >NO:{__listambiguous} >NO:{__listbeep} >NO:{__listpacked} >NO:{__listrowsfirst} >NO:{__listtypes} >NO:{__shglob} >NO:{__shinstdin} >NO:{__shnullcmd} >NO:{__shoptionletters} >NO:{__shortloops} >NO:{__shwordsplit} >line: {tst __No}{} >COMPADD:{} >line: {tst __No___}{} >COMPADD:{} >line: {tst __No___list_}{} >COMPADD:{} >line: {tst __No___list_beep__}{} >COMPADD:{} test_code $options_matcher example1_list comptest $'tst ___\tlist_\tbeep__\t' 0:Documentation example for options, input "___\tlist_\tbeep__\t" >line: {tst ___}{} >COMPADD:{} >NO:{___kshoptionprint} >NO:{___listambiguous} >NO:{___listbeep} >NO:{___listpacked} >NO:{___listrowsfirst} >NO:{___listtypes} >NO:{___shglob} >NO:{___shinstdin} >NO:{___shnullcmd} >NO:{___shoptionletters} >NO:{___shortloops} >NO:{___shwordsplit} >line: {tst ___list_}{} >COMPADD:{} >NO:{___list_ambiguous} >NO:{___list_beep} >NO:{___list_packed} >NO:{___list_rowsfirst} >NO:{___list_types} >line: {tst ___list_beep__ }{} >COMPADD:{} lower_insensitive_M="M:{a-z}={A-Z}" lower_insensitive_m="m:{a-z}={A-Z}" example2_list=(ABC Abc abc) test_code $lower_insensitive_M example2_list comptest $'tst ab\tC\t' 0:Documentation example for lowercase insenitive M, input "ab\tC\t" >line: {tst ab}{} >COMPADD:{} >NO:{abC} >NO:{abc} >line: {tst abC }{} >COMPADD:{} test_code $lower_insensitive_m example2_list comptest $'tst A\t\t' 0:Documentation example for lowercase insenitive m, input "A\t\t" >line: {tst A}{} >COMPADD:{} >NO:{ABC} >NO:{Abc} >line: {tst ABC}{} >COMPADD:{} example3_list=(ABC Abc abc) case_insensitive_M="M:{a-zA-Z}={A-Za-z}" case_insensitive_m="m:{a-zA-Z}={A-Za-z}" test_code $case_insensitive_M example3_list comptest $'tst aB\t\t' 0:Documentation example for case insenitive M, input "aB\t\t" >line: {tst aB}{} >COMPADD:{} >NO:{aBC} >NO:{aBc} >line: {tst aBC}{} >COMPADD:{} test_code $case_insensitive_m example3_list comptest $'tst aB\t\t' 0:Documentation example for case insenitive m, input "aB\t\t" >line: {tst a}{BC} >COMPADD:{} >line: {tst a}{BC} >COMPADD:{} >NO:{ABC} >NO:{Abc} >NO:{abc} example4_matcher='r:|.=* r:|=*' example4_list=(comp.sources.unix comp.sources.misc comp.graphics.algorithms comp.graphics.animation comp.graphics.api comp.graphics.apps comp.graphics.misc comp.graphics.packages comp.graphics.rendering comp.graphics.visualization comp.graphics.apps.alias comp.graphics.apps.gimp comp.graphics.apps.gnuplot comp.graphics.apps.lightwave comp.graphics.apps.pagemaker comp.graphics.apps.paint-shop-pro comp.graphics.apps.photoshop comp.graphics.apps.softimage comp.graphics.apps.ulead comp.graphics.rendering.misc comp.graphics.rendering.raytracing comp.graphics.rendering.renderman) test_code $example4_matcher example4_list comptest $'tst c.s.u\t' 0:Documentation example using input c.s.u >line: {tst comp.sources.unix }{} >COMPADD:{} test_code $example4_matcher example4_list comptest $'tst c.g.\ta\t.\tp\ta\tg\t' 0:Documentation example using input c.g.\ta\t.\tp\ta\tg\t >line: {tst comp.graphics.}{} >COMPADD:{} >line: {tst comp.graphics.a}{} >COMPADD:{} >NO:{comp.graphics.algorithms} >NO:{comp.graphics.animation} >NO:{comp.graphics.api} >NO:{comp.graphics.apps} >NO:{comp.graphics.apps.alias} >NO:{comp.graphics.apps.gimp} >NO:{comp.graphics.apps.gnuplot} >NO:{comp.graphics.apps.lightwave} >NO:{comp.graphics.apps.pagemaker} >NO:{comp.graphics.apps.paint-shop-pro} >NO:{comp.graphics.apps.photoshop} >NO:{comp.graphics.apps.softimage} >NO:{comp.graphics.apps.ulead} >line: {tst comp.graphics.apps.}{} >COMPADD:{} >line: {tst comp.graphics.apps.p}{} >COMPADD:{} >NO:{comp.graphics.apps.pagemaker} >NO:{comp.graphics.apps.paint-shop-pro} >NO:{comp.graphics.apps.photoshop} >line: {tst comp.graphics.apps.pa}{} >COMPADD:{} >NO:{comp.graphics.apps.pagemaker} >NO:{comp.graphics.apps.paint-shop-pro} >line: {tst comp.graphics.apps.pagemaker }{} >COMPADD:{} test_code $example4_matcher example4_list comptest $'tst c...pag\t' 0:Documentation example using input c...pag\t >line: {tst comp.graphics.apps.pagemaker }{} >COMPADD:{} test_code $example4_matcher example4_list comptest $'tst c...pa\tg\t' 0:Documentation example using input c...pa\tg\t >line: {tst comp.graphics.apps.pa}{} >COMPADD:{} >line: {tst comp.graphics.apps.pagemaker }{} >COMPADD:{} example5_matcher='r:|[.,_-]=* r:|=*' example5_list=(veryverylongfile.c veryverylongheader.h) test_code $example5_matcher example5_list comptest $'tst v.c\tv.h\t' 0:Documentation example using input v.c\t >line: {tst veryverylongfile.c }{} >COMPADD:{} >line: {tst veryverylongfile.c veryverylongheader.h }{} >COMPADD:{} example6_list=(LikeTHIS FooHoo 5foo123 5bar234) test_code 'r:|[A-Z0-9]=* r:|=*' example6_list comptest $'tst H\t' 0:Documentation example using "r:|[A-Z0-9]=* r:|=*", input H >line: {tst H}{} >COMPADD:{} test_code 'r:|[A-Z0-9]=* r:|=*' example6_list comptest $'tst 2\t' 0:Documentation example using "r:|[A-Z0-9]=* r:|=*", input 2 >line: {tst 2}{} >COMPADD:{} test_code 'r:|[A-Z0-9]=** r:|=*' example6_list comptest $'tst H\t' 0:Documentation example using "r:|[A-Z0-9]=* r:|=*", input 2 >line: {tst H}{} >COMPADD:{} >NO:{FooHoo} >NO:{LikeTHIS} test_code 'r:|[A-Z0-9]=** r:|=*' example6_list comptest $'tst 2\t\t' 0:Documentation example using "r:|[A-Z0-9]=* r:|=*", input 2 >line: {tst 523}{} >COMPADD:{} >line: {tst 523}{} >COMPADD:{} >NO:{5bar234} >NO:{5foo123} example7_matcher="r:[^A-Z0-9]||[A-Z0-9]=** r:|=*" example7_list=($example6_list) test_code $example7_matcher example7_list comptest $'tst H\t2\t' 0:Documentation example using "r:[^A-Z0-9]||[A-Z0-9]=** r:|=*" >line: {tst FooHoo }{} >COMPADD:{} >line: {tst FooHoo 5bar234 }{} >COMPADD:{} workers_7311_matcher="m:{a-z}={A-Z} r:|[.,_-]=* r:|=*" workers_7311_list=(Abc-Def-Ghij.txt Abc-def.ghi.jkl_mno.pqr.txt Abc_def_ghi_jkl_mno_pqr.txt) test_code $workers_7311_matcher workers_7311_list comptest $'tst a-a\t' 0:Bug from workers 7311 >line: {tst a-a}{} >COMPADD:{} test_code $workers_7311_matcher workers_7311_list comptest $'tst a\t\t-d.\t' 0:Bug from workers_7311 >line: {tst Abc}{} >COMPADD:{} >line: {tst Abc}{} >COMPADD:{} >NO:{Abc-Def-Ghij.txt} >NO:{Abc-def.ghi.jkl_mno.pqr.txt} >NO:{Abc_def_ghi_jkl_mno_pqr.txt} >line: {tst Abc-def.ghi.jkl_mno.pqr.txt }{} >COMPADD:{} workers_10886_matcher="r:|[A-Z0-9]=* r:|=*" workers_10886_list=(BW UWB W) test_code $workers_10886_matcher workers_10886_list comptest $'tst W\t' 0:Bug from workers 10886 >line: {tst W }{} >COMPADD:{} workers_11081_matcher='m:{a-zA-Z}={A-Za-z} r:|[.,_-]=* r:[^A-Z0-9]||[A-Z0-9]=* r:[A-Z0-9]||[^A-Z0-9]=* r:[^0-9]||[0-9]=* r:|=*' workers_11081_list=(build.out build.out1 build.out2) test_code $workers_11081_matcher workers_11081_list comptest $'tst bui\t\t\t' 0:Bug from workers 11081 >line: {tst build.out}{} >COMPADD:{} >line: {tst build.out}{} >COMPADD:{} >NO:{build.out} >NO:{build.out1} >NO:{build.out2} >line: {tst build.out}{} >COMPADD:{} workers_11388_matcher='r:|[:.]=* r:|=*' workers_11388_list=(a.b:0 c.d:1) test_code $workers_11388_matcher workers_11388_list comptest $'tst :\t' 0:Non-bug from workers 11388 >line: {tst :}{} >COMPADD:{} workers_11388_matcher='r:|[:.]=** r:|=*' workers_11388_list=(a.b:0 c.d:1) test_code $workers_11388_matcher workers_11388_list comptest $'tst :\t' 0:Non-bug from workers 11388 >line: {tst }{.:} >COMPADD:{} workers_11586_matcher='r:|.=** r:[^0-9]||[0-9]=**' workers_11586_list=(c00.abc c01.abc.def.00.0) test_code $workers_11586_matcher workers_11586_list comptest $'tst c00\t.\ta\t' 0:Bug from workers 11586 >line: {tst c00}{} >COMPADD:{} >NO:{c00.abc} >NO:{c01.abc.def.00.0} >line: {tst c00.}{} >COMPADD:{} >NO:{c00.abc} >NO:{c01.abc.def.00.0} >line: {tst c00.abc }{} >COMPADD:{} %clean exit 0