This commit is contained in:
2025-08-06 22:52:32 +02:00
parent fd01ccf8af
commit 272812a815
2 changed files with 162 additions and 76 deletions
+79 -21
View File
@@ -1,24 +1,41 @@
import * as vscode from 'vscode';
import { TestResult } from './tester';
import { format } from './utils';
import * as vscode from "vscode";
import { TestResult } from "./tester";
import { format } from "./utils";
class RunTreeItem extends vscode.TreeItem {
children?: RunTreeItem[];
constructor(label: string | vscode.TreeItemLabel, description?: string, children?: RunTreeItem[], expanded?: boolean) {
super(label, children ? (expanded ? vscode.TreeItemCollapsibleState.Expanded : vscode.TreeItemCollapsibleState.Collapsed) : vscode.TreeItemCollapsibleState.None)
constructor(
label: string | vscode.TreeItemLabel,
description?: string,
children?: RunTreeItem[],
expanded: boolean = false
) {
super(
label,
children
? expanded
? vscode.TreeItemCollapsibleState.Expanded
: vscode.TreeItemCollapsibleState.Collapsed
: vscode.TreeItemCollapsibleState.None
);
this.children = children;
this.description = description;
}
}
export class MyTreeDataProvider implements vscode.TreeDataProvider<RunTreeItem> {
private _onDidChangeTreeData: vscode.EventEmitter<RunTreeItem | undefined | void> = new vscode.EventEmitter();
readonly onDidChangeTreeData: vscode.Event<RunTreeItem | undefined | void> = this._onDidChangeTreeData.event;
export class MyTreeDataProvider
implements vscode.TreeDataProvider<RunTreeItem>
{
private _onDidChangeTreeData: vscode.EventEmitter<
RunTreeItem | undefined | void
> = new vscode.EventEmitter();
readonly onDidChangeTreeData: vscode.Event<RunTreeItem | undefined | void> =
this._onDidChangeTreeData.event;
testResults: TestResult[] = [];
testSummary: undefined | { elapsed: number, valid: boolean };
blunders: [number, TestResult[]][] = [];
testSummary: undefined | { elapsed: number; valid: boolean };
blunders: [number, string | TestResult[]][] = [];
refresh(): void {
this._onDidChangeTreeData.fire();
@@ -33,20 +50,61 @@ export class MyTreeDataProvider implements vscode.TreeDataProvider<RunTreeItem>
const items: RunTreeItem[] = [];
if (this.testSummary) {
items.push(new RunTreeItem(`Speedrun Summary`, undefined, [
new RunTreeItem("Time Elapsed", format(this.testSummary.elapsed)),
new RunTreeItem("Test Passed", this.testSummary.valid ? '✅ Passed' : '❌ Failed'),
], true));
items.push(
new RunTreeItem(
`Speedrun Summary`,
undefined,
[
new RunTreeItem("Time Elapsed", format(this.testSummary.elapsed)),
new RunTreeItem(
"Test Passed",
this.testSummary.valid ? "✅ Passed" : "❌ Failed"
),
new RunTreeItem("Blunders", `${this.blunders.length}`),
],
true
)
);
}
// TODO: blunders
if (this.blunders.length > 0) {
items.push(
new RunTreeItem(
`Blunders`,
undefined,
this.blunders.map((blunder, i) =>
typeof blunder[1] === "string"
? new RunTreeItem(blunder[1], format(blunder[0]))
: new RunTreeItem(
`Output Blunder ${i + 1}`,
format(blunder[0]),
blunder[1].map(
(t) =>
new RunTreeItem(
`(${JSON.stringify(t.input)})`,
undefined,
[
new RunTreeItem("Output", `${t.result}`),
new RunTreeItem("Expected Output", `${t.expected}`),
]
)
)
)
)
)
);
}
this.testResults.forEach(t => {
const item = new RunTreeItem(`(${JSON.stringify(t.input)})`, undefined, [
new RunTreeItem('Output', `${t.result}`),
new RunTreeItem('Expected Output', `${t.expected}`),
]);
item.description = t.valid ? '✅ Passed' : '❌ Failed';
this.testResults.forEach((t) => {
const item = new RunTreeItem(
`(${JSON.stringify(t.input)})`,
undefined,
[
new RunTreeItem("Output", `${t.result}`),
new RunTreeItem("Expected Output", `${t.expected}`),
]
);
item.description = t.valid ? "✅ Passed" : "❌ Failed";
items.push(item);
});