diff --git a/src/vs/workbench/api/common/extHostTestingPrivateApi.ts b/src/vs/workbench/api/common/extHostTestingPrivateApi.ts index 26c7081cce3..eb17a963a5d 100644 --- a/src/vs/workbench/api/common/extHostTestingPrivateApi.ts +++ b/src/vs/workbench/api/common/extHostTestingPrivateApi.ts @@ -9,7 +9,6 @@ import * as vscode from 'vscode'; export const enum ExtHostTestItemEventOp { Upsert, RemoveChild, - Invalidated, SetProp, Bulk, } @@ -24,10 +23,6 @@ export interface ITestItemRemoveChild { id: string; } -export interface ITestItemInvalidated { - op: ExtHostTestItemEventOp.Invalidated; -} - export interface ITestItemSetProp { op: ExtHostTestItemEventOp.SetProp; key: keyof vscode.TestItem; @@ -42,7 +37,6 @@ export interface ITestItemBulkReplace { export type ExtHostTestItemEvent = | ITestItemUpsertChild | ITestItemRemoveChild - | ITestItemInvalidated | ITestItemSetProp | ITestItemBulkReplace; @@ -311,11 +305,6 @@ export class TestItemImpl implements vscode.TestItem { ...makePropDescriptors(api, label), }); } - - /** @deprecated back compat */ - public invalidateResults() { - getPrivateApiFor(this).listener?.({ op: ExtHostTestItemEventOp.Invalidated }); - } } export class TestItemRootImpl extends TestItemImpl { diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index e92c5d0d000..6f8e1b7455b 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -1762,7 +1762,6 @@ export namespace TestItem { return new types.TestTag(tagId); }), range: Range.to(item.range || undefined), - invalidateResults: () => undefined, canResolveChildren: false, busy: false, description: item.description || undefined, diff --git a/src/vs/workbench/contrib/testing/browser/explorerProjections/hierarchalByLocation.ts b/src/vs/workbench/contrib/testing/browser/explorerProjections/hierarchalByLocation.ts index 04324bfe4be..fcfe275d856 100644 --- a/src/vs/workbench/contrib/testing/browser/explorerProjections/hierarchalByLocation.ts +++ b/src/vs/workbench/contrib/testing/browser/explorerProjections/hierarchalByLocation.ts @@ -105,7 +105,6 @@ export class HierarchicalByLocationProjection extends Disposable implements ITes // children and should trust whatever the result service gives us. const explicitComputed = item.children.size ? undefined : result.computedState; - item.retired = result.retired; item.ownState = result.ownComputedState; item.ownDuration = result.ownDuration; @@ -271,7 +270,6 @@ export class HierarchicalByLocationProjection extends Disposable implements ITes const prevState = this.results.getStateById(treeElement.test.item.extId)?.[1]; if (prevState) { - treeElement.retired = prevState.retired; treeElement.ownState = prevState.computedState; treeElement.ownDuration = prevState.ownDuration; diff --git a/src/vs/workbench/contrib/testing/browser/explorerProjections/index.ts b/src/vs/workbench/contrib/testing/browser/explorerProjections/index.ts index 93868e0df2c..eb1021c695a 100644 --- a/src/vs/workbench/contrib/testing/browser/explorerProjections/index.ts +++ b/src/vs/workbench/contrib/testing/browser/explorerProjections/index.ts @@ -119,11 +119,6 @@ export class TestItemTreeElement implements IActionableTestTreeElement { return this.test.item.sortText; } - /** - * Whether the node's test result is 'retired' -- from an outdated test run. - */ - public retired = false; - /** * @inheritdoc */ diff --git a/src/vs/workbench/contrib/testing/browser/icons.ts b/src/vs/workbench/contrib/testing/browser/icons.ts index c469bd8c448..adbec36f30b 100644 --- a/src/vs/workbench/contrib/testing/browser/icons.ts +++ b/src/vs/workbench/contrib/testing/browser/icons.ts @@ -18,7 +18,6 @@ export const testingDebugAllIcon = registerIcon('testing-debug-all-icon', Codico export const testingDebugIcon = registerIcon('testing-debug-icon', Codicon.debugAltSmall, localize('testingDebugIcon', 'Icon of the "debug test" action.')); export const testingCancelIcon = registerIcon('testing-cancel-icon', Codicon.debugStop, localize('testingCancelIcon', 'Icon to cancel ongoing test runs.')); export const testingFilterIcon = registerIcon('testing-filter', Codicon.filter, localize('filterIcon', 'Icon for the \'Filter\' action in the testing view.')); -export const testingAutorunIcon = registerIcon('testing-autorun', Codicon.debugRerun, localize('autoRunIcon', 'Icon for the \'Autorun\' toggle in the testing view.')); export const testingHiddenIcon = registerIcon('testing-hidden', Codicon.eyeClosed, localize('hiddenIcon', 'Icon shown beside hidden tests, when they\'ve been shown.')); export const testingShowAsList = registerIcon('testing-show-as-list-icon', Codicon.listTree, localize('testingShowAsList', 'Icon shown when the test explorer is disabled as a tree.')); diff --git a/src/vs/workbench/contrib/testing/browser/media/testing.css b/src/vs/workbench/contrib/testing/browser/media/testing.css index 7758973aa12..7400d289061 100644 --- a/src/vs/workbench/contrib/testing/browser/media/testing.css +++ b/src/vs/workbench/contrib/testing/browser/media/testing.css @@ -65,11 +65,6 @@ margin-right: 0.25em; } -.test-explorer .computed-state.retired, -.testing-run-glyph.retired { - opacity: 0.7 !important; -} - .test-explorer .test-is-hidden { opacity: 0.8; } diff --git a/src/vs/workbench/contrib/testing/browser/testExplorerActions.ts b/src/vs/workbench/contrib/testing/browser/testExplorerActions.ts index 8230419e933..72a0b92d5e2 100644 --- a/src/vs/workbench/contrib/testing/browser/testExplorerActions.ts +++ b/src/vs/workbench/contrib/testing/browser/testExplorerActions.ts @@ -31,7 +31,6 @@ import type { TestingExplorerView } from 'vs/workbench/contrib/testing/browser/t import { ITestingOutputTerminalService } from 'vs/workbench/contrib/testing/browser/testingOutputTerminalService'; import { TestCommandId, TestExplorerViewMode, TestExplorerViewSorting, Testing } from 'vs/workbench/contrib/testing/common/constants'; import { InternalTestItem, ITestRunProfile, TestRunProfileBitset } from 'vs/workbench/contrib/testing/common/testCollection'; -import { ITestingAutoRun } from 'vs/workbench/contrib/testing/common/testingAutoRun'; import { TestingContextKeys } from 'vs/workbench/contrib/testing/common/testingContextKeys'; import { ITestingPeekOpener } from 'vs/workbench/contrib/testing/common/testingPeekOpener'; import { isFailedState } from 'vs/workbench/contrib/testing/common/testingStates'; @@ -650,47 +649,6 @@ export class GoToTest extends Action2 { } } -abstract class ToggleAutoRun extends Action2 { - - constructor(title: string, whenToggleIs: boolean) { - super({ - id: TestCommandId.ToggleAutoRun, - title, - icon: icons.testingAutorunIcon, - toggled: whenToggleIs === true ? ContextKeyExpr.true() : ContextKeyExpr.false(), - menu: { - id: MenuId.ViewTitle, - order: ActionOrder.AutoRun, - group: 'navigation', - when: ContextKeyExpr.and( - ContextKeyExpr.equals('view', Testing.ExplorerViewId), - TestingContextKeys.autoRun.isEqualTo(whenToggleIs) - ) - } - }); - } - - /** - * @override - */ - public run(accessor: ServicesAccessor) { - accessor.get(ITestingAutoRun).toggle(); - } -} - -export class AutoRunOnAction extends ToggleAutoRun { - constructor() { - super(localize('testing.turnOnAutoRun', "Turn On Auto Run"), false); - } -} - -export class AutoRunOffAction extends ToggleAutoRun { - constructor() { - super(localize('testing.turnOffAutoRun', "Turn Off Auto Run"), true); - } -} - - abstract class ExecuteTestAtCursor extends Action2 { constructor(options: IAction2Options, protected readonly group: TestRunProfileBitset) { super({ diff --git a/src/vs/workbench/contrib/testing/browser/testing.contribution.ts b/src/vs/workbench/contrib/testing/browser/testing.contribution.ts index d50f2b5279a..e7af574d85f 100644 --- a/src/vs/workbench/contrib/testing/browser/testing.contribution.ts +++ b/src/vs/workbench/contrib/testing/browser/testing.contribution.ts @@ -31,7 +31,6 @@ import { TestCommandId, Testing } from 'vs/workbench/contrib/testing/common/cons import { ITestItem, TestRunProfileBitset } from 'vs/workbench/contrib/testing/common/testCollection'; import { ITestExplorerFilterState, TestExplorerFilterState } from 'vs/workbench/contrib/testing/common/testExplorerFilterState'; import { TestId, TestPosition } from 'vs/workbench/contrib/testing/common/testId'; -import { ITestingAutoRun, TestingAutoRun } from 'vs/workbench/contrib/testing/common/testingAutoRun'; import { TestingContentProvider } from 'vs/workbench/contrib/testing/common/testingContentProvider'; import { TestingContextKeys } from 'vs/workbench/contrib/testing/common/testingContextKeys'; import { ITestingDecorationsService } from 'vs/workbench/contrib/testing/common/testingDecorations'; @@ -50,7 +49,6 @@ registerSingleton(ITestResultStorage, TestResultStorage, true); registerSingleton(ITestProfileService, TestProfileService, true); registerSingleton(ITestResultService, TestResultService, true); registerSingleton(ITestExplorerFilterState, TestExplorerFilterState, true); -registerSingleton(ITestingAutoRun, TestingAutoRun, true); registerSingleton(ITestingOutputTerminalService, TestingOutputTerminalService, true); registerSingleton(ITestingPeekOpener, TestingPeekOpener, true); registerSingleton(ITestingProgressUiService, TestingProgressUiService, true); diff --git a/src/vs/workbench/contrib/testing/browser/testingDecorations.ts b/src/vs/workbench/contrib/testing/browser/testingDecorations.ts index 546db017969..e4338cbe976 100644 --- a/src/vs/workbench/contrib/testing/browser/testingDecorations.ts +++ b/src/vs/workbench/contrib/testing/browser/testingDecorations.ts @@ -439,7 +439,6 @@ const createRunTestDecoration = (tests: readonly IncrementalTestCollectionItem[] let computedState = TestResultState.Unset; let hoverMessageParts: string[] = []; let testIdWithMessages: string | undefined; - let retired = false; for (let i = 0; i < tests.length; i++) { const test = tests[i]; const resultItem = states[i]; @@ -448,7 +447,6 @@ const createRunTestDecoration = (tests: readonly IncrementalTestCollectionItem[] hoverMessageParts.push(labelForTestInState(test.item.label, state)); } computedState = maxPriority(computedState, state); - retired = retired || !!resultItem?.retired; if (!testIdWithMessages && resultItem?.tasks.some(t => t.messages.length)) { testIdWithMessages = test.item.extId; } @@ -462,9 +460,6 @@ const createRunTestDecoration = (tests: readonly IncrementalTestCollectionItem[] let hoverMessage: IMarkdownString | undefined; let glyphMarginClassName = ThemeIcon.asClassName(icon) + ' testing-run-glyph'; - if (retired) { - glyphMarginClassName += ' retired'; - } return { range: firstLineRange(range), diff --git a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts index 88ad930b4bd..dcae5aa3fc1 100644 --- a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts +++ b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts @@ -56,7 +56,7 @@ import * as icons from 'vs/workbench/contrib/testing/browser/icons'; import { TestingExplorerFilter } from 'vs/workbench/contrib/testing/browser/testingExplorerFilter'; import { ITestingProgressUiService } from 'vs/workbench/contrib/testing/browser/testingProgressUiService'; import { getTestingConfiguration, TestingConfigKeys } from 'vs/workbench/contrib/testing/common/configuration'; -import { labelForTestInState, TestCommandId, TestExplorerViewMode, TestExplorerViewSorting, Testing, testStateNames } from 'vs/workbench/contrib/testing/common/constants'; +import { labelForTestInState, TestCommandId, TestExplorerViewMode, TestExplorerViewSorting, Testing } from 'vs/workbench/contrib/testing/common/constants'; import { StoredValue } from 'vs/workbench/contrib/testing/common/storedValue'; import { InternalTestItem, ITestRunProfile, TestItemExpandState, TestResultState, TestRunProfileBitset } from 'vs/workbench/contrib/testing/common/testCollection'; import { ITestExplorerFilterState, TestExplorerFilterState, TestFilterTerm } from 'vs/workbench/contrib/testing/common/testExplorerFilterState'; @@ -1011,13 +1011,6 @@ const getLabelForTestTreeElement = (element: TestItemTreeElement) => { comment: ['{0} is the original label in testing.treeElementLabel, {1} is a duration'], }, '{0}, in {1}', label, formatDuration(element.duration)); } - - if (element.retired) { - label = localize({ - key: 'testing.treeElementLabelOutdated', - comment: ['{0} is the original label in testing.treeElementLabel'], - }, '{0}, outdated result', label, testStateNames[element.state]); - } } return label; @@ -1210,10 +1203,6 @@ class TestItemRenderer extends ActionableItemTemplateData { : node.element.state); data.icon.className = 'computed-state ' + (icon ? ThemeIcon.asClassName(icon) : ''); - if (node.element.retired) { - data.icon.className += ' retired'; - } - label.resource = node.element.test.item.uri; options.title = getLabelForTestTreeElement(node.element); options.fileKind = FileKind.FILE; diff --git a/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts b/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts index 52ddb69be63..7b18d429624 100644 --- a/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts +++ b/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts @@ -10,7 +10,6 @@ import { IMainThreadTestCollection } from 'vs/workbench/contrib/testing/common/t export class MainThreadTestCollection extends AbstractIncrementalTestCollection implements IMainThreadTestCollection { private busyProvidersChangeEmitter = new Emitter(); - private retireTestEmitter = new Emitter(); private expandPromises = new WeakMap Promise) { super(); @@ -140,13 +138,6 @@ export class MainThreadTestCollection extends AbstractIncrementalTestCollection< return { ...internal, children: new Set() }; } - /** - * @override - */ - protected override retireTest(testId: string) { - this.retireTestEmitter.fire(testId); - } - private *getIterator() { const queue = [this.rootIds]; while (queue.length) { diff --git a/src/vs/workbench/contrib/testing/common/ownedTestCollection.ts b/src/vs/workbench/contrib/testing/common/ownedTestCollection.ts index c3409f6ba9e..0eb43e5fce1 100644 --- a/src/vs/workbench/contrib/testing/common/ownedTestCollection.ts +++ b/src/vs/workbench/contrib/testing/common/ownedTestCollection.ts @@ -149,10 +149,6 @@ export class SingleUseTestCollection extends Disposable { private onTestItemEvent(internal: OwnedCollectionTestItem, evt: ExtHostTestItemEvent) { switch (evt.op) { - case ExtHostTestItemEventOp.Invalidated: - this.pushDiff({ op: TestDiffOpType.Retire, itemId: internal.fullId.toString() }); - break; - case ExtHostTestItemEventOp.RemoveChild: this.removeItem(TestId.joinToString(internal.fullId, evt.id)); break; diff --git a/src/vs/workbench/contrib/testing/common/testCollection.ts b/src/vs/workbench/contrib/testing/common/testCollection.ts index 4a50a4c7d9e..cc72bd5210b 100644 --- a/src/vs/workbench/contrib/testing/common/testCollection.ts +++ b/src/vs/workbench/contrib/testing/common/testCollection.ts @@ -419,8 +419,6 @@ export interface TestResultItem extends InternalTestItem { ownComputedState: TestResultState; /** Computed state based on children */ computedState: TestResultState; - /** True if the test is outdated */ - retired: boolean; /** Max duration of the item's tasks (if run directly) */ ownDuration?: number; } @@ -509,8 +507,6 @@ export const enum TestDiffOpType { Remove, /** Changes the number of controllers who are yet to publish their collection roots. */ IncrementPendingExtHosts, - /** Retires a test/result */ - Retire, /** Add a new test tag */ AddTag, /** Remove a test tag */ @@ -521,7 +517,6 @@ export type TestsDiffOp = | { op: TestDiffOpType.Add; item: InternalTestItem } | { op: TestDiffOpType.Update; item: ITestItemUpdate } | { op: TestDiffOpType.Remove; itemId: string } - | { op: TestDiffOpType.Retire; itemId: string } | { op: TestDiffOpType.IncrementPendingExtHosts; amount: number } | { op: TestDiffOpType.AddTag; tag: ITestTagDisplayInfo } | { op: TestDiffOpType.RemoveTag; id: string }; @@ -531,7 +526,6 @@ export namespace TestsDiffOp { | { op: TestDiffOpType.Add; item: InternalTestItem.Serialized } | { op: TestDiffOpType.Update; item: ITestItemUpdate.Serialized } | { op: TestDiffOpType.Remove; itemId: string } - | { op: TestDiffOpType.Retire; itemId: string } | { op: TestDiffOpType.IncrementPendingExtHosts; amount: number } | { op: TestDiffOpType.AddTag; tag: ITestTagDisplayInfo } | { op: TestDiffOpType.RemoveTag; id: string }; @@ -721,10 +715,6 @@ export abstract class AbstractIncrementalTestCollection('testingAutoRun'); - -export class TestingAutoRun extends Disposable implements ITestingAutoRun { - private enabled: IContextKey; - private runner = this._register(new MutableDisposable()); - - constructor( - @IContextKeyService contextKeyService: IContextKeyService, - @ITestService private readonly testService: ITestService, - @ITestResultService private readonly results: ITestResultService, - @IConfigurationService private readonly configuration: IConfigurationService, - ) { - super(); - this.enabled = TestingContextKeys.autoRun.bindTo(contextKeyService); - - this._register(configuration.onDidChangeConfiguration(evt => { - if (evt.affectsConfiguration(TestingConfigKeys.AutoRunMode) && this.enabled.get()) { - this.runner.value = this.makeRunner(); - } - })); - } - - /** - * @inheritdoc - */ - public toggle(): void { - const enabled = this.enabled.get(); - if (enabled) { - this.runner.value = undefined; - } else { - this.runner.value = this.makeRunner(); - } - - this.enabled.set(!enabled); - } - - /** - * Creates the runner. Is triggered when tests are marked as retired. - * Runs them on a debounce. - */ - private makeRunner() { - const rerunIds = new Map(); - const store = new DisposableStore(); - const cts = new CancellationTokenSource(); - store.add(toDisposable(() => cts.dispose(true))); - - let delay = getTestingConfiguration(this.configuration, TestingConfigKeys.AutoRunDelay); - - store.add(this.configuration.onDidChangeConfiguration(() => { - delay = getTestingConfiguration(this.configuration, TestingConfigKeys.AutoRunDelay); - })); - - const scheduler = store.add(new RunOnceScheduler(async () => { - if (rerunIds.size === 0) { - return; - } - - const tests = [...rerunIds.values()]; - rerunIds.clear(); - await this.testService.runTests({ group: TestRunProfileBitset.Run, tests, isAutoRun: true }); - - if (rerunIds.size > 0) { - scheduler.schedule(delay); - } - }, delay)); - - const addToRerun = (test: InternalTestItem) => { - rerunIds.set(test.item.extId, test); - if (!isRunningTests(this.results)) { - scheduler.schedule(delay); - } - }; - - const removeFromRerun = (test: InternalTestItem) => { - rerunIds.delete(test.item.extId); - if (rerunIds.size === 0) { - scheduler.cancel(); - } - }; - - store.add(this.results.onTestChanged(evt => { - if (evt.reason === TestResultItemChangeReason.Retired) { - addToRerun(evt.item); - } else if ((evt.reason === TestResultItemChangeReason.OwnStateChange || evt.reason === TestResultItemChangeReason.ComputedStateChange)) { - removeFromRerun(evt.item); - } - })); - - store.add(this.results.onResultsChanged(evt => { - if ('completed' in evt && !isRunningTests(this.results) && rerunIds.size) { - scheduler.schedule(0); - } - })); - - if (getTestingConfiguration(this.configuration, TestingConfigKeys.AutoRunMode) === AutoRunMode.AllInWorkspace) { - - store.add(this.testService.onDidProcessDiff(diff => { - for (const entry of diff) { - if (entry.op === TestDiffOpType.Add) { - const test = entry.item; - const isQueued = Iterable.some( - getCollectionItemParents(this.testService.collection, test), - t => rerunIds.has(test.item.extId), - ); - - const state = this.results.getStateById(test.item.extId); - if (!isQueued && (!state || state[1].retired)) { - addToRerun(test); - } - } - } - })); - - - for (const root of this.testService.collection.rootItems) { - addToRerun(root); - } - } - - return store; - } -} diff --git a/src/vs/workbench/contrib/testing/test/browser/explorerProjections/hierarchalByLocation.test.ts b/src/vs/workbench/contrib/testing/test/browser/explorerProjections/hierarchalByLocation.test.ts index 66bf4f2db54..0ad2b9359cd 100644 --- a/src/vs/workbench/contrib/testing/test/browser/explorerProjections/hierarchalByLocation.test.ts +++ b/src/vs/workbench/contrib/testing/test/browser/explorerProjections/hierarchalByLocation.test.ts @@ -119,7 +119,6 @@ suite('Workbench - Testing Explorer Hierarchal by Location Projection', () => { }, parent: 'id-root', tasks: [], - retired: false, ownComputedState: state, computedState: state, expand: 0, diff --git a/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts b/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts index ea9d89f01ce..0a390e21654 100644 --- a/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts +++ b/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts @@ -171,20 +171,6 @@ suite('Workbench - Test Results Service', () => { assert.deepStrictEqual(r.getStateById(testId)?.ownComputedState, TestResultState.Errored); }); - test('retire', () => { - changed.clear(); - r.retire(new TestId(['ctrlId', 'id-a']).toString()); - assert.deepStrictEqual(getChangeSummary(), [ - { label: 'a', reason: TestResultItemChangeReason.Retired }, - { label: 'aa', reason: TestResultItemChangeReason.ParentRetired }, - { label: 'ab', reason: TestResultItemChangeReason.ParentRetired }, - ]); - - changed.clear(); - r.retire(new TestId(['ctrlId', 'id-a']).toString()); - assert.strictEqual(changed.size, 0); - }); - test('ignores outside run', () => { changed.clear(); r.updateState(new TestId(['ctrlId', 'id-b']).toString(), 't', TestResultState.Running); @@ -252,7 +238,7 @@ suite('Workbench - Test Results Service', () => { const expected: any = { ...r.getStateById(tests.root.id)! }; expected.item.uri = actual.item.uri; expected.item.children = actual.item.children; - assert.deepStrictEqual(actual, { ...expected, retired: true, children: [new TestId(['ctrlId', 'id-a']).toString()] }); + assert.deepStrictEqual(actual, { ...expected, children: [new TestId(['ctrlId', 'id-a']).toString()] }); assert.deepStrictEqual(rehydrated.counts, r.counts); assert.strictEqual(typeof rehydrated.completedAt, 'number'); }); diff --git a/src/vscode-dts/vscode.proposed.testObserver.d.ts b/src/vscode-dts/vscode.proposed.testObserver.d.ts index 2bdb21d7473..d4465affbf2 100644 --- a/src/vscode-dts/vscode.proposed.testObserver.d.ts +++ b/src/vscode-dts/vscode.proposed.testObserver.d.ts @@ -68,24 +68,6 @@ declare module 'vscode' { readonly removed: ReadonlyArray; } - /** - * A test item is an item shown in the "test explorer" view. It encompasses - * both a suite and a test, since they have almost or identical capabilities. - */ - export interface TestItem { - /** - * Marks the test as outdated. This can happen as a result of file changes, - * for example. In "auto run" mode, tests that are outdated will be - * automatically rerun after a short delay. Invoking this on a - * test with children will mark the entire subtree as outdated. - * - * Extensions should generally not override this method. - */ - // todo@api still unsure about this - invalidateResults(): void; - } - - /** * TestResults can be provided to the editor in {@link tests.publishTestResult}, * or read from it in {@link tests.testResults}.