96 lines
4.5 KiB
TypeScript
96 lines
4.5 KiB
TypeScript
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
|
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
|
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
|
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
|
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
|
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
|
// ┃ This file is part of the Perspective library, distributed under the terms ┃
|
|
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
|
|
import { test, expect } from "../helpers.ts";
|
|
|
|
test.describe("View Lifecycle", () => {
|
|
test("conflation > silences view-not-found during rapid restore", async ({
|
|
page,
|
|
}) => {
|
|
await page.goto(
|
|
"/rust/perspective-viewer/test/html/superstore_lazy_viewer.html",
|
|
);
|
|
|
|
await page.evaluate(async () => {
|
|
while (!window["__TEST_PERSPECTIVE_READY__"]) {
|
|
await new Promise((x) => setTimeout(x, 10));
|
|
}
|
|
});
|
|
|
|
let vnf = false;
|
|
page.on("console", (msg) => {
|
|
if (msg.type() === "error") {
|
|
if (msg.text().includes("View not found")) {
|
|
vnf = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
await page.evaluate(async () => {
|
|
const worker = window.__TEST_WORKER__;
|
|
let resolve;
|
|
let is_paused = false;
|
|
const BasePlugin = customElements.get("perspective-viewer-plugin");
|
|
class PausePlugin extends BasePlugin {
|
|
get_static_config() {
|
|
return {
|
|
name: "pause-plugin",
|
|
select_mode: "select",
|
|
config_column_names: [],
|
|
};
|
|
}
|
|
|
|
async draw(view) {
|
|
if (is_paused) {
|
|
await new Promise((x) => {
|
|
resolve = x;
|
|
});
|
|
}
|
|
|
|
const size = await view.num_rows();
|
|
this.textContent = `Rows: ${size}`;
|
|
}
|
|
}
|
|
|
|
customElements.define("pause-plugin", PausePlugin);
|
|
const Viewer = customElements.get("perspective-viewer");
|
|
Viewer.registerPlugin("pause-plugin");
|
|
|
|
// use a new viewer because only new viewers get loaded with the registered plugin
|
|
const viewer = document.createElement("perspective-viewer");
|
|
document.body.append(viewer);
|
|
worker.table("a,b,c\n1,2,3", { name: "A" });
|
|
|
|
await viewer.load(worker);
|
|
await viewer.restore({ table: "A", plugin: "pause-plugin" });
|
|
is_paused = true;
|
|
|
|
// Change in 4.1.0 - empty restore now does not render
|
|
const restore_task = viewer.restore({
|
|
plugin: "pause-plugin",
|
|
});
|
|
|
|
while (!resolve) {
|
|
await new Promise((x) => setTimeout(x, 0));
|
|
}
|
|
|
|
await new Promise((x) => setTimeout(x, 0));
|
|
resolve();
|
|
resolve = undefined;
|
|
is_paused = false;
|
|
await restore_task;
|
|
});
|
|
|
|
expect(vnf).toBeFalsy();
|
|
});
|
|
});
|