mirror of
https://github.com/aphrody-labs/PowerShell.git
synced 2026-10-17 04:36:39 +00:00
Add Unit Test for Add-Member
This commit is contained in:
1 parent
92ac20f83b
commit
61441715c1
1 file changed
+284
@@ -1,3 +1,287 @@
|
||||
Describe "Add-Member DRT Unit Tests" -Tags DRT{
|
||||
|
||||
It "Mandatory parameters should not be null nor empty" {
|
||||
# when Name is null
|
||||
try
|
||||
{
|
||||
Add-Member -Name $null
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
|
||||
# when Name is empty
|
||||
try
|
||||
{
|
||||
Add-Member -Name ""
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
|
||||
# when MemberType is null
|
||||
try
|
||||
{
|
||||
Add-Member -MemberType $null
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
|
||||
# when MemberType is empty
|
||||
try
|
||||
{
|
||||
Add-Member -MemberType ""
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
|
||||
# when InputObject is null
|
||||
try
|
||||
{
|
||||
Add-Member -InputObject $null
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
|
||||
# It only support on AliasProperty, ScriptProperty, CodeProperty and CodeMethod
|
||||
It "Should Not Have Value2" {
|
||||
$memberTypesWhereV1CannotBeNull = "CodeMethod", "MemberSet", "PropertySet", "ScriptMethod", "NoteProperty"
|
||||
foreach ($memberType in $memberTypesWhereV1CannotBeNull)
|
||||
{
|
||||
try
|
||||
{
|
||||
Add-Member -InputObject a $memberType Name something somethingElse
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch{
|
||||
$_.FullyQualifiedErrorId | Should Be "Value2ShouldNotBeSpecified,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Blocked by Issue #874.
|
||||
It "Cannot Add PS Property Or PS Method" -Skip:$true {
|
||||
$membersYouCannotAdd = "Method", "Property", "ParameterizedProperty", "AnythingElse"
|
||||
foreach ($member in $membersYouCannotAdd)
|
||||
{
|
||||
try
|
||||
{
|
||||
Add-Member -InputObject a $member Name
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be ""
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
It "Value1 And Value2 Should Not Both Null" {
|
||||
$memberTypes = "CodeProperty", "ScriptProperty"
|
||||
foreach ($memberType in $memberTypes)
|
||||
{
|
||||
try
|
||||
{
|
||||
Add-Member $memberType PropertyName $null $null -InputObject a
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "Value1AndValue2AreNotBothNull,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
It "Fail to add unexisting type" {
|
||||
try
|
||||
{
|
||||
Add-Member -InputObject a AliasProperty Name something unexistingType
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "InvalidCastFromStringToType,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
|
||||
It "Successful alias, no type" {
|
||||
$results = Add-Member -InputObject a AliasProperty Cnt Length -passthru
|
||||
$results.Cnt.GetType().Name | Should Be 'Int32'
|
||||
$results.Cnt | Should Be 1
|
||||
}
|
||||
|
||||
It "Successful alias, with type" {
|
||||
$results = add-member -InputObject a AliasProperty Cnt Length String -passthru
|
||||
$results.Cnt.GetType().Name | Should Be 'String'
|
||||
$results.Cnt | Should Be '1'
|
||||
}
|
||||
|
||||
It "CodeProperty Reference Wrong Type" {
|
||||
try
|
||||
{
|
||||
add-member -InputObject a CodeProperty Name something
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
|
||||
It "Empty Member Set Null Value1" {
|
||||
$results = add-member -InputObject a MemberSet Name $null -passthru
|
||||
$results.Length | Should Be 1
|
||||
$results.Name.a | Should BeNullOrEmpty
|
||||
}
|
||||
|
||||
It "Member Set With 1 Member" {
|
||||
$members = new-object System.Collections.ObjectModel.Collection[System.Management.Automation.PSMemberInfo]
|
||||
$n=new-object Management.Automation.PSNoteProperty a,1
|
||||
$members.Add($n)
|
||||
$r=add-member -InputObject a MemberSet Name $members -passthru
|
||||
$r.Name.a | Should Be '1'
|
||||
}
|
||||
|
||||
It "MemberSet With Wrong Type For Value1" {
|
||||
try
|
||||
{
|
||||
add-member -InputObject a MemberSet Name ImNotACollection
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
|
||||
# Blocked by Issue #875.
|
||||
It "PropertySet With Wrong Type For Value1" -Skip:$true {
|
||||
try
|
||||
{
|
||||
add-member -InputObject a PropertySet Name ImNotACollection
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
|
||||
It "ScriptMethod Reference Wrong Type" {
|
||||
try
|
||||
{
|
||||
add-member -InputObject a ScriptMethod Name something
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
|
||||
It "Add ScriptMethod Success" {
|
||||
$results = add-member -InputObject 'abc' ScriptMethod Name {$this.length} -passthru
|
||||
$results | Should Be abc
|
||||
$results.Name() | Should Be 3
|
||||
}
|
||||
|
||||
It "ScriptProperty Reference Wrong Type" {
|
||||
try
|
||||
{
|
||||
add-member -InputObject a ScriptProperty Name something
|
||||
Throw "Execution OK"
|
||||
}
|
||||
catch
|
||||
{
|
||||
$_.FullyQualifiedErrorId | Should Be "ConvertToFinalInvalidCastException,Microsoft.PowerShell.Commands.AddMemberCommand"
|
||||
}
|
||||
}
|
||||
|
||||
It "Add ScriptProperty Success" {
|
||||
set-alias ScriptPropertyTestAlias dir
|
||||
$al=(get-alias ScriptPropertyTestAlias)
|
||||
$al.Description="MyDescription"
|
||||
$al | add-member ScriptProperty NewDescription {$this.Description} {$this.Description=$args[0]} -passthru
|
||||
$al.NewDescription | Should Be 'MyDescription'
|
||||
$al.NewDescription = "some description"
|
||||
$al.NewDescription | Should Be 'some description'
|
||||
}
|
||||
|
||||
It "Add TypeName MemberSet Success" {
|
||||
$a = 'string' | add-member NoteProperty TestNote Any -TypeName MyType -passthru
|
||||
$a.PSTypeNames[0] | Should Be MyType
|
||||
}
|
||||
|
||||
It "Add TypeName Existing Name Success" {
|
||||
$a = 'string' | add-member -TypeName System.Object -passthru
|
||||
$a.PSTypeNames[0] | Should Be System.Object
|
||||
}
|
||||
|
||||
It "Add Single Note To Array" {
|
||||
$a=1,2,3
|
||||
$a = add-member -InputObject $a Name Value -Passthru
|
||||
$a.Name | Should Be Value
|
||||
}
|
||||
|
||||
It "Add Multiple Note Members" {
|
||||
$obj=new-object psobject
|
||||
$hash=@{Name='Name';TestInt=1;TestNull=$null}
|
||||
add-member -InputObject $obj $hash -Passthru
|
||||
$obj.Name | Should Be 'Name'
|
||||
$obj.TestInt | Should Be 1
|
||||
$obj.TestNull | Should BeNullOrEmpty
|
||||
}
|
||||
|
||||
It "Add Multiple Note With TypeName" {
|
||||
$obj=new-object psobject
|
||||
$hash=@{Name='Name';TestInt=1;TestNull=$null}
|
||||
$obj = add-member -InputObject $obj $hash -TypeName MyType -Passthru
|
||||
$obj.PSTypeNames[0] | Should Be MyType
|
||||
}
|
||||
|
||||
It "Add Multiple Members With Force" {
|
||||
$obj=new-object psobject
|
||||
$hash=@{TestNote='hello'}
|
||||
$obj | add-member TestNote 1
|
||||
$obj | add-member $hash -force -Passthru
|
||||
$obj.TestNote | Should Be 'hello'
|
||||
}
|
||||
|
||||
It "Simplified Add-Member should support using 'Property' as the NoteProperty member name" {
|
||||
$results = add-member -InputObject a property Any -passthru
|
||||
$results.property | Should Be 'Any'
|
||||
|
||||
$results = add-member -InputObject a Method Any -passthru
|
||||
$results.Method | Should Be 'Any'
|
||||
|
||||
$results = add-member -InputObject a 23 Any -passthru
|
||||
$results.23 | Should Be 'Any'
|
||||
|
||||
$results = add-member -InputObject a 8 np Any -passthru
|
||||
$results.np | Should Be 'Any'
|
||||
|
||||
$results = add-member -InputObject a 16 sp {1+1} -passthru
|
||||
$results.sp | Should Be 2
|
||||
}
|
||||
}
|
||||
|
||||
Describe "Add-Member" {
|
||||
|
||||
It "should be able to see a newly added member of an object" {
|
||||
|
||||
Reference in new issue
Block a user