mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-11-03 06:48:18 +00:00
Own browser UI sessions and shared navigation
This commit is contained in:
1 parent
cfdc698775
commit
273079e827
28 files changed
+1948
-121
No files matched your search
@@ -86,3 +86,64 @@ describe("SvelteDialogSession", () => {
|
||||
expect(close).toHaveBeenCalledOnce();
|
||||
});
|
||||
});
|
||||
|
||||
describe("SvelteDialogSession owner signal", () => {
|
||||
it("rejects and releases the mounted dialogue when its owner aborts", async () => {
|
||||
const context = createServiceContext();
|
||||
const controller = new AbortController();
|
||||
const lifecycle = { signal: controller.signal };
|
||||
const unmount = vi.fn().mockResolvedValue(undefined);
|
||||
let session: SvelteDialogSession<string, string, typeof context>;
|
||||
const close = vi.fn(() => session.onClose());
|
||||
session = new SvelteDialogSession({
|
||||
...lifecycle,
|
||||
surface: {
|
||||
contentEl: { replaceChildren: vi.fn() } as unknown as HTMLElement,
|
||||
close,
|
||||
setTitle: vi.fn(),
|
||||
},
|
||||
context,
|
||||
dependencies: {} as SvelteDialogManagerDependencies<typeof context>,
|
||||
dialogHost: (() => {}) as unknown as Component<DialogHostProps>,
|
||||
component: (() => {}) as unknown as ComponentHasResult<string, string>,
|
||||
renderer: { mount: () => ({}) as never, unmount },
|
||||
});
|
||||
session.onOpen();
|
||||
let observed: unknown = "pending";
|
||||
void session.waitForClose().catch((error) => {
|
||||
observed = error;
|
||||
});
|
||||
const reason = new Error("fixture owner ended");
|
||||
controller.abort(reason);
|
||||
await vi.waitFor(() => expect(observed).toBe(reason), { timeout: 1000, interval: 20 });
|
||||
expect(close).toHaveBeenCalledOnce();
|
||||
expect(unmount).toHaveBeenCalledOnce();
|
||||
context.events.emitEvent(EVENT_PLUGIN_UNLOADED);
|
||||
expect(close).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it("detaches an owner signal when normal close has already settled the result", async () => {
|
||||
const context = createServiceContext();
|
||||
const controller = new AbortController();
|
||||
const remove = vi.spyOn(controller.signal, "removeEventListener");
|
||||
const lifecycle = { signal: controller.signal };
|
||||
const close = vi.fn();
|
||||
const session = new SvelteDialogSession({
|
||||
...lifecycle,
|
||||
surface: { contentEl: { replaceChildren: vi.fn() } as unknown as HTMLElement, close, setTitle: vi.fn() },
|
||||
context,
|
||||
dependencies: {} as SvelteDialogManagerDependencies<typeof context>,
|
||||
dialogHost: (() => {}) as unknown as Component<DialogHostProps>,
|
||||
component: (() => {}) as unknown as ComponentHasResult<string, string>,
|
||||
renderer: { mount: () => ({}) as never, unmount: vi.fn().mockResolvedValue(undefined) },
|
||||
});
|
||||
session.onOpen();
|
||||
const result = session.waitForClose();
|
||||
session.onClose();
|
||||
await expect(result).resolves.toBeUndefined();
|
||||
expect(remove).toHaveBeenCalledWith("abort", expect.any(Function));
|
||||
controller.abort();
|
||||
context.events.emitEvent(EVENT_PLUGIN_UNLOADED);
|
||||
expect(close).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user