提交 8151b1fc 编写于 作者: M Matt Bierner

Add test for webview state persist

上级 565f971f
......@@ -6,10 +6,13 @@
import 'mocha';
import * as assert from 'assert';
import * as vscode from 'vscode';
import { join } from 'path';
import { closeAllEditors } from '../utils';
const webviewId = 'myWebview';
suite('Webview tests', () => {
teardown(closeAllEditors);
test('webview communication', async () => {
const webview = vscode.window.createWebviewPanel(webviewId, 'title', { viewColumn: vscode.ViewColumn.One }, { enableScripts: true });
......@@ -31,6 +34,49 @@ suite('Webview tests', () => {
const response = await p;
assert.strictEqual(response.value, 2);
});
test('webview preserves state when switching visibility', async () => {
const webview = vscode.window.createWebviewPanel(webviewId, 'title', { viewColumn: vscode.ViewColumn.One }, { enableScripts: true });
webview.webview.html = createHtmlDocumentWithBody(/*html*/`
<script>
const vscode = acquireVsCodeApi();
let value = (vscode.getState() || {}).value || 0;
window.addEventListener('message', (message) => {
switch (message.data.type) {
case 'get':
vscode.postMessage({ value });
break;
case 'add':
++value;;
vscode.setState({ value })
vscode.postMessage({ value });
break;
}
});
</script>`);
{
const p = messageAwaiter(webview, 1);
webview.webview.postMessage({ type: 'add' });
const [response] = await p;
assert.strictEqual(response.value, 1);
}
// Swap away from the webview
const doc = await vscode.workspace.openTextDocument(join(vscode.workspace.rootPath || '', './simple.txt'));
await vscode.window.showTextDocument(doc);
// And then back
webview.reveal(vscode.ViewColumn.One);
{
const p = messageAwaiter(webview, 1);
webview.webview.postMessage({ type: 'get' });
const [response] = await p;
assert.strictEqual(response.value, 1);
}
});
});
function createHtmlDocumentWithBody(body: string): string {
......@@ -48,3 +94,15 @@ function createHtmlDocumentWithBody(body: string): string {
</html>`;
}
function messageAwaiter(webview: vscode.WebviewPanel, expected: number): Promise<any[]> {
let received: any[] = [];
return new Promise<any>(resolve => {
webview.webview.onDidReceiveMessage(message => {
received.push(message);
if (received.length >= expected) {
resolve(received);
}
});
});
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册