Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
ModuleConstraint.Tests.ps11425 linesDownload Raw Back to Microsoft.PowerShell.Core
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}

Showing the first 1,200 of 1425 lines. Download the file for the rest.