1##############################################################################
2#   Modules Revision 3.0
3#   Providing a flexible user environment
4#
5#   File:		modules.70-maint/%M%
6#   Revision:		%I%
7#   First Edition:	2019/11/08
8#   Last Mod.:		%U%, %G%
9#
10#   Authors:		Xavier Delaruelle, xavier.delaruelle@cea.fr
11#
12#   Description:	Testuite testsequence
13#   Command:
14#   Modulefiles:
15#   Sub-Command:
16#
17#   Comment:	%C{
18#           Test impact of range version specifier
19#		}C%
20#
21##############################################################################
22
23# ensure avail -t tests have implicit default enabled
24setenv_var MODULES_IMPLICIT_DEFAULT 1
25
26# ensure regular avail search match is set for these tests
27setenv_var MODULES_SEARCH_MATCH starts_with
28
29# ensure avail tests are made using in depth mode
30setenv_var MODULES_AVAIL_INDEPTH 1
31
32# ensure last matching element is returned when unloading modules
33setenv_var MODULES_UNLOAD_MATCH_ORDER returnlast
34
35set mp $modpath.2
36set mpre [regsub -all "\(\[.+?\]\)" $mp {\\\1}]
37
38# setup specific environment
39setenv_path_var MODULEPATH $mp
40
41
42#
43# check option enablement
44#
45
46set ans [list [list text $mp/extdfl/1.3.1]]
47set tserr $err_path'extdfl@:2.0'
48
49switch -- $install_advversspec {
50    n {testouterr_cmd sh {path extdfl@:2.0} OK $tserr}
51    y {testouterr_cmd sh {path extdfl@:2.0} $ans {}}
52}
53
54setenv_var MODULES_ADVANCED_VERSION_SPEC 0
55testouterr_cmd sh {path extdfl@:2.0} OK $tserr
56
57setenv_var MODULES_ADVANCED_VERSION_SPEC 1
58testouterr_cmd sh {path extdfl@:2.0} $ans {}
59
60setenv_var MODULES_ADVANCED_VERSION_SPEC badvalue
61switch -- $install_advversspec {
62    n {testouterr_cmd sh {path extdfl@:2.0} OK $tserr}
63    y {testouterr_cmd sh {path extdfl@:2.0} $ans {}}
64}
65
66
67# enable advanced version spec for next tests
68setenv_var MODULES_ADVANCED_VERSION_SPEC 1
69
70
71#
72# check version spec parsing
73#
74
75testouterr_cmd sh {load @::1} ERR "$err_specvers'::1'"
76testouterr_cmd sh {load @::} ERR "$err_specvers'::'"
77testouterr_cmd sh {load @1::} ERR "$err_specvers'1::'"
78testouterr_cmd sh {load mod@::1} ERR "$err_specvers'::1'"
79testouterr_cmd sh {load mod@::} ERR "$err_specvers'::'"
80testouterr_cmd sh {load mod@1::} ERR "$err_specvers'1::'"
81testouterr_cmd sh {load mod@1,:,} ERR "$err_specvers'1,:,'"
82testouterr_cmd sh {load mod@,:} ERR "$err_specvers',:'"
83testouterr_cmd sh {load mod@1.3:1.2} ERR "$err_rangevers'1.3:1.2'"
84testouterr_cmd sh {load mod@,<} ERR "$err_specvers',<'"
85testouterr_cmd sh {load mod@:<} ERR "$err_rangevers':<'"
86testouterr_cmd sh {load mod@1/1:2} ERR "$err_specvers'1/1:2'"
87testouterr_cmd sh {load mod@1/:2/} ERR "$err_specvers'1/:2/'"
88testouterr_cmd sh {load mod@.1:} ERR "$err_rangevers'.1:'"
89testouterr_cmd sh {load mod@:foo} ERR "$err_rangevers':foo'"
90
91set ans [list [list text $mp/advvers4/2.1]]
92testouterr_cmd sh {path advvers5@8.foo:} $ans {}
93testouterr_cmd sh {path advvers5@8._:} $ans {}
94testouterr_cmd sh {path advvers5@8..:} $ans {}
95set ans [list [list text $mp/advvers5/8.5.2]]
96testouterr_cmd sh {path advvers5@8.5:8.5} $ans {}
97testouterr_cmd sh {path advvers5@8.5: @:8.5} $ans {}
98testouterr_cmd sh {path advvers5@8.5: @8.5:8.5} $ans {}
99set ans [list [list text $mp/extdfl7/10a]]
100testouterr_cmd sh {path extdfl7@10:} $ans {}
101testouterr_cmd sh {path extdfl7@10a:} $ans {}
102testouterr_cmd sh {path extdfl7@10g:} ERR "$err_rangevers'10g:'"
103
104set ans [list]
105lappend ans [list setpath LOADEDMODULES extdfl/1.3.1]
106lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.1]
107lappend ans [list setpath MODULES_LMALTNAME extdfl/1.3.1&extdfl/default&extdfl]
108testouterr_cmd sh {load extdfl@1.2.3:} $ans {}
109testouterr_cmd sh {load extdfl @1.2:} $ans {}
110testouterr_cmd sh {load extdfl @:1.3.1} $ans {}
111testouterr_cmd sh {load extdfl @:1.3.7} $ans {}
112testouterr_cmd sh {load extdfl @1.2:1.3} $ans {}
113testouterr_cmd sh {load extdfl @1.2.3:1.3.7} $ans {}
114testouterr_cmd sh {load extdfl @:2.0.1} $ans {}
115testouterr_cmd sh {load extdfl @:2.0} $ans {}
116testouterr_cmd sh {load extdfl @1.2:2} $ans {}
117testouterr_cmd sh {load extdfl @1.2<} ERR "$err_path'extdfl @1.2<'"
118testouterr_cmd sh {load extdfl @<2.0} ERR "$err_path'extdfl @<2.0'"
119testouterr_cmd sh {load extdfl @1.2<2} ERR "$err_path'extdfl @1.2<2'"
120
121set ans [list]
122lappend ans [list setpath LOADEDMODULES extdfl/2.0.1]
123lappend ans [list setpath _LMFILES_ $mp/extdfl/2.0.1]
124lappend ans [list setpath MODULES_LMALTNAME extdfl/2.0.1&as|extdfl/latest]
125testouterr_cmd sh {load extdfl @1.3.7:2.0.1} $ans {}
126testouterr_cmd sh {load extdfl @1.3.7:2.0} $ans {}
127testouterr_cmd sh {load extdfl @1.3.7:} $ans {}
128testouterr_cmd sh {load extdfl @1.4:2} $ans {}
129
130testouterr_cmd sh {load extdfl/1@1.2.3:} ERR $err_path'extdfl/1@1.2.3:'
131testouterr_cmd sh {load extdfl/1 @:1.2.3} ERR "$err_path'extdfl/1 @:1.2.3'"
132
133set ans [list]
134lappend ans [list setpath LOADEDMODULES extdfl/2.0.1:extdfl/1.4.5]
135lappend ans [list setpath _LMFILES_ $mp/extdfl/2.0.1:$mp/extdfl/1.4.5]
136lappend ans [list setpath MODULES_LMALTNAME extdfl/2.0.1&as|extdfl/latest]
137testouterr_cmd_re sh {load extdfl@:1.3.7 @1.3.7: extdfl@1.3.7:1.4.5} $ans {}
138
139set ans [list]
140lappend ans [list setpath LOADEDMODULES extdfl/2.0.1:extdfl2/3.1.7]
141lappend ans [list setpath _LMFILES_ $mp/extdfl/2.0.1:$mp/extdfl2/3.1.7]
142lappend ans [list setpath MODULES_LMALTNAME extdfl/2.0.1&as|extdfl/latest]
143testouterr_cmd_re sh {load extdfl@1.3.7: extdfl2@3.0:3.1} $ans {}
144
145set ans [list]
146lappend ans [list setpath LOADEDMODULES extdfl/2.0.1:extdfl2/3.10.2]
147lappend ans [list setpath _LMFILES_ $mp/extdfl/2.0.1:$mp/extdfl2/3.10.2]
148lappend ans [list setpath MODULES_LMALTNAME extdfl/2.0.1&as|extdfl/latest:extdfl2/3.10.2&as|extdfl2/default&as|extdfl2/latest]
149testouterr_cmd_re sh {load extdfl@1.1.10,1.3.7 @2: extdfl2 @3:} $ans {}
150
151# unconventional spec
152testouterr_cmd sh {path extdfl/@1.2:} [list [list text $mp/extdfl/1.3.1]] {}
153testouterr_cmd sh {path extdfl/ @1.2:1.3} [list [list text $mp/extdfl/1.3.1]] {}
154
155
156#
157# check consistent effect over the module search context
158#
159
160# test all sub-cmd concerned by context
161testouterr_cmd sh {avail -t extdfl @1.3:1.4} OK "$mp:\nextdfl/1.3.1(default)\nextdfl/1.3.7\nextdfl/1.4.5"
162testouterr_cmd_re sh {whatis extdfl@1.3.7:1.4.5} OK "$modlin $mpre $modlin
163\\s+extdfl/1.3.7: extdfl/1.3.7
164\\s+extdfl/1.4.5: extdfl/1.4.5"
165testouterr_cmd sh {paths extdfl @1.3.7:1.4.5} [list [list text $mp/extdfl/1.3.7] [list text $mp/extdfl/1.4.5]] {}
166
167# test various modulefile kind: alias, symver, virtual, directory hidden
168testouterr_cmd sh {avail -t extdfl3@1.00:} OK "$mp:\nextdfl3/1.00(@)\nextdfl3/1.1/(1.2)\nextdfl3/1.1/3\nextdfl3/1.3/3(@)\nextdfl3/1.3/4"
169testouterr_cmd sh {avail -t extdfl7 @3.0:3.1} OK "$mp:\nextdfl7/2.10(3.0)\nextdfl7/3.1"
170testouterr_cmd sh {avail -t extdfl7 @8:} OK "$mp:\nextdfl7/8.1(@)\nextdfl7/9.1\nextdfl7/10a"
171testouterr_cmd sh {avail -t extdfl @.1.3.4:} ERR "$err_rangevers'.1.3.4:'"
172
173# test unknown module
174testouterr_cmd sh {avail -t unknown @1.2:1.4} OK {}
175testouterr_cmd_re sh {whatis unknown@:1.4.5} ERR "$err_path'unknown@:1.4.5'"
176testouterr_cmd sh {paths unknown @1.2.10:} OK {}
177
178# wildcard character
179testouterr_cmd sh {avail -t ext*l @1.3:1.4} OK "$mp:\nextdfl/1.3.1(default)\nextdfl/1.3.7\nextdfl/1.4.5"
180testouterr_cmd sh {avail -t ext?fl @1.3:} OK "$mp:\nextdfl/1.3.1(default)\nextdfl/1.3.7\nextdfl/1.4.5\nextdfl/2.0\nextdfl/2.0.1"
181testouterr_cmd sh {avail -t e+?.* @:1.4} OK "$mp:\ne+t.fl/1.3.1\ne+t.fl/1.3.7\ne+t.fl/1.4.5"
182
183# additionnal version tests
184testouterr_cmd sh {avail -t extdfl8 @1.33:} OK "$mp:\nextdfl8/1.33"
185testouterr_cmd sh {avail -t extdfl8 @:1.3} OK "$mp:\nextdfl8/1.3.1\nextdfl8/1.3.7"
186testouterr_cmd sh {avail -t extdfl8 @1.3:1.4} OK "$mp:\nextdfl8/1.3.1\nextdfl8/1.3.7\nextdfl8/1.4.5"
187
188# test extended default enabled
189set tserr "$modlin $mpre $modlin
190\\s+extdfl/1.3.1: extdfl/1.3.1
191\\s+extdfl/1.3.7: extdfl/1.3.7
192\\s+extdfl/1.4.5: extdfl/1.4.5"
193testouterr_cmd_re sh {whatis extdfl@1.3:1.4} OK $tserr
194set ans [list [list text $mp/extdfl/1.4.5] [list text $mp/extdfl/2.0] [list text $mp/extdfl/2.0.1]]
195testouterr_cmd sh {paths extdfl @1.4:} $ans {}
196setenv_var MODULES_EXTENDED_DEFAULT 1
197testouterr_cmd_re sh {whatis extdfl@1.3:1.4} OK $tserr
198testouterr_cmd sh {paths extdfl @1.4:} $ans {}
199
200# test implicit default disabled
201if {![is_config_locked implicit_default]} {
202    setenv_var MODULES_IMPLICIT_DEFAULT 0
203    testouterr_cmd_re sh {whatis extdfl@1.3:1.4} OK $tserr
204    testouterr_cmd sh {paths extdfl @1.4:} $ans {}
205    setenv_var MODULES_IMPLICIT_DEFAULT 1
206}
207unsetenv_var MODULES_EXTENDED_DEFAULT
208
209if {$is_filesystem_icase} {
210    send_user "\tskipping icase tests as underlying filesystem is case-insensitive\n"
211} else {
212    # test icase
213    testouterr_cmd_re sh {whatis -i extDfl@1.3.7:1.4.5} OK "$modlin $mpre $modlin
214\\s+extdfl/1.3.7: extdfl/1.3.7
215\\s+extdfl/1.4.5: extdfl/1.4.5"
216    testouterr_cmd sh {avail -t -i extdfl2@:2.rC} OK "$mp:\nextdfl2/2.rc.1\nextdfl2/2.rc.2"
217    testouterr_cmd sh {avail -t icase3@:1.4} OK "$mp:\nicase3/1.2"
218    testouterr_cmd sh {avail -t -i icase3@1:} OK "$mp:\nICASE3/1.1\nicase3/1.2\niCaSe3/1.3\niCaSe3/1.4"
219    testouterr_cmd sh {avail -t -i iCaSe3@1.1:} OK "$mp:\nICASE3/1.1\nicase3/1.2\niCaSe3/1.3\niCaSe3/1.4"
220    testouterr_cmd sh {avail -t -i ICase3@1.1:1.4} OK "$mp:\nICASE3/1.1\nicase3/1.2\niCaSe3/1.3\niCaSe3/1.4"
221    testouterr_cmd sh {avail -t -i ICase3@vErs.1:} ERR  "$err_rangevers'vErs.1:'"
222}
223
224# contains and no-indepth tests
225testouterr_cmd sh {avail -t -C deep @:3} OK "$mp:\nnocase/deep/2\nnocase/deep/3"
226testouterr_cmd sh {avail -t --no-indepth extdfl @1.2:1.4} OK "$mp:\nextdfl/1.2.3\nextdfl/1.2.10\nextdfl/1.3.1(default)\nextdfl/1.3.7\nextdfl/1.4.5"
227testouterr_cmd sh {avail -t --no-indepth -C deep @2:} OK {}
228
229# test mod@deep/vers
230testouterr_cmd sh {avail -t extdfl3@1.3/3:} ERR $err_specvers'1.3/3:'
231testouterr_cmd_re sh {whatis extdfl3@1.3/3:1.3/4} ERR $err_specvers'1.3/3:1.3/4'
232
233# test mod@vers where a modulefile mod@vers exist
234testouterr_cmd sh {avail -t advvers@2.1:2.2} OK {}
235testouterr_cmd sh {whatis advvers@2.1:2.2} ERR "$err_path'advvers@2.1:2.2'"
236setenv_var MODULES_ADVANCED_VERSION_SPEC 0
237testouterr_cmd sh {avail -t advvers@2.1:} OK {}
238testouterr_cmd sh {whatis advvers@:2.2} ERR "$err_path'advvers@:2.2'"
239setenv_var MODULES_ADVANCED_VERSION_SPEC 1
240
241# test @major:major.minor
242testouterr_cmd sh {avail -t extdfl2 @3:3.1} OK "$mp:\nextdfl2/3.0.0\nextdfl2/3.0.2\nextdfl2/3.0.15\nextdfl2/3.1.3\nextdfl2/3.1.7"
243# test major version number mixing alpha and numerical characters
244testouterr_cmd sh {avail -t extdfl7@9:10} OK "$mp:\nextdfl7/9.1"
245testouterr_cmd sh {avail -t extdfl7@9:11} OK "$mp:\nextdfl7/9.1\nextdfl7/10a"
246
247# test latest and default filtering
248testouterr_cmd sh {avail -t -L extdfl7@:11} OK "$mp:\nextdfl7/10a"
249testouterr_cmd sh {avail -t -d extdfl7@:11} OK "$mp:\nextdfl7/10a"
250testouterr_cmd sh {avail -t -L extdfl3@:1.2} OK "$mp:\nextdfl3/1.1/3"
251testouterr_cmd sh {avail -t -d extdfl3@:1.2} OK "$mp:\nextdfl3/1.1/3"
252testouterr_cmd sh {avail -t -L extdfl@1.4:} OK "$mp:\nextdfl/2.0.1"
253testouterr_cmd sh {avail -t -d extdfl@1.4:} OK "$mp:\nextdfl/2.0.1"
254if {![is_config_locked implicit_default]} {
255    setenv_var MODULES_IMPLICIT_DEFAULT 0
256    testouterr_cmd sh {avail -t -d extdfl7@:11} OK {}
257    testouterr_cmd sh {avail -t -d extdfl@1.4:} OK {}
258    setenv_var MODULES_IMPLICIT_DEFAULT 1
259}
260# mix with no-indepth tests
261testouterr_cmd sh {avail -t --no-indepth -L extdfl7@:11} OK "$mp:\nextdfl7/10a"
262testouterr_cmd sh {avail -t --no-indepth -d extdfl7@:11} OK "$mp:\nextdfl7/10a"
263testouterr_cmd sh {avail -t --no-indepth -L extdfl3@:1.2} OK "$mp:\nextdfl3/1.1/(1.2)"
264testouterr_cmd sh {avail -t --no-indepth -d extdfl3@:1.2} OK "$mp:\nextdfl3/1.1/(1.2)"
265testouterr_cmd sh {avail -t --no-indepth -L extdfl@1.4:} OK "$mp:\nextdfl/2.0.1"
266testouterr_cmd sh {avail -t --no-indepth -d extdfl@1.4:} OK "$mp:\nextdfl/2.0.1"
267if {![is_config_locked implicit_default]} {
268    setenv_var MODULES_IMPLICIT_DEFAULT 0
269    testouterr_cmd sh {avail -t --no-indepth -d extdfl7@:11} OK {}
270    testouterr_cmd sh {avail -t --no-indepth -d extdfl@1.4:} OK {}
271    setenv_var MODULES_IMPLICIT_DEFAULT 1
272}
273
274
275#
276# check consistent effect over the one module selection context
277#
278
279# test over existing module
280set ans [list]
281lappend ans [list setpath LOADEDMODULES extdfl2/3.1.7]
282lappend ans [list setpath _LMFILES_ $mp/extdfl2/3.1.7]
283testouterr_cmd sh {load extdfl2@3.0.2:3.1.7} $ans {}
284testouterr_cmd sh {load extdfl2@:3.1.7} $ans {}
285testouterr_cmd sh {load extdfl2@:3.1.7} $ans {}
286testouterr_cmd sh "load $mp/extdfl2 @:3.1.7" ERR "$err_file'$mp/extdfl2 @:3.1.7'"
287testouterr_cmd sh "load $mp/extdfl2/3.1.7 @11:12" ERR "$err_file'$mp/extdfl2/3.1.7 @11:12'"
288set ans [list]
289lappend ans [list setpath LOADEDMODULES extdfl3/1.1/3]
290lappend ans [list setpath _LMFILES_ $mp/extdfl3/1.1/3]
291lappend ans [list setpath MODULES_LMALTNAME extdfl3/1.1/3&extdfl3/1.2&extdfl3/1.00&extdfl3/1.3/3&as|extdfl3/1.1/default&as|extdfl3/1.1/latest]
292testouterr_cmd sh {load extdfl3@:1.1} $ans {}
293testouterr_cmd sh {unload extdfl2@:3.1.7} OK {}
294set ans [list]
295lappend ans [list setpath LOADEDMODULES extdfl/1.3.1]
296lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.1]
297lappend ans [list setpath MODULES_LMALTNAME extdfl/1.3.1&extdfl/default&extdfl]
298testouterr_cmd sh {load extdfl@:1.3.7} $ans {}
299
300# test over already loaded module
301setenv_loaded_module [list extdfl2/3.1.7] [list $mp/extdfl2/3.1.7]
302testouterr_cmd sh {load extdfl2@:3.1.7} OK {}
303testouterr_cmd sh "load $mp/extdfl2 @:3.1.7" ERR "$err_file'$mp/extdfl2 @:3.1.7'"
304set ans [list]
305lappend ans [list setpath LOADEDMODULES extdfl2/3.1.7:extdfl2/3.10.2]
306lappend ans [list setpath _LMFILES_ $mp/extdfl2/3.1.7:$mp/extdfl2/3.10.2]
307lappend ans [list setpath MODULES_LMALTNAME extdfl2/3.10.2&as|extdfl2/default&as|extdfl2/latest]
308testouterr_cmd_re sh {load extdfl2@3.1.7:} $ans {}
309set ans [list]
310lappend ans [list unsetpath LOADEDMODULES]
311lappend ans [list unsetpath _LMFILES_]
312testouterr_cmd sh {unload extdfl2@:3.1.7} $ans {}
313testouterr_cmd sh "unload $mp/extdfl2 @:3.1.7" OK {}
314testouterr_cmd sh {unload extdfl2@3.1.7:} $ans {}
315
316setenv_loaded_module [list extdfl/1.3.7] [list $mp/extdfl/1.3.7]
317set ans [list]
318lappend ans [list setpath LOADEDMODULES extdfl/1.3.7:extdfl/1.3.1]
319lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.7:$mp/extdfl/1.3.1]
320lappend ans [list setpath MODULES_LMALTNAME extdfl/1.3.1&extdfl/default&extdfl]
321testouterr_cmd_re sh {load extdfl@1.2.3:1.3.7} $ans {}
322testouterr_cmd_re sh {load extdfl@:1.4.5} $ans {}
323set ans [list]
324lappend ans [list setpath LOADEDMODULES extdfl/1.3.7:extdfl/2.0.1]
325lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.7:$mp/extdfl/2.0.1]
326lappend ans [list setpath MODULES_LMALTNAME extdfl/2.0.1&as|extdfl/latest]
327testouterr_cmd_re sh {load extdfl@1.3.7:} $ans {}
328set ans [list]
329lappend ans [list unsetpath LOADEDMODULES]
330lappend ans [list unsetpath _LMFILES_]
331testouterr_cmd_re sh {unload extdfl@1.3.1:1.3.7} $ans {}
332testouterr_cmd_re sh {unload extdfl@:1.4.5} $ans {}
333testouterr_cmd_re sh {unload extdfl@1.3.7:} $ans {}
334testouterr_cmd_re sh {unload extdfl@1.3.0:} $ans {}
335
336setenv_loaded_module [list $mp/extdfl2/3.1.7] [list $mp/extdfl2/3.1.7]
337testouterr_cmd sh {unload extdfl2@3.0.15:} $ans {}
338testouterr_cmd sh "load $mp/extdfl2 @3.0.15:" ERR "$err_file'$mp/extdfl2 @3.0.15:'"
339
340setenv_loaded_module [list $mp/extdfl3/1.3/4] [list $mp/extdfl3/1.3/4]
341testouterr_cmd sh {unload extdfl3@1.1:} $ans {}
342testouterr_cmd sh {unload extdfl3@1.3/3:} ERR $err_specvers'1.3/3:'
343testouterr_cmd sh {unload extdfl3/1.3@:5} $ans {}
344
345setenv_loaded_module [list $mp/extdfl2/3.1.7] [list $mp/extdfl2/3.1.7]
346set ans [list]
347lappend ans [list setpath LOADEDMODULES extdfl3/1.3/4]
348lappend ans [list setpath _LMFILES_ $mp/extdfl3/1.3/4]
349lappend ans [list setpath MODULES_LMALTNAME extdfl3/1.3/4&as|extdfl3/default&as|extdfl3/latest&as|extdfl3/1.3/default&as|extdfl3/1.3/latest]
350testouterr_cmd sh {switch extdfl2@3.0.0.0: extdfl3@0.9:} $ans {}
351unsetenv_loaded_module
352
353# test other sub-cmds concerned by context
354testouterr_cmd_re sh {help extdfl2@3.9.2:} OK "$modlin\nModule Specific Help for $mpre/extdfl2/3.10.2:\n\n$warn_msgs: Unable to find ModulesHelp in $mpre/extdfl2/3.10.2.\n$modlin"
355testouterr_cmd_re sh {display extdfl2@:3.12} OK "$modlin\n$mpre/extdfl2/3.10.2:\n\nmodule-whatis\textdfl2/3.10.2\n$modlin"
356testouterr_cmd_re sh {test extdfl2@3.9:3.10.2} OK "$modlin\nModule Specific Test for $mpre/extdfl2/3.10.2:\n\n$warn_msgs: Unable to find ModulesTest in $mpre/extdfl2/3.10.2.\n$modlin"
357testouterr_cmd sh {path extdfl2@:3.12} [list [list text $mp/extdfl2/3.10.2]] {}
358testouterr_cmd sh {is-avail extdfl2@3.9:} OK {}
359testouterr_cmd sh {is-avail extdfl2@:3.12} OK {}
360testouterr_cmd sh {is-avail extdfl2@3.11:3.12} ERR {}
361
362# test unknown module
363testouterr_cmd sh {load unknown@1.3.7:1.4.5} ERR $err_path'unknown@1.3.7:1.4.5'
364testouterr_cmd sh {load extdfl2 @11:} ERR "$err_path'extdfl2 @11:'"
365testouterr_cmd sh "load $mp/unknown @:1.3.7" ERR "$err_file'$mp/unknown @:1.3.7'"
366testouterr_cmd sh "load $mp/extdfl2@11:12" ERR "$err_file'$mp/extdfl2@11:12'"
367
368# test various modulefile kind: alias, symver, virtual, directory hidden
369testouterr_cmd sh {path extdfl3@:1.1} [list [list text $mp/extdfl3/1.1/3]] {}
370testouterr_cmd sh {path extdfl7 @:3.0} [list [list text $mp/extdfl7/2.10]] {}
371testouterr_cmd sh {path extdfl7 @8:9} [list [list text $mp/extdfl7/7.0]] {}
372testouterr_cmd sh {path extdfl3@1.00:1.1} [list [list text $mp/extdfl3/1.1/3]] {}
373testouterr_cmd sh {path extdfl @.1.3.3:} ERR "$err_rangevers'.1.3.3:'"
374# version specified over an alias which targets a module/version modulefile
375testouterr_cmd sh {path advvers3 @:1.2} OK "$err_path'advvers3 @:1.2'"
376
377# test range mixing number and hex letter
378set ans [list [list text $mp/extdfl7/10a]]
379testouterr_cmd sh {path extdfl7 @9:} $ans {}
380testouterr_cmd sh {path extdfl7 @10:} $ans {}
381testouterr_cmd sh {path extdfl7 @:10} [list [list text $mp/extdfl7/7.0]] {}
382testouterr_cmd sh {path extdfl7 @:11} $ans {}
383testouterr_cmd sh {path extdfl7 @:10c} $ans {}
384
385# additionnal version tests
386testouterr_cmd sh {path extdfl8 @1.33:} [list [list text $mp/extdfl8/1.33]] {}
387testouterr_cmd sh {path extdfl8 @:1.3} [list [list text $mp/extdfl8/1.3.7]] {}
388testouterr_cmd sh {path extdfl8 @1.3:1.4} [list [list text $mp/extdfl8/1.4.5]] {}
389
390# wildcard characters have no effect (considered as a regular character)
391testouterr_cmd sh {path ext*l @1.0:1.3} {} "$err_path'ext*l @1.0:1.3'"
392testouterr_cmd sh {path ext?fl @1.3:} {} "$err_path'ext?fl @1.3:'"
393testouterr_cmd sh {path extdfl @1.4.*:} [list [list text $mp/extdfl/2.0.1]] {}
394testouterr_cmd sh {path extdfl @1.3.*:1.4.?} [list [list text $mp/extdfl/1.3.1]] {}
395testouterr_cmd sh {path extdfl @1.3*:1.4?} [list [list text $mp/extdfl/1.3.1]] {}
396testouterr_cmd sh {path extdfl @1.3.2.*:1.4.?} [list [list text $mp/extdfl/1.4.5]] {}
397testouterr_cmd sh {path extdfl @1.3.2*:1.4?} [list [list text $mp/extdfl/1.4.5]] {}
398testouterr_cmd sh {path e+?.* @:1.4.5} OK "$err_path'e+?.* @:1.4.5'"
399testouterr_cmd sh {path e+t.fl @1.4.5:} [list [list text $mp/e+t.fl/1.4.5]] {}
400
401# test mod@vers where a modulefile mod@vers exist
402testouterr_cmd sh {load advvers@2.1:2.2} ERR $err_path'advvers@2.1:2.2'
403setenv_var MODULES_ADVANCED_VERSION_SPEC 0
404testouterr_cmd sh {load advvers@2.1:2.2} ERR $err_path'advvers@2.1:2.2'
405setenv_var MODULES_ADVANCED_VERSION_SPEC 1
406
407# test extended default enabled
408set ans [list]
409lappend ans [list setpath LOADEDMODULES extdfl/2.0.1]
410lappend ans [list setpath _LMFILES_ $mp/extdfl/2.0.1]
411lappend ans [list setpath MODULES_LMALTNAME extdfl/2.0.1&as|extdfl/latest]
412testouterr_cmd sh {load extdfl@1.4:} $ans {}
413setenv_var MODULES_EXTENDED_DEFAULT 1
414testouterr_cmd sh {load extdfl@1.4:} $ans {}
415testouterr_cmd sh {load extdfl@1.4:2} $ans {}
416
417# test implicit default disabled
418if {![is_config_locked implicit_default]} {
419    setenv_var MODULES_IMPLICIT_DEFAULT 0
420    testouterr_cmd sh {load extdfl@:1.2} ERR $err_nodefault'extdfl@:1.2'
421    # mixing an unexistent mod with a regular one will fail load when implicit default is disabled
422    testouterr_cmd sh {load extdfl@1.4.3:} ERR $err_nodefault'extdfl@1.4.3:'
423    set ans [list]
424    lappend ans [list setpath LOADEDMODULES extdfl/1.3.1]
425    lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.1]
426    lappend ans [list setpath MODULES_LMALTNAME extdfl/1.3.1&extdfl/default&extdfl]
427    testouterr_cmd sh {load extdfl@1.3:} $ans {}
428    testouterr_cmd sh {load extdfl@:1.4} $ans {}
429    testouterr_cmd sh {load extdfl @1:2} $ans {}
430    setenv_var MODULES_IMPLICIT_DEFAULT 1
431}
432unsetenv_var MODULES_EXTENDED_DEFAULT
433
434if {$is_filesystem_icase} {
435    send_user "\tskipping icase tests as underlying filesystem is case-insensitive\n"
436} else {
437    # test icase
438    set ans [list]
439    lappend ans [list setpath LOADEDMODULES extdfl/1.4.5]
440    lappend ans [list setpath _LMFILES_ $mp/extdfl/1.4.5]
441    testouterr_cmd sh {load -i extDfl@1.3.7:1.4.5} $ans {}
442    set ans [list]
443    lappend ans [list setpath LOADEDMODULES extdfl2/2.rc.2]
444    lappend ans [list setpath _LMFILES_ $mp/extdfl2/2.rc.2]
445    testouterr_cmd sh {load -i extdfl2@2:2.rC} $ans {}
446    set ans [list]
447    lappend ans [list setpath LOADEDMODULES icase3/1.2]
448    lappend ans [list setpath _LMFILES_ $mp/icase3/1.2]
449    lappend ans [list setpath MODULES_LMALTNAME icase3/1.2&as|icase3/default&as|icase3/latest]
450    testouterr_cmd sh {load -i icase3@1.1:1.4} $ans {}
451    testouterr_cmd sh {load -i ICase3@:1.4} $ans {}
452    testouterr_cmd sh {load -i icase3@:1.4} $ans {}
453    set ans [list]
454    lappend ans [list setpath LOADEDMODULES iCaSe3/1.4]
455    lappend ans [list setpath _LMFILES_ $mp/iCaSe3/1.4]
456    lappend ans [list setpath MODULES_LMALTNAME iCaSe3/1.4&as|iCaSe3/default&as|iCaSe3/latest]
457    testouterr_cmd sh {load -i iCaSe3@1.1:} $ans {}
458    setenv_var MODULES_EXTENDED_DEFAULT 1
459    testouterr_cmd sh {load -i iCaSe3@1.1:} $ans {}
460    testouterr_cmd sh {load -i iCaSe3@1:2} $ans {}
461    set ans [list]
462    lappend ans [list setpath LOADEDMODULES icase3/1.2]
463    lappend ans [list setpath _LMFILES_ $mp/icase3/1.2]
464    lappend ans [list setpath MODULES_LMALTNAME icase3/1.2&as|icase3/default&as|icase3/latest]
465    testouterr_cmd sh {load -i ICase3@1.2:} $ans {}
466    testouterr_cmd sh {load -i ICase3@1:2} $ans {}
467    unsetenv_var MODULES_EXTENDED_DEFAULT
468    set ans [list]
469    lappend ans [list setpath LOADEDMODULES ICASE3/vers.1]
470    lappend ans [list setpath _LMFILES_ $mp/ICASE3/vers.1]
471    testouterr_cmd sh {load -i iCaSe3@vers.1:} ERR "$err_rangevers'vers.1:'"
472    testouterr_cmd sh {load -i iCaSe3@:vErs.1} ERR "$err_rangevers':vErs.1'"
473    testouterr_cmd sh {load -i ICASE3@vErs.1:VeRS.1} ERR "$err_rangevers'vErs.1:VeRS.1'"
474}
475
476# check effect over [module-info specified] call
477set ans [list]
478lappend ans [list setpath LOADEDMODULES advvers/1.2]
479lappend ans [list setpath _LMFILES_ $mp/advvers/1.2]
480lappend ans [list set ts advvers@:1.2]
481testouterr_cmd sh {load advvers@:1.2} $ans {}
482set ans [list]
483lappend ans [list setpath LOADEDMODULES advvers/1.2]
484lappend ans [list setpath _LMFILES_ $mp/advvers/1.2]
485lappend ans [list set ts "advvers @1.0:1.2"]
486testouterr_cmd sh {load advvers @1.0:1.2} $ans {}
487set ans [list]
488lappend ans [list setpath LOADEDMODULES advvers/1.2]
489lappend ans [list setpath _LMFILES_ $mp/advvers/1.2]
490lappend ans [list set ts "advvers@1.0.0:1.0.10 @1.1:1.2"]
491testouterr_cmd sh {load advvers@1.0.0:1.0.10 @1.1:1.2} $ans {}
492
493
494#
495# check consistent effect over the module compatibility check context
496#
497
498# load prereq
499set ans [list]
500lappend ans [list setpath LOADEDMODULES advvers7/1.0:advvers6/1.3]
501lappend ans [list setpath _LMFILES_ $mp/advvers7/1.0:$mp/advvers6/1.3]
502lappend ans [list setpath MODULES_LMNOTUASKED advvers7/1.0]
503lappend ans [list setpath MODULES_LMPREREQ advvers6/1.3&advvers7@<1.0]
504testouterr_cmd_re sh {load --auto advvers6@1.3} $ans [msg_top_load advvers6/1.3 {} advvers7/1.0 {}]
505
506# prereq already loaded
507setenv_loaded_module [list advvers7/1.0] [list $mp/advvers7/1.0]
508set ans [list]
509lappend ans [list setpath LOADEDMODULES advvers7/1.0:advvers6/1.3]
510lappend ans [list setpath _LMFILES_ $mp/advvers7/1.0:$mp/advvers6/1.3]
511lappend ans [list setpath MODULES_LMPREREQ advvers6/1.3&advvers7@<1.0]
512testouterr_cmd_re sh {load --auto advvers6@1.3} $ans {}
513setenv_loaded_module [list advvers7/0.9] [list $mp/advvers7/0.9]
514set ans [list]
515lappend ans [list setpath LOADEDMODULES advvers7/0.9:advvers6/1.3]
516lappend ans [list setpath _LMFILES_ $mp/advvers7/0.9:$mp/advvers6/1.3]
517lappend ans [list setpath MODULES_LMPREREQ advvers6/1.3&advvers7@<1.0]
518testouterr_cmd_re sh {load --auto advvers6@1.3} $ans {}
519unsetenv_loaded_module
520
521# with adv_version_spec disabled
522setenv_var MODULES_ADVANCED_VERSION_SPEC 0
523testouterr_cmd_re sh {load --auto advvers6/1.3} ERR [msg_load advvers6/1.3 $err_path'advvers7@:1.0' [err_reqlo advvers7@:1.0]]
524setenv_loaded_module [list advvers7/1.0] [list $mp/advvers7/1.0]
525testouterr_cmd_re sh {load --auto advvers6/1.3} ERR [msg_load advvers6/1.3 $err_path'advvers7@:1.0' [err_reqlo advvers7@:1.0]]
526unsetenv_loaded_module
527setenv_var MODULES_ADVANCED_VERSION_SPEC 1
528
529# prereq requires loading module
530set ans [list]
531lappend ans [list setpath LOADEDMODULES advvers7/1.1:advvers6/1.4]
532lappend ans [list setpath _LMFILES_ $mp/advvers7/1.1:$mp/advvers6/1.4]
533lappend ans [list setpath MODULES_LMNOTUASKED advvers7/1.1]
534lappend ans [list setpath MODULES_LMPREREQ "advvers7/1.1&advvers6 @1.3<1.4:advvers6/1.4&advvers7 @1.0<1.1"]
535testouterr_cmd_re sh {load --auto advvers6@1.4} $ans [msg_top_load advvers6/1.4 {} advvers7/1.1 {}]
536
537# prereq not loaded
538testouterr_cmd_re sh {load --no-auto advvers6@1.3} ERR [msg_load advvers6/1.3 [err_prereq advvers6/1.3 advvers7@:1.0]]
539testouterr_cmd_re sh {load --no-auto advvers6@1.4} ERR [msg_load advvers6/1.4 [err_prereq advvers6/1.4 "advvers7 @1.0:1.1"]]
540
541# load module by-pass its prereq
542set ans [list]
543lappend ans [list setpath LOADEDMODULES advvers6/1.3]
544lappend ans [list setpath _LMFILES_ $mp/advvers6/1.3]
545lappend ans [list setpath MODULES_LMPREREQ advvers6/1.3&advvers7@<1.0]
546testouterr_cmd_re sh {load --no-auto --force advvers6@1.3} $ans [msg_load advvers6/1.3 [err_reqmisf advvers7@:1.0]]
547
548# then load missing prereq
549setenv_loaded_module [list advvers6/1.3] [list $mp/advvers6/1.3]
550setenv_path_var MODULES_LMPREREQ advvers6/1.3&advvers7@<1.0
551set ans [list]
552lappend ans [list setpath LOADEDMODULES advvers7/1.0:advvers6/1.3]
553lappend ans [list setpath _LMFILES_ $mp/advvers7/1.0:$mp/advvers6/1.3]
554lappend ans [list setpath MODULES_LMPREREQ advvers6/1.3&advvers7@<1.0]
555testouterr_cmd_re sh {load --auto advvers7@1.0} $ans [msg_top_load advvers7/1.0 {} {} advvers6/1.3]
556set ans [list]
557lappend ans [list setpath LOADEDMODULES advvers7/0.9:advvers6/1.3]
558lappend ans [list setpath _LMFILES_ $mp/advvers7/0.9:$mp/advvers6/1.3]
559lappend ans [list setpath MODULES_LMPREREQ advvers6/1.3&advvers7@<1.0]
560testouterr_cmd_re sh {load --auto advvers7@0.9} $ans [msg_top_load advvers7/0.9 {} {} advvers6/1.3]
561# with adv_version_spec disabled
562setenv_var MODULES_ADVANCED_VERSION_SPEC 0
563set ans [list]
564lappend ans [list setpath LOADEDMODULES advvers6/1.3:advvers7/1.0]
565lappend ans [list setpath _LMFILES_ $mp/advvers6/1.3:$mp/advvers7/1.0]
566testouterr_cmd_re sh {load --auto advvers7/1.0} $ans {}
567setenv_var MODULES_ADVANCED_VERSION_SPEC 1
568unsetenv_loaded_module
569unsetenv_path_var MODULES_LMPREREQ
570
571# prereq fails to load
572testouterr_cmd sh {load --auto advvers7@1.2} ERR [msg_load advvers6/1.5.2 $err_evalabort]\n\n[msg_load advvers7/1.2 [err_reqlo "advvers6 @:1.5.2"]]
573
574# unload module and its auto loaded requirement (UReqUn)
575setenv_loaded_module [list advvers7/1.0 advvers6/1.3] [list $mp/advvers7/1.0 $mp/advvers6/1.3] [list advvers7/1.0]
576setenv_path_var MODULES_LMPREREQ advvers6/1.3&advvers7@<1.0
577set ans [list]
578lappend ans [list unsetpath LOADEDMODULES]
579lappend ans [list unsetpath _LMFILES_]
580lappend ans [list unsetpath MODULES_LMNOTUASKED]
581lappend ans [list unsetpath MODULES_LMPREREQ]
582testouterr_cmd sh {unload --auto advvers6@1.3} $ans [msg_top_unload advvers6/1.3 {} advvers7/1.0 {}]
583
584# unload prereq in auto mode
585testouterr_cmd_re sh {unload --auto advvers7@1.0} $ans [msg_top_unload advvers7/1.0 advvers6/1.3 {} {}]
586
587# unload prereq in no-auto mode
588testouterr_cmd_re sh {unload --no-auto advvers7@1.0} ERR [msg_unload advvers7/1.0 [err_prerequn advvers7/1.0 advvers6/1.3]]
589
590# with adv_version_spec disabled
591setenv_var MODULES_ADVANCED_VERSION_SPEC 0
592set ans [list]
593lappend ans [list setpath LOADEDMODULES advvers7/1.0]
594lappend ans [list setpath _LMFILES_ $mp/advvers7/1.0]
595lappend ans [list unsetpath MODULES_LMPREREQ]
596testouterr_cmd sh {unload --auto advvers6/1.3} $ans {}
597setenv_var MODULES_ADVANCED_VERSION_SPEC 1
598
599# force prereq unload
600set ans [list]
601lappend ans [list setpath LOADEDMODULES advvers6/1.3]
602lappend ans [list setpath _LMFILES_ $mp/advvers6/1.3]
603lappend ans [list unsetpath MODULES_LMNOTUASKED]
604testouterr_cmd_re sh {unload --force --no-auto advvers7@1.0} $ans [msg_unload advvers7/1.0 [err_deplof advvers6/1.3]]
605
606# test with alternative prereq
607setenv_loaded_module [list advvers7/0.9 advvers6/1.3] [list $mp/advvers7/0.9 $mp/advvers6/1.3] [list advvers7/0.9]
608set ans [list]
609lappend ans [list unsetpath LOADEDMODULES]
610lappend ans [list unsetpath _LMFILES_]
611lappend ans [list unsetpath MODULES_LMNOTUASKED]
612lappend ans [list unsetpath MODULES_LMPREREQ]
613testouterr_cmd sh {unload --auto advvers6@1.3} $ans [msg_top_unload advvers6/1.3 {} advvers7/0.9 {}]
614testouterr_cmd_re sh {unload --auto advvers7@0.9} $ans [msg_top_unload advvers7/0.9 advvers6/1.3 {} {}]
615testouterr_cmd_re sh {unload --no-auto advvers7@0.9} ERR [msg_unload advvers7/0.9 [err_prerequn advvers7/0.9 advvers6/1.3]]
616set ans [list]
617lappend ans [list setpath LOADEDMODULES advvers6/1.3]
618lappend ans [list setpath _LMFILES_ $mp/advvers6/1.3]
619lappend ans [list unsetpath MODULES_LMNOTUASKED]
620testouterr_cmd_re sh {unload --force --no-auto advvers7@0.9} $ans [msg_unload advvers7/0.9 [err_deplof advvers6/1.3]]
621unsetenv_loaded_module
622unsetenv_path_var MODULES_LMPREREQ
623
624# prereq with list of modules
625set ans [list]
626lappend ans [list setpath LOADEDMODULES advvers6/1.2:advvers7/1.3.1]
627lappend ans [list setpath _LMFILES_ $mp/advvers6/1.2:$mp/advvers7/1.3.1]
628lappend ans [list setpath MODULES_LMPREREQ "advvers7/1.3.1&advvers6 @1.1<1.2|advvers6@1.4< @<1.6"]
629lappend ans [list set ts "advvers6 @1.1:1.2"]
630lappend ans [list setpath MODULES_LMNOTUASKED advvers6/1.2]
631testouterr_cmd_re sh {load --auto advvers7@1.3.1} $ans [msg_top_load advvers7/1.3.1 {} advvers6/1.2 {}]
632setenv_loaded_module [list advvers6/1.6] [list $mp/advvers6/1.6]
633set ans [list]
634lappend ans [list setpath LOADEDMODULES advvers6/1.6:advvers7/1.3.1]
635lappend ans [list setpath _LMFILES_ $mp/advvers6/1.6:$mp/advvers7/1.3.1]
636lappend ans [list setpath MODULES_LMPREREQ "advvers7/1.3.1&advvers6 @1.1<1.2|advvers6@1.4< @<1.6"]
637testouterr_cmd_re sh {load --auto advvers7@1.3.1} $ans {}
638unsetenv_loaded_module
639set ans [list]
640lappend ans [list setpath LOADEDMODULES advvers6/1.6:advvers7/1.3.2]
641lappend ans [list setpath _LMFILES_ $mp/advvers6/1.6:$mp/advvers7/1.3.2]
642lappend ans [list setpath MODULES_LMPREREQ "advvers7/1.3.2&advvers6 @<1.5.1|advvers6@1.4< @<1.6"]
643lappend ans [list setpath MODULES_LMNOTUASKED advvers6/1.6]
644lappend ans [list ERR]
645testouterr_cmd_re sh {load --auto advvers7@1.3.2} $ans [msg_top_load advvers7/1.3.2 {} advvers6/1.6 {}]
646
647# requirement expressed with @major:major.minor (check if >major.minor versions are avoided)
648set ans [list]
649lappend ans [list setpath LOADEDMODULES extdfl2/3.9.2:advvers6/3.0]
650lappend ans [list setpath _LMFILES_ $mp/extdfl2/3.9.2:$mp/advvers6/3.0]
651lappend ans [list setpath MODULES_LMPREREQ "advvers6/3.0&extdfl2@3<3.9"]
652lappend ans [list setpath MODULES_LMNOTUASKED extdfl2/3.9.2]
653testouterr_cmd_re sh {load --auto advvers6@3.0} $ans [msg_top_load advvers6/3.0 {} extdfl2/3.9.2 {}]
654
655# test major version number mixing alpha and numerical characters
656set ans [list]
657lappend ans [list setpath LOADEDMODULES extdfl7/9.1:advvers6/3.1]
658lappend ans [list setpath _LMFILES_ $mp/extdfl7/7.0:$mp/advvers6/3.1]
659lappend ans [list setpath MODULES_LMPREREQ "advvers6/3.1&extdfl7@<10"]
660lappend ans [list setpath MODULES_LMNOTUASKED extdfl7/9.1]
661testouterr_cmd_re sh {load --auto advvers6@3.1} $ans [msg_top_load advvers6/3.1 {} extdfl7/9.1 {}]
662set ans [list]
663lappend ans [list setpath LOADEDMODULES extdfl7/10a:advvers6/3.2]
664lappend ans [list setpath _LMFILES_ $mp/extdfl7/10a:$mp/advvers6/3.2]
665lappend ans [list setpath MODULES_LMPREREQ "advvers6/3.2&extdfl7@<11"]
666lappend ans [list setpath MODULES_LMNOTUASKED extdfl7/10a]
667lappend ans [list setpath MODULES_LMALTNAME advvers6/3.2&as|advvers6/default&as|advvers6/latest]
668testouterr_cmd_re sh {load --auto advvers6@3.2} $ans [msg_top_load advvers6/3.2 {} extdfl7/10a {}]
669
670
671# conflict not loaded
672set ans [list]
673lappend ans [list setpath LOADEDMODULES advvers7/3.0]
674lappend ans [list setpath _LMFILES_ $mp/advvers7/3.0]
675lappend ans [list setpath MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.0<1.6"]
676testouterr_cmd sh {load advvers7@3.0} $ans {}
677
678# conflict loaded
679setenv_loaded_module [list advvers7/3.0] [list $mp/advvers7/3.0]
680setenv_path_var MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.1<1.6"
681testouterr_cmd sh {load advvers6@1.6} ERR [msg_load advvers6/1.6 [err_conflict advvers6/1.6 advvers7/3.0]]
682testouterr_cmd sh {load advvers6@1.2} ERR [msg_load advvers6/1.2 [err_conflict advvers6/1.2 advvers7/3.0]]
683unsetenv_path_var MODULES_LMCONFLICT
684setenv_loaded_module [list advvers6/1.6] [list $mp/advvers6/1.6]
685testouterr_cmd sh {load advvers7@3.0} ERR [msg_load advvers7/3.0 [err_conflict advvers7/3.0 advvers6 @1.0:1.6]]
686setenv_loaded_module [list advvers6/1.2] [list $mp/advvers6/1.2]
687testouterr_cmd sh {load advvers7@3.0} ERR [msg_load advvers7/3.0 [err_conflict advvers7/3.0 advvers6 @1.0:1.6]]
688
689# conflict loaded with advanced_version_spec disabled
690setenv_loaded_module [list advvers7/3.0] [list $mp/advvers7/3.0]
691setenv_path_var MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.1<1.6"
692setenv_var MODULES_ADVANCED_VERSION_SPEC 0
693set ans [list]
694lappend ans [list setpath LOADEDMODULES advvers7/3.0:advvers6/1.6]
695lappend ans [list setpath _LMFILES_ $mp/advvers7/3.0:$mp/advvers6/1.6]
696testouterr_cmd_re sh {load advvers6/1.6} $ans {}
697setenv_var MODULES_ADVANCED_VERSION_SPEC 1
698unsetenv_path_var MODULES_LMCONFLICT
699
700# conflict loaded but conflicting module load forced
701setenv_loaded_module [list advvers6/1.6] [list $mp/advvers6/1.6]
702set ans [list]
703lappend ans [list setpath LOADEDMODULES advvers6/1.6:advvers7/3.0]
704lappend ans [list setpath _LMFILES_ $mp/advvers6/1.6:$mp/advvers7/3.0]
705lappend ans [list setpath MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.0<1.6"]
706testouterr_cmd_re sh {load --force advvers7@3.0} $ans [msg_load advvers7/3.0 [err_conlof "advvers6 @1.0:1.6"]]
707setenv_loaded_module [list advvers6/1.2] [list $mp/advvers6/1.2]
708set ans [list]
709lappend ans [list setpath LOADEDMODULES advvers6/1.2:advvers7/3.0]
710lappend ans [list setpath _LMFILES_ $mp/advvers6/1.2:$mp/advvers7/3.0]
711lappend ans [list setpath MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.0<1.6"]
712testouterr_cmd_re sh {load --force advvers7@3.0} $ans [msg_load advvers7/3.0 [err_conlof "advvers6 @1.0:1.6"]]
713
714# then unload conflict
715setenv_loaded_module [list advvers6/1.6 advvers7/3.0] [list $mp/advvers6/1.6 $mp/advvers7/3.0]
716setenv_path_var MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.0<1.6"
717set ans [list]
718lappend ans [list setpath LOADEDMODULES advvers7/3.0]
719lappend ans [list setpath _LMFILES_ $mp/advvers7/3.0]
720lappend ans [list setpath MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.0<1.6"]
721testouterr_cmd sh {unload --auto advvers6@1.6} $ans [msg_top_unload advvers6/1.6 {} {} advvers7/3.0]
722setenv_loaded_module [list advvers6/1.6 advvers6/1.2 advvers7/3.0] [list $mp/advvers6/1.6 $mp/advvers6/1.2 $mp/advvers7/3.0]
723set ans [list]
724lappend ans [list setpath LOADEDMODULES advvers6/1.6:advvers7/3.0]
725lappend ans [list setpath _LMFILES_ $mp/advvers6/1.6:$mp/advvers7/3.0]
726lappend ans [list unset ts]
727testouterr_cmd_re sh {unload --auto advvers6@1.2} $ans {}
728set ans [list]
729lappend ans [list setpath LOADEDMODULES advvers6/1.2:advvers7/3.0]
730lappend ans [list setpath _LMFILES_ $mp/advvers6/1.2:$mp/advvers7/3.0]
731testouterr_cmd_re sh {unload --auto advvers6@1.6} $ans {}
732# lastly loaded unload
733set ans [list]
734lappend ans [list setpath LOADEDMODULES advvers6/1.6:advvers7/3.0]
735lappend ans [list setpath _LMFILES_ $mp/advvers6/1.6:$mp/advvers7/3.0]
736lappend ans [list unset ts]
737testouterr_cmd_re sh {unload --auto advvers6@1.2:1.6} $ans {}
738set ans [list]
739lappend ans [list setpath LOADEDMODULES advvers7/3.0]
740lappend ans [list setpath _LMFILES_ $mp/advvers7/3.0]
741lappend ans [list setpath MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.0<1.6"]
742lappend ans [list unset ts]
743testouterr_cmd_re sh {unload --auto advvers6@1.6 advvers6@1.2} $ans [msg_top_unload advvers6/1.2 {} {} advvers7/3.0]
744set ans [list]
745lappend ans [list setpath LOADEDMODULES advvers7/3.0]
746lappend ans [list setpath _LMFILES_ $mp/advvers7/3.0]
747lappend ans [list unset ts]
748lappend ans [list setpath MODULES_LMCONFLICT "advvers7/3.0&advvers6 @1.0<1.6"]
749testouterr_cmd_re sh {unload --auto advvers6@1.2 advvers6@1.6} $ans [msg_top_unload advvers6/1.6 {} {} advvers7/3.0]
750unsetenv_loaded_module
751unsetenv_path_var MODULES_LMCONFLICT
752
753# loading module raise conflict
754testouterr_cmd_re sh {load --auto advvers7@3.1} ERR [msg_load advvers6/1.7 [err_conloi "advvers7 @:3.1"]]\n\n[msg_load advvers7/3.1 [err_reqlo advvers6@1.6:1.7]]
755
756# conflict loaded but successful attempt to unload it
757setenv_loaded_module [list advvers6/1.6] [list $mp/advvers6/1.6]
758set ans [list]
759lappend ans [list setpath LOADEDMODULES advvers7/3.2]
760lappend ans [list setpath _LMFILES_ $mp/advvers7/3.2]
761lappend ans [list setpath MODULES_LMCONFLICT "advvers7/3.2&advvers6@1.6<1.7&advvers6 @<1.8"]
762testouterr_cmd sh {load --auto advvers7 @3.2} $ans [msg_top_load advvers7/3.2 advvers6/1.6 {} {}]
763
764# conflict loaded but failed attempt to unload it
765setenv_loaded_module [list advvers6/1.7 advvers6/1.8] [list $mp/advvers6/1.7 $mp/advvers6/1.8]
766testouterr_cmd sh {load --auto advvers7 @3.2} ERR [msg_unload advvers6/1.8 $err_evalabort]
767unsetenv_loaded_module
768
769# conflict with list of modules
770set ans [list]
771lappend ans [list setpath LOADEDMODULES advvers7/3.3]
772lappend ans [list setpath _LMFILES_ $mp/advvers7/3.3]
773lappend ans [list setpath MODULES_LMCONFLICT "advvers7/3.3&advvers6@<1.6&advvers6 @1.6<1.8&advvers6 @1.5.1 @<1.7"]
774testouterr_cmd sh {load --auto advvers7 @3.3} $ans {}
775setenv_loaded_module [list advvers6/1.7] [list $mp/advvers6/1.7]
776testouterr_cmd sh {load --auto advvers7 @3.3} ERR [msg_load advvers7/3.3 [err_conflict advvers7/3.3 advvers6 @1.6:1.8]]
777setenv_loaded_module [list advvers7/3.3] [list $mp/advvers6/3.3]
778setenv_path_var MODULES_LMCONFLICT "advvers7/3.3&advvers6@<1.6&advvers6 @1.6<1.8&advvers6 @1.5.1 @<1.7"
779testouterr_cmd sh {load --auto advvers6@1.7} ERR [msg_load advvers6/1.7 [err_conflict advvers6/1.7 advvers7/3.3]]
780unsetenv_loaded_module
781unsetenv_path_var MODULES_LMCONFLICT
782
783# check cyclic dependencies
784set ans [list]
785lappend ans [list setpath LOADEDMODULES advvers7/4.2:advvers7/4.1:advvers7/4.0]
786lappend ans [list setpath _LMFILES_ $mp/advvers7/4.2:$mp/advvers7/4.1:$mp/advvers7/4.0]
787lappend ans [list setpath MODULES_LMPREREQ advvers7/4.2&advvers7@<4.0:advvers7/4.1&advvers7@4.2<4.90:advvers7/4.0&advvers7@4.0.10<4.1]
788lappend ans [list setpath MODULES_LMNOTUASKED advvers7/4.2:advvers7/4.1]
789testouterr_cmd_re sh {load --auto advvers7@4.0} $ans [msg_top_load advvers7/4.0 {} [list advvers7/4.2 advvers7/4.1] {}]
790set ans [list]
791lappend ans [list setpath LOADEDMODULES advvers7/4.0:advvers7/4.2:advvers7/4.1]
792lappend ans [list setpath _LMFILES_ $mp/advvers7/4.0:$mp/advvers7/4.2:$mp/advvers7/4.1]
793lappend ans [list setpath MODULES_LMPREREQ advvers7/4.0&advvers7@4.0.10<4.1:advvers7/4.2&advvers7@<4.0:advvers7/4.1&advvers7@4.2<4.90]
794lappend ans [list setpath MODULES_LMNOTUASKED advvers7/4.0:advvers7/4.2]
795testouterr_cmd_re sh {load --auto advvers7@4.1} $ans [msg_top_load advvers7/4.1 {} [list advvers7/4.0 advvers7/4.2] {}]
796setenv_loaded_module [list advvers7/4.2 advvers7/4.1 advvers7/4.0] [list $mp/advvers7/4.2 $mp/advvers7/4.1 $mp/advvers7/4.0] [list advvers7/4.2 advvers7/4.1]
797setenv_path_var MODULES_LMPREREQ advvers7/4.2&advvers7@<4.0:advvers7/4.1&advvers7@4.2<4.90:advvers7/4.0&advvers7@4.0.10<4.1
798set ans [list]
799lappend ans [list unsetpath LOADEDMODULES]
800lappend ans [list unsetpath _LMFILES_]
801lappend ans [list unsetpath MODULES_LMPREREQ]
802lappend ans [list unsetpath MODULES_LMNOTUASKED]
803testouterr_cmd_re sh {unload --auto advvers7@4.1} $ans [msg_top_unload advvers7/4.1 advvers7/4.0 advvers7/4.2 {}]
804unsetenv_loaded_module
805unsetenv_path_var MODULES_LMPREREQ
806
807# prereq and conflict complex unload situation
808setenv_loaded_module [list advvers7/5.0 advvers7/5.1 advvers7/5.2 advvers7/5.3] [list $mp/advvers7/5.0 $mp/advvers7/5.1 $mp/advvers7/5.2 $mp/advvers7/5.3] [list advvers7/5.0 advvers7/5.1]
809setenv_path_var MODULES_LMPREREQ "advvers7/5.2&advvers7 @<5.1" "advvers7/5.1&advvers7@<5.0"
810setenv_path_var MODULES_LMCONFLICT "advvers7/5.3&advvers7 @5.0<5.1"
811set ans [list]
812lappend ans [list setpath LOADEDMODULES advvers7/5.3]
813lappend ans [list setpath _LMFILES_ $mp/advvers7/5.3]
814lappend ans [list setpath MODULES_LMCONFLICT "advvers7/5.3&advvers7 @5.0<5.1"]
815lappend ans [list unsetpath MODULES_LMPREREQ]
816lappend ans [list unsetpath MODULES_LMNOTUASKED]
817testouterr_cmd_re sh {unload --auto advvers7@5.2} $ans [msg_top_unload advvers7/5.2 {} [list advvers7/5.1 advvers7/5.0] advvers7/5.3]
818
819# prereq and conflict complex load situation
820setenv_loaded_module [list advvers7/5.1 advvers7/5.2 advvers7/5.3] [list $mp/advvers7/5.1 $mp/advvers7/5.2 $mp/advvers7/5.3] [list advvers7/5.1]
821set ans [list]
822lappend ans [list setpath LOADEDMODULES advvers7/5.1:advvers7/5.2:advvers7/5.3:advvers7/5.0]
823lappend ans [list setpath _LMFILES_ $mp/advvers7/5.1:$mp/advvers7/5.2:$mp/advvers7/5.3:$mp/advvers7/5.0]
824testouterr_cmd_re sh {load --force --auto advvers7@5.0} $ans [msg_load advvers7/5.0 [err_conlof advvers7/5.3]]
825
826setenv_path_var MODULES_LMCONFLICT "advvers7/5.3&advvers7 @5.0<5.1:advvers7/5.2&advvers7 @<5.0"
827testouterr_cmd_re sh {load --force --auto advvers7@5.0} $ans [msg_load advvers7/5.0 [err_conlof advvers7/5.2 advvers7/5.3]]
828
829# another set with more complex prereq definition
830setenv_loaded_module [list advvers7/6.0 advvers7/6.1 advvers7/6.2 advvers7/6.3 advvers7/6.5 advvers7/6.4 advvers7/6.7 advvers7/6.6] [list $mp/advvers7/6.0 $mp/advvers7/6.1 $mp/advvers7/6.2 $mp/advvers7/6.3 $mp/advvers7/6.5 $mp/advvers7/6.4 $mp/advvers7/6.7 $mp/advvers7/6.6] [list advvers7/6.0 advvers7/6.1 advvers7/6.5 advvers7/6.7]
831setenv_path_var MODULES_LMPREREQ "advvers7/6.2&advvers7@<6.0&advvers7 @<6.1" "advvers7/6.3&advvers7@5.0<6.0" "advvers7/6.4&advvers7 @<6.1|advvers7@6.5<6.5" "advvers7/6.6&advvers7@6.7<6.10&advvers7@<6.1"
832setenv_path_var MODULES_LMCONFLICT "advvers7/6.3&advvers7@6.1<6.2"
833set ans [list]
834lappend ans [list setpath LOADEDMODULES advvers7/6.0:advvers7/6.5:advvers7/6.3:advvers7/6.4]
835lappend ans [list setpath _LMFILES_ $mp/advvers7/6.0:$mp/advvers7/6.5:$mp/advvers7/6.3:$mp/advvers7/6.4]
836lappend ans [list setpath MODULES_LMPREREQ "advvers7/6.3&advvers7@5.0<6.0:advvers7/6.4&advvers7 @<6.1|advvers7@6.5<6.5"]
837lappend ans [list setpath MODULES_LMCONFLICT "advvers7/6.3&advvers7@6.1<6.2"]
838lappend ans [list setpath MODULES_LMNOTUASKED advvers7/6.0:advvers7/6.5]
839testouterr_cmd_re sh {unload --auto advvers7@6.1} $ans [msg_top_unload advvers7/6.1 [list advvers7/6.6 advvers7/6.2] advvers7/6.7 [list advvers7/6.3 advvers7/6.4]]
840unsetenv_loaded_module
841unsetenv_path_var MODULES_LMPREREQ
842unsetenv_path_var MODULES_LMCONFLICT
843
844# load/unload additionnal prereq
845# no dependent reload triggered as requirement is already satisfied
846setenv_loaded_module [list advvers7/6.0 advvers7/6.2] [list $mp/advvers7/6.0 $mp/advvers7/6.2] [list advvers7/6.0]
847setenv_path_var MODULES_LMPREREQ "advvers7/6.2&advvers7@<6.0&advvers7 @<6.1"
848set ans [list]
849lappend ans [list setpath LOADEDMODULES advvers7/6.0:advvers7/6.2:advvers7/5.0]
850lappend ans [list setpath _LMFILES_ $mp/advvers7/6.0:$mp/advvers7/6.2:$mp/advvers7/5.0]
851testouterr_cmd_re sh {load --auto advvers7@5.0} $ans {}
852set ans [list]
853lappend ans [list setpath LOADEDMODULES advvers7/6.0:advvers7/6.2:advvers7/6.1]
854lappend ans [list setpath _LMFILES_ $mp/advvers7/6.0:$mp/advvers7/6.2:$mp/advvers7/6.1]
855testouterr_cmd_re sh {load --auto advvers7@6.1} $ans {}
856unsetenv_loaded_module
857unsetenv_path_var MODULES_LMPREREQ
858
859# conflict declared on an alias name whose target unload has been attempted but failed
860setenv_loaded_module [list advvers6/2.1] [list $mp/advvers6/2.1]
861setenv_path_var MODULES_LMALTNAME advvers6/2.1&advvers7/9.2
862testouterr_cmd_re sh {load --auto advvers7@9.0} ERR [msg_load advvers7/9.0 [err_conun advvers7@9.1:9.3]]
863unsetenv_loaded_module
864unsetenv_path_var MODULES_LMALTNAME
865
866# bad specification in modulefile
867testouterr_cmd sh {load --auto advvers7@2.0} ERR [msg_load advvers7/2.0 [msg_moderr "$msg_nomodnameinarg '@1:2'" {prereq @1:2} $mp/advvers7/2.0 2]]
868testouterr_cmd sh {load --auto advvers7@2.1} ERR [msg_load advvers7/2.1 [msg_moderr "$msg_nomodnameinarg '@:2'" {conflict @:2} $mp/advvers7/2.1 2]]
869testouterr_cmd sh {load --auto advvers7@2.2} ERR [msg_load advvers7/2.2 [msg_moderr "$msg_nomodnameinarg '@2:'" {is-loaded @2:} $mp/advvers7/2.2 2]]
870
871# test other sub-cmd concerned by context
872setenv_loaded_module [list advvers7/3.0] [list $mp/advvers7/3.0]
873testouterr_cmd sh {is-loaded advvers7@3.1:} ERR {}
874testouterr_cmd sh {is-loaded advvers7@3.0:} OK {}
875testouterr_cmd sh {is-loaded advvers7@:2.0 @:4} OK {}
876testouterr_cmd sh {is-loaded advvers7@3.0:3.2} OK {}
877set ans [list]
878lappend ans [list set ts1 1]
879lappend ans [list set ts2 0]
880lappend ans [list setpath LOADEDMODULES advvers7/3.0:advvers7/7.0]
881lappend ans [list setpath _LMFILES_ $mp/advvers7/3.0:$mp/advvers7/7.0]
882testouterr_cmd_re sh {load advvers7@7.0} $ans {}
883unsetenv_loaded_module
884
885# test unknown module
886testouterr_cmd sh {load --auto advvers7@8.1.1} ERR [msg_load advvers7/8.1.1 $err_path'unknown@:1.4.5' [err_reqlo unknown@:1.4.5]]
887set ans [list]
888lappend ans [list setpath LOADEDMODULES advvers7/8.1.2]
889lappend ans [list setpath _LMFILES_ $mp/advvers7/8.1.2]
890lappend ans [list setpath MODULES_LMCONFLICT "advvers7/8.1.2&unknown @1.3.1<"]
891testouterr_cmd sh {load --auto advvers7@8.1.2} $ans {}
892
893# test mod@deep/vers
894testouterr_cmd sh {load --auto advvers7@8.2.1} ERR [msg_load advvers7/8.2.1 [msg_moderr "$msg_invversspec 'deep/1:deep/2'" {prereq advvers@deep/1:deep/2} $mp/advvers7/8.2.1 2]]
895testouterr_cmd sh {load --auto advvers7@8.2.2} ERR [msg_load advvers7/8.2.2 [msg_moderr "$msg_invversspec 'deep/1:'" {conflict advvers @deep/1:} $mp/advvers7/8.2.2 2]]
896
897setenv_loaded_module [list advvers/deep/1/1.2] [list $mp/advvers/deep/1/1.2]
898testouterr_cmd sh {load --auto advvers7@8.2.1} ERR [msg_load advvers7/8.2.1 [msg_moderr "$msg_invversspec 'deep/1:deep/2'" {prereq advvers@deep/1:deep/2} $mp/advvers7/8.2.1 2]]
899testouterr_cmd sh {load --auto advvers7@8.2.2} ERR [msg_load advvers7/8.2.2 [msg_moderr "$msg_invversspec 'deep/1:'" {conflict advvers @deep/1:} $mp/advvers7/8.2.2 2]]
900unsetenv_loaded_module
901
902# test mod@vers where a modulefile mod@vers exist
903testouterr_cmd_re sh {load --auto advvers7@8.3.1} ERR [msg_load advvers7/8.3.1 $err_path'advvers@2.1:' [err_reqlo advvers@2.1:]]
904setenv_loaded_module [list advvers@2.1] [list $mp/advvers@2.1]
905testouterr_cmd_re sh {load --auto advvers7@8.3.1} ERR [msg_load advvers7/8.3.1 $err_path'advvers@2.1:' [err_reqlo advvers@2.1:]]
906set ans [list]
907lappend ans [list setpath LOADEDMODULES advvers@2.1:advvers7/8.3.2]
908lappend ans [list setpath _LMFILES_ $mp/advvers@2.1:$mp/advvers7/8.3.2]
909lappend ans [list setpath MODULES_LMCONFLICT "advvers7/8.3.2&advvers@<2.2"]
910testouterr_cmd_re sh {load --auto advvers7@8.3.2} $ans {}
911unsetenv_loaded_module
912
913# test extended default enabled
914setenv_var MODULES_EXTENDED_DEFAULT 1
915set ans [list]
916lappend ans [list setpath LOADEDMODULES extdfl/1.3.1:extdfl/1.4.5:advvers7/8.4.1]
917lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.1:$mp/extdfl/1.4.5:$mp/advvers7/8.4.1]
918lappend ans [list setpath MODULES_LMNOTUASKED extdfl/1.3.1:extdfl/1.4.5]
919lappend ans [list setpath MODULES_LMPREREQ "advvers7/8.4.1&extdfl @1.3<2&extdfl @1.4<1.5"]
920lappend ans [list setpath MODULES_LMALTNAME extdfl/1.3.1&extdfl/default&extdfl]
921testouterr_cmd_re sh {load --auto advvers7@8.4.1} $ans [msg_top_load advvers7/8.4.1 {} [list extdfl/1.3.1 extdfl/1.4.5] {}]
922setenv_loaded_module [list extdfl/1.3.7 extdfl/1.4.5] [list $mp/extdfl/1.3.7 $mp/extdfl/1.4.5]
923
924set ans [list]
925lappend ans [list setpath LOADEDMODULES extdfl/1.3.7:extdfl/1.4.5:advvers7/8.4.1]
926lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.7:$mp/extdfl/1.4.5:$mp/advvers7/8.4.1]
927lappend ans [list setpath MODULES_LMPREREQ "advvers7/8.4.1&extdfl @1.3<2&extdfl @1.4<1.5"]
928testouterr_cmd_re sh {load --auto advvers7@8.4.1} $ans {}
929
930testouterr_cmd_re sh {load --auto advvers7@8.4.2} ERR [msg_load advvers7/8.4.2 [err_conflict advvers7/8.4.2 extdfl @1.3:2]]
931
932# test implicit default disabled
933if {![is_config_locked implicit_default]} {
934    setenv_var MODULES_IMPLICIT_DEFAULT 0
935    testouterr_cmd_re sh {load --auto advvers7@8.4.2} ERR [msg_load advvers7/8.4.2 [err_conflict advvers7/8.4.2 extdfl @1.3:2]]
936    unsetenv_loaded_module
937
938    testouterr_cmd_re sh {load --auto advvers7@8.4.1} ERR [msg_load advvers7/8.4.1 "$err_nodefault'extdfl @1.4:1.5'" [err_reqlo "extdfl @1.4:1.5"]]
939    setenv_var MODULES_IMPLICIT_DEFAULT 1
940}
941unsetenv_loaded_module
942unsetenv_var MODULES_EXTENDED_DEFAULT
943
944if {$is_filesystem_icase} {
945    send_user "\tskipping icase tests as underlying filesystem is case-insensitive\n"
946} else {
947    # test icase
948    set ans [list]
949    lappend ans [list setpath LOADEDMODULES extdfl/1.3.7:advvers7/8.5.1]
950    lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.7:$mp/advvers7/8.5.1]
951    lappend ans [list setpath MODULES_LMNOTUASKED extdfl/1.3.7]
952    lappend ans [list setpath MODULES_LMPREREQ advvers7/8.5.1&ExtDfl@1.3.7<1.4.2]
953    testouterr_cmd_re sh {load -i --auto advvers7@8.5.1} $ans [msg_top_load advvers7/8.5.1 {} extdfl/1.3.7 {}]
954
955    setenv_loaded_module [list extdfl/1.3.7] [list $mp/extdfl/1.3.7]
956    set ans [list]
957    lappend ans [list setpath LOADEDMODULES extdfl/1.3.7:advvers7/8.5.1]
958    lappend ans [list setpath _LMFILES_ $mp/extdfl/1.3.7:$mp/advvers7/8.5.1]
959    lappend ans [list setpath MODULES_LMPREREQ advvers7/8.5.1&ExtDfl@1.3.7<1.4.2]
960    testouterr_cmd_re sh {load -i --auto advvers7@8.5.1} $ans {}
961
962    testouterr_cmd_re sh {load -i --auto advvers7@8.5.2} ERR [msg_load advvers7/8.5.2 [err_conflict advvers7/8.5.2 EXTDFL@1.3.7:1.4.2]]
963    unsetenv_loaded_module
964}
965
966
967# test dependency resolution applies the same against a non default version loaded
968# whether module load/prereq is used to declared and whatever the auto_handling module enabled
969setenv_loaded_module [list advvers8/1] [list $mp/advvers8/1]
970set ans [list]
971lappend ans [list setpath LOADEDMODULES advvers8/1:advvers10/5]
972lappend ans [list setpath _LMFILES_ $mp/advvers8/1:$mp/advvers10/5]
973lappend ans [list setpath MODULES_LMPREREQ advvers10/5&advvers8@1<]
974testouterr_cmd_re sh {load --auto advvers10/5} $ans {}
975testouterr_cmd_re sh {load --no-auto advvers10/5} $ans {}
976lappend ans [list setpath LOADEDMODULES advvers8/1:advvers10/6]
977lappend ans [list setpath _LMFILES_ $mp/advvers8/1:$mp/advvers10/6]
978lappend ans [list setpath MODULES_LMPREREQ advvers10/6&advvers8@1<]
979testouterr_cmd_re sh {load --auto advvers10/6} $ans {}
980testouterr_cmd_re sh {load --no-auto advvers10/6} $ans {}
981
982setenv_loaded_module [list advvers9/3] [list $mp/advvers9/3]
983set ans [list]
984lappend ans [list setpath LOADEDMODULES advvers9/3:advvers10/7]
985lappend ans [list setpath _LMFILES_ $mp/advvers9/3:$mp/advvers10/7]
986lappend ans [list setpath MODULES_LMPREREQ advvers10/7&advvers9@1<3]
987testouterr_cmd_re sh {load --auto advvers10/7} $ans {}
988testouterr_cmd_re sh {load --no-auto advvers10/7} $ans {}
989lappend ans [list setpath LOADEDMODULES advvers9/3:advvers10/8]
990lappend ans [list setpath _LMFILES_ $mp/advvers9/3:$mp/advvers10/8]
991lappend ans [list setpath MODULES_LMPREREQ advvers10/8&advvers9@1<3]
992lappend ans [list setpath MODULES_LMALTNAME advvers10/8&as|advvers10/default&as|advvers10/latest]
993testouterr_cmd_re sh {load --auto advvers10/8} $ans {}
994testouterr_cmd_re sh {load --no-auto advvers10/8} $ans {}
995unsetenv_loaded_module
996
997
998# specific tests to improve modEq procs coverage
999testouterr_cmd_re sh {load -i iCaSe3/sub@1.1:} ERR $err_path'iCaSe3/sub@1.1:'
1000setenv_var MODULES_EXTENDED_DEFAULT 1
1001testouterr_cmd_re sh {load -i iCaSe3/sub@1.1:} ERR $err_path'iCaSe3/sub@1.1:'
1002unsetenv_var MODULES_EXTENDED_DEFAULT
1003
1004
1005#
1006# test modulepath and module names containing space
1007#
1008
1009set mp "$modpath wspace"
1010if {!$is_symlink_supported} {
1011    send_user "\tskipping tests over '$mp' modulepath as symbolic links are not supported on filesystem\n"
1012} else {
1013
1014setenv_var MODULEPATH $mp
1015setenv_var MODULES_EXTENDED_DEFAULT 1
1016
1017set ans [list]
1018lappend ans [list setpath LOADEDMODULES "space yd/2.2"]
1019lappend ans [list setpath _LMFILES_ "$mp/space yd/2.2"]
1020testouterr_cmd sh {load space\ yd@:2.6} $ans {}
1021testouterr_cmd sh {avail -t space\ yd@:2.6} {} "$mp:\nspace yd/2.1\nspace yd/2.2"
1022testouterr_cmd sh {avail -t space\ yd@2.1:2.3} {} "$mp:\nspace yd/2.1\nspace yd/2.2"
1023testouterr_cmd sh {avail -t space\ yd@3.2:} {} "$mp:\nspace yd/4.1\nspace yd/5.0"
1024set ans [list]
1025lappend ans [list setpath LOADEDMODULES "space yd/4.1"]
1026lappend ans [list setpath _LMFILES_ "$mp/space yd/4.1"]
1027testouterr_cmd sh {load space\ yd@3:4} $ans {}
1028unsetenv_var MODULES_EXTENDED_DEFAULT
1029
1030}
1031
1032#
1033#  Cleanup
1034#
1035
1036# restore environment
1037unsetenv_loaded_module
1038unsetenv_var MODULES_ADVANCED_VERSION_SPEC
1039unsetenv_var MODULES_IMPLICIT_DEFAULT
1040unsetenv_var MODULES_SEARCH_MATCH
1041unsetenv_var MODULES_AVAIL_INDEPTH
1042unsetenv_var MODULES_EXTENDED_DEFAULT
1043unsetenv_var MODULES_UNLOAD_MATCH_ORDER
1044setenv_path_var MODULEPATH $modpath
1045
1046unset mp
1047unset mpre
1048unset ans
1049unset tserr
1050