MegaBites-AI/Windows-powershell
0372
1# Copyright (c) Microsoft Corporation.2# Licensed under the MIT License.3 4function New-ModuleSpecification5{6 param(7 $ModuleName,8 $ModuleVersion,9 $MaximumVersion,10 $RequiredVersion,11 $Guid)12 13 $modSpec = @{}14 15 if ($ModuleName)16 {17 $modSpec.ModuleName = $ModuleName18 }19 20 if ($ModuleVersion)21 {22 $modSpec.ModuleVersion = $ModuleVersion23 }24 25 if ($MaximumVersion)26 {27 $modSpec.MaximumVersion = $MaximumVersion28 }29 30 if ($RequiredVersion)31 {32 $modSpec.RequiredVersion = $RequiredVersion33 }34 35 if ($Guid)36 {37 $modSpec.Guid = $Guid38 }39 40 return $modSpec41}42 43function Invoke-ImportModule44{45 param(46 $Module,47 $MinimumVersion,48 $MaximumVersion,49 $RequiredVersion,50 [switch]$PassThru,51 [switch]$AsCustomObject)52 53 $cmdArgs = @{54 Name = $Module55 ErrorAction = 'Stop'56 }57 58 if ($MinimumVersion)59 {60 $cmdArgs.MinimumVersion = $MinimumVersion61 }62 63 if ($MaximumVersion)64 {65 $cmdArgs.MaximumVersion = $MaximumVersion66 }67 68 if ($RequiredVersion)69 {70 $cmdArgs.RequiredVersion = $RequiredVersion71 }72 73 if ($PassThru)74 {75 $cmdArgs.PassThru = $true76 }77 78 if ($AsCustomObject)79 {80 $cmdArgs.AsCustomObject = $true81 }82 83 return Import-Module @cmdArgs84}85 86function Assert-ModuleIsCorrect87{88 param(89 $Module,90 [string]$Name = $moduleName,91 [guid]$Guid = $actualGuid,92 [version]$Version = $actualVersion,93 [version]$MinVersion,94 [version]$MaxVersion,95 [version]$RequiredVersion96 )97 98 $Module | Should -Not -Be $null99 $Module.Name | Should -Be $ModuleName100 $Module.Guid | Should -Be $Guid101 if ($Version)102 {103 $Module.Version | Should -Be $Version104 }105 if ($ModuleVersion)106 {107 $Module.Version | Should -BeGreaterOrEqual $ModuleVersion108 }109 if ($MaximumVersion)110 {111 $Module.Version | Should -BeLessOrEqual $MaximumVersion112 }113 if ($RequiredVersion)114 {115 $Module.Version | Should -Be $RequiredVersion116 }117}118 119$actualVersion = '2.3'120$actualGuid = [guid]'9b945229-65fd-4629-ae99-88e2618377ff'121 122$successCases = @(123 @{124 ModuleVersion = '2.0'125 MaximumVersion = $null126 RequiredVersion = $null127 },128 @{129 ModuleVersion = '1.0'130 MaximumVersion = '3.0'131 RequiredVersion = $null132 },133 @{134 ModuleVersion = $null135 MaximumVersion = '3.0'136 RequiredVersion = $null137 },138 @{139 ModuleVersion = $null140 MaximumVersion = $null141 RequiredVersion = $actualVersion142 }143)144 145$failCases = @(146 @{147 ModuleVersion = '2.5'148 MaximumVersion = $null149 RequiredVersion = $null150 },151 @{152 ModuleVersion = '2.0'153 MaximumVersion = '2.2'154 RequiredVersion = $null155 },156 @{157 ModuleVersion = '3.0'158 MaximumVersion = '3.1'159 RequiredVersion = $null160 },161 @{162 ModuleVersion = '3.0'163 MaximumVersion = '2.0'164 RequiredVersion = $null165 },166 @{167 ModuleVersion = $null168 MaximumVersion = '1.7'169 RequiredVersion = $null170 },171 @{172 ModuleVersion = $null173 MaximumVersion = $null174 RequiredVersion = '2.2'175 }176)177 178$guidSuccessCases = [System.Collections.ArrayList]::new()179foreach ($case in $successCases)180{181 [void]$guidSuccessCases.Add($case + @{ Guid = $null })182 [void]$guidSuccessCases.Add(($case + @{ Guid = $actualGuid }))183}184 185$guidFailCases = [System.Collections.ArrayList]::new()186foreach ($case in $failCases)187{188 [void]$guidFailCases.Add($case + @{ Guid = $null })189 [void]$guidFailCases.Add($case + @{ Guid = $actualGuid })190 [void]$guidFailCases.Add($case + @{ Guid = [guid]::NewGuid() })191}192 193Describe "Module loading with version constraints" -Tags "Feature" {194 BeforeAll {195 $moduleName = 'TestModule'196 $modulePath = Join-Path $TestDrive $moduleName197 New-Item -Path $modulePath -ItemType Directory198 $manifestPath = Join-Path $modulePath "$moduleName.psd1"199 New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid200 201 $oldPSModulePath = $env:PSModulePath202 $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive203 }204 205 AfterAll {206 $env:PSModulePath = $oldPSModulePath207 }208 209 AfterEach {210 Get-Module $moduleName | Remove-Module211 }212 213 It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {214 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)215 216 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid217 218 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru219 220 Assert-ModuleIsCorrect `221 -Module $mod `222 -MinVersion $ModuleVersion `223 -MaxVersion $MaximumVersion `224 -RequiredVersion $RequiredVersion225 }226 227 It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {228 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)229 230 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid231 232 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru233 234 Assert-ModuleIsCorrect `235 -Module $mod `236 -MinVersion $ModuleVersion `237 -MaxVersion $MaximumVersion `238 -RequiredVersion $RequiredVersion239 }240 241 It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {242 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)243 244 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid245 246 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru247 248 Assert-ModuleIsCorrect `249 -Module $mod `250 -MinVersion $ModuleVersion `251 -MaxVersion $MaximumVersion `252 -RequiredVersion $RequiredVersion253 }254 255 It "Loads the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {256 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)257 258 $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru259 260 Assert-ModuleIsCorrect `261 -Module $mod `262 -MinVersion $ModuleVersion `263 -MaxVersion $MaximumVersion `264 -RequiredVersion $RequiredVersion265 }266 267 It "Loads the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {268 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)269 270 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru271 272 Assert-ModuleIsCorrect `273 -Module $mod `274 -MinVersion $ModuleVersion `275 -MaxVersion $MaximumVersion `276 -RequiredVersion $RequiredVersion277 }278 279 It "Loads the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {280 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)281 282 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru283 284 Assert-ModuleIsCorrect `285 -Module $mod `286 -MinVersion $ModuleVersion `287 -MaxVersion $MaximumVersion `288 -RequiredVersion $RequiredVersion289 }290 291 It "Does not get the module when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {292 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)293 294 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid295 296 $mod = Get-Module -FullyQualifiedName $modSpec297 298 $mod | Should -Be $null299 }300 301 It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {302 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)303 304 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid305 306 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'307 }308 309 It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {310 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)311 312 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid313 314 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'315 }316 317 It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {318 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)319 320 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid321 322 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'323 }324 325 It "Does not load the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {326 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)327 328 $sb = {329 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion330 }331 332 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))333 {334 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'335 return336 }337 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'338 }339 340 It "Does not load the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {341 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)342 343 $sb = {344 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion345 }346 347 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))348 {349 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'350 return351 }352 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'353 }354 355 It "Does not load the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {356 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)357 358 $sb = {359 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion360 }361 362 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))363 {364 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'365 return366 }367 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'368 }369}370 371Describe "Versioned directory loading with module constraints" -Tags "Feature" {372 BeforeAll {373 $moduleName = 'TestModule'374 $modulePath = Join-Path $TestDrive $moduleName375 New-Item -Path $modulePath -ItemType Directory376 $versionPath = Join-Path $modulePath $actualVersion377 New-Item -Path $versionPath -ItemType Directory378 $manifestPath = Join-Path $versionPath "$moduleName.psd1"379 New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid380 381 $oldPSModulePath = $env:PSModulePath382 $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive383 }384 385 AfterAll {386 $env:PSModulePath = $oldPSModulePath387 }388 389 AfterEach {390 Get-Module $moduleName | Remove-Module391 }392 393 It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {394 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)395 396 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid397 398 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru399 400 Assert-ModuleIsCorrect `401 -Module $mod `402 -MinVersion $ModuleVersion `403 -MaxVersion $MaximumVersion `404 -RequiredVersion $RequiredVersion405 }406 407 It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {408 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)409 410 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid411 412 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru413 414 Assert-ModuleIsCorrect `415 -Module $mod `416 -MinVersion $ModuleVersion `417 -MaxVersion $MaximumVersion `418 -RequiredVersion $RequiredVersion419 }420 421 It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {422 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)423 424 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid425 426 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru427 428 Assert-ModuleIsCorrect `429 -Module $mod `430 -MinVersion $ModuleVersion `431 -MaxVersion $MaximumVersion `432 -RequiredVersion $RequiredVersion433 }434 435 It "Loads the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {436 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)437 438 $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru439 440 Assert-ModuleIsCorrect `441 -Module $mod `442 -MinVersion $ModuleVersion `443 -MaxVersion $MaximumVersion `444 -RequiredVersion $RequiredVersion445 }446 447 It "Loads the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {448 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)449 450 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru451 452 Assert-ModuleIsCorrect `453 -Module $mod `454 -MinVersion $ModuleVersion `455 -MaxVersion $MaximumVersion `456 -RequiredVersion $RequiredVersion457 }458 459 It "Loads the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {460 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)461 462 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru463 464 Assert-ModuleIsCorrect `465 -Module $mod `466 -MinVersion $ModuleVersion `467 -MaxVersion $MaximumVersion `468 -RequiredVersion $RequiredVersion469 }470 471 It "Does not get the module when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {472 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)473 474 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid475 476 $mod = Get-Module -FullyQualifiedName $modSpec477 478 $mod | Should -Be $null479 }480 481 It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {482 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)483 484 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid485 486 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'487 }488 489 It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {490 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)491 492 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid493 494 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'495 }496 497 It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {498 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)499 500 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid501 502 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'503 }504 505 It "Does not load the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {506 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)507 508 $sb = {509 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion510 }511 512 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))513 {514 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'515 return516 }517 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'518 }519 520 It "Does not load the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {521 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)522 523 $sb = {524 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion525 }526 527 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))528 {529 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'530 return531 }532 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'533 }534 535 It "Does not load the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {536 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)537 538 $sb = {539 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion540 }541 542 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))543 {544 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'545 return546 }547 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'548 }549}550 551Describe "Rooted module loading with module constraints" -Tags "Feature" {552 BeforeAll {553 $moduleName = 'TestModule'554 $modulePath = Join-Path $TestDrive $moduleName555 New-Item -Path $modulePath -ItemType Directory556 $rootModuleName = 'RootModule.psm1'557 $rootModulePath = Join-Path $modulePath $rootModuleName558 New-Item -Path $rootModulePath -ItemType File -Value 'function Test-RootModule { 178 }'559 $manifestPath = Join-Path $modulePath "$moduleName.psd1"560 New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid -RootModule $rootModuleName561 $oldPSModulePath = $env:PSModulePath562 $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive563 }564 565 AfterAll {566 $env:PSModulePath = $oldPSModulePath567 }568 569 AfterEach {570 Get-Module $moduleName | Remove-Module571 }572 573 It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {574 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)575 576 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid577 578 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru579 580 Assert-ModuleIsCorrect `581 -Module $mod `582 -MinVersion $ModuleVersion `583 -MaxVersion $MaximumVersion `584 -RequiredVersion $RequiredVersion585 }586 587 It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {588 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)589 590 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid591 592 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru593 594 Assert-ModuleIsCorrect `595 -Module $mod `596 -MinVersion $ModuleVersion `597 -MaxVersion $MaximumVersion `598 -RequiredVersion $RequiredVersion599 }600 601 It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {602 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)603 604 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid605 606 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru607 608 Assert-ModuleIsCorrect `609 -Module $mod `610 -MinVersion $ModuleVersion `611 -MaxVersion $MaximumVersion `612 -RequiredVersion $RequiredVersion613 }614 615 It "Loads the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {616 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)617 618 $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru619 620 Assert-ModuleIsCorrect `621 -Module $mod `622 -MinVersion $ModuleVersion `623 -MaxVersion $MaximumVersion `624 -RequiredVersion $RequiredVersion625 }626 627 It "Loads the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {628 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)629 630 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru631 632 Assert-ModuleIsCorrect `633 -Module $mod `634 -MinVersion $ModuleVersion `635 -MaxVersion $MaximumVersion `636 -RequiredVersion $RequiredVersion637 }638 639 It "Loads the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {640 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)641 642 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru643 644 Assert-ModuleIsCorrect `645 -Module $mod `646 -MinVersion $ModuleVersion `647 -MaxVersion $MaximumVersion `648 -RequiredVersion $RequiredVersion649 }650 651 It "Does not get the module when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {652 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)653 654 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid655 656 $mod = Get-Module -FullyQualifiedName $modSpec657 658 $mod | Should -Be $null659 }660 661 It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {662 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)663 664 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid665 666 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'667 }668 669 It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {670 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)671 672 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid673 674 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'675 }676 677 It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {678 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)679 680 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid681 682 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'683 }684 685 It "Does not load the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {686 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)687 688 $sb = {689 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion690 }691 692 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))693 {694 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'695 return696 }697 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'698 }699 700 It "Does not load the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {701 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)702 703 $sb = {704 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion705 }706 707 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))708 {709 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'710 return711 }712 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'713 }714 715 It "Does not load the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {716 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)717 718 $sb = {719 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion720 }721 722 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))723 {724 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'725 return726 }727 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'728 }729}730 731Describe "Preloaded module specification checking" -Tags "Feature" {732 BeforeAll {733 $moduleName = 'TestModule'734 $modulePath = Join-Path $TestDrive $moduleName735 New-Item -Path $modulePath -ItemType Directory736 $manifestPath = Join-Path $modulePath "$moduleName.psd1"737 New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid738 739 $oldPSModulePath = $env:PSModulePath740 $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive741 742 Import-Module $modulePath743 744 $relativePathCases = @(745 @{ Location = $TestDrive; ModPath = (Join-Path "." $moduleName) }746 @{ Location = $TestDrive; ModPath = (Join-Path "." $moduleName "$moduleName.psd1") }747 @{ Location = (Join-Path $TestDrive $moduleName); ModPath = (Join-Path "." "$moduleName.psd1") }748 @{ Location = (Join-Path $TestDrive $moduleName); ModPath = (Join-Path ".." $moduleName) }749 )750 }751 752 AfterAll {753 $env:PSModulePath = $oldPSModulePath754 Get-Module $moduleName | Remove-Module755 }756 757 It "Gets the module when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {758 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)759 760 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid761 762 $mod = Get-Module -FullyQualifiedName $modSpec763 764 Assert-ModuleIsCorrect `765 -Module $mod `766 -MinVersion $ModuleVersion `767 -MaxVersion $MaximumVersion `768 -RequiredVersion $RequiredVersion769 }770 771 It "Gets the module when a relative path is used in a module specification: <ModPath>" -TestCases $relativePathCases -Pending {772 param([string]$Location, [string]$ModPath)773 774 Push-Location $Location775 try776 {777 $modSpec = New-ModuleSpecification -ModuleName $ModPath -ModuleVersion $actualVersion778 $mod = Get-Module -FullyQualifiedName $modSpec779 Assert-ModuleIsCorrect `780 -Module $mod `781 -Name $moduleName782 -Guid $actualGuid783 -RequiredVersion $actualVersion784 }785 finally786 {787 Pop-Location788 }789 }790 791 It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {792 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)793 794 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid795 796 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru797 798 Assert-ModuleIsCorrect `799 -Module $mod `800 -MinVersion $ModuleVersion `801 -MaxVersion $MaximumVersion `802 -RequiredVersion $RequiredVersion803 }804 805 It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {806 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)807 808 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid809 810 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru811 812 Assert-ModuleIsCorrect `813 -Module $mod `814 -MinVersion $ModuleVersion `815 -MaxVersion $MaximumVersion `816 -RequiredVersion $RequiredVersion817 }818 819 It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {820 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)821 822 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid823 824 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru825 826 Assert-ModuleIsCorrect `827 -Module $mod `828 -MinVersion $ModuleVersion `829 -MaxVersion $MaximumVersion `830 -RequiredVersion $RequiredVersion831 }832 833 It "Loads the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {834 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)835 836 $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru837 838 Assert-ModuleIsCorrect `839 -Module $mod `840 -MinVersion $ModuleVersion `841 -MaxVersion $MaximumVersion `842 -RequiredVersion $RequiredVersion843 }844 845 It "Loads the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {846 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)847 848 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru849 850 Assert-ModuleIsCorrect `851 -Module $mod `852 -MinVersion $ModuleVersion `853 -MaxVersion $MaximumVersion `854 -RequiredVersion $RequiredVersion855 }856 857 It "Loads the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {858 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)859 860 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru861 862 Assert-ModuleIsCorrect `863 -Module $mod `864 -MinVersion $ModuleVersion `865 -MaxVersion $MaximumVersion `866 -RequiredVersion $RequiredVersion867 }868 869 It "Does not get the module when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {870 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)871 872 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid873 874 $mod = Get-Module -FullyQualifiedName $modSpec875 876 $mod | Should -Be $null877 }878 879 It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {880 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)881 882 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid883 884 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'885 }886 887 It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {888 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)889 890 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid891 892 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'893 }894 895 It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {896 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)897 898 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid899 900 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'901 }902 903 It "Does not load the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {904 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)905 906 $sb = {907 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion908 }909 910 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))911 {912 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'913 return914 }915 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'916 }917 918 It "Does not load the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {919 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)920 921 $sb = {922 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion923 }924 925 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))926 {927 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'928 return929 }930 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'931 }932 933 It "Does not load the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {934 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)935 936 $sb = {937 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion938 }939 940 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))941 {942 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'943 return944 }945 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'946 }947 948 Context "Required modules" {949 BeforeAll {950 $reqModName = 'ReqMod'951 $reqModPath = Join-Path $TestDrive "$reqModName.psd1"952 }953 954 AfterEach {955 Get-Module $reqModName | Remove-Module956 }957 958 It "Successfully loads a module when the required module has ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>" -TestCases $successCases {959 param($ModuleVersion, $MaximumVersion, $RequiredVersion)960 961 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion962 New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec963 $reqMod = Import-Module $reqModPath -PassThru964 965 $reqMod | Should -Not -Be $null966 $reqMod.Name | Should -Be $reqModName967 }968 969 It "Does not load a module when the required module has ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>" -TestCases $failCases {970 param($ModuleVersion, $MaximumVersion, $RequiredVersion)971 972 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion973 New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec974 { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand"975 }976 }977}978 979Describe "Preloaded modules with versioned directory version checking" -Tag "Feature" {980 BeforeAll {981 $moduleName = 'TestModule'982 $modulePath = Join-Path $TestDrive $moduleName983 New-Item -Path $modulePath -ItemType Directory984 $versionPath = Join-Path $modulePath $actualVersion985 New-Item -Path $versionPath -ItemType Directory986 $manifestPath = Join-Path $versionPath "$moduleName.psd1"987 New-ModuleManifest -Path $manifestPath -ModuleVersion $actualVersion -Guid $actualGuid988 989 $oldPSModulePath = $env:PSModulePath990 $env:PSModulePath += [System.IO.Path]::PathSeparator + $TestDrive991 992 Import-Module $modulePath993 }994 995 AfterAll {996 $env:PSModulePath = $oldPSModulePath997 Get-Module $moduleName | Remove-Module998 }999 1000 It "Gets the module when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {1001 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1002 1003 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid1004 1005 $mod = Get-Module -FullyQualifiedName $modSpec1006 1007 Assert-ModuleIsCorrect `1008 -Module $mod `1009 -MinVersion $ModuleVersion `1010 -MaxVersion $MaximumVersion `1011 -RequiredVersion $RequiredVersion1012 }1013 1014 It "Loads the module by FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {1015 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1016 1017 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid1018 1019 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru1020 1021 Assert-ModuleIsCorrect `1022 -Module $mod `1023 -MinVersion $ModuleVersion `1024 -MaxVersion $MaximumVersion `1025 -RequiredVersion $RequiredVersion1026 }1027 1028 It "Loads the module by FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {1029 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1030 1031 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid1032 1033 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru1034 1035 Assert-ModuleIsCorrect `1036 -Module $mod `1037 -MinVersion $ModuleVersion `1038 -MaxVersion $MaximumVersion `1039 -RequiredVersion $RequiredVersion1040 }1041 1042 It "Loads the module by FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidSuccessCases {1043 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1044 1045 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid1046 1047 $mod = Import-Module -FullyQualifiedName $modSpec -PassThru1048 1049 Assert-ModuleIsCorrect `1050 -Module $mod `1051 -MinVersion $ModuleVersion `1052 -MaxVersion $MaximumVersion `1053 -RequiredVersion $RequiredVersion1054 }1055 1056 It "Loads the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {1057 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1058 1059 $mod = Invoke-ImportModule -Module $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru1060 1061 Assert-ModuleIsCorrect `1062 -Module $mod `1063 -MinVersion $ModuleVersion `1064 -MaxVersion $MaximumVersion `1065 -RequiredVersion $RequiredVersion1066 }1067 1068 It "Loads the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {1069 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1070 1071 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru1072 1073 Assert-ModuleIsCorrect `1074 -Module $mod `1075 -MinVersion $ModuleVersion `1076 -MaxVersion $MaximumVersion `1077 -RequiredVersion $RequiredVersion1078 }1079 1080 It "Loads the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $successCases {1081 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1082 1083 $mod = Invoke-ImportModule -Module $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid -PassThru1084 1085 Assert-ModuleIsCorrect `1086 -Module $mod `1087 -MinVersion $ModuleVersion `1088 -MaxVersion $MaximumVersion `1089 -RequiredVersion $RequiredVersion1090 }1091 1092 It "Does not get the module when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {1093 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1094 1095 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid1096 1097 $mod = Get-Module -FullyQualifiedName $modSpec1098 1099 $mod | Should -Be $null1100 }1101 1102 It "Does not load the module with FullyQualifiedName from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {1103 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1104 1105 $modSpec = New-ModuleSpecification -ModuleName $modulePath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid1106 1107 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'1108 }1109 1110 It "Does not load the module with FullyQualifiedName from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {1111 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1112 1113 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid1114 1115 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'1116 }1117 1118 It "Does not load the module with FullyQualifiedName from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $guidFailCases {1119 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1120 1121 $modSpec = New-ModuleSpecification -ModuleName $manifestPath -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion -Guid $Guid1122 1123 { Import-Module -FullyQualifiedName $modSpec -ErrorAction Stop } | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'1124 }1125 1126 It "Does not load the module with version constraints from absolute path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {1127 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1128 1129 $sb = {1130 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion1131 }1132 1133 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))1134 {1135 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'1136 return1137 }1138 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'1139 }1140 1141 It "Does not load the module with version constraints from the module path when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {1142 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1143 1144 $sb = {1145 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion1146 }1147 1148 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))1149 {1150 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'1151 return1152 }1153 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'1154 }1155 1156 It "Does not load the module with version constraints from the manifest when ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>, Guid=<Guid>" -TestCases $failCases {1157 param($ModuleVersion, $MaximumVersion, $RequiredVersion, $Guid)1158 1159 $sb = {1160 Invoke-ImportModule -Module $modulePath -MinimumVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion1161 }1162 1163 if ($ModuleVersion -and $MaximumVersion -and ($ModuleVersion -ge $MaximumVersion))1164 {1165 $sb | Should -Throw -ErrorId 'ArgumentOutOfRange,Microsoft.PowerShell.Commands.ImportModuleCommand'1166 return1167 }1168 $sb | Should -Throw -ErrorId 'Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand'1169 }1170 1171 Context "Required modules" {1172 BeforeAll {1173 $reqModName = 'ReqMod'1174 $reqModPath = Join-Path $TestDrive "$reqModName.psd1"1175 }1176 1177 AfterEach {1178 Get-Module $reqModName | Remove-Module1179 }1180 1181 It "Successfully loads a module when the required module has ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>" -TestCases $successCases {1182 param($ModuleVersion, $MaximumVersion, $RequiredVersion)1183 1184 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion1185 New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec1186 $reqMod = Import-Module $reqModPath -PassThru1187 1188 $reqMod | Should -Not -Be $null1189 $reqMod.Name | Should -Be $reqModName1190 }1191 1192 It "Does not load a module when the required module has ModuleVersion=<ModuleVersion>, MaximumVersion=<MaximumVersion>, RequiredVersion=<RequiredVersion>" -TestCases $failCases {1193 param($ModuleVersion, $MaximumVersion, $RequiredVersion)1194 1195 $modSpec = New-ModuleSpecification -ModuleName $moduleName -ModuleVersion $ModuleVersion -MaximumVersion $MaximumVersion -RequiredVersion $RequiredVersion1196 New-ModuleManifest -Path $reqModPath -RequiredModules $modSpec1197 { Import-Module $reqModPath -ErrorAction Stop } | Should -Throw -ErrorId "Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand"1198 }1199 }1200}