ee9049b61f
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.
128 lines
6 KiB
PowerShell
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"
|
|
}
|
|
}
|