PowerShell/test/powershell/engine/Module/TestModuleManifest.Tests.ps1
Steve Lee ee9049b61f New-ModuleManifest was incorrectly checking if a Uri was well formed by using ToString() which just outputs the original (#3631)
string.  If the string was a uri with spaces, ToString() doesn't return the escaped version.  The AbsoluteUri property
should be used instead which returns an escaped absolute uri (if valid).

Also renamed TestModuleManfest.ps1 to TestModuleManifest.Tests.ps1 so that it gets picked up correctly as Pester test.

Since HelpInfoUri is just a string, ensure it is a valid absolute uri and escaped correctly whereas before it was just
an opaque string that wasn't validated.
2017-04-25 17:45:24 -07:00

128 lines
6 KiB
PowerShell

Import-Module $PSScriptRoot\..\..\Common\Test.Helpers.psm1
Describe "Test-ModuleManifest tests" -tags "CI" {
AfterEach {
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue testdrive:/module
}
It "module manifest containing paths with backslashes or forwardslashes are resolved correctly" {
New-Item -ItemType Directory -Path testdrive:/module
New-Item -ItemType Directory -Path testdrive:/module/foo
New-Item -ItemType Directory -Path testdrive:/module/bar
New-Item -ItemType File -Path testdrive:/module/foo/bar.psm1
New-Item -ItemType File -Path testdrive:/module/bar/foo.psm1
$testModulePath = "testdrive:/module/test.psd1"
$fileList = "foo\bar.psm1","bar/foo.psm1"
New-ModuleManifest -NestedModules $fileList -RootModule foo\bar.psm1 -RequiredAssemblies $fileList -Path $testModulePath -TypesToProcess $fileList -FormatsToProcess $fileList -ScriptsToProcess $fileList -FileList $fileList -ModuleList $fileList
Test-Path $testModulePath | Should Be $true
# use -ErrorAction Stop to cause test to fail if Test-ModuleManifest writes to error stream
Test-ModuleManifest -Path $testModulePath -ErrorAction Stop | Should BeOfType System.Management.Automation.PSModuleInfo
}
It "module manifest containing missing files returns error" -TestCases (
@{parameter = "RequiredAssemblies"; error = "Modules_InvalidRequiredAssembliesInModuleManifest"},
@{parameter = "NestedModules"; error = "Modules_InvalidNestedModuleinModuleManifest"},
@{parameter = "RequiredModules"; error = "Modules_InvalidRequiredModulesinModuleManifest"},
@{parameter = "FileList"; error = "Modules_InvalidFilePathinModuleManifest"},
@{parameter = "ModuleList"; error = "Modules_InvalidModuleListinModuleManifest"},
@{parameter = "TypesToProcess"; error = "Modules_InvalidManifest"},
@{parameter = "FormatsToProcess"; error = "Modules_InvalidManifest"},
@{parameter = "RootModule"; error = "Modules_InvalidRootModuleInModuleManifest"},
@{parameter = "ScriptsToProcess"; error = "Modules_InvalidManifest"}
) {
param ($parameter, $error)
New-Item -ItemType Directory -Path testdrive:/module
New-Item -ItemType Directory -Path testdrive:/module/foo
New-Item -ItemType File -Path testdrive:/module/foo/bar.psm1
$testModulePath = "testdrive:/module/test.psd1"
$args = @{$parameter = "doesnotexist.psm1"}
New-ModuleManifest -Path $testModulePath @args
[string]$errorId = "$error,Microsoft.PowerShell.Commands.TestModuleManifestCommand"
{ Test-ModuleManifest -Path $testModulePath -ErrorAction Stop } | ShouldBeErrorId $errorId
}
It "module manifest containing valid unprocessed rootmodule file type succeeds" -TestCases (
@{rootModuleValue = "foo.psm1"},
@{rootModuleValue = "foo.dll"}
) {
param($rootModuleValue)
New-Item -ItemType Directory -Path testdrive:/module
$testModulePath = "testdrive:/module/test.psd1"
New-Item -ItemType File -Path testdrive:/module/$rootModuleValue
New-ModuleManifest -Path $testModulePath -RootModule $rootModuleValue
$moduleManifest = Test-ModuleManifest -Path $testModulePath -ErrorAction Stop
$moduleManifest | Should BeOfType System.Management.Automation.PSModuleInfo
$moduleManifest.RootModule | Should Be $rootModuleValue
}
It "module manifest containing valid processed empty rootmodule file type fails" -TestCases (
@{rootModuleValue = "foo.cdxml"; error = "System.Xml.XmlException"}, # fails when cmdlet tries to read it as XML
@{rootModuleValue = "foo.xaml"; error = "NotSupported"} # not supported on PowerShell Core
) {
param($rootModuleValue, $error)
New-Item -ItemType Directory -Path testdrive:/module
$testModulePath = "testdrive:/module/test.psd1"
New-Item -ItemType File -Path testdrive:/module/$rootModuleValue
New-ModuleManifest -Path $testModulePath -RootModule $rootModuleValue
{ Test-ModuleManifest -Path $testModulePath -ErrorAction Stop } | ShouldBeErrorId "$error,Microsoft.PowerShell.Commands.TestModuleManifestCommand"
}
It "module manifest containing empty rootmodule succeeds" -TestCases (
@{rootModuleValue = $null},
@{rootModuleValue = ""}
) {
param($rootModuleValue)
New-Item -ItemType Directory -Path testdrive:/module
$testModulePath = "testdrive:/module/test.psd1"
New-ModuleManifest -Path $testModulePath -RootModule $rootModuleValue
$moduleManifest = Test-ModuleManifest -Path $testModulePath -ErrorAction Stop
$moduleManifest | Should BeOfType System.Management.Automation.PSModuleInfo
$moduleManifest.RootModule | Should BeNullOrEmpty
}
It "module manifest containing invalid rootmodule returns error" -TestCases (
@{rootModuleValue = "foo.psd1"; error = "Modules_InvalidManifest"}
) {
param($rootModuleValue, $error)
$testModulePath = "testdrive:/module/test.psd1"
New-Item -ItemType Directory -Path testdrive:/module
New-Item -ItemType File -Path testdrive:/module/$rootModuleValue
New-ModuleManifest -Path $testModulePath -RootModule $rootModuleValue
{ Test-ModuleManifest -Path $testModulePath -ErrorAction Stop } | ShouldBeErrorId "$error,Microsoft.PowerShell.Commands.TestModuleManifestCommand"
}
It "module manifest containing non-existing rootmodule returns error" -TestCases (
@{rootModuleValue = "doesnotexist.psm1"; error = "Modules_InvalidRootModuleInModuleManifest"}
) {
param($rootModuleValue, $error)
$testModulePath = "testdrive:/module/test.psd1"
New-Item -ItemType Directory -Path testdrive:/module
New-ModuleManifest -Path $testModulePath -RootModule $rootModuleValue
{ Test-ModuleManifest -Path $testModulePath -ErrorAction Stop } | ShouldBeErrorId "$error,Microsoft.PowerShell.Commands.TestModuleManifestCommand"
}
}