########################################################################## # TEPAM - Tcl's Enhanced Procedure and Argument Manager ########################################################################## # # proc_subproc.test: # This file is part of the enhanced procedure and argument manager's regression # test. It validates the declaration and call of the procedure sub commands. # # Copyright (C) 2009, 2010 Andreas Drollinger # # Id: proc_subproc.test ########################################################################## # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. ########################################################################## source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] testsNeedTcl 8.3 testsNeedTcltest 1.0 catch {namespace delete ::tepam} testing { useLocal tepam.tcl tepam } ######## Main procedure and sub procedures, top-down declaration ######## # Declaration test tepam-sp.dcl_td.dcl.1 "tepam, sub procedure top-down declaration - main procedure declaration" \ -body {tepam::procedure {MainProc1} {} {return Proc1}} \ -result "" -output "" test tepam-sp.dcl_td.dcl.2 "tepam, sub procedure top-down declaration - first sub procedure declaration" \ -body {tepam::procedure {MainProc1 SubProc1} {} {return Proc11}} \ -result "" -output "" test tepam-sp.dcl_td.dcl.3 "tepam, sub procedure top-down declaration - second sub procedure declaration" \ -body {tepam::procedure {MainProc1 SubProc2} {} {return Proc12}} \ -result "" -output "" test tepam-sp.dcl_td.dcl.4 "tepam, sub procedure top-down declaration - sub sub procedure declaration" \ -body {tepam::procedure {MainProc1 SubProc2 SubProc22} {} {return Proc122}} \ -result "" -output "" # Help test tepam-sp.dcl_td.hlp.1 "tepam, sub procedure top-down declaration - main procedure help" \ -body {MainProc1 -help} \ -result "" -output {SYNOPSIS\s+MainProc1\s+MainProc1 SubProc1\s+MainProc1 SubProc2\s+MainProc1 SubProc2 SubProc22\s*$} -match regexp test tepam-sp.dcl_td.hlp.2 "tepam, sub procedure top-down declaration - first sub procedure help" \ -body {MainProc1 SubProc1 -help} \ -result "" -output {SYNOPSIS\s+MainProc1 SubProc1\s+$} -match regexp test tepam-sp.dcl_td.hlp.3 "tepam, sub procedure top-down declaration - second sub procedure help" \ -body {MainProc1 SubProc2 -help} \ -result "" -output {SYNOPSIS\s+MainProc1 SubProc2\s+MainProc1 SubProc2 SubProc22\s*$} -match regexp test tepam-sp.dcl_td.hlp.4 "tepam, sub procedure top-down declaration - sub sub procedure help" \ -body {MainProc1 SubProc2 SubProc22 -help} \ -result "" -output {SYNOPSIS\s+MainProc1 SubProc2 SubProc22\s+$} -match regexp # Execution test tepam-sp.dcl_td.exe.1 "tepam, sub procedure top-down declaration - main procedure execution" \ -body {MainProc1} \ -result "Proc1" -output "" -match exact test tepam-sp.dcl_td.exe.2 "tepam, sub procedure top-down declaration - first sub procedure execution" \ -body {MainProc1 SubProc1} \ -result "Proc11" -output "" -match exact test tepam-sp.dcl_td.exe.3 "tepam, sub procedure top-down declaration - second sub procedure execution" \ -body {MainProc1 SubProc2} \ -result "Proc12" -output "" -match exact test tepam-sp.dcl_td.exe.4 "tepam, sub procedure top-down declaration - sub sub procedure execution" \ -body {MainProc1 SubProc2 SubProc22} \ -result "Proc122" -output "" -match exact ######## Main procedure and sub procedures, buttom-up declaration ######## # Declaration test tepam-sp.dcl_bu.dcl.1 "tepam, sub procedure buttom-up declaration - sub sub procedure declaration" \ -body {tepam::procedure {MainProc2 SubProc2 SubProc22} {} {return Proc222}} \ -result "" -output "" test tepam-sp.dcl_bu.dcl.2 "tepam, sub procedure buttom-up declaration - second sub procedure declaration" \ -body {tepam::procedure {MainProc2 SubProc2} {} {return Proc22}} \ -result "" -output "" test tepam-sp.dcl_bu.dcl.3 "tepam, sub procedure buttom-up declaration - first sub procedure declaration" \ -body {tepam::procedure {MainProc2 SubProc1} {} {return Proc21}} \ -result "" -output "" test tepam-sp.dcl_bu.dcl.4 "tepam, sub procedure buttom-up declaration - main procedure declaration" \ -body {tepam::procedure {MainProc2} {} {return Proc2}} \ -result "" -output "" # Help test tepam-sp.dcl_bu.hlp.1 "tepam, sub procedure buttom-down declaration - main procedure help" \ -body {MainProc2 -help} \ -result "" -output {SYNOPSIS\s+MainProc2\s+MainProc2 SubProc1\s+MainProc2 SubProc2\s+MainProc2 SubProc2 SubProc22\s*$} -match regexp test tepam-sp.dcl_bu.hlp.2 "tepam, sub procedure buttom-down declaration - first sub procedure help" \ -body {MainProc2 SubProc1 -help} \ -result "" -output {SYNOPSIS\s+MainProc2 SubProc1\s+$} -match regexp test tepam-sp.dcl_bu.hlp.3 "tepam, sub procedure buttom-down declaration - second sub procedure help" \ -body {MainProc2 SubProc2 -help} \ -result "" -output {SYNOPSIS\s+MainProc2 SubProc2\s+MainProc2 SubProc2 SubProc22\s*$} -match regexp test tepam-sp.dcl_bu.hlp.4 "tepam, sub procedure buttom-down declaration - sub sub procedure help" \ -body {MainProc2 SubProc2 SubProc22 -help} \ -result "" -output {SYNOPSIS\s+MainProc2 SubProc2 SubProc22\s+$} -match regexp # Execution test tepam-sp.dcl_bu.exe.1 "tepam, sub procedure buttom-up declaration - main procedure execution" \ -body {MainProc2} \ -result "Proc2" -output "" -match exact test tepam-sp.dcl_bu.exe.2 "tepam, sub procedure buttom-up declaration - first sub procedure execution" \ -body {MainProc2 SubProc1} \ -result "Proc21" -output "" -match exact test tepam-sp.dcl_bu.exe.3 "tepam, sub procedure buttom-up declaration - second sub procedure execution" \ -body {MainProc2 SubProc2} \ -result "Proc22" -output "" -match exact test tepam-sp.dcl_bu.exe.4 "tepam, sub procedure buttom-up declaration - sub sub procedure execution" \ -body {MainProc2 SubProc2 SubProc22} \ -result "Proc222" -output "" -match exact ######## Only sub procedures (no main procedure) ######## # Declaration test tepam-sp.dcl_sc.dcl.1 "tepam, sub procedure without main procedure - first sub procedure declaration" \ -body {tepam::procedure {MainProc3 SubProc1} {} {return Proc31}} \ -result "" -output "" test tepam-sp.dcl_sc.dcl.2 "tepam, sub procedure without main procedure - second sub procedure declaration" \ -body {tepam::procedure {MainProc3 SubProc2} {} {return Proc32}} \ -result "" -output "" test tepam-sp.dcl_sc.dcl.3 "tepam, sub procedure without main procedure - sub sub procedure declaration" \ -body {tepam::procedure {MainProc3 SubProc2 SubProc22} {} {return Proc322}} \ -result "" -output "" # Help test tepam-sp.dcl_sc.hlp.1 "tepam, sub procedure without main procedure - main procedure help" \ -body {MainProc3 -help} \ -result "" -output {SYNOPSIS\s+MainProc3 SubProc1\s+MainProc3 SubProc2\s+MainProc3 SubProc2 SubProc22\s*$} -match regexp test tepam-sp.dcl_sc.hlp.2 "tepam, sub procedure without main procedure - first sub procedure help" \ -body {MainProc3 SubProc1 -help} \ -result "" -output {SYNOPSIS\s+MainProc3 SubProc1\s+$} -match regexp test tepam-sp.dcl_sc.hlp.3 "tepam, sub procedure without main procedure - second sub procedure help" \ -body {MainProc3 SubProc2 -help} \ -result "" -output {SYNOPSIS\s+MainProc3 SubProc2\s+MainProc3 SubProc2 SubProc22\s*$} -match regexp test tepam-sp.dcl_sc.hlp.4 "tepam, sub procedure without main procedure - sub sub procedure help" \ -body {MainProc3 SubProc2 SubProc22 -help} \ -result "" -output {SYNOPSIS\s+MainProc3 SubProc2 SubProc22\s+$} -match regexp # Execution test tepam-sp.dcl_sc.exe.1 "tepam, sub procedure without main procedure - main procedure execution" \ -body {MainProc3} \ -returnCodes error -result {'::MainProc3' requires a subcommand} -output "" -match exact test tepam-sp.dcl_sc.exe.2 "tepam, sub procedure without main procedure - first sub procedure execution" \ -body {MainProc3 SubProc1} \ -result "Proc31" -output "" -match exact test tepam-sp.dcl_sc.exe.3 "tepam, sub procedure without main procedure - second sub procedure execution" \ -body {MainProc3 SubProc2} \ -result "Proc32" -output "" -match exact test tepam-sp.dcl_sc.exe.4 "tepam, sub procedure without main procedure - sub sub procedure execution" \ -body {MainProc3 SubProc2 SubProc22} \ -result "Proc322" -output "" -match exact ######## Specific tests about the help text ######## namespace eval ::TestNS { tepam::procedure {MainProc4} { -description "DescrMain" -args { {a0 -description "MainProc4 arg"} } -example {TestNS::MainProc4 "Hello0"} } {} tepam::procedure {MainProc4 SubProc1} { -description "DescrSub1" -args { {a1 -description "DescrSub1 arg"} } -example {TestNS::MainProc4 DescrSub1 "Hello1"} } {} tepam::procedure {MainProc4 SubProc2} { -description "DescrSub2" -args { {a2 -description "DescrSub2 arg"} } -example {TestNS::MainProc4 DescrSub2 "Hello2"} } {} tepam::procedure {MainProc4 SubProc3} { -description "DescrSub3" -args { {a3 -description "DescrSub3 arg"} } -example {TestNS::MainProc4 DescrSub3 "Hello3"} } {} tepam::procedure {MainProc4 SubProc3 SubSubProc31} { -description "SubSubProc31" -args { {a31 -description "DescrSubSub31 arg"} } -example {TestNS::MainProc4 DescrSub3 SubSubProc31 "Hello31"} } {} } test tepam-sp.help_main "tepam, main, sub and sub-sub procedures, help main" \ -body {::TestNS::MainProc4 -help} \ -result "" -output [join { {NAME} { TestNS::MainProc4} {SYNOPSIS} { TestNS::MainProc4} { } { MainProc4 arg} { TestNS::MainProc4 SubProc1} { } { DescrSub1 arg} { TestNS::MainProc4 SubProc2} { } { DescrSub2 arg} { TestNS::MainProc4 SubProc3} { } { DescrSub3 arg} { TestNS::MainProc4 SubProc3 SubSubProc31} { } { DescrSubSub31 arg} {DESCRIPTION} { TestNS::MainProc4} { DescrMain} { TestNS::MainProc4 SubProc1} { DescrSub1} { TestNS::MainProc4 SubProc2} { DescrSub2} { TestNS::MainProc4 SubProc3} { DescrSub3} { TestNS::MainProc4 SubProc3 SubSubProc31} { SubSubProc31} {EXAMPLE} { TestNS::MainProc4} { TestNS::MainProc4 "Hello0"} { TestNS::MainProc4 SubProc1} { TestNS::MainProc4 DescrSub1 "Hello1"} { TestNS::MainProc4 SubProc2} { TestNS::MainProc4 DescrSub2 "Hello2"} { TestNS::MainProc4 SubProc3} { TestNS::MainProc4 DescrSub3 "Hello3"} { TestNS::MainProc4 SubProc3 SubSubProc31} { TestNS::MainProc4 DescrSub3 SubSubProc31 "Hello31"} {} {} } "\n"] test tepam-sp.help_sp1 "tepam, main, sub and sub-sub procedures, help sub-proc 1" \ -body {::TestNS::MainProc4 SubProc1 -help} \ -result "" -output [join { {NAME} { TestNS::MainProc4 SubProc1} {SYNOPSIS} { TestNS::MainProc4 SubProc1} { } { DescrSub1 arg} {DESCRIPTION} { DescrSub1} {EXAMPLE} { TestNS::MainProc4 DescrSub1 "Hello1"} {} {} } "\n"] test tepam-sp.help_sp3 "tepam, main, sub and sub-sub procedures, help sub-proc 3" \ -body {::TestNS::MainProc4 SubProc3 -help} \ -result "" -output [join { {NAME} { TestNS::MainProc4 SubProc3} {SYNOPSIS} { TestNS::MainProc4 SubProc3} { } { DescrSub3 arg} { TestNS::MainProc4 SubProc3 SubSubProc31} { } { DescrSubSub31 arg} {DESCRIPTION} { TestNS::MainProc4 SubProc3} { DescrSub3} { TestNS::MainProc4 SubProc3 SubSubProc31} { SubSubProc31} {EXAMPLE} { TestNS::MainProc4 SubProc3} { TestNS::MainProc4 DescrSub3 "Hello3"} { TestNS::MainProc4 SubProc3 SubSubProc31} { TestNS::MainProc4 DescrSub3 SubSubProc31 "Hello31"} {} {} } "\n"] test tepam-sp.help_sp31 "tepam, main, sub and sub-sub procedures, help sub-sub-proc 3" \ -body {::TestNS::MainProc4 SubProc3 SubSubProc31 -help} \ -result "" -output [join { {NAME} { TestNS::MainProc4 SubProc3 SubSubProc31} {SYNOPSIS} { TestNS::MainProc4 SubProc3 SubSubProc31} { } { DescrSubSub31 arg} {DESCRIPTION} { SubSubProc31} {EXAMPLE} { TestNS::MainProc4 DescrSub3 SubSubProc31 "Hello31"} {} {} } "\n"] ######## With one unnamed argument ######## ######## That's all ######## ::tcltest::cleanupTests return ########################################################################## # Id: proc_subproc.test # Modifications: # # Revision 2015/03/05 21:50:55 droll # * Added a test to detect failures in generated help text for procedures that contain sub-commands. # # Revision 2010/02/11 21:50:55 droll # * TEPAM module checkin ##########################################################################