Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes308downloads
ModuleManifest.Tests.ps1238 linesDownload Raw Back to Microsoft.PowerShell.Core
1# Copyright (c) Microsoft Corporation.2# Licensed under the MIT License.3 4# Recursively creates a module structure given a hashtable to describe it:5#  - psd1 keys have values splatted to New-ModuleManifest6#  - psm1 keys have values written to files7#  - Other keys with hashtable values are treated as recursive module definitions8function New-ModuleFromLayout9{10    param(11        [Parameter(Mandatory=$true)]12        [hashtable]13        $Layout,14 15        [Parameter(Mandatory=$true)]16        [string]17        $BaseDir18    )19 20    if (-not (Test-Path $BaseDir))21    {22        $null = New-Item -Path $BaseDir -ItemType Directory23    }24 25    foreach ($item in $Layout.get_Keys())26    {27        $itemPath = Join-Path $BaseDir $item28        $ext = [System.IO.Path]::GetExtension($item)29 30        switch ($ext)31        {32            '.psd1'33            {34                $moduleParameters = $Layout[$item]35                New-ModuleManifest -Path $itemPath @moduleParameters36                break37            }38 39            { '.psm1','.ps1' -contains $_ }40            {41                $null = New-Item -Path $itemPath -Value $Layout[$item]42                break43            }44 45            default46            {47                if ($Layout[$item] -is [hashtable])48                {49                    New-ModuleFromLayout -BaseDir $itemPath -Layout $Layout[$item]50                }51                break52            }53        }54    }55}56 57Describe "Manifest required module autoloading from module path with simple names" -Tags "CI" {58    BeforeAll {59        $prevModulePath = $env:PSModulePath60        $env:PSModulePath = ($TestDrive -as [string]) + [System.IO.Path]::PathSeparator + $env:PSModulePath61 62        $mainModule = 'mainmod'63        $requiredModule = 'reqmod'64 65        New-ModuleFromLayout -BaseDir $TestDrive -Layout @{66            $mainModule = @{67                "$mainModule.psd1" = @{68                    RequiredModules = $requiredModule69                }70            }71            $requiredModule = @{72                "$requiredModule.psd1" = @{}73            }74        }75    }76 77    AfterAll {78        $env:PSModulePath = $prevModulePath79        Get-Module $mainModule,$requiredModule | Remove-Module80    }81 82    It "Importing main module loads required modules successfully" {83        $mainMod = Import-Module $mainModule -PassThru -ErrorAction Stop84        $reqMod = Get-Module -Name $requiredModule85 86        $mainMod.Name | Should -BeExactly $mainModule87        $mainMod.RequiredModules[0].Name | Should -Be $requiredModule88        $reqMod.Name | Should -BeExactly $requiredModule89    }90}91 92Describe "Manifest required module autoloading with relative path to dir" -Tags "CI" {93    BeforeAll {94        $mainModule = 'mainmod'95        $requiredModule = 'reqmod'96 97        $mainModPath = Join-Path $TestDrive $mainModule98 99        # Test to ensure that we treat backslashes as path separators on UNIX and vice-versa100        $altSep = [System.IO.Path]::AltDirectorySeparatorChar101 102        New-ModuleFromLayout -BaseDir $TestDrive -Layout @{103            $mainModule = @{104                "$mainModule.psd1" = @{105                    RequiredModules = "..${altSep}$requiredModule"106                }107            }108            $requiredModule = @{109                "$requiredModule.psd1" = @{}110            }111        }112    }113 114    AfterAll {115        Get-Module $mainModule,$requiredModule | Remove-Module116    }117 118    It "Importing main module loads required modules successfully" {119        $mainMod = Import-Module $mainModPath -PassThru -ErrorAction Stop120        $reqMod = Get-Module -Name $requiredModule121 122        $mainMod.Name | Should -BeExactly $mainModule123        $mainMod.RequiredModules[0].Name | Should -Be $requiredModule124        $reqMod.Name | Should -BeExactly $requiredModule125    }126}127 128Describe "Manifest required module autoloading with relative path to manifest" -Tags "CI" {129    BeforeAll {130        $mainModule = 'mainmod'131        $requiredModule = 'reqmod'132 133        $mainModPath = Join-Path $TestDrive $mainModule "$mainModule.psd1"134 135        # Test to ensure that we treat backslashes as path separators on UNIX and vice-versa136        $altSep = [System.IO.Path]::AltDirectorySeparatorChar137        $sep = [System.IO.Path]::DirectorySeparatorChar138 139        New-ModuleFromLayout -BaseDir $TestDrive -Layout @{140            $mainModule = @{141                "$mainModule.psd1" = @{142                    RequiredModules = "..${altSep}$requiredModule${sep}$requiredModule.psd1"143                }144            }145            $requiredModule = @{146                "$requiredModule.psd1" = @{}147            }148        }149    }150 151    AfterAll {152        Get-Module $mainModule,$requiredModule | Remove-Module153    }154 155    It "Importing main module loads required modules successfully" {156        $mainMod = Import-Module $mainModPath -PassThru -ErrorAction Stop157        $reqMod = Get-Module -Name $requiredModule158 159        $mainMod.Name | Should -BeExactly $mainModule160        $mainMod.RequiredModules[0].Name | Should -Be $requiredModule161        $reqMod.Name | Should -BeExactly $requiredModule162    }163}164 165Describe "Manifest required module autoloading with absolute path to dir" -Tags "CI" {166    BeforeAll {167        $mainModule = 'mainmod'168        $requiredModule = 'reqmod'169 170        $mainModPath = Join-Path $TestDrive $mainModule "$mainModule.psd1"171 172        # Test to ensure that we treat backslashes as path separators on UNIX and vice-versa173        $altSep = [System.IO.Path]::AltDirectorySeparatorChar174        $sep = [System.IO.Path]::DirectorySeparatorChar175 176        New-ModuleFromLayout -BaseDir $TestDrive -Layout @{177            $mainModule = @{178                "$mainModule.psd1" = @{179                    RequiredModules = "$TestDrive${altSep}$requiredModule${sep}"180                }181            }182            $requiredModule = @{183                "$requiredModule.psd1" = @{}184            }185        }186    }187 188    AfterAll {189        Get-Module $mainModule,$requiredModule | Remove-Module190    }191 192    It "Importing main module loads required modules successfully" {193        $mainMod = Import-Module $mainModPath -PassThru -ErrorAction Stop194        $reqMod = Get-Module -Name $requiredModule195 196        $mainMod.Name | Should -BeExactly $mainModule197        $mainMod.RequiredModules[0].Name | Should -Be $requiredModule198        $reqMod.Name | Should -BeExactly $requiredModule199    }200}201 202Describe "Manifest required module autoloading with absolute path to manifest" -Tags "CI" {203    BeforeAll {204        $mainModule = 'mainmod'205        $requiredModule = 'reqmod'206 207        $mainModPath = Join-Path $TestDrive $mainModule "$mainModule.psd1"208 209        # Test to ensure that we treat backslashes as path separators on UNIX and vice-versa210        $altSep = [System.IO.Path]::AltDirectorySeparatorChar211        $sep = [System.IO.Path]::DirectorySeparatorChar212 213        New-ModuleFromLayout -BaseDir $TestDrive -Layout @{214            $mainModule = @{215                "$mainModule.psd1" = @{216                    RequiredModules = "$TestDrive${altSep}$requiredModule${sep}$requiredModule.psd1"217                }218            }219            $requiredModule = @{220                "$requiredModule.psd1" = @{}221            }222        }223    }224 225    AfterAll {226        Get-Module $mainModule,$requiredModule | Remove-Module227    }228 229    It "Importing main module loads required modules successfully" {230        $mainMod = Import-Module $mainModPath -PassThru -ErrorAction Stop231        $reqMod = Get-Module -Name $requiredModule232 233        $mainMod.Name | Should -BeExactly $mainModule234        $mainMod.RequiredModules[0].Name | Should -Be $requiredModule235        $reqMod.Name | Should -BeExactly $requiredModule236    }237}238