@@ -76,53 +76,98 @@ function Show-PesterResult {
7676 $selectedItem = $list [0 ]
7777 $stack = [System.Collections.Stack ]::new()
7878 $object = $PesterResult
79+ $selectedPane = ' list'
80+ $scrollPosition = 0
7981 # endregion Initial State
8082
8183 while ($true ) {
84+ # Check the layout sizes
85+ $sizes = $layout | Get-SpectreLayoutSizes
86+ $previewHeight = $sizes [" preview" ].Height
87+ $previewWidth = $sizes [" preview" ].Width
88+ Write-Debug " Preview size: $previewWidth x $previewHeight "
89+
8290 # Handle input
8391 $lastKeyPressed = Get-LastKeyPressed
84- # ToDo: Add support for scrolling the right panel
92+ # ToDo: Add vim navigation keys
8593 if ($null -ne $lastKeyPressed ) {
86- if ($lastKeyPressed.Key -eq " DownArrow" ) {
87- $selectedItem = $list [($list.IndexOf ($selectedItem ) + 1 ) % $list.Count ]
88- } elseif ($lastKeyPressed.Key -eq " UpArrow" ) {
89- $selectedItem = $list [($list.IndexOf ($selectedItem ) - 1 + $list.Count ) % $list.Count ]
90- } elseif ($lastKeyPressed.Key -eq " Enter" ) {
91- <# Recurse into Pester Object #>
92- if ($selectedItem -like ' *..*' ) {
93- # Move up one via selecting ..
94- $object = $stack.Pop ()
95- Write-Debug " Popped item from stack: $ ( $object.Name ) "
96- } else {
97- Write-Debug " Pushing item into stack: $ ( $items.Item ($selectedItem ).Name) "
98-
99- $stack.Push ($object )
100- $object = $items.Item ($selectedItem )
101- if ($object.GetType ().Name -eq " Test" ) {
94+ # region List Navigation
95+ if ($selectedPane -eq ' list' ) {
96+ if ($lastKeyPressed.Key -eq " DownArrow" ) {
97+ $selectedItem = $list [($list.IndexOf ($selectedItem ) + 1 ) % $list.Count ]
98+ } elseif ($lastKeyPressed.Key -eq " UpArrow" ) {
99+ $selectedItem = $list [($list.IndexOf ($selectedItem ) - 1 + $list.Count ) % $list.Count ]
100+ } elseif ($lastKeyPressed.Key -eq " PageDown" ) {
101+ $currentIndex = $list.IndexOf ($selectedItem )
102+ $newIndex = [Math ]::Min($currentIndex + 10 , $list.Count - 1 )
103+ $selectedItem = $list [$newIndex ]
104+ } elseif ($lastKeyPressed.Key -eq " PageUp" ) {
105+ $currentIndex = $list.IndexOf ($selectedItem )
106+ $newIndex = [Math ]::Max($currentIndex - 10 , $list.Count - 1 )
107+ $selectedItem = $list [$newIndex ]
108+ } elseif ($lastKeyPressed.Key -eq " Home" ) {
109+ $selectedItem = $list [0 ]
110+ } elseif ($lastKeyPressed.Key -eq " End" ) {
111+ $selectedItem = $list [-1 ]
112+ } elseif ($lastKeyPressed.Key -in @ (" Tab" , " RightArrow" )) {
113+ $selectedPane = ' preview'
114+ } elseif ($lastKeyPressed.Key -eq " Enter" ) {
115+ <# Recurse into Pester Object #>
116+ if ($items.Item ($selectedItem ).GetType().Name -eq " Test" ) {
102117 # This is a test. We don't want to go deeper.
118+ }
119+ if ($selectedItem -like ' *..*' ) {
120+ # Move up one via selecting ..
103121 $object = $stack.Pop ()
122+ Write-Debug " Popped item from stack: $ ( $object.Name ) "
123+ } else {
124+ Write-Debug " Pushing item into stack: $ ( $items.Item ($selectedItem ).Name) "
125+ $stack.Push ($object )
126+ $object = $items.Item ($selectedItem )
104127 }
128+ $items = Get-ListFromObject - Object $object
129+ $list = [array ]$items.Keys
130+ $selectedItem = $list [0 ]
131+ $scrollPosition = 0
132+ } elseif ($lastKeyPressed.Key -eq " Escape" ) {
133+ # Move up via Esc key
134+ if ($stack.Count -eq 0 ) {
135+ # This is the top level. Exit the loop.
136+ return
137+ }
138+ $object = $stack.Pop ()
139+ $items = Get-ListFromObject - Object $object
140+ $list = [array ]$items.Keys
141+ $selectedItem = $list [0 ]
142+ $scrollPosition = 0
105143 }
106- $items = Get-ListFromObject - Object $object
107- $list = [array ]$items.Keys
108- $selectedItem = $list [0 ]
109- } elseif ($lastKeyPressed.Key -eq " Escape" ) {
110- # Move up via Esc key
111- if ($stack.Count -eq 0 ) {
112- # This is the top level. Exit the loop.
113- return
144+ }
145+ else {
146+ # region Preview Navigation
147+ # ToDo: Add support for scrolling the right panel
148+ if ($lastKeyPressed.Key -in " Escape" , " Tab" , " LeftArrow" , " RightArrow" ) {
149+ $selectedPane = ' list'
150+ } elseif ($lastKeyPressed.Key -eq " Down" ) {
151+ # Scroll down in the preview panel
152+ $scrollPosition = $ScrollPosition + 1
153+ } elseif ($lastKeyPressed.Key -eq " Up" ) {
154+ # Scroll up in the preview panel
155+ $scrollPosition = $ScrollPosition - 1
156+ } elseif ($lastKeyPressed.Key -eq " PageDown" ) {
157+ # Scroll down by a page in the preview panel
158+ $scrollPosition = $ScrollPosition + 10
159+ } elseif ($lastKeyPressed.Key -eq " PageUp" ) {
160+ # Scroll up by a page in the preview panel
161+ $scrollPosition = $ScrollPosition - 10
114162 }
115- $object = $stack.Pop ()
116- $items = Get-ListFromObject - Object $object
117- $list = [array ]$items.Keys
118- $selectedItem = $list [0 ]
163+ # endregion Preview Navigation
119164 }
120165 }
121166
122167 # Generate new data
123168 $titlePanel = Get-TitlePanel - Item $object
124- $listPanel = Get-ListPanel - List $list - SelectedItem $selectedItem
125- $previewPanel = Get-PreviewPanel - Items $items - SelectedItem $selectedItem
169+ $listPanel = Get-ListPanel - List $list - SelectedItem $selectedItem - SelectedPane $selectedPane
170+ $previewPanel = Get-PreviewPanel - Items $items - SelectedItem $selectedItem - ScrollPosition $scrollPosition - PreviewHeight $previewHeight - PreviewWidth $previewWidth - SelectedPane $selectedPane
126171
127172 # Update layout
128173 $layout [" header" ].Update($titlePanel ) | Out-Null
0 commit comments