mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Fixing Import-Module on Linux for special cases of NestedModules/RootModule path format (#4010)
* IPMO fix for some cases of NestedModules/RootModule path syntax * Added tests for #3693 fix * Updated tests
This commit is contained in:
@@ -613,19 +613,18 @@ namespace Microsoft.PowerShell.Commands
|
||||
Guid? savedBaseGuid = BaseGuid;
|
||||
|
||||
var importingModule = 0 != (manifestProcessingFlags & ManifestProcessingFlags.LoadElements);
|
||||
|
||||
string extension = Path.GetExtension(moduleSpecification.Name);
|
||||
// First check for fully-qualified paths - either absolute or relative
|
||||
string rootedPath = ResolveRootedFilePath(moduleSpecification.Name, this.Context);
|
||||
if (String.IsNullOrEmpty(rootedPath))
|
||||
{
|
||||
rootedPath = Path.Combine(moduleBase, moduleSpecification.Name);
|
||||
rootedPath = FixupFileName(moduleBase, moduleSpecification.Name, extension);
|
||||
}
|
||||
else
|
||||
{
|
||||
wasRooted = true;
|
||||
}
|
||||
|
||||
string extension = Path.GetExtension(moduleSpecification.Name);
|
||||
try
|
||||
{
|
||||
this.Context.Modules.IncrementModuleNestingDepth(this, rootedPath);
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
Describe "Tests for paths of submodules in module manifest" -tags "CI" {
|
||||
|
||||
$moduleName = 'ModuleA'
|
||||
$moduleFileName = "$moduleName.psd1"
|
||||
$submoduleName = 'ModuleB'
|
||||
$submoduleFileName = "$submoduleName.psm1"
|
||||
$moduleRootPath = Join-Path $TestDrive $moduleName
|
||||
$moduleFilePath = Join-Path $moduleRootPath $moduleFileName
|
||||
$nestedModulePath = Join-Path $moduleRootPath $submoduleName
|
||||
$nestedModuleFilePath = Join-Path $nestedModulePath $submoduleFileName
|
||||
|
||||
BeforeEach {
|
||||
|
||||
Remove-Module $moduleName -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item $moduleRootPath -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
New-Item -ItemType Directory -Force -Path $nestedModulePath
|
||||
"function TestModuleFunction{'Hello from TestModuleFunction'}" | Out-File $nestedModuleFilePath
|
||||
}
|
||||
|
||||
$testCases = @(
|
||||
@{ SubModulePath = "$submoduleName" }
|
||||
@{ SubModulePath = "$submoduleName\$submoduleName" }
|
||||
@{ SubModulePath = "$submoduleName/$submoduleName" }
|
||||
@{ SubModulePath = "$submoduleName\$submoduleFileName" }
|
||||
@{ SubModulePath = "$submoduleName/$submoduleFileName" }
|
||||
@{ SubModulePath = ".\$submoduleName" }
|
||||
@{ SubModulePath = ".\$submoduleName\$submoduleName" }
|
||||
@{ SubModulePath = ".\$submoduleName/$submoduleName" }
|
||||
@{ SubModulePath = ".\$submoduleName\$submoduleFileName" }
|
||||
@{ SubModulePath = ".\$submoduleName/$submoduleFileName" }
|
||||
@{ SubModulePath = "./$submoduleName" }
|
||||
@{ SubModulePath = "./$submoduleName/$submoduleName" }
|
||||
@{ SubModulePath = "./$submoduleName\$submoduleName" }
|
||||
@{ SubModulePath = "./$submoduleName/$submoduleFileName" }
|
||||
@{ SubModulePath = "./$submoduleName\$submoduleFileName" }
|
||||
)
|
||||
|
||||
It "Test if NestedModule path is <SubModulePath>" -TestCases $testCases {
|
||||
param($SubModulePath)
|
||||
|
||||
New-ModuleManifest $moduleFilePath -NestedModules @($SubModulePath)
|
||||
Import-Module $moduleFilePath
|
||||
(Get-Module $moduleName).ExportedCommands.Keys.Contains('TestModuleFunction') | Should Be $true
|
||||
}
|
||||
|
||||
It "Test if RootModule path is <SubModulePath>" -TestCases $testCases {
|
||||
param($SubModulePath)
|
||||
|
||||
New-ModuleManifest $moduleFilePath -RootModule $SubModulePath
|
||||
Import-Module $moduleFilePath
|
||||
(Get-Module $moduleName).ExportedCommands.Keys.Contains('TestModuleFunction') | Should Be $true
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user