447a1170ce
Task 2 of the native-surfaces migration plan. GitBaselineAdapter resolves a
document's HEAD blob via the built-in vscode.git extension (hardened with a
.git/logs/HEAD watch that nudges repo.status(), since the git extension's own
watcher doesn't reliably notice out-of-band commits on non-workspace-folder
repos in the E2E host). DiffViewController is reworked into a baseline router:
head mode (git-tracked, never persisted, re-read on commit) vs snapshot mode
(captured on CoeditingRegistry entry, re-pinned by "Mark Changes as Reviewed"
— renamed from cowriting.pinDiffBaseline, D14). The shipped machine-landing
baseline advance (#48/INV-18) is retired: a landed Claude edit now stays a
visible change-since-baseline until commit or review (INV-7/D21). Legacy
on-disk reasons ("opened"/"machine-landing") migrate to "entered" via
BaselineStore.normalizeReason on load.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
/**
|
|
* Shared host-E2E helpers (native-surfaces migration, Task 2). NEW suites use
|
|
* these; existing suites keep their own local copies (out of scope to
|
|
* refactor them onto this shared file — see the Task 2 brief).
|
|
*/
|
|
import * as assert from "node:assert";
|
|
import * as vscode from "vscode";
|
|
import type { CowritingApi } from "../../../src/extension";
|
|
|
|
/** Activate the extension and return its exported API (asserts it is real). */
|
|
export async function activateApi(): Promise<CowritingApi> {
|
|
const ext = vscode.extensions.getExtension("benstull.vscode-cowriting-plugin")!;
|
|
const api = (await ext.activate()) as CowritingApi;
|
|
assert.ok(api?.diffViewController, "extension exports diffViewController");
|
|
return api;
|
|
}
|
|
|
|
/** A short fixed settle, for state that updates synchronously-ish after a command. */
|
|
export function settle(): Promise<void> {
|
|
return new Promise((r) => setTimeout(r, 150));
|
|
}
|
|
|
|
/** Poll `predicate` every 100ms until it is true, or fail after `timeoutMs`. */
|
|
export async function settleUntil(predicate: () => boolean, timeoutMs = 5000): Promise<void> {
|
|
const start = Date.now();
|
|
while (!predicate()) {
|
|
if (Date.now() - start > timeoutMs) {
|
|
assert.fail(`settleUntil: predicate did not become true within ${timeoutMs}ms`);
|
|
}
|
|
await new Promise((r) => setTimeout(r, 100));
|
|
}
|
|
}
|