@@ -6,9 +6,14 @@ import { hasFailedSnapshot } from '@vitest/ws-client'
66import type { CollectFilteredTests , CollectorInfo , Filter , FilteredTests } from '~/composables/explorer/types'
77import { client , findById } from '~/composables/client'
88import { runFilter , testMatcher } from '~/composables/explorer/filter'
9- import { createOrUpdateFileNode , createOrUpdateNodeTask , createOrUpdateSuiteTask } from '~/composables/explorer/utils'
9+ import {
10+ createOrUpdateFileNode ,
11+ createOrUpdateNodeTask ,
12+ createOrUpdateSuiteTask ,
13+ isRunningTestNode ,
14+ } from '~/composables/explorer/utils'
1015import { isSuite } from '~/utils/task'
11- import { openedTreeItems , treeFilter , uiFiles } from '~/composables/explorer/state'
16+ import { openedTreeItems , treeFilter , uiEntries , uiFiles } from '~/composables/explorer/state'
1217import { explorerTree } from '~/composables/explorer/index'
1318import { expandNodesOnEndRun } from '~/composables/explorer/expand'
1419
@@ -91,6 +96,25 @@ export function runCollect(
9196 } )
9297}
9398
99+ function * collectRunningTodoTests ( ) {
100+ yield * uiEntries . value . filter ( isRunningTestNode )
101+ }
102+
103+ function updateRunningTodoTests ( ) {
104+ const idMap = client . state . idMap
105+ let task : Task | undefined
106+ for ( const test of collectRunningTodoTests ( ) ) {
107+ // lookup the parent
108+ task = idMap . get ( test . parentId )
109+ if ( task && isSuite ( task ) && task . mode === 'todo' ) {
110+ task = idMap . get ( test . id )
111+ if ( task ) {
112+ task . mode = 'todo'
113+ }
114+ }
115+ }
116+ }
117+
94118function traverseFiles ( collect : boolean ) {
95119 const rootTasks = explorerTree . root . tasks
96120 // collect remote children
@@ -146,7 +170,7 @@ function doRunFilter(
146170
147171 // refresh explorer
148172 queueMicrotask ( ( ) => {
149- runFilter ( search , filter )
173+ refreshExplorer ( search , filter , end )
150174 } )
151175
152176 if ( applyExpandNodes ) {
@@ -158,10 +182,18 @@ function doRunFilter(
158182 }
159183 } )
160184 // refresh explorer
161- queueMicrotask ( ( ) => runFilter ( search , filter ) )
185+ queueMicrotask ( ( ) => {
186+ refreshExplorer ( search , filter , end )
187+ } )
162188 }
163189}
164190
191+ function refreshExplorer ( search : string , filter : Filter , end : boolean ) {
192+ runFilter ( search , filter )
193+ // update only at the end
194+ end && updateRunningTodoTests ( )
195+ }
196+
165197function createOrUpdateEntry ( tasks : Task [ ] ) {
166198 let task : Task
167199 for ( let i = 0 ; i < tasks . length ; i ++ ) {
0 commit comments