@@ -345,6 +345,139 @@ def test_load(self):
345345 init_config (build_options = {'mod_depends_on' : 'True' })
346346 self .assertErrorRegex (EasyBuildError , expected , self .modgen .load_module , "mod_name" )
347347
348+ def test_load_multi_deps (self ):
349+ """Test generated load statement when multi_deps is involved."""
350+
351+ # first check with typical two-version multi_deps
352+ multi_dep_mods = ['Python/3.7.4' , 'Python/2.7.16' ]
353+ res = self .modgen .load_module ('Python/3.7.4' , multi_dep_mods = multi_dep_mods )
354+
355+ if self .MODULE_GENERATOR_CLASS == ModuleGeneratorTcl :
356+ expected = '\n ' .join ([
357+ '' ,
358+ "if { ![ is-loaded Python/3.7.4 ] && ![ is-loaded Python/2.7.16 ] } {" ,
359+ " module load Python/3.7.4" ,
360+ '}' ,
361+ '' ,
362+ ])
363+ else : # Lua syntax
364+ expected = '\n ' .join ([
365+ '' ,
366+ 'if not ( isloaded("Python/3.7.4") ) and not ( isloaded("Python/2.7.16") ) then' ,
367+ ' load("Python/3.7.4")' ,
368+ 'end' ,
369+ '' ,
370+ ])
371+ self .assertEqual (expected , res )
372+
373+ if self .modtool .supports_depends_on :
374+ # two versions with depends_on
375+ res = self .modgen .load_module ('Python/3.7.4' , multi_dep_mods = multi_dep_mods , depends_on = True )
376+
377+ if self .MODULE_GENERATOR_CLASS == ModuleGeneratorTcl :
378+ expected = '\n ' .join ([
379+ '' ,
380+ "if { [ module-info mode remove ] || [ is-loaded Python/2.7.16 ] } {" ,
381+ " depends-on Python" ,
382+ '} else {' ,
383+ " depends-on Python/3.7.4" ,
384+ '}' ,
385+ '' ,
386+ ])
387+ else : # Lua syntax
388+ expected = '\n ' .join ([
389+ '' ,
390+ 'if mode() == "unload" or isloaded("Python/2.7.16") then' ,
391+ ' depends_on("Python")' ,
392+ 'else' ,
393+ ' depends_on("Python/3.7.4")' ,
394+ 'end' ,
395+ '' ,
396+ ])
397+ self .assertEqual (expected , res )
398+
399+ # now test with more than two versions...
400+ multi_dep_mods = ['foo/1.2.3' , 'foo/2.3.4' , 'foo/3.4.5' , 'foo/4.5.6' ]
401+ res = self .modgen .load_module ('foo/1.2.3' , multi_dep_mods = multi_dep_mods )
402+
403+ if self .MODULE_GENERATOR_CLASS == ModuleGeneratorTcl :
404+ expected = '\n ' .join ([
405+ '' ,
406+ "if { ![ is-loaded foo/1.2.3 ] && ![ is-loaded foo/2.3.4 ] && " +
407+ "![ is-loaded foo/3.4.5 ] && ![ is-loaded foo/4.5.6 ] } {" ,
408+ " module load foo/1.2.3" ,
409+ '}' ,
410+ '' ,
411+ ])
412+ else : # Lua syntax
413+ expected = '\n ' .join ([
414+ '' ,
415+ 'if not ( isloaded("foo/1.2.3") ) and not ( isloaded("foo/2.3.4") ) and ' +
416+ 'not ( isloaded("foo/3.4.5") ) and not ( isloaded("foo/4.5.6") ) then' ,
417+ ' load("foo/1.2.3")' ,
418+ 'end' ,
419+ '' ,
420+ ])
421+ self .assertEqual (expected , res )
422+
423+ if self .modtool .supports_depends_on :
424+ # more than two versions, with depends_on
425+ res = self .modgen .load_module ('foo/1.2.3' , multi_dep_mods = multi_dep_mods , depends_on = True )
426+
427+ if self .MODULE_GENERATOR_CLASS == ModuleGeneratorTcl :
428+ expected = '\n ' .join ([
429+ '' ,
430+ "if { [ module-info mode remove ] || [ is-loaded foo/2.3.4 ] || [ is-loaded foo/3.4.5 ] " +
431+ "|| [ is-loaded foo/4.5.6 ] } {" ,
432+ " depends-on foo" ,
433+ "} else {" ,
434+ " depends-on foo/1.2.3" ,
435+ '}' ,
436+ '' ,
437+ ])
438+ else : # Lua syntax
439+ expected = '\n ' .join ([
440+ '' ,
441+ 'if mode() == "unload" or isloaded("foo/2.3.4") or isloaded("foo/3.4.5") or isloaded("foo/4.5.6") then' ,
442+ ' depends_on("foo")' ,
443+ 'else' ,
444+ ' depends_on("foo/1.2.3")' ,
445+ 'end' ,
446+ '' ,
447+ ])
448+ self .assertEqual (expected , res )
449+
450+ # what if we only list a single version?
451+ # see https://github.com/easybuilders/easybuild-framework/issues/3080
452+ res = self .modgen .load_module ('one/1.0' , multi_dep_mods = ['one/1.0' ])
453+
454+ if self .MODULE_GENERATOR_CLASS == ModuleGeneratorTcl :
455+ expected = '\n ' .join ([
456+ '' ,
457+ "if { ![ is-loaded one/1.0 ] } {" ,
458+ " module load one/1.0" ,
459+ '}' ,
460+ '' ,
461+ ])
462+ else : # Lua syntax
463+ expected = '\n ' .join ([
464+ '' ,
465+ 'if not ( isloaded("one/1.0") ) then' ,
466+ ' load("one/1.0")' ,
467+ 'end' ,
468+ '' ,
469+ ])
470+ self .assertEqual (expected , res )
471+
472+ if self .modtool .supports_depends_on :
473+ res = self .modgen .load_module ('one/1.0' , multi_dep_mods = ['one/1.0' ], depends_on = True )
474+
475+ if self .MODULE_GENERATOR_CLASS == ModuleGeneratorTcl :
476+ expected = '\n depends-on one/1.0\n '
477+ else : # Lua syntax
478+ expected = '\n depends_on("one/1.0")\n '
479+ self .assertEqual (expected , res )
480+
348481 def test_modulerc (self ):
349482 """Test modulerc method."""
350483 self .assertErrorRegex (EasyBuildError , "Incorrect module_version value type" , self .modgen .modulerc , 'foo' )
0 commit comments