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.
142 lines
5.3 KiB
142 lines
5.3 KiB
|
|
package require tcltest |
|
|
|
namespace eval ::testspace { |
|
namespace import ::tcltest::* |
|
variable common { |
|
set result "" |
|
} |
|
|
|
test parse_withdef_leaders_min_max {Test anonymous leaders with @leaders -min and -max}\ |
|
-setup $common -body { |
|
set argd [punk::args::parse {a b c d} withdef {@leaders -min 1 -max 3} ] |
|
lappend result [dict get $argd leaders] |
|
lappend result [dict get $argd values] |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
{0 a 1 b 2 c} {3 d} |
|
] |
|
|
|
test parse_withdef_leaders_ordering_defaults {Test ordering of leaders when some have defaults}\ |
|
-setup $common -body { |
|
set argd [punk::args::parse {a b} withdef @leaders x {y -default 1}] |
|
set vals [dict get $argd leaders] |
|
set result $vals |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
x a y b |
|
] |
|
|
|
test parse_withdef_option_ordering_defaults {Test ordering of options when some have defaults}\ |
|
-setup $common -body { |
|
#for consistency with leaders and values dicts - try to maintain definition order for options too |
|
set argd [punk::args::parse {-x a -y b} withdef @opts -x {-y -default 1}] |
|
set vals [dict get $argd opts] |
|
set result $vals |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
-x a -y b |
|
] |
|
|
|
test parse_withdef_option_ordering_defaults2 {Test ordering of options when some have defaults and -any is true}\ |
|
-setup $common -body { |
|
#for consistency with leaders and values dicts - try to maintain definition order for options too |
|
set argd [punk::args::parse {-blah etc -x a -y b -solo -z c} withdef {@opts -any 1} -x {-y -default 1} {-solo -type none} -z] |
|
set vals [dict get $argd opts] |
|
set result $vals |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
-x a -y b -solo 1 -z c -blah etc |
|
] |
|
|
|
test parse_withdef_values_ordering_defaults {Test ordering of values when some have defaults}\ |
|
-setup $common -body { |
|
set argd [punk::args::parse {a b} withdef @values x {y -default 1}] |
|
set vals [dict get $argd values] |
|
set result $vals |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
x a y b |
|
] |
|
|
|
|
|
test parse_withdef_leader_multiple {Test named leader with -multiple true}\ |
|
-setup $common -body { |
|
#should not error |
|
set argd [punk::args::parse {a b c} withdef {@leaders -min 0} {L -multiple 1} {@values -min 1 -max 1} V] |
|
lappend result [dict get $argd leaders] |
|
lappend result [dict get $argd values] |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
{L {a b}} {V c} |
|
] |
|
|
|
test parse_withdef_leader_min_max {Test unnamed leaders with -min and -max}\ |
|
-setup $common -body { |
|
#should not error - should allocate d to values |
|
set argd [punk::args::parse {a b c d} withdef {@leaders -min 1 -max 4} {@values -min 1 -max 1}] |
|
lappend result [dict get $argd leaders] |
|
lappend result [dict get $argd values] |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
{0 a 1 b 2 c} {3 d} |
|
] |
|
|
|
test parse_withdef_leader_stride {Test stride leaders}\ |
|
-setup $common -body { |
|
#see for example ::tcl::dict::create which has a stride of 2 |
|
set argd [punk::args::parse {k v e k1 v1 k2 v2} withdef {@leaders} {"key val etc" -multiple 0} {"key val" -multiple 1} {@values -min 0 -max 0}] |
|
lappend result [dict get $argd leaders] |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
{{key val etc} {k v e} {key val} {{k1 v1} {k2 v2}}} |
|
] |
|
|
|
test parse_withdef_value_stride {Test stride values}\ |
|
-setup $common -body { |
|
#see for example ::tcl::dict::create which has a stride of 2 |
|
set argd [punk::args::parse {k v e k1 v1 k2 v2} withdef {@values} {"key val etc" -multiple 0} {"key val" -multiple 1}] |
|
lappend result [dict get $argd values] |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
{{key val etc} {k v e} {key val} {{k1 v1} {k2 v2}}} |
|
] |
|
|
|
test parse_withdef_value_stride_error {Test stride values with error due to not enough args for stride}\ |
|
-setup $common -body { |
|
#see for example ::tcl::dict::create which has a stride of 2 |
|
if {[catch {punk::args::parse {k v} withdef {@values} {"key val etc" -multiple 0}} emsg eopts]} { |
|
set expected [dict get $eopts -errorcode] |
|
if {[lindex $expected 0] eq "PUNKARGS" && [lindex $expected 1] eq "VALIDATION" && [lindex $expected 2 0] eq "stridevaluecount"} { |
|
lappend result "RECEIVED_EXPECTED_ERROR" |
|
} else { |
|
lappend result "WRONG_ERROR_RECEIVED - $expected (expected PUNKARGS VALIDATION {stridevaluecount ...} ..." |
|
} |
|
} else { |
|
lappend result "MISSING_REQUIRED_ERROR" |
|
} |
|
}\ |
|
-cleanup { |
|
}\ |
|
-result [list\ |
|
"RECEIVED_EXPECTED_ERROR" |
|
] |
|
} |