Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
Get-Command.Tests.ps1278 linesDownload Raw Back to Microsoft.PowerShell.Core
1# Copyright (c) Microsoft Corporation.2# Licensed under the MIT License.3Describe "Get-Command Tests" -Tags "CI" {4    BeforeAll {5        function TestGetCommand-DynamicParametersDCR6        {7        [CmdletBinding()]8            param (9            [Parameter(Mandatory = $true, Position = 0)]10            [ValidateSet("ReturnNull", "ReturnThis", "Return1", "Return2","Return3", "ReturnDuplicateParameter", "ReturnAlias", "ReturnDuplicateAlias","ReturnObjectNoParameters", "ReturnGenericParameter", "ThrowException")]11            [string] $TestToRun,12 13            [Parameter()]14            [Type]$ParameterType15            )16 17            DynamicParam {18                if ( ! $TestToRun ) {19                    $TestToRun = "returnnull"20                }21                $dynamicParamDictionary = [System.Management.Automation.RuntimeDefinedParameterDictionary]::new()22                switch ( $TestToRun )23                {24                    "returnnull" {25                        $dynamicParamDictionary = $null26                        break27                     }28                     "return1" {29                        $attr = [System.Management.Automation.ParameterAttribute]::new()30                        $attr.Mandatory = $true31				        $dynamicParameter = [System.Management.Automation.RuntimeDefinedParameter]::new("OneString",[string],$attr)32                        $dynamicParamDictionary.Add("OneString",$dynamicParameter)33                        break34                    }35                    "return2" {36                        $attr1 = [System.Management.Automation.ParameterAttribute]::new()37                        $attr1.Mandatory = $true38                        $attr1.ParameterSetName = "__AllParameterSets"39                        $ac1 = [Collections.ObjectModel.Collection[Attribute]]::new()40                        $ac1.Add($attr1)41                        $p1 = [System.Management.Automation.RuntimeDefinedParameter]::new("OneString",[string],$ac1)42                        $dynamicParamDictionary.Add("OneString",$p1)43 44                        $attr2 = [System.Management.Automation.ParameterAttribute]::new()45                        $attr2.Mandatory = $false46                        $attr2.ParameterSetName = "__AllParameterSets"47                        $VRattr = [System.Management.Automation.ValidateRangeAttribute]::new(5,9)48 49                        $ac2 = [Collections.ObjectModel.Collection[Attribute]]::new()50                        $ac2.Add($attr2)51                        $ac2.Add($VRattr)52                        $p2 = [System.Management.Automation.RuntimeDefinedParameter]::New("TwoInt",[int],$ac2)53                        $dynamicParamDictionary.Add("TwoInt",$p2)54                        break55                    }56                    "return3" {57                        $attr1 = [System.Management.Automation.ParameterAttribute]::new()58                        $attr1.Mandatory = $true59                        $attr1.ParameterSetName = "__AllParameterSets"60                        $ac1 = [Collections.ObjectModel.Collection[Attribute]]::new()61                        $ac1.Add($attr1)62                        $p1 = [System.Management.Automation.RuntimeDefinedParameter]::new("OneString",[string],$ac1)63                        $dynamicParamDictionary.Add("OneString",$p1)64 65                        $attr2 = [System.Management.Automation.ParameterAttribute]::new()66                        $attr2.Mandatory = $false67                        $attr2.ParameterSetName = "__AllParameterSets"68                        $VRattr = [System.Management.Automation.ValidateRangeAttribute]::new(5,9)69 70                        $ac2 = [Collections.ObjectModel.Collection[Attribute]]::new()71                        $ac2.Add($attr2)72                        $ac2.Add($VRattr)73                        $p2 = [System.Management.Automation.RuntimeDefinedParameter]::New("TwoInt",[int],$ac2)74                        $dynamicParamDictionary.Add("TwoInt",$p2)75 76                        $attr3 = [System.Management.Automation.ParameterAttribute]::new()77                        $attr3.Mandatory = $false78                        $attr3.ParameterSetName = "__AllParameterSets"79                        $ac3 = [Collections.ObjectModel.Collection[Attribute]]::new()80                        $ac3.Add($attr3)81                        $p3 = [System.Management.Automation.RuntimeDefinedParameter]::new("ThreeBool",[bool],$ac3)82                        $dynamicParamDictionary.Add("ThreeBool",$p3)83                        break84                    }85                    "returnduplicateparameter" {86                        $attr1 = [System.Management.Automation.ParameterAttribute]::new()87                        $attr1.Mandatory = $false88                        $attr1.ParameterSetName = "__AllParameterSets"89                        $ac1 = [Collections.ObjectModel.Collection[Attribute]]::new()90                        $ac1.Add($attr1)91                        $p1 = [System.Management.Automation.RuntimeDefinedParameter]::new("TestToRun",[int],$ac1)92                        $dynamicParamDictionary.Add("TestToRun",$p1)93                        break94                    }95                    "returngenericparameter" {96                        $attr1 = [System.Management.Automation.ParameterAttribute]::new()97                        $attr1.ParameterSetName = "__AllParameterSets"98                        $ac1 = [Collections.ObjectModel.Collection[Attribute]]::new()99                        $ac1.Add($attr1)100                        $p1 = [System.Management.Automation.RuntimeDefinedParameter]::new("TypedValue",$ParameterType,$ac1)101                        $dynamicParamDictionary.Add("TypedValue",$p1)102                        break103                    }104                    default {105                        throw ([invalidoperationexception]::new("unable to determine which dynamic parameters to return!"))106                        break107                    }108                }109                return $dynamicParamDictionary110            }111 112            BEGIN {113                $ReturnNull = "ReturnNull"114                $ReturnThis = "ReturnThis"115                $ReturnAlias = "ReturnAlias"116                $ReturnDuplicateAlias = "ReturnDuplicateAlias"117                $Return1 = "Return1"118                $Return2 = "Return2"119                $Return3 = "Return3"120                $ReturnDuplicateParameter = "ReturnDuplicateParameter"121                $ReturnObjectNoParameters = "ReturnObjectNoParameters"122                $ReturnGenericParameter = "ReturnGenericParameter"123                $ThrowException = "ThrowException"124                return $dynamicParamDictionary125            }126        }127 128        function GetDynamicParameter($cmdlet, $parameterName)129        {130            foreach ($paramSet in $cmdlet.ParameterSets)131            {132                foreach ($pinfo in $paramSet.Parameters)133                {134                    if ($pinfo.Name -eq $parameterName)135                    {136                        $foundParam = $pinfo137                        break138                    }139                }140                if($null -ne $foundParam)141                {142                    break143                }144            }145            return $foundParam146        }147 148        function VerifyDynamicParametersExist($cmdlet, $parameterNames)149        {150            foreach($paramName in $parameterNames)151            {152                $foundParam = GetDynamicParameter -cmdlet $cmdlet -parameterName $paramName153                $foundParam.Name | Should -BeExactly $paramName154            }155        }156 157        function VerifyParameterType($cmdlet, $parameterName, $ParameterType)158        {159            $foundParam = GetDynamicParameter -cmdlet $cmdlet -parameterName $parameterName160            $foundParam.ParameterType | Should -Be $ParameterType161        }162    }163 164    It "Verify that Get-Command Get-Content includes the dynamic parameters when the cmdlet is checked against the file system provider implementation" {165        $fullPath = Join-Path $TestDrive -ChildPath "blah"166        New-Item -Path $fullPath -ItemType directory -Force167        $results = Get-Command Get-Content -Path $fullPath168        $dynamicParameter = "Wait", "Encoding", "Delimiter"169        VerifyDynamicParametersExist -cmdlet $results[0] -parameterNames $dynamicParameter170    }171 172    It "Verify that Get-Command Get-Content doesn't have any dynamic parameters for Function provider" {173        $results =Get-Command Get-Content -Path function:174        $dynamicParameter = "Wait", "Encoding", "Delimiter"175        foreach ($dynamicPara in $dynamicParameter)176        {177            $results[0].ParameterSets.Parameters.Name -contains $dynamicPara | Should -BeFalse178        }179    }180 181    It "Verify that the specified dynamic parameter exists in the CmdletInfo result returned" {182        $results = Get-Command TestGetCommand-DynamicParametersDCR -TestToRun return1183        $dynamicParameter = "OneString"184        VerifyDynamicParametersExist -cmdlet $results[0] -parameterNames $dynamicParameter185        VerifyParameterType -cmdlet $results[0] -parameterName $dynamicParameter -ParameterType string186    }187 188    It "Verify three dynamic parameters are created properly" {189        $results = Get-Command TestGetCommand-DynamicParametersDCR -TestToRun return3190        $dynamicParameter = "OneString", "TwoInt", "ThreeBool"191 192        VerifyDynamicParametersExist -cmdlet $results[0] -parameterNames $dynamicParameter193        VerifyParameterType -cmdlet $results[0] -parameterName "OneString" -parameterType string194        VerifyParameterType -cmdlet $results[0] -parameterName "TwoInt" -parameterType Int195        VerifyParameterType -cmdlet $results[0] -parameterName "ThreeBool" -parameterType bool196    }197 198    It "Verify dynamic parameter type is process" {199        $results = Get-Command TestGetCommand-DynamicParametersDCR -Args '-TestToRun','returngenericparameter','-parametertype','System.Diagnostics.Process'200        VerifyParameterType -cmdlet $results[0] -parameterName "TypedValue" -parameterType System.Diagnostics.Process201    }202 203    It "Verify a single cmdlet returned using verb and noun parameter set syntax works properly" {204        $paramName = "OneString"205        $results = Get-Command -Verb TestGetCommand -Noun DynamicParametersDCR -TestToRun Return1206        VerifyDynamicParametersExist -cmdlet $results[0] -parameterNames $paramName207        VerifyParameterType -cmdlet $results[0] -parameterName $paramName -parameterType string208    }209 210    It "Verify Single Cmdlet Using Verb&Noun ParameterSet" {211        $paramName = "Encoding"212        $results = Get-Command -Verb get -Noun content -Encoding Unicode213        VerifyDynamicParametersExist -cmdlet $results[0] -parameterNames $paramName214        VerifyParameterType -cmdlet $results[0] -parameterName $paramName -parameterType System.Text.Encoding215    }216 217    It "Verify Single Cmdlet Using Verb&Noun ParameterSet With Usage" {218        $results =  Get-Command -Verb get -Noun content -Encoding Unicode -Syntax219        $results.ToString() | Should -Match "-Encoding"220        $results.ToString() | Should -Match "-Wait"221        $results.ToString() | Should -Match "-Delimiter"222    }223 224    It "Test Script Lookup Positive Script Info" {225        $tempFile = "mytempfile.ps1"226        $fullPath = Join-Path $TestDrive -ChildPath $tempFile227        "$a = dir" > $fullPath228        $results = Get-Command $fullPath229 230        $results.Name | Should -BeExactly $tempFile231        $results.Definition | Should -BeExactly $fullPath232    }233 234    It "Two dynamic parameters are created properly" {235        $results = Get-Command TestGetCommand-DynamicParametersDCR -TestToRun return2236        $dynamicParameter = "OneString", "TwoInt"237        VerifyDynamicParametersExist -cmdlet $results[0] -parameterNames $dynamicParameter238        VerifyParameterType -cmdlet $results[0] -parameterName "OneString" -ParameterType string239        VerifyParameterType -cmdlet $results[0] -parameterName "TwoInt" -ParameterType int240    }241 242    It "Throw an Exception when set TestToRun to 'returnduplicateparameter'" {243        { Get-Command TestGetCommand-DynamicParametersDCR -TestToRun returnduplicateparameter -ErrorAction Stop } |244            Should -Throw -ErrorId "GetCommandMetadataError,Microsoft.PowerShell.Commands.GetCommandCommand"245    }246 247    It "verify if get the proper dynamic parameter type skipped by issue #1430" -Pending {248        $results = Get-Command TestGetCommand-DynamicParametersDCR -TestToRun returngenericparameter -ParameterType System.Diagnostics.Process249        VerifyParameterType -cmdlet $results[0] -parameterName "TypedValue" -parameterType System.Diagnostics.Process250    }251 252    It "It works with Single Cmdlet Using Verb&Noun ParameterSet" {253        $paramName = "Encoding"254        $results = Get-Command -Verb get -Noun content -encoding UTF8255        VerifyDynamicParametersExist -cmdlet $results[0] -parameterNames $paramName256        VerifyParameterType -cmdlet $results[0] -parameterName $paramName -ParameterType System.Text.Encoding257    }258 259    #unsupported parameter: -synop260    It "[Unsupported]It works with Single Cmdlet Using Verb&Noun ParameterSet With Synopsis" -Pending {261        $paramName = "Encoding"262        $results = Get-Command -Verb get -Noun content -encoding UTF8 -Synop263        VerifyDynamicParametersExist -cmdlet $results[0] -parameterNames $paramName264        VerifyParameterType -cmdlet $results[0] -parameterName $paramName -ParameterType System.Text.Encoding265    }266 267    It "Piping more than one CommandInfo works" {268        $result = Get-Command -Name Add-Content, Get-Content | Get-Command269        $result.Count | Should -Be 2270        $result.Name | Should -Be "Add-Content","Get-Content"271    }272 273    It "Excluding modules works" {274        $result = Get-Command -Name Get-Command -ExcludeModule Microsoft.PowerShell.Core275        $result | Should -Be $null276    }277}278