Tests/Get-ChildNode.Tests.ps1
#Requires -Modules @{ModuleName="Pester"; ModuleVersion="5.5.0"} using module ..\..\ObjectGraphTools [Diagnostics.CodeAnalysis.SuppressMessage('PSUseDeclaredVarsMoreThanAssignments', 'Object', Justification = 'False positive')] param() Describe 'Get-ChildNode' { BeforeAll { Set-StrictMode -Version Latest $Object = @{ Comment = 'Sample ObjectGraph' Data = @( @{ Index = 1 Name = 'One' Comment = 'First item' } @{ Index = 2 Name = 'Two' Comment = 'Second item' } @{ Index = 3 Name = 'Three' Comment = 'Third item' } ) } } Context 'Existence Check' { It 'Help' { Get-Node -? | Out-String -Stream | Should -Contain SYNOPSIS } } Context 'Basic selection' { it 'All child nodes' { $Nodes = $Object | Get-ChildNode $Nodes.Count | Should -Be 2 } it 'All decedent nodes' { $Nodes = $Object | Get-ChildNode -Recurse $Nodes.Count | Should -Be 14 } it 'All decedent nodes including self' { $Nodes = $Object | Get-ChildNode -Recurse -IncludeSelf $Nodes.Count | Should -Be 15 } it 'All leaf nodes' { $Nodes = $Object | Get-ChildNode -Leaf $Nodes.Name | Should -Be Comment } it 'All decedent leaf nodes' { $Nodes = $Object | Get-ChildNode -Leaf -Recurse $Nodes.Count | Should -Be 10 } it 'All list child nodes' { $Nodes = $Object | Get-ChildNode -ListChild $Nodes.Name | Sort-Object | Should -Be 0, 1, 2 } it 'All decedent list child nodes' { $Nodes = $Object | Get-ChildNode -ListChild -Recurse $Nodes.Name | Sort-Object | Should -Be 0, 1, 2 } it 'All map child nodes' { $Nodes = $Object | Get-ChildNode -Include * $Nodes.Name | Sort-Object | Should -Be Comment, Data } it 'All map leaf nodes' { $Nodes = $Object | Get-ChildNode -Include * -Leaf $Nodes.Name | Should -Be Comment } it 'All decedent map child nodes' { $Nodes = $Object | Get-ChildNode -Include * -Recurse $Nodes.Count | Should -Be 11 } it 'All decedent map leaf nodes' { $Nodes = $Object | Get-ChildNode -Include * -Recurse -Leaf $Nodes.Count | Should -Be 10 } it 'All decedent map nodes named index' { $Nodes = $Object | Get-ChildNode -Include Index -Recurse $Nodes.Value | Sort-Object | Should -Be 1, 2, 3 } } Context 'By name' { it 'Include single literal' { $Nodes = $Object | Get-ChildNode -Recurse -Include Comment -Literal $Nodes.Count | Should -Be 4 $Nodes.Name | Sort-Object -Unique | Should -Be Comment } it 'Exclude single literal' { $Nodes = $Object | Get-ChildNode -Recurse -Exclude Comment -Literal $Nodes.Count | Should -Be 7 $Nodes.Name | Sort-Object -Unique | Should -Be 'Data', 'Index', 'Name' } it 'Include single wildcard' { $Nodes = $Object | Get-ChildNode -Recurse -Include Comm?nt $Nodes.Count | Should -Be 4 $Nodes.Name | Sort-Object -Unique | Should -Be Comment } it 'Exclude single wildcard' { $Nodes = $Object | Get-ChildNode -Recurse -Exclude Comm?nt $Nodes.Count | Should -Be 7 $Nodes.Name | Sort-Object -Unique | Should -Be 'Data', 'Index', 'Name' } it 'Include multiple literal' { $Nodes = $Object | Get-ChildNode -Recurse -Include Comment, Name -Literal $Nodes.Count | Should -Be 7 $Nodes.Name | Sort-Object -Unique | Should -Be Comment, Name } it 'Exclude multiple literal' { $Nodes = $Object | Get-ChildNode -Recurse -Exclude Comment, Name -Literal $Nodes.Count | Should -Be 4 $Nodes.Name | Sort-Object -Unique | Should -Be 'Data', 'Index' } it 'Include multiple wildcard' { $Nodes = $Object | Get-ChildNode -Recurse -Include Com*, Nam? $Nodes.Count | Should -Be 7 $Nodes.Name | Sort-Object -Unique | Should -Be Comment, Name } it 'Exclude multiple wildcard' { $Nodes = $Object | Get-ChildNode -Recurse -Exclude Com*, Nam? $Nodes.Count | Should -Be 4 $Nodes.Name | Sort-Object -Unique | Should -Be 'Data', 'Index' } } Context 'Warnings' { it 'Is a leaf node' { $LeafNode = $Object | Get-ChildNode Comment $Output = $LeafNode | Get-ChildNode 3>&1 $Output.where{$_ -is [System.Management.Automation.WarningRecord]}.Message | Should -BeLike '*is a leaf node*' } } } |