You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

125 lines
4.5 KiB

package require tcltest
namespace eval ::testspace {
namespace import ::tcltest::*
variable common {
set result ""
}
test define_tstr_template1 {Test basic tstr substitution finds vars in namespace in which define was called}\
-setup $common -body {
namespace eval whatever {
set plus +++
set minus ---
punk::args::define {
@id -id ::testspace::test1
@values
param -type string -default "${$plus}XXX${$minus}YYY"
}
}
set argd [punk::args::parse {} withid ::testspace::test1]
set vals [dict get $argd values]
lappend result [dict get $vals param]
}\
-cleanup {
namespace delete ::testspace::whatever
}\
-result [list\
+++XXX---YYY
]
test define_tstr_template2 {Test basic tstr substitution when @dynamic}\
-setup $common -body {
namespace eval whatever {
set plus +++
set minus ---
punk::args::define {
@dynamic
@id -id ::testspace::test2
@values
param -type string -default "${$plus}XXX${$minus}YYY"
}
}
set argd [punk::args::parse {} withid ::testspace::test2]
puts ">>>>define_tstr_template2 argd:$argd"
set vals [dict get $argd values]
lappend result [dict get $vals param]
}\
-cleanup {
namespace delete ::testspace::whatever
}\
-result [list\
+++XXX---YYY
]
test define_tstr_template3 {Test double tstr substitution when @dynamic}\
-setup $common -body {
variable test_list
set test_list {A B C}
proc ::testspace::get_list {} {
variable test_list
return $test_list
}
namespace eval whatever {
set plus +++
set minus ---
set DYN_LIST {${[::testspace::get_list]}}
set DYN_CLOCKSECONDS {${[clock seconds]}}
punk::args::define {
@dynamic
@id -id ::testspace::test2
@values
param1 -type string -default "${$plus}XXX${$minus}YYY"
param2 -type list -default "${$DYN_LIST}"
param3 -type string -default "${[clock seconds]}"
param4 -type string -default "${$DYN_CLOCKSECONDS}"
}
}
set argd [punk::args::parse {} withid ::testspace::test2]
set vals [dict get $argd values]
lappend result [dict get $vals param1]
lappend result [dict get $vals param2]
set c1_at_define [dict get $vals param3]
set c1_at_resolve [dict get $vals param4]
#update test_list to ensure parse is actually dynamic
set ::testspace::test_list {X Y Z}
#update plus - should not affect output as it is resolved at define time
set ::testspace::whatever::plus "new+"
#unset minus - should not cause error
unset ::testspace::whatever::minus
after 1100 ;#ensure more than 1 sec apart
set argd [punk::args::parse {} withid ::testspace::test2]
set vals [dict get $argd values]
lappend result [dict get $vals param1]
lappend result [dict get $vals param2]
set c2_at_define [dict get $vals param3]
set c2_at_resolve [dict get $vals param4]
if {$c1_at_define == $c2_at_define} {
lappend result "OK_define_time_var_match"
} else {
lappend result "UNEXPECTED_define_time_var_mismatch"
}
if {$c1_at_resolve < $c2_at_resolve} {
lappend result "OK_resolve_time_2_greater"
} else {
lappend result "UNEXPECTED_resolve_time_2_not_greater"
}
}\
-cleanup {
namespace delete ::testspace::whatever
}\
-result [list\
+++XXX---YYY {A B C} +++XXX---YYY {X Y Z} OK_define_time_var_match OK_resolve_time_2_greater
]
}