Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
Add-Member.Tests.ps1205 linesDownload Raw Back to Microsoft.PowerShell.Utility
1# Copyright (c) Microsoft Corporation.2# Licensed under the MIT License.3Describe "Add-Member DRT Unit Tests" -Tags "CI" {4 5    It "Mandatory parameters should not be null nor empty" {6        # when Name is null7        { Add-Member -Name $null } | Should -Throw -ErrorId "ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand"8 9        # when Name is empty10        { Add-Member -Name "" } | Should -Throw -ErrorId "ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand"11 12        # when MemberType is null13        { Add-Member -MemberType $null } | Should -Throw -ErrorId "ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand"14 15        # when MemberType is empty16        { Add-Member -MemberType "" } | Should -Throw -ErrorId "CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.AddMemberCommand"17 18        # when InputObject is null19        { Add-Member -InputObject $null } | Should -Throw -ErrorId "ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand"20    }21 22    # It only support on AliasProperty, ScriptProperty, CodeProperty and CodeMethod23    It "Should Not Have Value2" {24        $memberTypesWhereV1CannotBeNull = "CodeMethod", "MemberSet", "PropertySet", "ScriptMethod", "NoteProperty"25        foreach ($memberType in $memberTypesWhereV1CannotBeNull)26        {27            { Add-Member -InputObject a -MemberType $memberType -Name Name -Value something -SecondValue somethingElse } |28                Should -Throw -ErrorId "Value2ShouldNotBeSpecified,Microsoft.PowerShell.Commands.AddMemberCommand"29        }30    }31 32    It "Cannot Add PS Property Or PS Method" {33        $membersYouCannotAdd = "Method", "Property", "ParameterizedProperty"34        foreach ($member in $membersYouCannotAdd)35        {36            { Add-Member -InputObject a -MemberType $member -Name Name } | Should -Throw -ErrorId "CannotAddMemberType,Microsoft.PowerShell.Commands.AddMemberCommand"37        }38 39        { Add-Member -InputObject a -MemberType AnythingElse -Name Name } | Should -Throw -ErrorId "CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.AddMemberCommand"40 41    }42 43    It "Value1 And Value2 Should Not Both Null" {44        $memberTypes = "CodeProperty", "ScriptProperty"45        foreach ($memberType in $memberTypes)46        {47            { Add-Member -MemberType $memberType -Name PropertyName -Value $null -SecondValue $null -InputObject a } |48                Should -Throw -ErrorId "Value1AndValue2AreNotBothNull,Microsoft.PowerShell.Commands.AddMemberCommand"49        }50 51    }52 53    It "Fail to add unexisting type" {54        { Add-Member -InputObject a -MemberType AliasProperty -Name Name -Value something -SecondValue unexistingType } |55            Should -Throw -ErrorId "InvalidCastFromStringToType,Microsoft.PowerShell.Commands.AddMemberCommand"56    }57 58    It "Successful alias, no type" {59        $results = Add-Member -InputObject a -MemberType AliasProperty -Name Cnt -Value Length -PassThru60        $results.Cnt | Should -BeOfType Int3261        $results.Cnt | Should -Be 162    }63 64    It "Successful alias, with type" {65        $results = Add-Member -InputObject a -MemberType AliasProperty -Name Cnt -Value Length -SecondValue String -PassThru66        $results.Cnt | Should -BeOfType String67        $results.Cnt | Should -Be '1'68    }69 70    It "CodeProperty Reference Wrong Type" {71        { Add-Member -InputObject a -MemberType CodeProperty -Name Name -Value something } |72            Should -Throw -ErrorId "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"73    }74 75    It "Empty Member Set Null Value1" {76        $results = Add-Member -InputObject a -MemberType MemberSet -Name Name -Value $null -PassThru77        $results.Length | Should -Be 178        $results.Name.a | Should -BeNullOrEmpty79    }80 81    It "Member Set With 1 Member" {82        $members = New-Object System.Collections.ObjectModel.Collection[System.Management.Automation.PSMemberInfo]83        $n=New-Object Management.Automation.PSNoteProperty a,184        $members.Add($n)85        $r=Add-Member -InputObject a -MemberType MemberSet -Name Name -Value $members -PassThru86        $r.Name.a | Should -Be '1'87    }88 89    It "MemberSet With Wrong Type For Value1" {90        { Add-Member -InputObject a -MemberType MemberSet -Name Name -Value ImNotACollection } |91            Should -Throw -ErrorId "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"92    }93 94    It "ScriptMethod Reference Wrong Type" {95        { Add-Member -InputObject a -MemberType ScriptMethod -Name Name -Value something } |96            Should -Throw -ErrorId "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"97    }98 99    It "Add ScriptMethod Success" {100        $results = Add-Member -InputObject 'abc' -MemberType ScriptMethod -Name Name -Value {$this.length} -PassThru101        $results | Should -BeExactly 'abc'102        $results.Name() | Should -Be 3103    }104 105    It "ScriptProperty Reference Wrong Type" {106        { Add-Member -InputObject a -MemberType ScriptProperty -Name Name -Value something } |107            Should -Throw -ErrorId "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"108    }109 110    It "Add ScriptProperty Success" {111        Set-Alias ScriptPropertyTestAlias dir112        $al=(Get-Alias ScriptPropertyTestAlias)113        $al.Description="MyDescription"114        $al | Add-Member -MemberType ScriptProperty -Name NewDescription -Value {$this.Description} -SecondValue {$this.Description=$args[0]}115        $al.NewDescription | Should -BeExactly 'MyDescription'116        $al.NewDescription = "some description"117        $al.NewDescription | Should -BeExactly 'some description'118    }119 120    It "Add TypeName MemberSet Success" {121        $a = 'string' | Add-Member -MemberType NoteProperty -Name TestNote -Value Any -TypeName MyType -PassThru122        $a.PSTypeNames[0] | Should -Be MyType123    }124 125    It "Add TypeName Existing Name Success" {126        $a = 'string' | Add-Member -TypeName System.Object -PassThru127        $a.PSTypeNames[0] | Should -Be System.Object128    }129 130    It "Add Single Note To Array" {131        $a=1,2,3132        $a = Add-Member -InputObject $a -MemberType NoteProperty -Name Name -Value Value -PassThru133        $a.Name | Should -Be Value134    }135 136    It "Add Multiple Note Members" {137        $obj=New-Object psobject138        $hash=@{Name='Name';TestInt=1;TestNull=$null}139        Add-Member -InputObject $obj $hash140        $obj.Name | Should -Be 'Name'141        $obj.TestInt | Should -Be 1142        $obj.TestNull | Should -BeNullOrEmpty143    }144 145    It "Add Multiple Note With TypeName" {146        $obj=New-Object psobject147        $hash=@{Name='Name';TestInt=1;TestNull=$null}148        $obj = Add-Member -InputObject $obj $hash -TypeName MyType -PassThru149        $obj.PSTypeNames[0] | Should -Be MyType150    }151 152    It "Add Multiple Members With Force" {153        $obj=New-Object psobject154        $hash=@{TestNote='hello'}155        $obj | Add-Member -MemberType NoteProperty -Name TestNote -Value 1156        $obj | Add-Member $hash -Force157        $obj.TestNote | Should -Be 'hello'158    }159 160    It "Simplified Add-Member should support using 'Property' as the NoteProperty member name" {161        $results = Add-Member -InputObject a property Any -PassThru162        $results.property | Should -BeExactly 'Any'163 164        $results = Add-Member -InputObject a Method Any -PassThru165        $results.Method | Should -BeExactly 'Any'166 167        $results = Add-Member -InputObject a 23 Any -PassThru168        $results.23 | Should -BeExactly 'Any'169 170        $results = Add-Member -InputObject a 8 np Any -PassThru171        $results.np | Should -BeExactly 'Any'172 173        $results = Add-Member -InputObject a 16 sp {1+1} -PassThru174        $results.sp | Should -Be 2175    }176 177    It "Verify Add-Member error message is not empty" {178        $object = @(1,2)179        Add-Member -InputObject $object "ABC" "Value1"180        Add-Member -InputObject $object "ABC" "Value2" -ErrorVariable errorVar -ErrorAction SilentlyContinue181        $errorVar.Exception | Should -BeOfType System.InvalidOperationException182        $errorVar.Exception.Message | Should -Not -BeNullOrEmpty183    }184}185 186Describe "Add-Member" -Tags "CI" {187 188    It "should be able to see a newly added member of an object" {189	$o = New-Object psobject190	Add-Member -InputObject $o -MemberType NoteProperty -Name proppy -Value "superVal"191 192	$o.proppy | Should -Not -BeNullOrEmpty193	$o.proppy | Should -BeExactly "superVal"194    }195 196    It "Should be able to add a member to an object that already has a member in it" {197	$o = New-Object psobject198	Add-Member -InputObject $o -MemberType NoteProperty -Name proppy -Value "superVal"199	Add-Member -InputObject $o -MemberType NoteProperty -Name AnotherMember -Value "AnotherValue"200 201	$o.AnotherMember | Should -Not -BeNullOrEmpty202	$o.AnotherMember | Should -BeExactly "AnotherValue"203    }204}205