Skip to content

Commit b76c326

Browse files
committed
test: cover lookup and clipboard failures
Agent: ChatGPT Model: GPT-5.6 Sol
1 parent 4c0d9ff commit b76c326

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

tests/web/wenxian-ui.test.mjs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class FakeElement {
99
this.value = "";
1010
this.textContent = "";
1111
this.disabled = false;
12+
this.focused = false;
1213
}
1314

1415
addEventListener(type, callback) {
@@ -18,6 +19,10 @@ class FakeElement {
1819
requestSubmit() {
1920
this.listeners.submit?.({ preventDefault() {} });
2021
}
22+
23+
focus() {
24+
this.focused = true;
25+
}
2126
}
2227

2328
const elements = Object.fromEntries(
@@ -47,6 +52,7 @@ class FakeWorker {
4752
}
4853

4954
postMessage({ id }) {
55+
if (mode === "throw") throw new Error("worker post failed");
5056
queueMicrotask(() => {
5157
this.onmessage?.({
5258
data: {
@@ -68,6 +74,7 @@ class FakeWorker {
6874
}
6975

7076
const copied = [];
77+
let clipboardFails = false;
7178
globalThis.window = globalThis;
7279
globalThis.Worker = FakeWorker;
7380
globalThis.document = {
@@ -80,6 +87,7 @@ Object.defineProperty(globalThis, "navigator", {
8087
value: {
8188
clipboard: {
8289
writeText(value) {
90+
if (clipboardFails) throw new Error("clipboard denied");
8391
copied.push(value);
8492
},
8593
},
@@ -90,6 +98,15 @@ await import("../../docs/wenxian.js");
9098

9199
const flush = () => new Promise((resolve) => setImmediate(resolve));
92100

101+
test("blank lookup prompts for an identifier", () => {
102+
elements.identifier.value = " ";
103+
elements.identifier.focused = false;
104+
elements["lookup-form"].requestSubmit();
105+
106+
assert.match(elements.message.textContent, /Enter a DOI/);
107+
assert.equal(elements.identifier.focused, true);
108+
});
109+
93110
test("successful lookup shows progress and BibTeX", async () => {
94111
mode = "success";
95112
elements.identifier.value = " 10.1063/5.0155600 ";
@@ -132,13 +149,33 @@ test("worker errors are surfaced instead of hanging", async () => {
132149
assert.equal(elements.submit.disabled, false);
133150
});
134151

152+
test("unexpected worker failures are surfaced", async () => {
153+
mode = "throw";
154+
elements.identifier.value = "2304.09409";
155+
elements["lookup-form"].requestSubmit();
156+
await flush();
157+
158+
assert.equal(elements.message.textContent, "worker post failed");
159+
assert.equal(elements.submit.disabled, false);
160+
});
161+
162+
test("clipboard failures update the copy button", async () => {
163+
clipboardFails = true;
164+
elements.copy_button.textContent = "Copy BibTeX";
165+
await globalThis.copy_bibtex();
166+
clipboardFails = false;
167+
168+
assert.equal(elements.copy_button.textContent, "Copy failed");
169+
});
170+
135171
test("examples and copy action remain functional", async () => {
136172
mode = "success";
137173
globalThis.run_example("2304.09409");
138174
await flush();
139175
assert.equal(elements.identifier.value, "2304.09409");
140176

141177
elements.bibtex.textContent = "@Article{copied}";
178+
elements.copy_button.textContent = "Copy BibTeX";
142179
await globalThis.copy_bibtex();
143180
assert.equal(copied.at(-1), "@Article{copied}");
144181
assert.equal(elements.copy_button.textContent, "Copied!");

0 commit comments

Comments
 (0)