# 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 ''" code="$code; $extra_cmd" code="$code; echo -n ''" code="$code; echo \$compstate[insert_positions]" code="$code; echo -n ''" code="$code}" 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'} >INSERT_POSITIONS:{} test_code m: list1 comptest $'tst \t' 0:Match Error for "m:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} >INSERT_POSITIONS:{} test_code M: list1 comptest $'tst \t' 0:Match Error for "M:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} >INSERT_POSITIONS:{} test_code r: list1 comptest $'tst \t' 0:Match Error "r:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} >INSERT_POSITIONS:{} test_code R: list1 comptest $'tst \t' 0:Match Error "R:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} >INSERT_POSITIONS:{} test_code l: list1 comptest $'tst \t' 0:Match Error for "l:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} >INSERT_POSITIONS:{} test_code L: list1 comptest $'tst \t' 0:Match Error for "L:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} >INSERT_POSITIONS:{} test_code 'm:{0-9' list1 comptest $'tst \t' 0:Match Error for "m:{0-9" >line: {tst }{} >COMPADD:{_tst:compadd: unterminated character class} >INSERT_POSITIONS:{} test_code 'm:{0-9}' list1 comptest $'tst \t' 0:Match Error for "m:{0-9}" >line: {tst }{} >COMPADD:{_tst:compadd: missing word pattern} >INSERT_POSITIONS:{} test_code 'm:{0-9}={' list1 comptest $'tst \t' 0:Match Error for "m:{0-9}={" >line: {tst }{} >COMPADD:{_tst:compadd: unterminated character class} >INSERT_POSITIONS:{} 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} >INSERT_POSITIONS:{} test_code 'm:{0-9}={-' list1 comptest $'tst \t' 0:Match Error for "m:{0-9}={-" >line: {tst }{} >COMPADD:{_tst:compadd: unterminated character class} >INSERT_POSITIONS:{} test_code r: list1 comptest $'tst \t' 0:Match Error "r:" >line: {tst }{} >COMPADD:{_tst:compadd: missing patterns} >INSERT_POSITIONS:{} 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:{} >INSERT_POSITIONS:{14} test_code $options_matcher example1_list comptest $'tst list_bee\t' 0:Documentation example for options, input "list_bee" >line: {tst list_beep }{} >COMPADD:{} >INSERT_POSITIONS:{13} test_code $options_matcher example1_list comptest $'tst ListBee\t' 0:Documentation example for options, input "ListBee" >line: {tst ListBeep }{} >COMPADD:{} >INSERT_POSITIONS:{12} test_code $options_matcher example1_list comptest $'tst NOList\tB\t' 0:Documentation example for options, input "NOList" >line: {tst NOList}{} >COMPADD:{} >INSERT_POSITIONS:{10} >NO:{NOListambiguous} >NO:{NOListbeep} >NO:{NOListpacked} >NO:{NOListrowsfirst} >NO:{NOListtypes} >line: {tst NOListBeep }{} >COMPADD:{} >INSERT_POSITIONS:{14} 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:{} >INSERT_POSITIONS:{11} >NO:{NO_Listambiguous} >NO:{NO_Listbeep} >NO:{NO_Listpacked} >NO:{NO_Listrowsfirst} >NO:{NO_Listtypes} >line: {tst NO_List__}{} >COMPADD:{} >INSERT_POSITIONS:{13} >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:{} >INSERT_POSITIONS:{17} 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:{} >INSERT_POSITIONS:{6} >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:{} >INSERT_POSITIONS:{} >line: {tst __N__o}{} >COMPADD:{} >INSERT_POSITIONS:{} >line: {tst __N__o___}{} >COMPADD:{} >INSERT_POSITIONS:{} >line: {tst __N__o___list_}{} >COMPADD:{} >INSERT_POSITIONS:{} >line: {tst __N__o___list_beep__}{} >COMPADD:{} >INSERT_POSITIONS:{} 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:{} >INSERT_POSITIONS:{6} >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:{} >INSERT_POSITIONS:{} >line: {tst __No___}{} >COMPADD:{} >INSERT_POSITIONS:{} >line: {tst __No___list_}{} >COMPADD:{} >INSERT_POSITIONS:{} >line: {tst __No___list_beep__}{} >COMPADD:{} >INSERT_POSITIONS:{} test_code $options_matcher example1_list comptest $'tst ___\tlist_\tbeep__\t' 0:Documentation example for options, input "___\tlist_\tbeep__\t" >line: {tst ___}{} >COMPADD:{} >INSERT_POSITIONS:{7} >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:{} >INSERT_POSITIONS:{12} >NO:{___list_ambiguous} >NO:{___list_beep} >NO:{___list_packed} >NO:{___list_rowsfirst} >NO:{___list_types} >line: {tst ___list_beep__ }{} >COMPADD:{} >INSERT_POSITIONS:{18} test_code 'B:[nN][oO]= M:_= M:{A-Z}={a-z}' example1_list comptest $'tst __no_listbe\t' 0:Documentation example for options, input "__no_listbe" >line: {tst __no_listbeep }{} >COMPADD:{} >INSERT_POSITIONS:{17} test_code 'B:[nN][oO]= M:_= M:{A-Z}={a-z}' example1_list comptest $'tst nonono_listbe\t' 0:Documentation example for options, input "nonono_listbe" >line: {tst nonono_listbeep }{} >COMPADD:{} >INSERT_POSITIONS:{19} 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:{} >INSERT_POSITIONS:{6} >NO:{abC} >NO:{abc} >line: {tst abC }{} >COMPADD:{} >INSERT_POSITIONS:{7} 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:{} >INSERT_POSITIONS:{5} >NO:{ABC} >NO:{Abc} >line: {tst ABC}{} >COMPADD:{} >INSERT_POSITIONS:{5} 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:{} >INSERT_POSITIONS:{6} >NO:{aBC} >NO:{aBc} >line: {tst aBC}{} >COMPADD:{} >INSERT_POSITIONS:{6} 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:{} >INSERT_POSITIONS:{5:7} >line: {tst a}{BC} >COMPADD:{} >INSERT_POSITIONS:{5:7} >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:{} >INSERT_POSITIONS:{21} 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:{} >INSERT_POSITIONS:{18} >line: {tst comp.graphics.a}{} >COMPADD:{} >INSERT_POSITIONS:{19} >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:{} >INSERT_POSITIONS:{23} >line: {tst comp.graphics.apps.p}{} >COMPADD:{} >INSERT_POSITIONS:{24} >NO:{comp.graphics.apps.pagemaker} >NO:{comp.graphics.apps.paint-shop-pro} >NO:{comp.graphics.apps.photoshop} >line: {tst comp.graphics.apps.pa}{} >COMPADD:{} >INSERT_POSITIONS:{25} >NO:{comp.graphics.apps.pagemaker} >NO:{comp.graphics.apps.paint-shop-pro} >line: {tst comp.graphics.apps.pagemaker }{} >COMPADD:{} >INSERT_POSITIONS:{32} 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:{} >INSERT_POSITIONS:{32} 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:{} >INSERT_POSITIONS:{25} >line: {tst comp.graphics.apps.pagemaker }{} >COMPADD:{} >INSERT_POSITIONS:{32} 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:{} >INSERT_POSITIONS:{23} >line: {tst veryverylongfile.c veryverylongheader.h }{} >COMPADD:{} >INSERT_POSITIONS:{44} 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:{} >INSERT_POSITIONS:{} 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:{} >INSERT_POSITIONS:{} 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:{} >INSERT_POSITIONS:{4} >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 5}{23} >COMPADD:{} >INSERT_POSITIONS:{5:7} >line: {tst 5}{23} >COMPADD:{} >INSERT_POSITIONS:{5:7} >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:{} >INSERT_POSITIONS:{10} >line: {tst FooHoo 5bar234 }{} >COMPADD:{} >INSERT_POSITIONS:{18} 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:{} >INSERT_POSITIONS:{} test_code $workers_7311_matcher workers_7311_list comptest $'tst a\t\t-d.\t' 0:Bug from workers_7311 >line: {tst Abc}{} >COMPADD:{} >INSERT_POSITIONS:{7} >line: {tst Abc}{} >COMPADD:{} >INSERT_POSITIONS:{7} >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:{} >INSERT_POSITIONS:{31} 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:{} >INSERT_POSITIONS:{5} 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:{} >INSERT_POSITIONS:{13} >line: {tst build.out}{} >COMPADD:{} >INSERT_POSITIONS:{13} >NO:{build.out} >NO:{build.out1} >NO:{build.out2} >line: {tst build.out}{} >COMPADD:{} >INSERT_POSITIONS:{13} 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:{} >INSERT_POSITIONS:{} 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:{} >INSERT_POSITIONS:{4:5:6} 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:{} >INSERT_POSITIONS:{6} >NO:{c00.abc} >NO:{c01.abc.def.00.0} >line: {tst c00.}{} >COMPADD:{} >INSERT_POSITIONS:{7:8} >NO:{c00.abc} >NO:{c01.abc.def.00.0} >line: {tst c00.abc }{} >COMPADD:{} >INSERT_POSITIONS:{11} workers_12995a_matcher='r:|/=* r:|=*' workers_12995a_list=(u1 u1/q1 u1/q1/e1 u2 u2/q1 u2/q1/e2 u2/q1/e2/a1 u2/q1/e2/a2 u3 u3/q1 u4 u4/q u4/q/a1 u4/q/a2) test_code $workers_12995a_matcher workers_12995a_list comptest $'tst u/q/a\t' 0:First test from workers 12995 >line: {tst u4/q/a}{} >COMPADD:{} >INSERT_POSITIONS:{10} workers_12995b_matcher='m:{a-z}={A-Z} r:|/=* r:|=*' workers_12995b_list=(../Completion/Core ../Completion/Commands) test_code $workers_12995b_matcher workers_12995b_list comptest $'tst ../com/cor\002\002\002\002\002\002\002\t' 0:Second test from workers 12995 >line: {tst ../Completion/Core }{} >COMPADD:{} >INSERT_POSITIONS:{22} workers_13320_matcher='r:|[.,_-]=** r:[^0-9]||[0-9]=**' workers_13320_list=(glibc-2.1.94-3.i386.rpm glibc-devel-2.1.94-3.i386.rpm) workers_13320_list=($workers_13320_list glibc-profile-2.1.94-3.i386.rpm) test_code $workers_13320_matcher workers_13320_list comptest $'tst glibc-2.1\t' 0:Test from workers 13320 >line: {tst glibc}{-2.1.94-3.i386.rpm} >COMPADD:{} >INSERT_POSITIONS:{9:27} test_code $workers_13320_matcher workers_13320_list comptest $'tst g-2\t' 0:Test from workers 13320 >line: {tst glibc}{-2.1.94-3.i386.rpm} >COMPADD:{} >INSERT_POSITIONS:{9:27} workers_13345a_matcher='r:|[.,_-]=**' workers_13345a_list=(A.B.C A.B.C.D A.C) test_code $workers_13345a_matcher workers_13345a_list comptest $'tst A.C\t' 0:First test from workers 13345 >line: {tst A.C}{} >COMPADD:{} >INSERT_POSITIONS:{5:7} >NO:{A.B.C} >NO:{A.B.C.D} >NO:{A.C} workers_13345b_matcher='r:|[.,_-]=** r:[^0-9]||[0-9]=**' workers_13345b_list=(a-b_1_2_2 a-b_2_0.gz a-b_2_0.zip) test_code $workers_13345b_matcher workers_13345b_list comptest $'tst a-b_2\t' 0:Second test from workers 13345 >line: {tst a-b_2_}{} >COMPADD:{} >INSERT_POSITIONS:{8:10} workers_13382_matcher='r:|.=**' workers_13382_list=(a.b.c a.b.c.d aA.bB.cB.dA aA.bB.cC.dD aD.bC.cB.dA aA.bC.cB.dA) test_code $workers_13382_matcher workers_13382_list comptest $'tst a...\tA\tC\t' 0:Test for insert positions >line: {tst a.b.c.d}{} >COMPADD:{} >INSERT_POSITIONS:{5:7:9:11} >line: {tst a.b}{.cB.dA} >COMPADD:{} >INSERT_POSITIONS:{5:7:13} >line: {tst a}{.bC.cB.dA} >COMPADD:{} >INSERT_POSITIONS:{5:14} >NO:{aA.bC.cB.dA} >NO:{aD.bC.cB.dA} %clean zmodload -ui zsh/zpty