Skip to content

Commit 19c68ee

Browse files
committed
ts: test append/subtract config option value in 70/220
1 parent d4c4427 commit 19c68ee

File tree

1 file changed

+177
-0
lines changed

1 file changed

+177
-0
lines changed

testsuite/modules.70-maint/220-config.exp

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,19 @@ array set configlockable [list\
208208
implicit_default 1\
209209
]
210210

211+
array set configkind [list\
212+
avail_output l\
213+
avail_terse_output l\
214+
colors l\
215+
list_output l\
216+
list_terse_output l\
217+
protected_envvars l\
218+
shells_with_ksh_fpath l\
219+
tag_abbrev l\
220+
tag_color_name l\
221+
variant_shortcut l\
222+
]
223+
211224
set statelist [list always_read_full_file autoinit clock_seconds cmdline commandname domainname error_count extra_siteconfig_loaded false_rendered force hiding_threshold inhibit_errreport inhibit_interp init_error_report is_stderr_tty is_win kernelversion lm_info_cached machine modulefile nodename os osversion paginate path_separator report_format reportfd return_false shell shelltype siteconfig_loaded sub1_separator sub2_separator subcmd subcmd_args supported_shells tcl_ext_lib_loaded tcl_version term_columns usergroups username]
212225

213226
if {[is_quick_mode]} {
@@ -514,6 +527,170 @@ set ans [list [list set $configvar(auto_handling) 0]]
514527
testouterr_cmd_re sh "config --dump-state auto_handling 0" $ans {}
515528

516529

530+
#
531+
# config value append or subtract
532+
#
533+
534+
if {![is_quick_mode]} {
535+
536+
# basic test on all colon-separated list configuration option
537+
foreach param [array names configkind] {
538+
if {$configkind($param) eq {l}} {
539+
if {[info exists configvalidkind($param)] && $configvalidkind($param)\
540+
eq {eltlist}} {
541+
set val [lindex $configvalid($param) 1]
542+
} else {
543+
set val bar
544+
}
545+
546+
# append test
547+
set ans [list [list set $configvar($param) $configset($param):$val]]
548+
testouterr_cmd sh "config $param +$val" $ans {}
549+
550+
# subtract test
551+
set ans [list [list set $configvar($param) {}]]
552+
testouterr_cmd sh "config $param -$configset($param)" $ans {}
553+
}
554+
}
555+
556+
557+
# detailed tests on one representative config
558+
set param avail_output
559+
set envvar $configvar($param)
560+
561+
# detailed append tests
562+
563+
# no value currently defined
564+
unsetenv_var $envvar
565+
set ans [list [list set $envvar $configdfl($param):variant]]
566+
testouterr_cmd sh "config $param +variant" $ans {}
567+
568+
# value already defined in default
569+
set ans [list [list set $envvar $configdfl($param)]]
570+
testouterr_cmd sh "config $param +$configset($param)" $ans {}
571+
572+
# two-value add, one already defined in default
573+
set ans [list [list set $envvar $configdfl($param):variant]]
574+
testouterr_cmd sh "config $param +key:variant" $ans {}
575+
testouterr_cmd sh "config $param +variant:key" $ans {}
576+
testouterr_cmd sh "config $param +modulepath:variant:key" $ans {}
577+
578+
# two value add, both already defined in default
579+
set ans [list [list set $envvar $configdfl($param)]]
580+
testouterr_cmd sh "config $param +modulepath:key" $ans {}
581+
582+
# empty value defined
583+
setenv_var $envvar {}
584+
set ans [list [list set $envvar variant]]
585+
testouterr_cmd sh "config $param +variant" $ans {}
586+
587+
# empty value defined, two value add
588+
set ans [list [list set $envvar variant:sym]]
589+
testouterr_cmd sh "config $param +variant:sym" $ans {}
590+
591+
# value already defined
592+
setenv_var $envvar $configset($param)
593+
set ans [list [list set $envvar $configset($param)]]
594+
testouterr_cmd sh "config $param +$configset($param)" $ans {}
595+
596+
# two-value add, none already defined
597+
set ans [list [list set $envvar $configset($param):key:alias]]
598+
testouterr_cmd sh "config $param +key:alias" $ans {}
599+
600+
# unauthorized value
601+
set tserr "$error_msgs: Invalid element in value list for config. option '$param'\n Allowed elements are: $configvalid($param) (separated by ':')"
602+
testouterr_cmd sh "config $param +foo" ERR $tserr
603+
604+
# two-value add, 1 unauthorized
605+
testouterr_cmd sh "config $param +foo:variant" ERR $tserr
606+
607+
# two-value add, both unauthorized
608+
testouterr_cmd sh "config $param +foo:bar" ERR $tserr
609+
610+
# multiple value add, with one empty element in front
611+
testouterr_cmd sh "config $param +:variant:key" ERR $tserr
612+
613+
# multiple value add, with one empty element in the middle
614+
testouterr_cmd sh "config $param +variant::key" ERR $tserr
615+
616+
# multiple value add, with one empty element at the end
617+
testouterr_cmd sh "config $param +variant:key:" ERR $tserr
618+
619+
620+
# detailed subtract tests
621+
622+
# no value currently defined
623+
unsetenv_var $envvar
624+
set ans [list [list set $envvar $configdfl($param)]]
625+
testouterr_cmd sh "config $param -variant" $ans {}
626+
627+
# value already defined in default
628+
set ans [list [list set $envvar [join [lsearch -exact -all -inline -not\
629+
[split $configdfl($param) :] $configset($param)] :]]]
630+
testouterr_cmd sh "config $param -$configset($param)" $ans {}
631+
632+
# two-value del, one already defined in default
633+
set ans [list [list set $envvar [join [lsearch -exact -all -inline -not\
634+
[split $configdfl($param) :] key] :]]]
635+
testouterr_cmd sh "config $param -key:variant" $ans {}
636+
testouterr_cmd sh "config $param -variant:key" $ans {}
637+
638+
# two value del, both already defined in default
639+
set ans [list [list set $envvar [join [lsearch -regexp -all -inline -not\
640+
[split $configdfl($param) :] {^(key|modulepath)$}] :]]]
641+
testouterr_cmd sh "config $param -modulepath:key" $ans {}
642+
643+
# empty value defined
644+
setenv_var $envvar {}
645+
set ans [list [list set $envvar {}]]
646+
testouterr_cmd sh "config $param -variant" $ans {}
647+
648+
# empty value defined, two value add
649+
set ans [list [list set $envvar {}]]
650+
testouterr_cmd sh "config $param -variant:sym" $ans {}
651+
652+
# value already defined
653+
setenv_var $envvar $configset($param)
654+
set ans [list [list set $envvar {}]]
655+
testouterr_cmd sh "config $param -$configset($param)" $ans {}
656+
657+
# two-value add, none already defined
658+
set ans [list [list set $envvar $configset($param)]]
659+
testouterr_cmd sh "config $param -key:alias" $ans {}
660+
661+
# unauthorized value
662+
set ans [list [list set $envvar $configset($param)]]
663+
testouterr_cmd sh "config $param -foo" $ans {}
664+
665+
# two-value add, 1 unauthorized
666+
testouterr_cmd sh "config $param -foo:variant" $ans {}
667+
668+
# two-value add, both unauthorized
669+
testouterr_cmd sh "config $param -foo:bar" $ans {}
670+
671+
# multiple value add, with one empty element in front
672+
testouterr_cmd sh "config $param -:variant:key" $ans {}
673+
674+
# multiple value add, with one empty element in the middle
675+
testouterr_cmd sh "config $param -variant::key" $ans {}
676+
677+
# multiple value add, with one empty element at the end
678+
testouterr_cmd sh "config $param -variant:key:" $ans {}
679+
680+
681+
# restore config test value
682+
setenv_var $envvar $configset($param)
683+
684+
# append/subtract on non-list option (value taken literally)
685+
set param contact
686+
set ans [list [list set $configvar($param) +foo]]
687+
testouterr_cmd_re sh "config $param +foo" $ans {}
688+
set ans [list [list set $configvar($param) -foo]]
689+
testouterr_cmd_re sh "config $param -foo" $ans {}
690+
691+
}
692+
693+
517694
#
518695
# Cleanup
519696
#

0 commit comments

Comments
 (0)