@@ -599,6 +599,7 @@ unsetenv_var TESTSUITE_USE_MODULEPATH
599599if {$is_symlink_supported && $os_name ne {msys}} {
600600
601601setenv_var MODULES_TERM_WIDTH 200
602+ setenv_var MODULES_ADVANCED_VERSION_SPEC 1
602603set mp $modpath.provide
603604
604605file mkdir $mp
@@ -776,13 +777,139 @@ testouterr_cmd sh {avail} OK {bar/1 bar/2 foo/1.0 foo/2.0 foo/9.0 provide/1
776777testouterr_cmd sh {avail provide} OK {provide/1 provide/2(foo) provide/3 }
777778
778779
780+ setenv_var MODULES_AVAIL_OUTPUT sym:tag:provided-alias
781+
782+ setenv_var TESTSUITE_PROVIDE multiple_and_forbidden
783+
784+ testouterr_cmd sh {avail} OK {bar/1 bar/2 foo/1.0 foo/2.0 foo/9.0 provide/1 <F> provide/2 provide/3 }
785+ testouterr_cmd sh {avail provide} OK {provide/1 <F> provide/2 provide/3 }
786+ testouterr_cmd sh {avail provide/1} OK {provide/1 <F> }
787+ testouterr_cmd sh {avail unk} OK {}
788+ testouterr_cmd sh {avail quux/1} OK {}
789+
790+ testouterr_cmd sh {avail envvar:FOO} OK {}
791+ testouterr_cmd sh {avail provide envvar:FOO} OK {}
792+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
793+ testouterr_cmd sh {avail quux/1 envvar:FOO} OK {}
794+
795+
796+ setenv_var TESTSUITE_PROVIDE multiple_and_alias_forbidden
797+
798+ testouterr_cmd sh {avail} OK {bar/1 bar/2 baz/1(@) foo/1(@) foo/1.0 foo/2.0 foo/9.0 provide/1 provide/2 provide/3 quux/1(@) <F> qux/1(@) }
799+ testouterr_cmd sh {avail provide} OK {provide/1 provide/2 provide/3 }
800+ testouterr_cmd sh {avail provide/1} OK {provide/1 }
801+ testouterr_cmd sh {avail unk} OK {}
802+ testouterr_cmd sh {avail quux/1} OK {quux/1(@) <F> }
803+
804+ testouterr_cmd sh {avail envvar:FOO} OK {provide/1 }
805+ testouterr_cmd sh {avail provide envvar:FOO} OK {provide/1 }
806+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
807+ testouterr_cmd sh {avail quux/1 envvar:FOO} OK {}
808+
809+
810+ setenv_var TESTSUITE_PROVIDE multiple_and_family_forbidden
811+
812+ testouterr_cmd sh {avail} OK {bar/1 bar/2 foo/1.0 foo/2.0 foo/9.0 provide/1 provide/2 provide/3 quux(@) <F> }
813+ testouterr_cmd sh {avail provide/1} OK {provide/1 }
814+ testouterr_cmd sh {avail unk} OK {}
815+ testouterr_cmd sh {avail quux} OK {quux(@) <F> }
816+
817+ testouterr_cmd sh {avail envvar:FOO} OK {provide/1 }
818+ testouterr_cmd sh {avail provide envvar:FOO} OK {provide/1 }
819+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
820+ testouterr_cmd sh {avail quux envvar:FOO} OK {}
821+
822+
823+ setenv_var TESTSUITE_PROVIDE multiple_and_expired
824+
825+ testouterr_cmd sh {avail} OK {bar/1 bar/2 foo/1.0 foo/2.0 foo/9.0 provide/1 <F> provide/2 provide/3 }
826+ testouterr_cmd sh {avail provide} OK {provide/1 <F> provide/2 provide/3 }
827+ testouterr_cmd sh {avail provide/1} OK {provide/1 <F> }
828+ testouterr_cmd sh {avail unk} OK {}
829+ testouterr_cmd sh {avail quux/1} OK {}
830+
831+ testouterr_cmd sh {avail envvar:FOO} OK {}
832+ testouterr_cmd sh {avail provide envvar:FOO} OK {}
833+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
834+ testouterr_cmd sh {avail quux envvar:FOO} OK {}
835+
836+
837+ setenv_var TESTSUITE_PROVIDE multiple_and_alias_expired
838+
839+ testouterr_cmd sh {avail} OK {bar/1 bar/2 baz/1(@) foo/1(@) foo/1.0 foo/2.0 foo/9.0 provide/1 provide/2 provide/3 quux/1(@) <F> qux/1(@) }
840+ testouterr_cmd sh {avail provide} OK {provide/1 provide/2 provide/3 }
841+ testouterr_cmd sh {avail provide/1} OK {provide/1 }
842+ testouterr_cmd sh {avail unk} OK {}
843+ testouterr_cmd sh {avail quux/1} OK {quux/1(@) <F> }
844+
845+ testouterr_cmd sh {avail envvar:FOO} OK {provide/1 }
846+ testouterr_cmd sh {avail provide envvar:FOO} OK {provide/1 }
847+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
848+ testouterr_cmd sh {avail quux/1 envvar:FOO} OK {}
849+
850+
851+ setenv_var TESTSUITE_PROVIDE multiple_and_family_expired
852+
853+ testouterr_cmd sh {avail} OK {bar/1 bar/2 foo/1.0 foo/2.0 foo/9.0 provide/1 provide/2 provide/3 quux(@) <F> }
854+ testouterr_cmd sh {avail provide/1} OK {provide/1 }
855+ testouterr_cmd sh {avail unk} OK {}
856+ testouterr_cmd sh {avail quux} OK {quux(@) <F> }
857+
858+ testouterr_cmd sh {avail envvar:FOO} OK {provide/1 }
859+ testouterr_cmd sh {avail provide envvar:FOO} OK {provide/1 }
860+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
861+ testouterr_cmd sh {avail quux envvar:FOO} OK {}
862+
863+
864+ setenv_var TESTSUITE_PROVIDE multiple_and_hidden
865+
866+ testouterr_cmd sh {avail} OK {bar/1 bar/2 baz/1(@) foo/1(@) foo/1.0 foo/2.0 foo/9.0 provide/2 provide/3 quux/1(@) qux/1(@) }
867+ testouterr_cmd sh {avail provide} OK {provide/2 provide/3 }
868+ testouterr_cmd sh {avail provide/1} OK {provide/1 <H> }
869+ testouterr_cmd sh {avail unk} OK {}
870+ testouterr_cmd sh {avail quux/1} OK {quux/1(@) }
871+
872+ testouterr_cmd sh {avail envvar:FOO} OK {}
873+ testouterr_cmd sh {avail provide envvar:FOO} OK {}
874+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
875+ testouterr_cmd sh {avail quux envvar:FOO} OK {}
876+
877+
878+ setenv_var TESTSUITE_PROVIDE multiple_and_alias_hidden
879+
880+ testouterr_cmd sh {avail} OK {bar/1 bar/2 baz/1(@) foo/1(@) foo/1.0 foo/2.0 foo/9.0 provide/1 provide/2 provide/3 qux/1(@) }
881+ testouterr_cmd sh {avail provide} OK {provide/1 provide/2 provide/3 }
882+ testouterr_cmd sh {avail provide/1} OK {provide/1 }
883+ testouterr_cmd sh {avail unk} OK {}
884+ testouterr_cmd sh {avail quux/1} OK {quux/1(@) <H> }
885+
886+ testouterr_cmd sh {avail envvar:FOO} OK {provide/1 }
887+ testouterr_cmd sh {avail provide envvar:FOO} OK {provide/1 }
888+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
889+ testouterr_cmd sh {avail quux/1 envvar:FOO} OK {}
890+
891+
892+ setenv_var TESTSUITE_PROVIDE multiple_and_family_hidden
893+
894+ testouterr_cmd sh {avail} OK {bar/1 bar/2 foo/1.0 foo/2.0 foo/9.0 provide/1 provide/2 provide/3 }
895+ testouterr_cmd sh {avail provide/1} OK {provide/1 }
896+ testouterr_cmd sh {avail unk} OK {}
897+ testouterr_cmd sh {avail quux} OK {quux(@) <H> }
898+
899+ testouterr_cmd sh {avail envvar:FOO} OK {provide/1 }
900+ testouterr_cmd sh {avail provide envvar:FOO} OK {provide/1 }
901+ testouterr_cmd sh {avail unk envvar:FOO} OK {}
902+ testouterr_cmd sh {avail quux envvar:FOO} OK {}
903+
904+
779905file delete $mp/foo
780906file delete $mp/bar
781907file delete $mp/provide
782908file delete $mp/.modulerc
783909file delete $mp
784910
785911unsetenv_var MODULES_TERM_WIDTH
912+ setenv_var MODULES_ADVANCED_VERSION_SPEC 0
786913
787914} else {
788915 send_user "\tskipping provided-alias tests as specific test setup cannot be built\n"
0 commit comments