diff --git a/test/powershell/enginecore/Adapter.Tests.ps1 b/test/powershell/enginecore/Adapter.Tests.ps1 new file mode 100644 index 000000000..e46021d9e --- /dev/null +++ b/test/powershell/enginecore/Adapter.Tests.ps1 @@ -0,0 +1,82 @@ +Describe "Adapter Tests" -tags "CI" { + BeforeAll { + $pso = [System.Diagnostics.Process]::GetCurrentProcess() + $processName = $pso.Name + + if(-not ('TestCodeMethodClass' -as "type")) + { + class TestCodeMethodClass { + static [int] TestCodeMethod([PSObject] $target, [int] $i) + { + return 1; + } + } + } + + $psmemberset = new-object System.Management.Automation.PSMemberSet 'setname1' + $psmemberset | Add-Member -MemberType NoteProperty -Name NoteName -Value 1 + $testmethod = [TestCodeMethodClass].GetMethod("TestCodeMethod") + $psmemberset | Add-Member -MemberType CodeMethod -Name TestCodeMethod -Value $testmethod + + $document = new-object System.Xml.XmlDocument + $document.LoadXml("Pride And Prejudice19.95") + $doc = $document.DocumentElement + } + It "can get a Dotnet parameterized property" { + $col = $pso.psobject.Properties.Match("*") + $prop = $col.psobject.Members["Item"] + $prop | Should Not BeNullOrEmpty + $prop.IsGettable | Should be $true + $prop.IsSettable | Should be $false + $prop.TypeNameOfValue | Should be "System.Management.Automation.PSPropertyInfo" + $prop.Invoke("ProcessName").Value | Should be $processName + } + + It "can get a property" { + $pso.psobject.Properties["ProcessName"] | should Not BeNullOrEmpty + } + + It "Can access all properties" { + $props = $pso.psobject.Properties.Match("*") + $props | should Not BeNullOrEmpty + $props["ProcessName"].Value |Should be $processName + } + + It "Can invoke a method" { + $method = $pso.psobject.Methods["ToString"] + $method.Invoke() | should be ($pso.ToString()) + } + + It "Access a Method via MemberSet adapter" { + $prop = $psmemberset.psobject.Members["TestCodeMethod"] + $prop.Invoke(2) | Should be 1 + } + + It "Access misc properties via MemberSet adapter" { + $prop = $psmemberset.psobject.Properties["NoteName"] + $prop | Should Not BeNullOrEmpty + $prop.IsGettable | Should be $true + $prop.IsSettable | Should be $true + $prop.TypeNameOfValue | Should be "System.Int32" + } + + It "Access all the properties via XmlAdapter" { + $col = $doc.psobject.Properties.Match("*") + $col.Count | Should Not Be 0 + $prop = $col["price"] + $prop | Should Not BeNullOrEmpty + } + + It "Access all the properties via XmlAdapter" { + $prop = $doc.psobject.Properties["price"] + $prop.Value | Should Be "19.95" + $prop.IsGettable | Should Not BeNullOrEmpty + $prop.IsSettable | Should Not BeNullOrEmpty + $prop.TypeNameOfValue | Should be "System.String" + } + + It "Call to string on a XmlNode object" { + $val = $doc.ToString() + $val | Should Be "book" + } +}