From 71098a34cc2d28500772103a687064cc40fd9fb3 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 30 May 2017 15:11:41 -0700 Subject: [PATCH 1/3] Fixed ScriptsToProcess when -Version param is used in Import-Module --- .../engine/Modules/ModuleCmdletBase.cs | 74 ++++++++++++------- .../Import-Module.Tests.ps1 | 49 ++++++++++++ 2 files changed, 96 insertions(+), 27 deletions(-) diff --git a/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs b/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs index 7c5857db3a3..b6aa270c9b4 100644 --- a/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs +++ b/src/System.Management.Automation/engine/Modules/ModuleCmdletBase.cs @@ -2768,38 +2768,58 @@ internal PSModuleInfo LoadModuleManifest( } if (scriptsToProcess != null) - { - foreach (string scriptFile in scriptsToProcess) - { - bool found = false; - PSModuleInfo module = LoadModule(scriptFile, - moduleBase, - string.Empty, // prefix (-Prefix shouldn't be applied to dot sourced scripts) - null, - ref options, - manifestProcessingFlags, - out found); - - // If we're in analysis, add the detected exports to this module's - // exports - if (found && (ss == null)) + { + Version savedBaseMinimumVersion = BaseMinimumVersion; + Version savedBaseMaximumVersion = BaseMaximumVersion; + Version savedBaseRequiredVersion = BaseRequiredVersion; + Guid? savedBaseGuid = BaseGuid; + + try + { + BaseMinimumVersion = null; + BaseMaximumVersion = null; + BaseRequiredVersion = null; + BaseGuid = null; + + foreach (string scriptFile in scriptsToProcess) { - foreach (string detectedCmdlet in module.ExportedCmdlets.Keys) - { - manifestInfo.AddDetectedCmdletExport(detectedCmdlet); - } + bool found = false; + PSModuleInfo module = LoadModule(scriptFile, + moduleBase, + string.Empty, // prefix (-Prefix shouldn't be applied to dot sourced scripts) + null, + ref options, + manifestProcessingFlags, + out found); - foreach (string detectedFunction in module.ExportedFunctions.Keys) + // If we're in analysis, add the detected exports to this module's + // exports + if (found && (ss == null)) { - manifestInfo.AddDetectedFunctionExport(detectedFunction); - } + foreach (string detectedCmdlet in module.ExportedCmdlets.Keys) + { + manifestInfo.AddDetectedCmdletExport(detectedCmdlet); + } - foreach (string detectedAlias in module.ExportedAliases.Keys) - { - manifestInfo.AddDetectedAliasExport(detectedAlias, - module.ExportedAliases[detectedAlias].Definition); + foreach (string detectedFunction in module.ExportedFunctions.Keys) + { + manifestInfo.AddDetectedFunctionExport(detectedFunction); + } + + foreach (string detectedAlias in module.ExportedAliases.Keys) + { + manifestInfo.AddDetectedAliasExport(detectedAlias, + module.ExportedAliases[detectedAlias].Definition); + } } - } + } + } + finally + { + BaseMinimumVersion = savedBaseMinimumVersion; + BaseMaximumVersion = savedBaseMaximumVersion; + BaseRequiredVersion = savedBaseRequiredVersion; + BaseGuid = savedBaseGuid; } } diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 index c959d0d20ed..7530917c5f9 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 @@ -22,3 +22,52 @@ (Get-Module -Name $moduleName).Name | Should Be $moduleName } } + +Describe "Import-Module with ScriptsToProcess" -Tags "CI" { + + BeforeAll { + $moduleRootPath = Join-Path $TestDrive 'TestModules' + New-Item $moduleRootPath -ItemType Directory -Force | Out-Null + Push-Location $moduleRootPath + + "1 | Out-File out.txt -Append -NoNewline" | Out-File script1.ps1 + "2 | Out-File out.txt -Append -NoNewline" | Out-File script2.ps1 + New-ModuleManifest module1.psd1 -ScriptsToProcess script1.ps1 + New-ModuleManifest module2.psd1 -ScriptsToProcess script2.ps1 -NestedModules module1.psd1 + } + + AfterAll { + Pop-Location + #Remove-Item $moduleRootPath -Recurse -Force -ErrorAction SilentlyContinue + } + + BeforeEach { + New-Item out.txt -ItemType File -Force | Out-Null + } + + AfterEach { + $m = @('module1','module2','script1','script2') + remove-module $m -Force -ErrorAction SilentlyContinue + Remove-Item out.txt -Force -ErrorAction SilentlyContinue + } + + It "Verify ScriptsToProcess are executed for top-level module" { + Import-Module .\module1.psd1 + Get-Content out.txt | Should Be '1' + } + + It "Verify ScriptsToProcess are executed for top-level and nested module" { + Import-Module .\module2.psd1 + Get-Content out.txt | Should Be '21' + } + + It "Verify ScriptsToProcess are executed for top-level module when -Version is specified" { + Import-Module .\module1.psd1 -Version 1.0 + Get-Content out.txt | Should Be '1' + } + + It "Verify ScriptsToProcess are executed for top-level and nested module when -Version is specified" { + Import-Module .\module2.psd1 -Version 1.0 + Get-Content out.txt | Should Be '21' + } +} \ No newline at end of file From 9ec66516abe512542baccaedbb6bf1a4bb2f4377 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 31 May 2017 16:21:57 -0700 Subject: [PATCH 2/3] Addressed feedback --- .../Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 index 7530917c5f9..3df13dbdf1e 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 @@ -38,7 +38,6 @@ Describe "Import-Module with ScriptsToProcess" -Tags "CI" { AfterAll { Pop-Location - #Remove-Item $moduleRootPath -Recurse -Force -ErrorAction SilentlyContinue } BeforeEach { @@ -70,4 +69,4 @@ Describe "Import-Module with ScriptsToProcess" -Tags "CI" { Import-Module .\module2.psd1 -Version 1.0 Get-Content out.txt | Should Be '21' } -} \ No newline at end of file +} From 03d4772e03ecac25b133afd0446de17a9781e47e Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 2 Jun 2017 13:20:59 -0700 Subject: [PATCH 3/3] Updated tests --- .../Import-Module.Tests.ps1 | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 index 3df13dbdf1e..2da49f48748 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/Import-Module.Tests.ps1 @@ -49,24 +49,17 @@ Describe "Import-Module with ScriptsToProcess" -Tags "CI" { remove-module $m -Force -ErrorAction SilentlyContinue Remove-Item out.txt -Force -ErrorAction SilentlyContinue } - - It "Verify ScriptsToProcess are executed for top-level module" { - Import-Module .\module1.psd1 - Get-Content out.txt | Should Be '1' - } - It "Verify ScriptsToProcess are executed for top-level and nested module" { - Import-Module .\module2.psd1 - Get-Content out.txt | Should Be '21' - } - - It "Verify ScriptsToProcess are executed for top-level module when -Version is specified" { - Import-Module .\module1.psd1 -Version 1.0 - Get-Content out.txt | Should Be '1' - } + $testCases = @( + @{ TestNameSuffix = 'for top-level module'; ipmoParms = @{'Name'='.\module1.psd1'}; Expected = '1' } + @{ TestNameSuffix = 'for top-level and nested module'; ipmoParms = @{'Name'='.\module2.psd1'}; Expected = '21' } + @{ TestNameSuffix = 'for top-level module when -Version is specified'; ipmoParms = @{'Name'='.\module1.psd1'; 'Version'='1.0'}; Expected = '1' } + @{ TestNameSuffix = 'for top-level and nested module when -Version is specified'; ipmoParms = @{'Name'='.\module2.psd1'; 'Version'='1.0'}; Expected = '21' } + ) - It "Verify ScriptsToProcess are executed for top-level and nested module when -Version is specified" { - Import-Module .\module2.psd1 -Version 1.0 - Get-Content out.txt | Should Be '21' + It "Verify ScriptsToProcess are executed " -TestCases $testCases { + param($TestNameSuffix,$ipmoParms,$Expected) + Import-Module @ipmoParms + Get-Content out.txt | Should Be $Expected } }