diff --git a/test/powershell/New-Object.Tests.ps1 b/test/powershell/New-Object.Tests.ps1 index 50d63a9079..fd80be27fc 100644 --- a/test/powershell/New-Object.Tests.ps1 +++ b/test/powershell/New-Object.Tests.ps1 @@ -32,3 +32,127 @@ Describe "New-Object" { $o | Should Be "1.2.3.4" } } + +Describe "New-Object DRT basic functionality" -Tags DRT{ + It "New-Object with int array should work"{ + $result = New-Object -TypeName int[] -Arg 10 + $result.Count | Should Be 10 + } + + It "New-Object with char should work"{ + $result = New-Object -TypeName char + $result.Count | Should Be 1 + $defaultChar = [char]0 + ([char]$result) | Should Be $defaultChar + } + + It "New-Object with default Coordinates should work"{ + $result = New-Object -TypeName System.Management.Automation.Host.Coordinates + $result.Count | Should Be 1 + $result.X | Should Be 0 + $result.Y | Should Be 0 + } + + It "New-Object with specified Coordinates should work"{ + $result = New-Object -TypeName System.Management.Automation.Host.Coordinates -ArgumentList 1,2 + $result.Count | Should Be 1 + $result.X | Should Be 1 + $result.Y | Should Be 2 + } + + It "New-Object with Employ should work"{ + Add-Type -TypeDefinition "public class Employee{public Employee(string firstName,string lastName,int yearsInMS){FirstName = firstName;LastName=lastName;YearsInMS = yearsInMS;}public string FirstName;public string LastName;public int YearsInMS;}" + $result = New-Object -TypeName Employee -ArgumentList "Mary", "Soe", 11 + $result.Count | Should Be 1 + $result.FirstName | Should Be "Mary" + $result.LastName | Should Be "Soe" + $result.YearsInMS | Should Be 11 + } + + It "New-Object with invalid type should throw Exception"{ + try + { + New-Object -TypeName LiarType -EA Stop + Throw "Execution OK" + } + catch + { + $_.CategoryInfo| Should Match "PSArgumentException" + $_.FullyQualifiedErrorId | Should be "TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand" + } + } + + It "New-Object with invalid argument should throw Exception"{ + try + { + New-Object -TypeName System.Management.Automation.PSVariable -ArgumentList "A", 1, None, "asd" -EA Stop + Throw "Execution OK" + } + catch + { + $_.CategoryInfo| Should Match "MethodException" + $_.FullyQualifiedErrorId | Should be "ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand" + } + } + + It "New-Object with abstract class should throw Exception"{ + Add-Type -TypeDefinition "public abstract class AbstractEmployee{public AbstractEmployee(){}}" + try + { + New-Object -TypeName AbstractEmployee -EA Stop + Throw "Execution OK" + } + catch + { + $_.CategoryInfo| Should Match "MethodInvocationException" + $_.FullyQualifiedErrorId | Should be "ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand" + } + } + + It "New-Object with bad argument for class construtor should throw Exception"{ + Add-Type -TypeDefinition "public class Employee{public Employee(string firstName,string lastName,int yearsInMS){FirstName = firstName;LastName=lastName;YearsInMS = yearsInMS;}public string FirstName;public string LastName;public int YearsInMS;}" + try + { + New-Object -TypeName Employee -ArgumentList 11 -EA Stop + Throw "Execution OK" + } + catch + { + $_.CategoryInfo| Should Match "MethodException" + $_.FullyQualifiedErrorId | Should be "ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand" + } + } + + It "New-Object with not init class construtor should throw Exception"{ + Add-Type -TypeDefinition "public class Employee{public Employee(string firstName,string lastName,int yearsInMS){FirstName = firstName;LastName=lastName;YearsInMS = yearsInMS;}public string FirstName;public string LastName;public int YearsInMS;}" + try + { + New-Object -TypeName Employee -EA Stop + Throw "Execution OK" + } + catch + { + $_.CategoryInfo| Should Match "PSArgumentException" + $_.FullyQualifiedErrorId | Should be "CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand" + } + } + + It "New-Object with Private Nested class should throw Exception"{ + Add-Type -TypeDefinition "public class WeirdEmployee{public WeirdEmployee(){}private class PrivateNestedWeirdEmployee{public PrivateNestedWeirdEmployee(){}}}" + try + { + New-Object -TypeName WeirdEmployee+PrivateNestedWeirdEmployee -EA Stop + Throw "Execution OK" + } + catch + { + $_.CategoryInfo| Should Match "PSArgumentException" + $_.FullyQualifiedErrorId | Should be "TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand" + } + } + + It "New-Object with TypeName and Property parameter should work"{ + $result = New-Object -TypeName PSObject -property @{foo=123} + $result.foo | Should Be 123 + } +} \ No newline at end of file