test/gopls/vulncheck: add logging for viewer test failure
And specify the minimum node.js version requirement in
package.json (require 12.0.0+ - released in 2019).
Example logs:
vulncheck result viewer tests
populates-webview: 66.316ms opened document
populates-webview: 68.426ms resolved custom text editor
populates-webview: 68.649ms posted snapshot-request
populates-webview: 371.995ms received message
populates-webview: 372.285ms
For golang/vscode-go#2360
Change-Id: I9a9ed244221cfd7d352969ab1953aff5d7eacf13
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/419108
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Suzy Mueller <suzmue@golang.org>
Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/package.json b/package.json
index 9ed315b..1798d02 100644
--- a/package.json
+++ b/package.json
@@ -86,7 +86,8 @@
"yarn": "1.22.10"
},
"engines": {
- "vscode": "^1.67.0"
+ "vscode": "^1.67.0",
+ "node": ">=12.0.0"
},
"activationEvents": [
"onLanguage:go",
diff --git a/test/gopls/vulncheck.test.ts b/test/gopls/vulncheck.test.ts
index 70a622f..2706b66 100644
--- a/test/gopls/vulncheck.test.ts
+++ b/test/gopls/vulncheck.test.ts
@@ -29,44 +29,60 @@
vscode.Disposable.from(...disposables).dispose();
});
- test('populates webview', async function () {
- this.timeout(5000);
- const webviewPanel = _register(
- vscode.window.createWebviewPanel(webviewId, 'title', { viewColumn: vscode.ViewColumn.One }, {})
- );
- const source = path.join(fixtureDir, 'test.vulncheck.json');
- const doc = await vscode.workspace.openTextDocument(source);
- const canceller = new vscode.CancellationTokenSource();
- _register(canceller);
+ test('populates webview', async () => {
+ const doTest = async (tag: string) => {
+ const webviewPanel = _register(
+ vscode.window.createWebviewPanel(webviewId, 'title', { viewColumn: vscode.ViewColumn.One }, {})
+ );
+ const source = path.join(fixtureDir, 'test.vulncheck.json');
+ const doc = await vscode.workspace.openTextDocument(source);
+ console.timeLog(tag, 'opened document');
+ const canceller = new vscode.CancellationTokenSource();
+ _register(canceller);
- const watcher = getMessage<{ type: string; target?: string }>(webviewPanel);
+ const watcher = getMessage<{ type: string; target?: string }>(webviewPanel);
- await provider.resolveCustomTextEditor(doc, webviewPanel, canceller.token);
- webviewPanel.reveal();
+ await provider.resolveCustomTextEditor(doc, webviewPanel, canceller.token);
+ console.timeLog(tag, 'resolved custom text editor');
- // Trigger snapshotContent that sends `snapshot-result` as a result.
- webviewPanel.webview.postMessage({ type: 'snapshot-request' });
- const res = await watcher;
+ webviewPanel.reveal();
- assert.deepStrictEqual(res.type, 'snapshot-result', `want snapshot-result, got ${JSON.stringify(res)}`);
- // res.target type is defined in vulncheckView.js.
- const { log = '', vulns = '', unaffecting = '' } = JSON.parse(res.target ?? '{}');
+ // Trigger snapshotContent that sends `snapshot-result` as a result.
+ webviewPanel.webview.postMessage({ type: 'snapshot-request' });
+ console.timeLog(tag, 'posted snapshot-request');
- assert(
- log.includes('Found 1 known vulnerabilities'),
- `expected "1 known vulnerabilities", got ${JSON.stringify(res.target)}`
- );
- assert(
- vulns.includes('GO-2021-0113') &&
- vulns.includes('<td>Affecting</td><td>github.com/golang/vscode-go/test/testdata/vuln</td>'),
- `expected "Affecting" section, got ${JSON.stringify(res.target)}`
- );
- // Unaffecting vulnerability's detail is omitted, but its ID is reported.
- assert(
- unaffecting.includes('GO-2021-0000') && unaffecting.includes('golang.org/x/text'),
- `expected reports about unaffecting vulns, got ${JSON.stringify(res.target)}`
- );
- });
+ const res = await watcher;
+ console.timeLog(tag, 'received message');
+
+ assert.deepStrictEqual(res.type, 'snapshot-result', `want snapshot-result, got ${JSON.stringify(res)}`);
+ // res.target type is defined in vulncheckView.js.
+ const { log = '', vulns = '', unaffecting = '' } = JSON.parse(res.target ?? '{}');
+
+ assert(
+ log.includes('Found 1 known vulnerabilities'),
+ `expected "1 known vulnerabilities", got ${JSON.stringify(res.target)}`
+ );
+ assert(
+ vulns.includes('GO-2021-0113') &&
+ vulns.includes('<td>Affecting</td><td>github.com/golang/vscode-go/test/testdata/vuln</td>'),
+ `expected "Affecting" section, got ${JSON.stringify(res.target)}`
+ );
+ // Unaffecting vulnerability's detail is omitted, but its ID is reported.
+ assert(
+ unaffecting.includes('GO-2021-0000') && unaffecting.includes('golang.org/x/text'),
+ `expected reports about unaffecting vulns, got ${JSON.stringify(res.target)}`
+ );
+ };
+ try {
+ console.time('populates-webview');
+ await doTest('populates-webview');
+ } catch (e) {
+ console.timeLog('populates-webview', `error thrown: ${e}`);
+ throw e;
+ } finally {
+ console.timeEnd('populates-webview');
+ }
+ }).timeout(5_000);
test('handles empty input', async () => {
const webviewPanel = _register(