Skip to content

Commit ad8887d

Browse files
authored
fix(vscode): avoid keeping progress when spamming stop server (#1053)
1 parent d2e3e0b commit ad8887d

File tree

6 files changed

+93
-43
lines changed

6 files changed

+93
-43
lines changed

extensions/vscode/src/commands/stop-dev-server.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ export const stopDevServer = async (): Promise<void> => {
8585

8686
const stopDaemonResponse = await daemon.send(stopRequest);
8787
if (stopDaemonResponse.error) {
88-
window.showErrorMessage(stopDaemonResponse.error.message);
88+
if (stopDaemonResponse.error.message !== "Application not found") {
89+
window.showErrorMessage(stopDaemonResponse.error.message);
90+
}
8991
return;
9092
}
9193

extensions/vscode/src/daemon/dart-frog-daemon.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ export class DartFrogDaemon {
233233

234234
const responsePromise = new Promise<DaemonResponse>((resolve) => {
235235
const responseListener = (message: DaemonResponse) => {
236-
if (message.id === request.id && message.result) {
236+
if (message.id === request.id && (message.result || message.error)) {
237237
this.off(DartFrogDaemonEventEmitterTypes.response, responseListener);
238238
resolve(message);
239239
}

extensions/vscode/src/test/suite/commands/stop-dev-server.test.ts

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -305,31 +305,60 @@ suite("stop-dev-server command", () => {
305305
});
306306
});
307307

308-
test("shows error message when error occurs", async () => {
309-
const stopResponse: DaemonResponse = {
310-
id: stopRequest.id,
311-
result: undefined,
312-
error: {
313-
message: "error message",
314-
},
315-
};
316-
daemon.send.withArgs(stopRequest).resolves(stopResponse);
308+
suite("stop error message", () => {
309+
test("is shown when error occurs", async () => {
310+
const stopResponse: DaemonResponse = {
311+
id: stopRequest.id,
312+
result: undefined,
313+
error: {
314+
message: "error message",
315+
},
316+
};
317+
daemon.send.withArgs(stopRequest).resolves(stopResponse);
317318

318-
await command.stopDevServer();
319+
await command.stopDevServer();
319320

320-
const deregistrationListener =
321-
daemon.applicationRegistry.on.getCall(0).args[1];
322-
deregistrationListener(application);
321+
const deregistrationListener =
322+
daemon.applicationRegistry.on.getCall(0).args[1];
323+
deregistrationListener(application);
323324

324-
const progressFunction =
325-
vscodeStub.window.withProgress.getCall(0).args[1];
326-
await progressFunction(progress);
325+
const progressFunction =
326+
vscodeStub.window.withProgress.getCall(0).args[1];
327+
await progressFunction(progress);
327328

328-
sinon.assert.calledWith(
329-
vscodeStub.window.showErrorMessage,
330-
stopResponse.error.message
331-
);
332-
sinon.assert.calledOnce(progress.report);
329+
sinon.assert.calledWith(
330+
vscodeStub.window.showErrorMessage,
331+
stopResponse.error.message
332+
);
333+
sinon.assert.calledOnce(progress.report);
334+
});
335+
336+
test('is not shown when error is "Application not found"', async () => {
337+
const stopResponse: DaemonResponse = {
338+
id: stopRequest.id,
339+
result: undefined,
340+
error: {
341+
message: "Application not found",
342+
},
343+
};
344+
daemon.send.withArgs(stopRequest).resolves(stopResponse);
345+
346+
await command.stopDevServer();
347+
348+
const deregistrationListener =
349+
daemon.applicationRegistry.on.getCall(0).args[1];
350+
deregistrationListener(application);
351+
352+
const progressFunction =
353+
vscodeStub.window.withProgress.getCall(0).args[1];
354+
await progressFunction(progress);
355+
356+
sinon.assert.neverCalledWith(
357+
vscodeStub.window.showErrorMessage,
358+
stopResponse.error.message
359+
);
360+
sinon.assert.calledOnce(progress.report);
361+
});
333362
});
334363

335364
test("takes at least 250ms before resolving", async () => {

extensions/vscode/src/test/suite/daemon/dart-frog-daemon.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,29 @@ suite("DartFrogDaemon", () => {
411411

412412
assert.deepEqual(actualResponse, expectedResponse);
413413
});
414+
415+
test("resolves correct response upon error", async () => {
416+
const request = new RequestVersionDaemonRequest("1");
417+
418+
const responsePromise = daemon.send(request);
419+
420+
const anotherResponse = `[{"id":"2","result":{"version":"0.0.1"}}]`;
421+
stdout.emit("data", anotherResponse);
422+
423+
const response = `[{"id":"1","error":{"version":"0.0.1"}}]`;
424+
stdout.emit("data", response);
425+
426+
const actualResponse = await responsePromise;
427+
428+
const expectedResponse = {
429+
id: "1",
430+
error: {
431+
version: "0.0.1",
432+
},
433+
};
434+
435+
assert.deepEqual(actualResponse, expectedResponse);
436+
});
414437
});
415438
});
416439
});

extensions/vscode/src/test/suite/utils/cli-version.test.ts

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,28 +27,28 @@ suite("readDartFrogCLIVersion", () => {
2727
"returns the version of Dart Frog CLI installed in the user's system",
2828
() => {
2929
test("when on latest version", () => {
30-
const dartFrogVersionCommandResult = "0.3.7\n";
30+
const dartFrogVersionCommandResult = "1.1.1\n";
3131
const encodedDartFrogVersionCommandResult = new TextEncoder().encode(
3232
dartFrogVersionCommandResult
3333
);
3434
cpStub.execSync.returns(encodedDartFrogVersionCommandResult);
3535

36-
assert.strictEqual(cliVersion.readDartFrogCLIVersion(), "0.3.7");
36+
assert.strictEqual(cliVersion.readDartFrogCLIVersion(), "1.1.1");
3737
});
3838

3939
test("when new version is available", () => {
40-
const dartFrogVersionCommandResult = `0.3.7
40+
const dartFrogVersionCommandResult = `1.1.1
4141
42-
Update available! 0.3.70.3.9
43-
Changelog: \u001b]8;;https://github.com/verygoodopensource/dart_frog/releases/tag/dart_frog_cli-v0.3.9\u001b\\https://github.com/verygoodopensource/dart_frog/releases/tag/dart_frog_cli-v0.3.9\u001b]8;;\u001b\\
42+
Update available! 1.1.11.1.2
43+
Changelog: \u001b]8;;https://github.com/verygoodopensource/dart_frog/releases/tag/dart_frog_cli-v1.1.2\u001b\\https://github.com/verygoodopensource/dart_frog/releases/tag/dart_frog_cli-v1.1.2\u001b]8;;\u001b\\
4444
Run dart_frog update to update
4545
`;
4646
const encodedDartFrogVersionCommandResult = new TextEncoder().encode(
4747
dartFrogVersionCommandResult
4848
);
4949
cpStub.execSync.returns(encodedDartFrogVersionCommandResult);
5050

51-
assert.strictEqual(cliVersion.readDartFrogCLIVersion(), "0.3.7");
51+
assert.strictEqual(cliVersion.readDartFrogCLIVersion(), "1.1.1");
5252
});
5353
}
5454
);
@@ -81,28 +81,28 @@ suite("readLatestDartFrogCLIVersion", () => {
8181

8282
suite("returns the latest version of Dart Frog CLI", () => {
8383
test("when on latest version", () => {
84-
const dartFrogVersionCommandResult = "0.3.9\n";
84+
const dartFrogVersionCommandResult = "1.1.2\n";
8585
const encodedDartFrogVersionCommandResult = new TextEncoder().encode(
8686
dartFrogVersionCommandResult
8787
);
8888
cpStub.execSync.returns(encodedDartFrogVersionCommandResult);
8989

90-
assert.strictEqual(cliVersion.readLatestDartFrogCLIVersion(), "0.3.9");
90+
assert.strictEqual(cliVersion.readLatestDartFrogCLIVersion(), "1.1.2");
9191
});
9292

9393
test("when new version is available", () => {
94-
const dartFrogVersionCommandResult = `0.3.7
94+
const dartFrogVersionCommandResult = `1.1.1
9595
96-
Update available! 0.3.70.3.9
97-
Changelog: \u001b]8;;https://github.com/verygoodopensource/dart_frog/releases/tag/dart_frog_cli-v0.3.9\u001b\\https://github.com/verygoodopensource/dart_frog/releases/tag/dart_frog_cli-v0.3.9\u001b]8;;\u001b\\
96+
Update available! 1.1.11.1.2
97+
Changelog: \u001b]8;;https://github.com/verygoodopensource/dart_frog/releases/tag/dart_frog_cli-v1.1.2\u001b\\https://github.com/verygoodopensource/dart_frog/releases/tag/dart_frog_cli-v1.1.2\u001b]8;;\u001b\\
9898
Run dart_frog update to update
9999
`;
100100
const encodedDartFrogVersionCommandResult = new TextEncoder().encode(
101101
dartFrogVersionCommandResult
102102
);
103103
cpStub.execSync.returns(encodedDartFrogVersionCommandResult);
104104

105-
assert.strictEqual(cliVersion.readLatestDartFrogCLIVersion(), "0.3.9");
105+
assert.strictEqual(cliVersion.readLatestDartFrogCLIVersion(), "1.1.2");
106106
});
107107
});
108108

@@ -122,15 +122,11 @@ suite("isCompatibleDartFrogCLIVersion", () => {
122122

123123
test("returns true if the version of Dart Frog CLI installed in the user's system is compatible with this extension", () => {
124124
assert.strictEqual(
125-
cliVersion.isCompatibleDartFrogCLIVersion("0.3.8"),
125+
cliVersion.isCompatibleDartFrogCLIVersion("1.1.1"),
126126
true
127127
);
128128
assert.strictEqual(
129-
cliVersion.isCompatibleDartFrogCLIVersion("0.3.7"),
130-
true
131-
);
132-
assert.strictEqual(
133-
cliVersion.isCompatibleDartFrogCLIVersion("1.0.0"),
129+
cliVersion.isCompatibleDartFrogCLIVersion("1.1.2"),
134130
true
135131
);
136132
});
@@ -141,7 +137,7 @@ suite("isCompatibleDartFrogCLIVersion", () => {
141137
false
142138
);
143139
assert.strictEqual(
144-
cliVersion.isCompatibleDartFrogCLIVersion("0.3.6"),
140+
cliVersion.isCompatibleDartFrogCLIVersion("0.3.8"),
145141
false
146142
);
147143
});

extensions/vscode/src/utils/cli-version.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const semver = require("semver");
66
* The semantic version constraints for Dart Frog CLI to be compatible with this
77
* extension.
88
*/
9-
const compatibleCLIVersion = ">=0.3.7 <2.0.0";
9+
const compatibleCLIVersion = ">=1.1.1 <2.0.0";
1010

1111
/**
1212
* Collects the version of Dart Frog CLI installed in the user's system.

0 commit comments

Comments
 (0)