From 706ceb0a5c1decfbc10ea6e31e657407b34b9a89 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Wed, 28 Apr 2021 05:55:46 -0400 Subject: [PATCH] Upgrayedd puppeteer --- azure-pipelines.yml | 27 +- docker/puppeteer/Dockerfile | 12 +- .../test/results/linux.docker.json | 8 +- .../perspective-test/src/js/globalSetup.js | 14 +- packages/perspective-test/src/js/index.js | 14 +- .../src/js/plugin/plugin.js | 1 + .../src/js/tooltip/tooltip.js | 8 +- .../test/html/shares-template.html | 2 +- .../test/js/integration/candlestick.spec.js | 4 +- .../test/js/integration/ohlc.spec.js | 4 +- .../test/js/integration/sunburst.spec.js | 4 +- .../test/results/linux.docker.json | 340 +++++++++--------- .../test/results/linux.docker.json | 36 +- packages/perspective-viewer/src/js/utils.js | 96 +++-- packages/perspective-viewer/src/js/viewer.js | 6 +- .../src/js/viewer/perspective_element.js | 37 +- .../test/js/computed_expressions.spec.js | 5 +- .../test/js/filters.spec.js | 18 +- .../perspective-viewer/test/js/leaks.spec.js | 2 +- .../test/js/simple_tests.js | 6 +- .../test/results/linux.docker.json | 172 ++++----- .../perspective-workspace/src/js/index.js | 22 +- .../test/js/integration/dom.spec.js | 12 +- .../test/js/integration/restore.spec.js | 10 +- .../test/results/linux.docker.json | 32 +- packages/perspective/test/js/pivots.js | 8 +- 26 files changed, 502 insertions(+), 398 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 11483ee59e..b566c0448c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -62,11 +62,36 @@ jobs: PSP_DOCKER: 1 - task: PublishTestResults@2 - condition: succeededOrFailed() + condition: succeeded() inputs: testRunner: JUnit testResultsFiles: 'junit.xml' + - task: PublishPipelineArtifact@1 + condition: failed() + inputs: + targetPath: '$(System.DefaultWorkingDirectory)/packages/perspective-viewer/screenshots/' + artifactName: "perspective-viewer" + + - task: PublishPipelineArtifact@1 + condition: failed() + inputs: + targetPath: '$(System.DefaultWorkingDirectory)/packages/perspective-viewer-datagrid/screenshots/' + artifactName: "perspective-viewer-datagrid" + + - task: PublishPipelineArtifact@1 + condition: failed() + inputs: + targetPath: '$(System.DefaultWorkingDirectory)/packages/perspective-viewer-d3fc/screenshots/' + artifactName: "perspective-viewer-d3fc" + + - task: PublishPipelineArtifact@1 + condition: failed() + inputs: + targetPath: '$(System.DefaultWorkingDirectory)/packages/perspective-workspace/screenshots/' + artifactName: "perspective-workspace" + + - job: 'Linux' pool: vmImage: 'ubuntu-16.04' diff --git a/docker/puppeteer/Dockerfile b/docker/puppeteer/Dockerfile index 0c08380c48..1b2b3b414b 100644 --- a/docker/puppeteer/Dockerfile +++ b/docker/puppeteer/Dockerfile @@ -1,6 +1,6 @@ # Liberally copied from zenato/puppeteer -FROM node:8 +FROM node:14 RUN apt-get update && apt-get install -y wget --no-install-recommends \ && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ @@ -12,21 +12,13 @@ RUN apt-get update && apt-get install -y wget --no-install-recommends \ && apt-get purge --auto-remove -y curl \ && rm -rf /src/*.deb -RUN yarn add puppeteer@1.14.0 +RUN yarn add puppeteer@9.0.0 RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \ && mkdir -p /home/pptruser/Downloads \ && chown -R pptruser:pptruser /home/pptruser \ && chown -R pptruser:pptruser /node_modules - -RUN git clone https://github.com/stefanhaustein/TerminalImageViewer.git \ - && cd TerminalImageViewer/src/main/cpp \ - && make \ - && make install \ - && cd ../../.. \ - && rm -rf TerminalImageViewer - USER pptruser CMD ["google-chrome-stable"] \ No newline at end of file diff --git a/packages/perspective-jupyterlab/test/results/linux.docker.json b/packages/perspective-jupyterlab/test/results/linux.docker.json index 3e9570ae3f..eff4462d5b 100644 --- a/packages/perspective-jupyterlab/test/results/linux.docker.json +++ b/packages/perspective-jupyterlab/test/results/linux.docker.json @@ -1,6 +1,6 @@ { - "resize_Basic_widget_functions": "30f89fb74a40a6abfe02887d62be8282", - "resize_Resize_the_container_causes_the_widget_to_resize": "30f89fb74a40a6abfe02887d62be8282", - "resize_row_pivots_traitlet_works": "03e9bd6f294b959000490af0908536f2", - "__GIT_COMMIT__": "d6344be7a126e4b2bfa05dbb8c4d5f5feca2b8c5" + "resize_Basic_widget_functions": "bb2bf2ecff35fb62ef2e4e1b832467d6", + "resize_Resize_the_container_causes_the_widget_to_resize": "bb2bf2ecff35fb62ef2e4e1b832467d6", + "resize_row_pivots_traitlet_works": "65892ed4574fe02005e2c8fcf3b67718", + "__GIT_COMMIT__": "686bb7147e58992e5d06056778b20d07605a8042" } \ No newline at end of file diff --git a/packages/perspective-test/src/js/globalSetup.js b/packages/perspective-test/src/js/globalSetup.js index 5145ac8ebc..abcc36a81b 100644 --- a/packages/perspective-test/src/js/globalSetup.js +++ b/packages/perspective-test/src/js/globalSetup.js @@ -1,11 +1,23 @@ const puppeteer = require("puppeteer"); module.exports = async function() { - let args = ["--disable-accelerated-2d-canvas", "--disable-gpu", "--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage", '--proxy-server="direct://"', "--proxy-bypass-list=*"]; + let args = [ + `--window-size=1280,1024`, + "--disable-accelerated-2d-canvas", + "--disable-gpu", + "--no-sandbox", + "--disable-setuid-sandbox", + "--disable-dev-shm-usage", + '--proxy-server="direct://"', + "--proxy-bypass-list=*" + ]; global.__BROWSER__ = await puppeteer.launch({ headless: !process.env.PSP_PAUSE_ON_FAILURE, devtools: !!process.env.PSP_PAUSE_ON_FAILURE, + + // https://github.com/puppeteer/puppeteer/issues/1183 + defaultViewport: null, args }); process.env.PSP_BROWSER_ENDPOINT = global.__BROWSER__.wsEndpoint(); diff --git a/packages/perspective-test/src/js/index.js b/packages/perspective-test/src/js/index.js index ba47a1b99e..94e307c32f 100644 --- a/packages/perspective-test/src/js/index.js +++ b/packages/perspective-test/src/js/index.js @@ -142,12 +142,24 @@ async function get_new_page() { elem.innerText = content; triggerInputEvent(elem); } + + document.activeElement.blur(); }, content, path ); }; + page.shadow_blur = async function() { + await this.evaluate(() => { + let elem = document.activeElement; + while (elem) { + elem.blur(); + elem = elem.shadowRoot?.activeElement; + } + }); + }; + page.shadow_focus = async function(...path) { await this.evaluate(path => { let elem = document; @@ -387,7 +399,7 @@ test.capture = function capture(name, body, {timeout = 60000, viewport = null, w }); } - const screenshot = await page.screenshot(); + const screenshot = await page.screenshot({captureBeyondViewport: false, fullPage: true}); // await page.close(); const hash = crypto .createHash("md5") diff --git a/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js b/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js index 9a5ae6d1ec..d9cb93d93b 100644 --- a/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js +++ b/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js @@ -88,6 +88,7 @@ function drawChart(chart) { }; createOrUpdateChart.call(this, el, chart, settings); + await new Promise(setTimeout); }; } diff --git a/packages/perspective-viewer-d3fc/src/js/tooltip/tooltip.js b/packages/perspective-viewer-d3fc/src/js/tooltip/tooltip.js index fd7f94a36b..cbe0df3364 100644 --- a/packages/perspective-viewer-d3fc/src/js/tooltip/tooltip.js +++ b/packages/perspective-viewer-d3fc/src/js/tooltip/tooltip.js @@ -99,8 +99,8 @@ function showTooltip(containerNode, node, tooltipDiv, centered) { tooltipDiv .style("left", `${left}px`) .style("top", `${top}px`) - .transition() - .duration(200) + // .transition() + // .duration(200) .style("opacity", 0.9); if (centered) [left, top] = centerTip(tooltipDiv, containerRect); @@ -150,8 +150,8 @@ function shiftIfOverflowingChartArea(tooltipDiv, containerRect, left, top, cente function hideTooltip(tooltipDiv) { if (tooltipDiv) { tooltipDiv - .transition() - .duration(500) + // .transition() + // .duration(500) .style("opacity", 0); } } diff --git a/packages/perspective-viewer-d3fc/test/html/shares-template.html b/packages/perspective-viewer-d3fc/test/html/shares-template.html index 2c368e126d..e8612674db 100644 --- a/packages/perspective-viewer-d3fc/test/html/shares-template.html +++ b/packages/perspective-viewer-d3fc/test/html/shares-template.html @@ -23,7 +23,7 @@ + aggregates='{"Date":"distinct count","Change %":"sum","High":"sum","Low":"sum","Open":"sum","Close":"sum","Vol.":"sum"}'> diff --git a/packages/perspective-viewer-d3fc/test/js/integration/candlestick.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/candlestick.spec.js index 56bc347fab..8ad3b081bd 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/candlestick.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/candlestick.spec.js @@ -22,7 +22,7 @@ utils.with_server({}, () => { const viewer = await page.$("perspective-viewer"); await page.evaluate(element => element.setAttribute("filters", '[["Name", "==", "BARC"]]'), viewer); await page.evaluate(async element => await element.flush(), viewer); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("filter to date range.", async page => { @@ -31,7 +31,7 @@ utils.with_server({}, () => { await page.evaluate(element => element.setAttribute("column-pivots", '["Name"]'), viewer); await page.evaluate(element => element.setAttribute("filters", '[["Date", ">", "2019-01-01"]]'), viewer); await page.evaluate(async element => await element.flush(), viewer); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); }, {reload_page: false, root: path.join(__dirname, "..", "..", "..")} diff --git a/packages/perspective-viewer-d3fc/test/js/integration/ohlc.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/ohlc.spec.js index d7ef3a1e40..a2f1cd3bf9 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/ohlc.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/ohlc.spec.js @@ -22,7 +22,7 @@ utils.with_server({}, () => { const viewer = await page.$("perspective-viewer"); await page.evaluate(element => element.setAttribute("filters", '[["Name", "==", "BARC"]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("filter to date range.", async page => { @@ -31,7 +31,7 @@ utils.with_server({}, () => { await page.evaluate(element => element.setAttribute("column-pivots", '["Name"]'), viewer); await page.evaluate(element => element.setAttribute("filters", '[["Date", ">", "2019-01-01"]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); }, {reload_page: false, root: path.join(__dirname, "..", "..", "..")} diff --git a/packages/perspective-viewer-d3fc/test/js/integration/sunburst.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/sunburst.spec.js index 09503042a6..37b0c32740 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/sunburst.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/sunburst.spec.js @@ -28,7 +28,7 @@ utils.with_server({}, () => { await page.evaluate(element => element.setAttribute("columns", '["Sales", "Profit"]'), viewer); await page.evaluate(element => element.setAttribute("filters", '[["Product ID", "==", "FUR-BO-10001798"]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); const result = await page.waitFor( element => { let elem = element.shadowRoot.querySelector("perspective-d3fc-chart").shadowRoot.querySelector(".segment"); @@ -50,7 +50,7 @@ utils.with_server({}, () => { await page.evaluate(element => element.setAttribute("columns", '["Sales", "Profit"]'), viewer); await page.evaluate(element => element.setAttribute("filters", '[["Product ID", "==", "FUR-BO-10001798"]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); await page.mouse.click(500, 400); const result = await page.waitFor( element => { diff --git a/packages/perspective-viewer-d3fc/test/results/linux.docker.json b/packages/perspective-viewer-d3fc/test/results/linux.docker.json index 7080649ed3..1a9a5edb1e 100644 --- a/packages/perspective-viewer-d3fc/test/results/linux.docker.json +++ b/packages/perspective-viewer-d3fc/test/results/linux.docker.json @@ -1,175 +1,175 @@ { "candlestick_filter_by_a_single_instrument_": "bf792ebd903a28489cbc4d2e5d084a00", - "candlestick_filter_to_date_range_": "dd1643b5941ae253f4104a301e7215ff", - "__GIT_COMMIT__": "d6344be7a126e4b2bfa05dbb8c4d5f5feca2b8c5", + "candlestick_filter_to_date_range_": "18bd48f24eabbc3c9ba3abd9eb532efa", + "__GIT_COMMIT__": "686bb7147e58992e5d06056778b20d07605a8042", "ohlc_filter_by_a_single_instrument_": "aa295a7ff82b48f5d7cefb36d02d9daa", - "ohlc_filter_to_date_range_": "e79e029d4ca91c782181e6c418755612", - "scatter_shows_a_grid_without_any_settings_applied_": "dfa14120c515bd1eef7a53276040ff2b", - "scatter_pivots_by_a_row_": "04fc3ecb17077b9bc3329602cbf27e41", - "scatter_pivots_by_two_rows_": "2fe235f2708d8881a6202df91e4a2c68", - "scatter_pivots_by_a_column_": "3224e87062abd01c49cef227c6749722", - "scatter_pivots_by_a_row_and_a_column_": "2cebcd3d9ce1030bb6835baabc371255", - "scatter_pivots_by_two_rows_and_two_columns_": "731780ffbab30a572376bfac524c510b", - "scatter_sorts_by_a_hidden_column_": "e5abc992cb0d11adf646d1c5960e7a5d", - "scatter_sorts_by_a_numeric_column_": "b0bd55f919f49ca8842e509a408d10ad", - "scatter_filters_by_a_numeric_column_": "bbf0559cbc8671df0f89842dacc068cc", - "scatter_filters_by_a_datetime_column_": "81af5246721f3043d328eb0c3393da84", - "scatter_highlights_invalid_filter_": "2a8455e771c6c2f54d04454154f20900", - "scatter_sorts_by_an_alpha_column_": "8aff1b6af6a6dcd7b451e4a7b13bb512", - "scatter_displays_visible_columns_": "ef255d27752da7fddc534f72e3625134", - "yscatter_shows_a_grid_without_any_settings_applied_": "e46e36dba924cc6fe2a83bd6fbac4fe2", - "yscatter_pivots_by_a_row_": "229a47c3fde88f6f696c4c6eda02034d", - "yscatter_pivots_by_two_rows_": "c8d540bddf31ed6800cbcd3c6134d0a5", - "yscatter_pivots_by_a_column_": "35f30b8dc1b457d4445cbb208c7cc574", - "yscatter_pivots_by_a_row_and_a_column_": "4b9b6790cc243da85370fa6dcb18ad31", - "yscatter_pivots_by_two_rows_and_two_columns_": "5ee73c86401084f0f988bed50878572e", - "yscatter_sorts_by_a_hidden_column_": "cf0669838069fc25bb15309d93c15424", - "yscatter_sorts_by_a_numeric_column_": "731121f354ddea74b9d93ace75d82595", - "yscatter_filters_by_a_numeric_column_": "b57b01005a604f1b45f8010d7d35bd45", - "yscatter_filters_by_a_datetime_column_": "2d442c5b1a66b82c086a2757d9fb213c", - "yscatter_highlights_invalid_filter_": "d2433dd86ce2d1cb538ac9d2651f1369", - "yscatter_sorts_by_an_alpha_column_": "915617be1ff7d7221ed702f58531def1", - "yscatter_displays_visible_columns_": "664acd2133d17e80c79acc5a124bd5d2", - "heatmap_shows_a_grid_without_any_settings_applied_": "16db687f11140c4972ea63c6bb6ae0c9", - "heatmap_pivots_by_a_row_": "eba8d125657ae2d583b4d147a8593c8f", - "heatmap_pivots_by_two_rows_": "af5663b73afa4ef11fb0d6edc6f9ef2f", - "heatmap_pivots_by_a_column_": "6ed39ea300e3d547607a608557fb2433", - "heatmap_pivots_by_a_row_and_a_column_": "de23e733cddf8757368d02c4fe27f0ff", - "heatmap_pivots_by_two_rows_and_two_columns_": "4d371596711bb17f56b3e0e1a0086079", - "heatmap_sorts_by_a_hidden_column_": "745da4607aadbcbb3628f28e143ece6c", - "heatmap_sorts_by_a_numeric_column_": "6c63eab842f9c1cca2d0f24e6f468f48", - "heatmap_filters_by_a_numeric_column_": "0ce687d80ddf5ab9343f0015e9933d3b", - "heatmap_filters_by_a_datetime_column_": "38016e809b012616aeff7432261e5e24", - "heatmap_highlights_invalid_filter_": "5ad69d0813277a420da321e153451321", - "heatmap_sorts_by_an_alpha_column_": "8056d4658a85f9ec8864005e3feb3cec", - "heatmap_displays_visible_columns_": "dcee90d9afe1994629a7c08c84a5c7d9", - "bar_shows_a_grid_without_any_settings_applied_": "ed6bcc93ec98cce2047f2b7429fcac9e", - "bar_pivots_by_a_row_": "932c55f676753131f89510b3dd17486b", - "bar_pivots_by_two_rows_": "9a679f6cdbb3766d552e12e719908131", - "bar_pivots_by_a_column_": "a9882832a4ba6cc14c1187a0be1bc27e", - "bar_pivots_by_a_row_and_a_column_": "93095d39c14588f135807e5ec968cf2c", - "bar_pivots_by_two_rows_and_two_columns_": "3462812698b7c979467a9d5001ce23ea", - "bar_sorts_by_a_hidden_column_": "d56f9c43771067e918285979ac93fe00", - "bar_sorts_by_a_numeric_column_": "64c016ec4ac23e53429b01a4a086ab20", - "bar_filters_by_a_numeric_column_": "b0fd1c0e1ebe957bd0dcc9332c3a1495", - "bar_filters_by_a_datetime_column_": "0755f8aed0006cb5290df1ca7451d650", - "bar_highlights_invalid_filter_": "5aaba7a3b8a72d3673589f3d2707d8ae", - "bar_sorts_by_an_alpha_column_": "1b04689fe362437f7f4c2e299bc3f7e1", - "bar_displays_visible_columns_": "e185940de882f971254432033ba6f778", - "bar-x_shows_a_grid_without_any_settings_applied_": "46db9921302c00519f5d7f5ae704b5e6", - "bar-x_pivots_by_a_row_": "606277abfab6118fff82dd1959a097d2", - "bar-x_pivots_by_two_rows_": "742f2515e393e6f769ea0c5ee0df857c", - "bar-x_pivots_by_a_column_": "5ddd6d7a5fda82b7d2d58598ceae66c9", - "bar-x_pivots_by_a_row_and_a_column_": "71d15f833f9363acd184c19d2c4a3c75", - "bar-x_pivots_by_two_rows_and_two_columns_": "ed5cdfe6774a331625fb003cc83e4611", - "bar-x_sorts_by_a_hidden_column_": "3fe4274fe16db8ff86871bee82161188", - "bar-x_sorts_by_a_numeric_column_": "f77dccafce4151989d188e8f72b3eadc", - "bar-x_filters_by_a_numeric_column_": "a590591e15cb7967cad0a2ad6d3d3ffd", - "bar-x_filters_by_a_datetime_column_": "207c91fef1fe1693cf85cd7e8ca3ba88", - "bar-x_highlights_invalid_filter_": "0b899ba8bfbf2ac8c7fba4ef36624976", - "bar-x_sorts_by_an_alpha_column_": "58e53c4bf852a626efc75d5e061b0fed", - "bar-x_displays_visible_columns_": "fb1b539ba748a301de017ff1a1c15152", - "bar-themed_shows_a_grid_without_any_settings_applied_": "218fb24885b56b1626579ba2c089f13f", - "bar-themed_pivots_by_a_row_": "fb9b4fb18a6dceb64057e411cc978671", - "bar-themed_pivots_by_two_rows_": "fd03caaf86a839b76331030978a03ed4", - "bar-themed_pivots_by_a_column_": "40714602f9ddc2eabc8bf7a0a7eca7e7", - "bar-themed_pivots_by_a_row_and_a_column_": "ba0249171e827ebba6b2f735564ccb56", - "bar-themed_pivots_by_two_rows_and_two_columns_": "89db2828d5eb0ca599351fd38cc2de00", - "bar-themed_sorts_by_a_hidden_column_": "860a46b01ced64fb3fc62b0be0e19b09", - "bar-themed_sorts_by_a_numeric_column_": "380dfb82abfedd28efddd236cc159d24", - "bar-themed_filters_by_a_numeric_column_": "228813e480bebcd3d73d2b3314b0c3cd", - "bar-themed_filters_by_a_datetime_column_": "c1a91df1135a9137f94d2cc23006ae01", - "bar-themed_highlights_invalid_filter_": "dd8a4ef6769df2304f362072203a1805", - "bar-themed_sorts_by_an_alpha_column_": "3a377ab2bdb7aab82d10775d8d74bee3", - "bar-themed_displays_visible_columns_": "1a643959af3d3d94ed70b1f1d6db8ec0", - "line_shows_a_grid_without_any_settings_applied_": "7ba65547e340326b91d296af284cb4ab", - "line_pivots_by_a_row_": "b9d146afe48f25e61da4d61afcf0bfcf", - "line_pivots_by_two_rows_": "4d45f2420e9810e4ec5a31dc51ac8cc4", - "line_pivots_by_a_column_": "079b86a1026efebd78cc8ed58e9da28c", - "line_pivots_by_a_row_and_a_column_": "31b1d7ad257a6d2f0a3077a102c09996", - "line_pivots_by_two_rows_and_two_columns_": "556c3d41e806f9d984600a0e1f4c71f7", - "line_sorts_by_a_hidden_column_": "8a49b6ecce2fe4f23e0217439586a226", - "line_sorts_by_a_numeric_column_": "d0eb4f08cbc3b4f661c63e47618b4498", - "line_filters_by_a_numeric_column_": "598db3babe9d0e1e134a4455d0eb9197", - "line_filters_by_a_datetime_column_": "8198ecb2a2fba4a09de786dba8a0e0a2", - "line_highlights_invalid_filter_": "dd1c4866eae67fbeeac75aa64eb3aa10", - "line_sorts_by_an_alpha_column_": "04f16cfae89e816c78f8352f0dff2ba2", - "line_displays_visible_columns_": "fa5effdcc839289b3968cefb14934509", - "area_shows_a_grid_without_any_settings_applied_": "9222bb20a94cff4161d8bb6e8a98b564", - "area_pivots_by_a_row_": "b756788af9ffded8afa4442ea5568cec", - "area_pivots_by_two_rows_": "1ae8c1e55e74d0cf57bbc6b4e663177c", - "area_pivots_by_a_column_": "74c91fb94b458165f5441945a90211f0", - "area_pivots_by_a_row_and_a_column_": "67bb13f086d1f55244a57779f076efff", - "area_pivots_by_two_rows_and_two_columns_": "4497ca7d6a5ba7158c94c60da679a2e6", - "area_sorts_by_a_hidden_column_": "4e1d0f163e24a4e47759963bb9755e69", - "area_sorts_by_a_numeric_column_": "58aa8dbc3fad432ca9361a8aef4d22a6", - "area_filters_by_a_numeric_column_": "8b428ff88d6269a4826a9453a0baf7b5", - "area_filters_by_a_datetime_column_": "f221ad4a400faf2c66cc107f543f38ea", - "area_highlights_invalid_filter_": "0e9a0a73ea59f9846ae8fc21a0975ff4", - "area_sorts_by_an_alpha_column_": "68dad324982b36cef87f840fdc75cb5d", - "area_displays_visible_columns_": "fdde6c486771931d75282d2810ad23d5", - "scatter_tooltips_with_no_color_and_size_": "bcc5b5cb3533f169a069a2fdbfa09a19", - "scatter_tooltip_columns_works": "43d0a6cf3598c0cb7e3fbfaae6211345", - "scatter_tooltip_columns_works_when_color_column_is_null": "b81abc7ee9522a87c8a36c7c7d7997b9", - "treemap_shows_a_grid_without_any_settings_applied_": "e61a53b560304cfbe3a6464218910cb0", - "treemap_pivots_by_a_row_": "9ec602a8d048b85a6ef31d6eff3bbad7", - "treemap_pivots_by_two_rows_": "bc8dbca474fe3108063501b43a04bd04", - "treemap_pivots_by_a_column_": "e7a832541a533a543627e5a18479fd0f", - "treemap_pivots_by_a_row_and_a_column_": "cea82d7cbbfc3c658908d840b7e66e62", - "treemap_pivots_by_two_rows_and_two_columns_": "fdb08eef0fd0b63adca538f8fde8bb16", - "treemap_sorts_by_a_hidden_column_": "e032617beda3babf4777ec4dcb44994a", - "treemap_sorts_by_a_numeric_column_": "55058141560af1438fe86b1e5cf58746", - "treemap_filters_by_a_numeric_column_": "341ad0aa020eb2cb2cd3f38403265a83", - "treemap_filters_by_a_datetime_column_": "f2a2b150bd714f15808bc37189e5415f", - "treemap_highlights_invalid_filter_": "f647e9e7684f9e2413a5d97af8b9b591", - "treemap_sorts_by_an_alpha_column_": "06bcf6da7c9d5ce0c8234c0fa1d504b2", - "treemap_displays_visible_columns_": "b9947647060e30e8ab83386737c8e3c7", - "treemap_with_column_position_1_set_to_null_": "799e8b360ffa7ccb281eae2a5843b3d8", - "treemap_tooltip_columns_works": "2229a35a70e1f51c3bbf61dde72565e2", - "line_Sets_a_category_axis_when_pivoted_by_a_computed_datetime": "10a8644bbd4128af3b0e33f8a838fd51", + "ohlc_filter_to_date_range_": "de88489bb8cbc3f79c6b38aee7488de9", + "scatter_shows_a_grid_without_any_settings_applied_": "53b78835522e36b721a06c2a668dfe34", + "scatter_pivots_by_a_row_": "46d0b9902d08ae6d34ab47a714a88a1d", + "scatter_pivots_by_two_rows_": "bfb24f501f81837415bafc644f247f08", + "scatter_pivots_by_a_column_": "8e18091e6b4fc5c356d9ff1e9b2409f8", + "scatter_pivots_by_a_row_and_a_column_": "c3e5e41c7973c8e121d8693d92b7bf35", + "scatter_pivots_by_two_rows_and_two_columns_": "712b243e74ec8eeedb1f24b002d7ef4c", + "scatter_sorts_by_a_hidden_column_": "879368d1e1de6d4b79669eecaaa24dcf", + "scatter_sorts_by_a_numeric_column_": "6ac72b25e0e6380c4b0edc0ac70f1869", + "scatter_filters_by_a_numeric_column_": "a50ad64aacd0806c82c7091987aef69d", + "scatter_filters_by_a_datetime_column_": "7d1e9eff947bbda422685dca2d1e95c6", + "scatter_highlights_invalid_filter_": "ddf6e5361b1292f2f5307b581a7e7739", + "scatter_sorts_by_an_alpha_column_": "3932c75115bc725959c0766e91f0f85f", + "scatter_displays_visible_columns_": "a0f720f40ca2bf2e1131d28f5bb1f635", + "yscatter_shows_a_grid_without_any_settings_applied_": "39ea7ce2530444f85aba20e9ca489ad8", + "yscatter_pivots_by_a_row_": "6d60f9cc898379ce792fc3c6b257c3a8", + "yscatter_pivots_by_two_rows_": "6c0ea192dc04866ac266a99fd2c28c41", + "yscatter_pivots_by_a_column_": "acccc813ac519d32eafa1f343d048050", + "yscatter_pivots_by_a_row_and_a_column_": "fc3ae7de6a11bd77a35a61eb978c57b8", + "yscatter_pivots_by_two_rows_and_two_columns_": "6d9279cfff5fbb10f4f33829f65c5b54", + "yscatter_sorts_by_a_hidden_column_": "2d864be9ec39844cf15828e2623f8e23", + "yscatter_sorts_by_a_numeric_column_": "6a203cc8085d26992943aa2d5614168e", + "yscatter_filters_by_a_numeric_column_": "5074ca35268cc140f09615fe96406e3b", + "yscatter_filters_by_a_datetime_column_": "254ead4960d9638ee34b5c7a1033d54e", + "yscatter_highlights_invalid_filter_": "9a65de9016394da1f86c49d02feaf136", + "yscatter_sorts_by_an_alpha_column_": "18fd28fd1f85b42cc7cef5fd45c83b5c", + "yscatter_displays_visible_columns_": "39a03eb0f1477324b290c5b7382aaed0", + "heatmap_shows_a_grid_without_any_settings_applied_": "6900b1b3ea763815fa2c3427d56e51f8", + "heatmap_pivots_by_a_row_": "4b984360324bb06a78f58ea18ef2bbb0", + "heatmap_pivots_by_two_rows_": "a113a045501ecb7b073a45a8465701e0", + "heatmap_pivots_by_a_column_": "f33f73c9284c44dd12d0d3d09a384734", + "heatmap_pivots_by_a_row_and_a_column_": "0badfd0b4d77d8bb11f19aee613f422a", + "heatmap_pivots_by_two_rows_and_two_columns_": "20760dfc258a033bc541c7a5e9b3570c", + "heatmap_sorts_by_a_hidden_column_": "1365e670dd8204103ba7700c6c25702e", + "heatmap_sorts_by_a_numeric_column_": "cb0fdeb340d98ab886a1eadf2235537a", + "heatmap_filters_by_a_numeric_column_": "44078b79c96f32985afbe58953f369a5", + "heatmap_filters_by_a_datetime_column_": "6b06bffbfc4a802b2ffd764aac9691e9", + "heatmap_highlights_invalid_filter_": "6e722e96a3b98a4e1f5363646829d055", + "heatmap_sorts_by_an_alpha_column_": "9db8498770e4fd9f5f5e715497aded81", + "heatmap_displays_visible_columns_": "8098d09197bbd73e248e8870d42d8955", + "bar_shows_a_grid_without_any_settings_applied_": "a6c56672ac8dfb59bf977fed4e15ef05", + "bar_pivots_by_a_row_": "8e65826dba0c497b92dfa9323cd3fa43", + "bar_pivots_by_two_rows_": "3763972215f623d6793e6bf5fedfcbbb", + "bar_pivots_by_a_column_": "28a5a4194427ce8d8d083ae039e56757", + "bar_pivots_by_a_row_and_a_column_": "39394e54005b35396f11bcf10b39b34b", + "bar_pivots_by_two_rows_and_two_columns_": "aa852332cd3e6bcdd21514ec96b57079", + "bar_sorts_by_a_hidden_column_": "b1da01bea61623ad81a21a07c84b430d", + "bar_sorts_by_a_numeric_column_": "614f8aef2b31df1adb6bc3725c630d74", + "bar_filters_by_a_numeric_column_": "4162837c01605567d9fd4f7096f5017c", + "bar_filters_by_a_datetime_column_": "5e8c19296496f9a760a37fb3f116f326", + "bar_highlights_invalid_filter_": "6aa2cba851ebd5e9ba4733fca00e4edb", + "bar_sorts_by_an_alpha_column_": "70756807a371307a913b301cecc8c53b", + "bar_displays_visible_columns_": "d07337842747893e3f8657788c730130", + "bar-x_shows_a_grid_without_any_settings_applied_": "db8bc8c0a683bda7a6e2f6ef08b30964", + "bar-x_pivots_by_a_row_": "0efec254aeff7efc3824009b25a72b72", + "bar-x_pivots_by_two_rows_": "074e1ba1069248ed9d352e136656a93a", + "bar-x_pivots_by_a_column_": "8b4af61471a4419cc89ca69aec05cd30", + "bar-x_pivots_by_a_row_and_a_column_": "ea80542d249a835001cee9e1fbd1cfca", + "bar-x_pivots_by_two_rows_and_two_columns_": "658bc83773b9a2df107315293c71076a", + "bar-x_sorts_by_a_hidden_column_": "63ee592449b1b4042d30b4af892343d0", + "bar-x_sorts_by_a_numeric_column_": "0ba9e47ccb270da09f59958079cd82cf", + "bar-x_filters_by_a_numeric_column_": "8b1e199338a6556dc13cc2a96d5e71c4", + "bar-x_filters_by_a_datetime_column_": "8d4ad807ef3d52b890da0d43c68d2ec9", + "bar-x_highlights_invalid_filter_": "c04ab6ff1ebc10db0dbad5405995cd8f", + "bar-x_sorts_by_an_alpha_column_": "7fa5493f98e2ee3c33934fced36a40ac", + "bar-x_displays_visible_columns_": "3cf026438a68ce7e53951065dd371b75", + "bar-themed_shows_a_grid_without_any_settings_applied_": "51bb5808c879ef11ec374a6188391016", + "bar-themed_pivots_by_a_row_": "75b60a68e6e56f571624ea861b542daa", + "bar-themed_pivots_by_two_rows_": "f370aac9cf412e09b515634154c8fbcd", + "bar-themed_pivots_by_a_column_": "45cf2cc22a015d1ff62a27da5a90e398", + "bar-themed_pivots_by_a_row_and_a_column_": "f7a8bf55cdf1b2b053f4e95267069085", + "bar-themed_pivots_by_two_rows_and_two_columns_": "d5049c1ed61827b0b93ef4d6a6d1f64a", + "bar-themed_sorts_by_a_hidden_column_": "2ba4d13eaf89e9f6b7d7d201cfafe572", + "bar-themed_sorts_by_a_numeric_column_": "b2b719281fad439505e37f72464bca2f", + "bar-themed_filters_by_a_numeric_column_": "b18c4852857c4bb7aeb678dc27c44e4a", + "bar-themed_filters_by_a_datetime_column_": "4eef01dde956018bc06a24d4e8047193", + "bar-themed_highlights_invalid_filter_": "d515102223898f45094590d494d35a73", + "bar-themed_sorts_by_an_alpha_column_": "625281e3c9e0f8a3dcf3cb6246d0e58b", + "bar-themed_displays_visible_columns_": "dabb94dbf1696badb0799a164fffe299", + "line_shows_a_grid_without_any_settings_applied_": "d1e95296c42cb5a5b708be7fddd18895", + "line_pivots_by_a_row_": "afa4ae2e556ef516ee2be95c3d01f885", + "line_pivots_by_two_rows_": "b5a68c8445140ac4a9f7aa939ccea314", + "line_pivots_by_a_column_": "3857ecfda40efd73576c67d63e4b5373", + "line_pivots_by_a_row_and_a_column_": "d5f7a5b546604ff1d1cf82f23b888c8c", + "line_pivots_by_two_rows_and_two_columns_": "523678dbbfdd4a6686b6d09d9fd446a3", + "line_sorts_by_a_hidden_column_": "e98320f8cdc1ff0c20ed1bb978071e7d", + "line_sorts_by_a_numeric_column_": "bace96a71520b70f5b50c7ff03fc8046", + "line_filters_by_a_numeric_column_": "cebcf4e25f25ec0cc7ab2c16fe10862a", + "line_filters_by_a_datetime_column_": "1ee3d57980dba44c644a69e70510e7f2", + "line_highlights_invalid_filter_": "ceb2a3c20dc18f59fbf81944a69a937b", + "line_sorts_by_an_alpha_column_": "bad28c0aafadd1174db6b241274ecaa8", + "line_displays_visible_columns_": "09c0958c103db086ab5c992290dee564", + "area_shows_a_grid_without_any_settings_applied_": "db1c63d491e7246ec2b19a915c6f5b73", + "area_pivots_by_a_row_": "8197bd57cd03e37221e2389da089ec52", + "area_pivots_by_two_rows_": "2db34fe52dad9310f1ac78a5a99075a2", + "area_pivots_by_a_column_": "ddacc79d1fb5a32e300fb3f0855e71ac", + "area_pivots_by_a_row_and_a_column_": "bb7476a4c6fe80f3cf33718ac8aee1f4", + "area_pivots_by_two_rows_and_two_columns_": "ab456fdbfe6386354545503758dfe26a", + "area_sorts_by_a_hidden_column_": "bd442faa93f01382cce05dcf22f642a7", + "area_sorts_by_a_numeric_column_": "ff74e3bd3039d047f87a8b1a2cbb6462", + "area_filters_by_a_numeric_column_": "c2262d00e8a7ccfe8ee140b528fa9230", + "area_filters_by_a_datetime_column_": "6d4ace28cb811ecf64f9079ae8c6a568", + "area_highlights_invalid_filter_": "8241ceb6d1ebb1145aa277b3632e6ab8", + "area_sorts_by_an_alpha_column_": "6712fd66096b8463ce8a184c6b71aede", + "area_displays_visible_columns_": "27bdf42520d350764f347935e25372bd", + "scatter_tooltips_with_no_color_and_size_": "3cb559abd5b5d329905481cdd54ef959", + "scatter_tooltip_columns_works": "dcbb4a8d5e0d5c1dc4426300de47e6eb", + "scatter_tooltip_columns_works_when_color_column_is_null": "4bc64cb69d5767b02b36229a1871f748", + "treemap_shows_a_grid_without_any_settings_applied_": "1cb913a2a84193e30970730a55ac056b", + "treemap_pivots_by_a_row_": "4e448414fae006228744ae72d0bb4139", + "treemap_pivots_by_two_rows_": "6afdff2f93302c6148b9d10a4333a7a9", + "treemap_pivots_by_a_column_": "789c3cf540c66694647e7009139b552e", + "treemap_pivots_by_a_row_and_a_column_": "a9970e5c339449bd2bbf58b753c178f0", + "treemap_pivots_by_two_rows_and_two_columns_": "7ee8e4c85ebfb850e645486007ffab92", + "treemap_sorts_by_a_hidden_column_": "e66f3615c9f12f914d88d3ab66564a0e", + "treemap_sorts_by_a_numeric_column_": "f799b63f1da8aae47631b7614408ab47", + "treemap_filters_by_a_numeric_column_": "755ae43d0567733da58254a75540bf5e", + "treemap_filters_by_a_datetime_column_": "5d2620c0bdb3b2f003818c3a166e46da", + "treemap_highlights_invalid_filter_": "ab96156ff7bbfbff3159e74f67cce7a3", + "treemap_sorts_by_an_alpha_column_": "27d94a896330b2c805c63b6baaa96362", + "treemap_displays_visible_columns_": "8344294ffb52232c739189b20b980686", + "treemap_with_column_position_1_set_to_null_": "2430cb68123ec7c46ac10e6d9c7a6778", + "treemap_tooltip_columns_works": "f34abe78f35aabc537dcacf05e67b854", + "line_Sets_a_category_axis_when_pivoted_by_a_computed_datetime": "5b8f994dbf7c1dbc5f0a74d72411856e", "sunburst_sunburst_label_shows_formatted_date": "590f474e076fd49ce10eb5e97bfc66d3", - "treemap_treemap_label_shows_formatted_date": "27693653dc2186687687cea4b6887bc2", - "xyline_shows_a_grid_without_any_settings_applied_": "253cefd72a2dd23d9151025cc316ffe3", - "xyline_pivots_by_a_row_": "686b034e36a519bcfe6a46c0fd70e86a", - "xyline_pivots_by_two_rows_": "ba490d3b770437de561d4e0469c62840", - "xyline_pivots_by_a_column_": "459f3da99bfa74592919a8ec3575665c", - "xyline_pivots_by_a_row_and_a_column_": "b1084640a75d668c949c76ad8bfed8e6", - "xyline_pivots_by_two_rows_and_two_columns_": "3fc89626e9deef19de5657115b6fea6d", - "xyline_sorts_by_a_hidden_column_": "0d2e9f69e85e540bb56b8eb70cad1f2d", - "xyline_sorts_by_a_numeric_column_": "bbb667693b2a53e6d8a0f70bae2fda2a", - "xyline_filters_by_a_numeric_column_": "77e8b998ea1024badfc10cf13e8f1cbd", - "xyline_filters_by_a_datetime_column_": "7bd13eabc0c9e93471d408d57c80e2df", - "xyline_highlights_invalid_filter_": "a687ce6595d5629d3e113d62b747af6d", - "xyline_sorts_by_an_alpha_column_": "3d8c5017772d8b8a06ce5f8458370223", - "xyline_displays_visible_columns_": "5c528ff20e7edd1a7cf49159ed11f824", - "bar_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "cbc7b57408297468a7462a28c1e2b92e", - "bar_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "3830e21a297cf94d7b367209fa7cfc59", - "bar_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "86b1dfd84b363fe7bf08a0b6026808ba", - "bar_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "86b1dfd84b363fe7bf08a0b6026808ba", - "bar_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "55fde01604aec5a990e58b0f887d28a8", - "bar_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "e090c7c9675d5f6c16a6672a603fd028", - "bar-x_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "27a6ee6f8d9a47346d068933459dd17d", - "bar-x_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "f6f73612139d4146df935debb0738b63", - "bar-x_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "6f3193560cf9930205590ec487f119c3", - "bar-x_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "6f3193560cf9930205590ec487f119c3", - "bar-x_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "916ae17b5d47990973ebde342fd8d48e", - "bar-x_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "65bea9d8e075911f7a9e98416771fede", - "bar-themed_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "cd9868e2652c7db01ea432d4e1396ab7", - "bar-themed_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "4a12dbc489773b62344625c78beb57e0", - "bar-themed_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "99023fb632f86a0b8379a42ba3173bbf", - "bar-themed_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "99023fb632f86a0b8379a42ba3173bbf", - "bar-themed_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "f5d9ff8719dbe951b5c266841646a2d2", - "bar-themed_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "eebdbfed7e0ee09093c1e675b95ea31c", - "yscatter_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "e02495e23347b0d07bd81d580f582f0b", - "yscatter_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "e02495e23347b0d07bd81d580f582f0b", - "yscatter_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "e02495e23347b0d07bd81d580f582f0b", - "yscatter_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "e02495e23347b0d07bd81d580f582f0b", - "yscatter_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "f7b38f7675d68468ba9fbd2d037effaa", - "yscatter_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "1a8527139b57f107c6fe9c5401c82744", - "heatmap_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "f04eb941db3df9d36cdf5cd5f122f45a", - "heatmap_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "f04eb941db3df9d36cdf5cd5f122f45a", - "heatmap_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "f04eb941db3df9d36cdf5cd5f122f45a", - "heatmap_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "f04eb941db3df9d36cdf5cd5f122f45a", - "heatmap_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "55e9f87e3fc8b618c95d304c5b2c781d", - "heatmap_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "74f8634cfe11e3bbb37c4a33c60186d4" + "treemap_treemap_label_shows_formatted_date": "0711808c0e9b9a8891c3dbad773db716", + "xyline_shows_a_grid_without_any_settings_applied_": "741ed1e4d01732234277442f0fbe43a8", + "xyline_pivots_by_a_row_": "7670290fc1e757aea936f163d2ddb162", + "xyline_pivots_by_two_rows_": "43d15c3f4f2e6aeb9968c5632215ff05", + "xyline_pivots_by_a_column_": "43a39eee4b605fde43cd43b1f7ffaa2e", + "xyline_pivots_by_a_row_and_a_column_": "26319580a9d33eea766363ccaefe5069", + "xyline_pivots_by_two_rows_and_two_columns_": "0b502a1a5ce2bb6be26afa0158176273", + "xyline_sorts_by_a_hidden_column_": "059e91c07ad606842939f1d5b6ee7819", + "xyline_sorts_by_a_numeric_column_": "afd33c4524085421550704d56325d822", + "xyline_filters_by_a_numeric_column_": "76806b4fe8a2dbb61da85264a9a9acab", + "xyline_filters_by_a_datetime_column_": "b43ea0d45d094845550ce0719199681f", + "xyline_highlights_invalid_filter_": "f8c735ad4b298530b7a4c9676eb5a0bb", + "xyline_sorts_by_an_alpha_column_": "80215a1ddfe8d23e8b1833512bd7970f", + "xyline_displays_visible_columns_": "e6e2dbe67869efd9bb84e77d25bfa4ed", + "bar_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "900dc95b4719cbb0395fca688853e864", + "bar_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "011c9e6173f812275a800ccaf3f71e4a", + "bar_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "270e70269c3ad14821e39a6304ae724f", + "bar_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "270e70269c3ad14821e39a6304ae724f", + "bar_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "0eb9247a0792f6c4a528b6c45c10c774", + "bar_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "67f94145986435f0a8524e56d7046fa6", + "bar-x_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "716e5379804ce61c6b92bb99633aea4d", + "bar-x_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "5e257b408180f84821eab75f52277548", + "bar-x_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "e9f000bd7460208ca45626fb416ef51d", + "bar-x_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "e9f000bd7460208ca45626fb416ef51d", + "bar-x_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "43a32778147af86e06e2e480349750b8", + "bar-x_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "2228bd81f525c8df4e6595141993778c", + "bar-themed_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "5877037e501e72aaa39a08570db17c97", + "bar-themed_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "1af6e9218f58293bf2969e80d7b4a95f", + "bar-themed_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "e42da59a641dd8e85407f915288ca2d9", + "bar-themed_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "e42da59a641dd8e85407f915288ca2d9", + "bar-themed_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "748e0ee0a6d5fcca9b573eee958135e4", + "bar-themed_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "ed432c80a9f7dcf33f34e50750404a62", + "yscatter_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "8cda3b679ea7dbab49b50beece350790", + "yscatter_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "8cda3b679ea7dbab49b50beece350790", + "yscatter_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "8cda3b679ea7dbab49b50beece350790", + "yscatter_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "8cda3b679ea7dbab49b50beece350790", + "yscatter_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "aa6aca16fbb5599947caeccdedfe14c9", + "yscatter_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "9505e6e5037eff9ed0e54cc38eaa847e", + "heatmap_warning_should_be_shown_when_points_exceed_max_cells_and_max_columns": "e78768f5dfd6726f9490188f763dd0b9", + "heatmap_warning_should_be_shown_when_points_exceed_max_cells_but_not_max_columns": "e78768f5dfd6726f9490188f763dd0b9", + "heatmap_warning_should_be_shown_when_points_exceed_max_columns_but_not_max_cells": "e78768f5dfd6726f9490188f763dd0b9", + "heatmap_warning_should_be_re-rendered_if_the_config_is_changed_and_points_exceed_max": "e78768f5dfd6726f9490188f763dd0b9", + "heatmap_warning_should_not_be_re-rendered_if_the_config_is_changed_and_points_do_not_exceed_max": "9ef398d9aed8e99283c62ada7fbae0b9", + "heatmap_warning_should_not_be_rendered_again_after_the_user_clicks_render_all_points": "ec3e8a25fc58040e5d61788ef4f81192" } \ No newline at end of file diff --git a/packages/perspective-viewer-datagrid/test/results/linux.docker.json b/packages/perspective-viewer-datagrid/test/results/linux.docker.json index 1090213c4f..20d84fe34d 100644 --- a/packages/perspective-viewer-datagrid/test/results/linux.docker.json +++ b/packages/perspective-viewer-datagrid/test/results/linux.docker.json @@ -1,20 +1,20 @@ { - "superstore_shows_a_grid_without_any_settings_applied_": "0a3182ea48222066684b82a6e11a2b95", - "superstore_pivots_by_a_row_": "b0f9c3c46519e20826679e7dfbfc2294", - "superstore_pivots_by_two_rows_": "34120010c191d37ce57338ec3bd99012", - "superstore_pivots_by_a_column_": "1c8399c09935fd63b2527abbeac952cd", - "superstore_pivots_by_a_row_and_a_column_": "2d45a223b08e20b069f64836f1f4f8e6", - "superstore_pivots_by_two_rows_and_two_columns_": "11fa65793f30d0c8e04948f7eb0a982a", - "superstore_sorts_by_a_hidden_column_": "700130d4b53255be0550df684980ae27", - "superstore_sorts_by_a_numeric_column_": "6f795fb52fbae71d33ae7082723a9a04", - "superstore_filters_by_a_numeric_column_": "15adab217a1dc309a73aecb9ee5a360f", - "superstore_filters_by_a_datetime_column_": "53872122bf201108dda84a0183408c47", - "superstore_highlights_invalid_filter_": "c6ffdbddac8f4b7cc8bc3d288a13a898", - "superstore_sorts_by_an_alpha_column_": "961bba5c8b83e3df00d9e29c30049d47", - "superstore_displays_visible_columns_": "d13fdc2a3948d8b803883bd466ba2e6b", - "superstore_resets_viewable_area_when_the_logical_size_expands_": "0928f26b07e8a212512c5d79c74b6a28", - "superstore_resets_viewable_area_when_the_physical_size_expands_": "0a3182ea48222066684b82a6e11a2b95", - "superstore_perspective_dispatches_perspective-click_event_with_correct_details": "0a3182ea48222066684b82a6e11a2b95", - "superstore_perspective_dispatches_perspective-click_event_with_correct_details_when_filter_is_set": "cd7f7112cf3b93c5956a5239a7579d90", - "__GIT_COMMIT__": "d6344be7a126e4b2bfa05dbb8c4d5f5feca2b8c5" + "superstore_shows_a_grid_without_any_settings_applied_": "62a1515d85cc4e192f9122180ae98173", + "superstore_pivots_by_a_row_": "487f13af02727468192a507a30157b29", + "superstore_pivots_by_two_rows_": "739cbd613538e448aa58da978c1f3b0e", + "superstore_pivots_by_a_column_": "37b7c62d0258cfef45f0339f1725d1ef", + "superstore_pivots_by_a_row_and_a_column_": "75eb97dfa5eeed6c740a819cfb5b13f0", + "superstore_pivots_by_two_rows_and_two_columns_": "70132e79eeb01ef1a87c490a8609088a", + "superstore_sorts_by_a_hidden_column_": "6c7a2d46f633801eb7e9fa327ec3ad95", + "superstore_sorts_by_a_numeric_column_": "359312d9cf2a70238e914a6f44b0d4ce", + "superstore_filters_by_a_numeric_column_": "1a66126c91d8153b91935a427a181a8d", + "superstore_filters_by_a_datetime_column_": "3b675fed38c22d47e8ec1cd5a5378ced", + "superstore_highlights_invalid_filter_": "89485f38adfdc8e80500fa1bc670b5c2", + "superstore_sorts_by_an_alpha_column_": "cbbdfc0f93df945c091b0947cb8b02b7", + "superstore_displays_visible_columns_": "96d0faaf138759b4642fca5c75939bdf", + "superstore_resets_viewable_area_when_the_logical_size_expands_": "f955513bd0ef61d4f231f45b429487c9", + "superstore_resets_viewable_area_when_the_physical_size_expands_": "62a1515d85cc4e192f9122180ae98173", + "superstore_perspective_dispatches_perspective-click_event_with_correct_details": "62a1515d85cc4e192f9122180ae98173", + "superstore_perspective_dispatches_perspective-click_event_with_correct_details_when_filter_is_set": "738133e4e81d30da994bbfcf6387cca7", + "__GIT_COMMIT__": "686bb7147e58992e5d06056778b20d07605a8042" } \ No newline at end of file diff --git a/packages/perspective-viewer/src/js/utils.js b/packages/perspective-viewer/src/js/utils.js index 1fae9580c1..a792cef19e 100644 --- a/packages/perspective-viewer/src/js/utils.js +++ b/packages/perspective-viewer/src/js/utils.js @@ -180,42 +180,96 @@ export async function setPromise(cb = async () => {}, timeout = 0) { return await cb(); } -/** - * Returns a promise whose resolve method can be called from elsewhere. - */ -export function invertPromise() { - let resolve; - let promise = new Promise(_resolve => { - resolve = _resolve; +export const invertPromise = () => { + let _resolve; + const promise = new Promise(resolve => { + _resolve = resolve; }); - promise.resolve = resolve; + + promise.resolve = _resolve; return promise; -} +}; export function throttlePromise(target, property, descriptor) { + // Each call to `throttlePromise` has a unique `lock` const lock = Symbol("private lock"); - const f = descriptor.value; + const _super = descriptor.value; + + // Wrap the underlying function descriptor.value = async function(...args) { - if (this[lock]) { - await this[lock]; - if (this[lock]) { - await this[lock]; + // Initialize the lock for this Object instance, if it has never been + // initialized. + this[lock] = this[lock] || {gen: 0}; + + // Assign this invocation a unique ID. + let id = ++this[lock].gen; + + // If the `lock` property is defined, a previous invocation is still + // processing. + if (this[lock].lock) { + // `await` the previous call; afterwards, the drawn state will be + // updated but we need to draw again to incorporate this + // invocation's state changes. + await this[lock].lock; + + // However, we only want to execute the _last_ such invocation, + // since each call precludes the previous ones if they are + // still queue-ed. + if (id !== this[lock].gen) { + // This invocation got de-duped with a later one, but it will + // wake up first, so if there is not a lock acquired here, push + // it to the back of the event queue. + if (!this[lock].lock) { + await new Promise(requestAnimationFrame); + } + + // Now await the currently-processing invocation (which + // occurred after than this one) and return. + await this[lock].lock; return; } } - this[lock] = invertPromise(); + + // This invocation has made it to the render process, so "acquire" the + // lock. + this[lock].lock = invertPromise(); + + // Call the decorated function itself let result; try { - result = await f.call(this, ...args); - } catch (e) { - console.error(e); + result = await _super.call(this, ...args); } finally { - const l = this[lock]; - this[lock] = undefined; + // Errors can leave promises which depend on this behavior + // dangling. + const l = this[lock].lock; + delete this[lock]["lock"]; + + // If this invocation is still the latest, clear the attribute + // state. + // TODO this is likely not he behavior we want for this event .. + if (id === this[lock].gen) { + this.removeAttribute("updating"); + this.dispatchEvent(new Event("perspective-update-complete")); + } + l.resolve(); - return result; } + + return result; }; + + // A function which clears the lock just like the main wrapper, but then + // does nothing. + descriptor.value.flush = async function() { + if (this[lock]?.lock) { + await this[lock].lock; + await new Promise(requestAnimationFrame); + if (this[lock]?.lock) { + await this[lock].lock; + } + } + }; + return descriptor; } diff --git a/packages/perspective-viewer/src/js/viewer.js b/packages/perspective-viewer/src/js/viewer.js index 5cd842aff1..9b43e65c64 100755 --- a/packages/perspective-viewer/src/js/viewer.js +++ b/packages/perspective-viewer/src/js/viewer.js @@ -77,7 +77,6 @@ window.addEventListener("unhandledrejection", event => { class PerspectiveViewer extends ActionElement { constructor() { super(); - this._register_debounce_instance(); this._show_config = true; this._show_warnings = true; this.__render_times = []; @@ -717,10 +716,7 @@ class PerspectiveViewer extends ActionElement { * attribute state has been applied. */ async flush() { - await new Promise(setTimeout); - while (this.hasAttribute("updating")) { - await this._updating_promise; - } + await Promise.all([this._updating_promise || Promise.resolve(), this.notifyResize.flush()]); } /** diff --git a/packages/perspective-viewer/src/js/viewer/perspective_element.js b/packages/perspective-viewer/src/js/viewer/perspective_element.js index ffdd44fb6e..b18ac1942a 100644 --- a/packages/perspective-viewer/src/js/viewer/perspective_element.js +++ b/packages/perspective-viewer/src/js/viewer/perspective_element.js @@ -7,10 +7,10 @@ * */ -import debounce from "lodash/debounce"; import isEqual from "lodash/isEqual"; import {html, render} from "lit-html"; +import {throttlePromise} from "../utils.js"; import * as perspective from "@finos/perspective/dist/esm/config/constants.js"; import {get_type_config} from "@finos/perspective/dist/esm/config"; import {CancelTask} from "./cancel_task.js"; @@ -507,9 +507,7 @@ export class PerspectiveElement extends StateElement { this._vieux.set_view(this._view); const timer = this._render_time(); - this._render_count = (this._render_count || 0) + 1; - - const task = (this._task = new CancelTask(() => this._render_count--, true)); + const task = (this._task = new CancelTask(() => {}, true)); try { const {max_cols, max_rows} = await this.get_maxes(); @@ -531,12 +529,9 @@ export class PerspectiveElement extends StateElement { this.__render_times = []; this.dispatchEvent(new Event("perspective-view-update")); } + timer(); task.cancel(); - if (this._render_count === 0) { - this.removeAttribute("updating"); - this.dispatchEvent(new Event("perspective-update-complete")); - } } } @@ -582,22 +577,24 @@ export class PerspectiveElement extends StateElement { this.toggleAttribute("updating", true); let resolve; this._updating_promise = new Promise(_resolve => { - resolve = _resolve; + resolve = () => { + _resolve(); + }; }); return resolve; } - _register_debounce_instance() { - const _update = debounce((resolve, ignore_size_check, force_update, limit_points) => { - this._new_view({ignore_size_check, force_update, limit_points}).then(resolve); - }, 0); + @throttlePromise + async _update(ignore_size_check, force_update, limit_points) { + await new Promise(setTimeout); + await this._new_view({ignore_size_check, force_update, limit_points}); + } - this._debounce_update = async ({force_update = false, ignore_size_check = false, limit_points = true} = {}) => { - if (this._table) { - let resolve = this._set_updating(); - await new Promise(resolve => _update(resolve, ignore_size_check, force_update, limit_points)); - resolve(); - } - }; + async _debounce_update({force_update = false, ignore_size_check = false, limit_points = true} = {}) { + if (this._table) { + let resolve = this._set_updating(); + await this._update(ignore_size_check, force_update, limit_points); + resolve(); + } } } diff --git a/packages/perspective-viewer/test/js/computed_expressions.spec.js b/packages/perspective-viewer/test/js/computed_expressions.spec.js index 006bbca92f..e411977c20 100644 --- a/packages/perspective-viewer/test/js/computed_expressions.spec.js +++ b/packages/perspective-viewer/test/js/computed_expressions.spec.js @@ -43,6 +43,7 @@ utils.with_server({}, () => { await page.evaluate(async () => await document.querySelector("perspective-viewer").toggleConfig()); await page.$("perspective-viewer"); await page.shadow_click("perspective-viewer", "#add-computed-expression"); + await page.shadow_blur(); }); test.capture("click on close button closes the computed expression UI.", async page => { @@ -152,6 +153,7 @@ utils.with_server({}, () => { ".perspective-expression-editor__edit_area" ); await page.keyboard.press("ArrowDown"); + await page.shadow_blur(); }); test.capture("An expression that doesn't reach max-width should undock the autocomplete", async page => { @@ -476,6 +478,7 @@ utils.with_server({}, () => { await page.waitForSelector("perspective-viewer:not([updating])"); await page.evaluate(element => element.removeAttribute("computed-columns"), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); + await page.shadow_blur(); }); // reset @@ -688,7 +691,7 @@ utils.with_server({}, () => { await page.evaluate(element => element.setAttribute("filters", '[["Computed", "==", "2 Monday"]]'), viewer); await page.evaluate(element => element.setAttribute("columns", JSON.stringify(["Computed", "Order Date"])), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("computed expression column aggregates should persist.", async page => { diff --git a/packages/perspective-viewer/test/js/filters.spec.js b/packages/perspective-viewer/test/js/filters.spec.js index 78a10cab35..2057329855 100644 --- a/packages/perspective-viewer/test/js/filters.spec.js +++ b/packages/perspective-viewer/test/js/filters.spec.js @@ -33,7 +33,7 @@ utils.with_server({}, () => { await await page.evaluate(async () => await document.querySelector("perspective-viewer").toggleConfig()); await page.evaluate(element => element.setAttribute("filters", '[["v", "==", "11/1/2020"]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("equals ISO string on datetime column", async page => { @@ -44,7 +44,7 @@ utils.with_server({}, () => { element.setAttribute("filters", '[["w", "==", "' + dt + '"]]'); }, viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("equals US locale string on datetime column", async page => { @@ -54,7 +54,7 @@ utils.with_server({}, () => { element.setAttribute("filters", '[["w", "==", "12/01/2020, 11:30:55 PM"]]'); }, viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("greater than on date column", async page => { @@ -62,7 +62,7 @@ utils.with_server({}, () => { await await page.evaluate(async () => await document.querySelector("perspective-viewer").toggleConfig()); await page.evaluate(element => element.setAttribute("filters", '[["v", ">", "03/01/2020"]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("greater than ISO string on datetime column", async page => { @@ -73,7 +73,7 @@ utils.with_server({}, () => { element.setAttribute("filters", '[["w", ">", "' + dt + '"]]'); }, viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("greater than US locale string on datetime column", async page => { @@ -83,7 +83,7 @@ utils.with_server({}, () => { element.setAttribute("filters", '[["w", ">", "10/01/2020, 03:30:55 PM"]]'); }, viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("less than on date column", async page => { @@ -91,7 +91,7 @@ utils.with_server({}, () => { await await page.evaluate(async () => await document.querySelector("perspective-viewer").toggleConfig()); await page.evaluate(element => element.setAttribute("filters", '[["v", "<", "10/01/2020"]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("less than ISO string on datetime column", async page => { @@ -102,7 +102,7 @@ utils.with_server({}, () => { element.setAttribute("filters", '[["w", "<", "' + dt + '"]]'); }, viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test.capture("less than US locale string on datetime column", async page => { @@ -112,7 +112,7 @@ utils.with_server({}, () => { element.setAttribute("filters", '[["w", "<", "10/01/2020, 03:30:55 PM"]]'); }, viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); }, {root: path.join(__dirname, "..", "..")} diff --git a/packages/perspective-viewer/test/js/leaks.spec.js b/packages/perspective-viewer/test/js/leaks.spec.js index e2c0a628be..4c63184984 100644 --- a/packages/perspective-viewer/test/js/leaks.spec.js +++ b/packages/perspective-viewer/test/js/leaks.spec.js @@ -80,7 +80,7 @@ utils.with_server({}, () => { } await page.evaluate(element => element.setAttribute("filters", '[["Sales", "<", 10]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }, {timeout: 60000} ); diff --git a/packages/perspective-viewer/test/js/simple_tests.js b/packages/perspective-viewer/test/js/simple_tests.js index 5210c8530e..25a899809b 100644 --- a/packages/perspective-viewer/test/js/simple_tests.js +++ b/packages/perspective-viewer/test/js/simple_tests.js @@ -63,7 +63,7 @@ exports.default = function(method = "capture") { const viewer = await page.$("perspective-viewer"); await page.evaluate(async () => await document.querySelector("perspective-viewer").toggleConfig()); await page.evaluate(element => element.setAttribute("filters", '[["Sales", ">", 500]]'), viewer); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test[method]("filters by a datetime column.", async page => { @@ -71,14 +71,14 @@ exports.default = function(method = "capture") { await page.evaluate(async () => await document.querySelector("perspective-viewer").toggleConfig()); await page.evaluate(element => element.setAttribute("filters", '[["Order Date", ">", "01/01/2012"]]'), viewer); await page.waitForSelector("perspective-viewer:not([updating])"); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test[method]("highlights invalid filter.", async page => { const viewer = await page.$("perspective-viewer"); await page.evaluate(async () => await document.querySelector("perspective-viewer").toggleConfig()); await page.evaluate(element => element.setAttribute("filters", '[["Sales", "==", null]]'), viewer); - await page.evaluate(() => document.activeElement.blur()); + await page.shadow_blur(); }); test[method]("sorts by an alpha column.", async page => { diff --git a/packages/perspective-viewer/test/results/linux.docker.json b/packages/perspective-viewer/test/results/linux.docker.json index 4bc4f92ddb..8f98a9d1d8 100644 --- a/packages/perspective-viewer/test/results/linux.docker.json +++ b/packages/perspective-viewer/test/results/linux.docker.json @@ -1,51 +1,51 @@ { - "Computed_Expressions_click_on_add_column_button_opens_the_computed_expression_UI_": "451566a3537c3c0cad5ccab180b298bb", - "Computed_Expressions_click_on_close_button_closes_the_computed_expression_UI_": "6ea08b10cee7f14423b387552bdc1096", - "Computed_Expressions_An_expression_that_doesn_t_reach_max-width_should_undock_the_autocomplete": "5260e72cf54b004fcc741221b388a70c", - "Computed_Expressions_Typing_a_partial_expression_should_search_by_expression_label_and_value": "3a8907346ab5a29a153a7d77e1d16b14", - "Computed_Expressions_Typing_a_column_name_followed_by_a_partial_function_should_not_show_autocomplete": "c6de99dee1b26538ee557bcbd62b9c79", - "Computed_Expressions_Typing_an_alias_should_not_show_autocomplete": "86f8db78131be3b5e728b25ba5e7681d", - "Computed_Expressions_Typing_a_numeric_function_should_show_autocomplete_for_numeric_columns": "0c717e688dad1670d33f9fe8da815a6c", - "Computed_Expressions_Typing_a_string_function_should_show_autocomplete_for_string_columns": "d1dc43e86fd98b40fa0cd0886968720d", - "Computed_Expressions_Typing_a_datetime_function_should_show_autocomplete_for_datetime_columns": "59cbff21b6316821b40f471b3faa3f2c", - "Computed_Expressions_Typing_a_partial_column_name_should_show_autocomplete": "c16a4cc430496161417d4c9b7fac4fdc", - "Computed_Expressions_Typing_a_long_expression_should_dock_the_autocomplete": "7a98f654f21f2bf92b403e9a2bb59006", - "Computed_Expressions_Typing_a_long_expression_should_dock_the_autocomplete,_and_the_details_panel_should_show": "2613d6165731c9bef68687bc41d7b261", - "Computed_Expressions_Typing_an_expression_in_the_textarea_should_work_even_when_pushed_down_to_page_bottom_": "00113b03ebdaae73b14e9d55f603d903", - "Computed_Expressions_Typing_enter_should_save_a_valid_expression": "532eae0243e0d587df9aaeb55b50442e", - "Computed_Expressions_Typing_enter_should_not_save_an_invalid_expression": "579a8d359104ba4c58b9521bd89040b5", - "Computed_Expressions_Pressing_arrow_down_should_select_the_next_autocomplete_item": "96721c4a093111e28a7bbc82aa26e018", - "Computed_Expressions_Pressing_arrow_down_on_the_last_item_should_select_the_first_autocomplete_item": "4199a83ebff399d4b43d74b1653d12f7", - "Computed_Expressions_Pressing_arrow_up_should_select_the_previous_autocomplete_item": "4199a83ebff399d4b43d74b1653d12f7", - "Computed_Expressions_Pressing_arrow_up_from_the_first_item_should_select_the_last_autocomplete_item": "2503d7b2e3a3c7f0d4d5b5a93b147df1", - "Computed_Expressions_Pressing_arrow_down_on_an_undocked_autocomplete_should_select_the_next_autocomplete_item": "72d2bb98ffee5f2e60b79a236031b8e5", - "Computed_Expressions_Pressing_arrow_down_on_the_last_item_on_an_undocked_autocomplete_should_select_the_first_autocomplete_item": "a813c7d7c9a14e4ffce56b0d8d7f650f", - "Computed_Expressions_Pressing_arrow_up_on_an_undocked_autocomplete_should_select_the_previous_autocomplete_item": "403f950d3311ba727ce5de0fdf1efa6b", - "Computed_Expressions_Pressing_arrow_up_from_the_first_item_on_an_undocked_autocomplete_should_select_the_last_autocomplete_item": "403f950d3311ba727ce5de0fdf1efa6b", - "Computed_Expressions_Pressing_enter_should_apply_the_autocomplete_item": "f054b380e40dc4a37ed6db463b1fbf0a", - "Computed_Expressions_Pressing_enter_should_apply_the_selected_column": "5fe1e6f44c90cd46357c65361cd38b7c", - "Computed_Expressions_Column_replace_should_work_for_a_fragment": "e82e3a0b89afd81bd3ae29f01091da22", - "Computed_Expressions_Removing_computed_columns_should_reset_active_columns,_pivots,_sort,_and_filter_": "69392af051cca296966b30c620d3de12", - "Computed_Expressions_Resetting_the_viewer_with_computed_columns_should_place_columns_in_the_inactive_list_": "baf0fcb071fbefb5c26d075994f90510", - "Computed_Expressions_Resetting_the_viewer_with_computed_columns_in_active_columns_should_reset_columns_but_not_delete_columns_": "baf0fcb071fbefb5c26d075994f90510", - "Computed_Expressions_Resetting_the_viewer_with_computed_columns_set_as_pivots_should_reset_pivots_but_not_delete_columns_": "baf0fcb071fbefb5c26d075994f90510", - "Computed_Expressions_Resetting_the_viewer_with_computed_columns_set_as_sort_should_reset_sort_but_not_delete_columns_": "baf0fcb071fbefb5c26d075994f90510", - "Computed_Expressions_Resetting_the_viewer_with_computed_columns_set_as_filters_should_reset_filters_but_not_delete_columns_": "baf0fcb071fbefb5c26d075994f90510", - "Computed_Expressions_saving_without_an_expression_should_fail_as_button_is_disabled_": "451566a3537c3c0cad5ccab180b298bb", - "Computed_Expressions_saving_a_single_computed_expression_should_add_it_to_inactive_columns_": "3c164aa3afe7fd0fcf334fcab809310f", - "Computed_Expressions_saving_a_single_computed_expression_with_dependencies_should_add_all_columns_to_inactive_columns_": "1c5379b79fd992e74aae4a59c1f6cbef", - "Computed_Expressions_aggregates_by_computed_expression_column_": "cba42c287bfbf889e0052c268ed78018", - "Computed_Expressions_computed_expression_column_aggregates_should_persist_": "9e67202e40bac151154c42db0b514d2c", - "Computed_Expressions_Computed_expression_columns_should_persist_when_new_views_are_created_": "0038c2304c0974866c06e2eac5594597", - "Computed_Expressions_Computed_expression_columns_should_persist_when_new_computed_columns_are_added_": "f3526492d7a32f4ee4d1d2ddd11cb367", - "Computed_Expressions_sorts_by_computed_expression_column_": "e5a3cd52eb5a86cfa5a5e3e9c0985abb", - "Computed_Expressions_filters_by_computed_expression_column_": "916091b807b9620f3a43937049804a33", - "Computed_Expressions_row_pivots_by_computed_expression_column_": "af3aeff58abb720b7e04431bb95eeae3", - "Computed_Expressions_column_pivots_by_computed_expression_column_": "08195639bc4d63cfa7ca43e3946b4938", - "Computed_Expressions_row_and_column_pivots_by_computed_expression_column_": "1765d8d2316d732601ad2b0f501e69fb", - "Computed_Expressions_adds_computed_expression_via_attribute": "df2d9a210bbed05c5d7c92a25454d44a", - "Computed_Expressions_adds_computed_expression_via_attribute_in_classic_syntax": "8bce6995afc0c9106d4df9cf849ace08", - "Computed_Expressions_Computed_expressions_are_saved_without_changes": "d87f3b675a1c9faea881e99846fc76ef", + "Computed_Expressions_click_on_add_column_button_opens_the_computed_expression_UI_": "b578088c3a7da4681633d36604677759", + "Computed_Expressions_click_on_close_button_closes_the_computed_expression_UI_": "3104ed7014dc37598ce4f50d734b55da", + "Computed_Expressions_An_expression_that_doesn_t_reach_max-width_should_undock_the_autocomplete": "b7a1357725cb7276dcc0e99dcff636a6", + "Computed_Expressions_Typing_a_partial_expression_should_search_by_expression_label_and_value": "7c46b4ee4e82377f6c4b16843443e676", + "Computed_Expressions_Typing_a_column_name_followed_by_a_partial_function_should_not_show_autocomplete": "45e49fe8f12d72a735afe4fc27baed74", + "Computed_Expressions_Typing_an_alias_should_not_show_autocomplete": "da98cc65c5bf87aa6b0b6b42eb5362fc", + "Computed_Expressions_Typing_a_numeric_function_should_show_autocomplete_for_numeric_columns": "422fe63a3b2d4009f2f1eff2ca18883a", + "Computed_Expressions_Typing_a_string_function_should_show_autocomplete_for_string_columns": "6a179331cc4e155f93f808e2f6174897", + "Computed_Expressions_Typing_a_datetime_function_should_show_autocomplete_for_datetime_columns": "38e474e3440a2be93d575a323e6763a7", + "Computed_Expressions_Typing_a_partial_column_name_should_show_autocomplete": "4ecbabe91ba9dcfe3410cc58f7a5db3a", + "Computed_Expressions_Typing_a_long_expression_should_dock_the_autocomplete": "2d0d7aaa2fe7b1771eb7de2c4119da28", + "Computed_Expressions_Typing_a_long_expression_should_dock_the_autocomplete,_and_the_details_panel_should_show": "b27ab73724fcb5a12937c826d52462c6", + "Computed_Expressions_Typing_an_expression_in_the_textarea_should_work_even_when_pushed_down_to_page_bottom_": "c77e3fb43691dc53f316191a45a5df01", + "Computed_Expressions_Typing_enter_should_save_a_valid_expression": "4658acb863e370ae511895c62f0d6d8f", + "Computed_Expressions_Typing_enter_should_not_save_an_invalid_expression": "6edea50823249c5476ccb16f89764333", + "Computed_Expressions_Pressing_arrow_down_should_select_the_next_autocomplete_item": "01a75061f78344007b4f2c7d4bb757c1", + "Computed_Expressions_Pressing_arrow_down_on_the_last_item_should_select_the_first_autocomplete_item": "246acb1cbc481ca7162fb45c016a4530", + "Computed_Expressions_Pressing_arrow_up_should_select_the_previous_autocomplete_item": "246acb1cbc481ca7162fb45c016a4530", + "Computed_Expressions_Pressing_arrow_up_from_the_first_item_should_select_the_last_autocomplete_item": "c21e7bacbde7dfd8e999edc20c5e21fc", + "Computed_Expressions_Pressing_arrow_down_on_an_undocked_autocomplete_should_select_the_next_autocomplete_item": "d3fdfe173ac64f8cf806d3376a153cff", + "Computed_Expressions_Pressing_arrow_down_on_the_last_item_on_an_undocked_autocomplete_should_select_the_first_autocomplete_item": "3b0e582a85373e381cc59388e02285fa", + "Computed_Expressions_Pressing_arrow_up_on_an_undocked_autocomplete_should_select_the_previous_autocomplete_item": "d84708c0aa81201e92fa494c145a433d", + "Computed_Expressions_Pressing_arrow_up_from_the_first_item_on_an_undocked_autocomplete_should_select_the_last_autocomplete_item": "d84708c0aa81201e92fa494c145a433d", + "Computed_Expressions_Pressing_enter_should_apply_the_autocomplete_item": "b14f44b9aae930a4bd10d41d33fc5f09", + "Computed_Expressions_Pressing_enter_should_apply_the_selected_column": "8df41abc07ed2f0c946bf13590238936", + "Computed_Expressions_Column_replace_should_work_for_a_fragment": "bf2a19beeb2e746c77c74927e4237123", + "Computed_Expressions_Removing_computed_columns_should_reset_active_columns,_pivots,_sort,_and_filter_": "e77daeb89da827508900d55ea08b778f", + "Computed_Expressions_Resetting_the_viewer_with_computed_columns_should_place_columns_in_the_inactive_list_": "2b727c016a05978b017f50f16eb8460b", + "Computed_Expressions_Resetting_the_viewer_with_computed_columns_in_active_columns_should_reset_columns_but_not_delete_columns_": "9612cba4f50fbca8114018b465b5b397", + "Computed_Expressions_Resetting_the_viewer_with_computed_columns_set_as_pivots_should_reset_pivots_but_not_delete_columns_": "9612cba4f50fbca8114018b465b5b397", + "Computed_Expressions_Resetting_the_viewer_with_computed_columns_set_as_sort_should_reset_sort_but_not_delete_columns_": "9612cba4f50fbca8114018b465b5b397", + "Computed_Expressions_Resetting_the_viewer_with_computed_columns_set_as_filters_should_reset_filters_but_not_delete_columns_": "9612cba4f50fbca8114018b465b5b397", + "Computed_Expressions_saving_without_an_expression_should_fail_as_button_is_disabled_": "28decbdeb89892b025fca328f74df3c6", + "Computed_Expressions_saving_a_single_computed_expression_should_add_it_to_inactive_columns_": "ebc47bd8e17aa97f238d99f30e0574d0", + "Computed_Expressions_saving_a_single_computed_expression_with_dependencies_should_add_all_columns_to_inactive_columns_": "e40932eab0ef8b08bfb23f0c38eb4320", + "Computed_Expressions_aggregates_by_computed_expression_column_": "0d0af36d2b89e945d822bfbbfcd288c5", + "Computed_Expressions_computed_expression_column_aggregates_should_persist_": "6f9475d8528435333dec58514f5955c0", + "Computed_Expressions_Computed_expression_columns_should_persist_when_new_views_are_created_": "a6ece965a3775a9c9970d908f8ecc059", + "Computed_Expressions_Computed_expression_columns_should_persist_when_new_computed_columns_are_added_": "4f9262bc60ecd06fb2548cacc6f66a2e", + "Computed_Expressions_sorts_by_computed_expression_column_": "b639a932dd942b18620a41ce2a4c750d", + "Computed_Expressions_filters_by_computed_expression_column_": "02c1e4b74bb5efe3da89c7a0dcfa956d", + "Computed_Expressions_row_pivots_by_computed_expression_column_": "4f6c6f3cbb9e206403aab8b6fb0ac5c9", + "Computed_Expressions_column_pivots_by_computed_expression_column_": "04a993b6976ef2152957892a8da961a7", + "Computed_Expressions_row_and_column_pivots_by_computed_expression_column_": "b1878f318761734cc7d4af1f2cc20ecf", + "Computed_Expressions_adds_computed_expression_via_attribute": "4910060f9afdc3be203b7575bfda5949", + "Computed_Expressions_adds_computed_expression_via_attribute_in_classic_syntax": "5251e19da047df179815f988e9537519", + "Computed_Expressions_Computed_expressions_are_saved_without_changes": "bbf8bf43651ebed485f8c98edd3ca895", "Computed_Expressions_Computed_expressions_are_restored_without_changes": "69f4a6ff3b226eacb9e09b8828b2025b", "Computed_Expressions_On_restore,_computed_expressions_in_the_active_columns_list_are_restored_correctly_": "563f8c45e0ec32bc4b07d30ed5f0086e", "Computed_Expressions_On_restore,_computed_expressions_in_pivots_are_restored_correctly_": "d2ea399d6c4b1ee2051f054a6d474b7a", @@ -54,44 +54,44 @@ "Computed_Expressions_On_restore,_computed_expressions_in_classic_syntax_are_parsed_correctly_": "563f8c45e0ec32bc4b07d30ed5f0086e", "superstore_adds_computed_column_via_attribute": "f2fa526d6f0c168a47ab272bb7ae5771", "superstore_user_defined_aggregates_maintained_on_computed_columns": "c7aa2902feb512ceb1e1487de80878ff", - "__GIT_COMMIT__": "d6344be7a126e4b2bfa05dbb8c4d5f5feca2b8c5", - "blank_Handles_reloading_with_a_schema_": "2c52bbde1ae5d88d3e68ef1e03b7d7c2", + "__GIT_COMMIT__": "686bb7147e58992e5d06056778b20d07605a8042", + "blank_Handles_reloading_with_a_schema_": "08d13138da7737a3420f31a0cbb50f34", "superstore_doesn_t_leak_tables_": "5bb762b2860eb5af067bb83afbca3264", - "superstore_doesn_t_leak_elements_": "ce0e8423bcca0fd661038fa7f04accff", - "superstore_doesn_t_leak_views_when_setting_row_pivots_": "fc8f4171457d902391a6a36d258025b1", - "superstore_doesn_t_leak_views_when_setting_filters_": "7cc0ae150462ccb2982baf8dd366c800", - "superstore_shows_a_grid_without_any_settings_applied_": "e37f106420995ac7f24048cc87efeee8", - "superstore_pivots_by_a_row_": "3838a5c9c297648c16adb188fdd81792", - "superstore_pivots_by_two_rows_": "7c70ca29011492356ecbaee9545664b3", - "superstore_pivots_by_a_column_": "3b709793e6bb11a04e5bbccbc55eefa3", - "superstore_pivots_by_a_row_and_a_column_": "742dd8f88681b35dae5f3ab51c28d06e", - "superstore_pivots_by_two_rows_and_two_columns_": "7a63c159e8aad39422405ca826336db1", - "superstore_sorts_by_a_hidden_column_": "825a0e7ced03a025c6131ba5feace7ce", - "superstore_sorts_by_a_numeric_column_": "299009107336a97a2b7b605b2720d679", - "superstore_filters_by_a_numeric_column_": "0a9543701d022486fbb31923cc24b2e6", - "superstore_filters_by_a_datetime_column_": "a559022335ab2914d3439fc0328c6da4", - "superstore_highlights_invalid_filter_": "31d0a312a72d32b2c3cb024e30ce4fd4", - "superstore_sorts_by_an_alpha_column_": "e8a355d423a19e61049b24b7359c9782", - "superstore_displays_visible_columns_": "0993f4f06682e2ff8da451713c0db625", - "superstore_Responsive_Layout_shows_horizontal_columns_on_small_vertical_viewports_": "97d13787310272ad798dcfb6cbd6ca5a", - "superstore_Responsive_Layout_shows_horizontal_columns_on_small_vertical_and_horizontal_viewports_": "4a81a0c79cb5d14ccff8ef72d207f296", - "superstore_replaces_all_rows_": "5fc07236b43c9c6150c0831dc3f365d8", - "blank_When_transferables_are_enabled,_transfers_an_arrow_in_load_": "8d09fd77ec523bd35eb5b349722c01c7", - "blank_When_transferables_are_enabled,_transfers_an_arrow_in_update_": "8d09fd77ec523bd35eb5b349722c01c7", - "Computed_Expressions_A_type-invalid_expression_should_show_an_error_message": "548f927ba75fecb6fe2f13569ae45bd7", - "Computed_Expressions_An_expression_with_invalid_inputs_should_show_an_error_message": "975e3577f728e7fa1c786cf71886af51", - "Computed_Expressions_An_expression_that_overwrites_a_real_column_should_show_an_error_message": "6c5c95b016c2b42f5f46742d8e548eff", - "Computed_Expressions_An_expression_that_overwrites_a_computed_column_with_a_different_type_should_show_an_error_message": "73c9141881fbfd4930eb3e285801e92f", - "filters_autocomplete_on_date_column": "dfb901e548c335eda1a1a4bc5287acf6", - "filters_autocomplete_on_datetime_column": "d5fb44209b65225875e7db75c8546ac3", - "filters_equals_on_date_column": "fa54b697f4a7b4e917d8877cc52d04df", - "filters_equals_ISO_string_on_datetime_column": "2c1057eedd9fe074078f39b80de68deb", - "filters_equals_US_locale_string_on_datetime_column": "6e20cb5a6c6ff41eb106ac5c1748cb06", - "filters_greater_than_on_date_column": "6235426f800a7ece5e605cff9159d13c", - "filters_greater_than_ISO_string_on_datetime_column": "a8a914f82c33c5b66d3c92a27db1efbd", - "filters_greater_than_US_locale_string_on_datetime_column": "8866d6deb5f9b5a53104d522d5fd2117", - "filters_less_than_on_date_column": "7eea9bf19a4e830ad4cd1ccc3df35c82", - "filters_less_than_ISO_string_on_datetime_column": "6ac163774bdfb22f49994797a61bc575", - "filters_less_than_US_locale_string_on_datetime_column": "ece6334d7f2d5c69e9720bd2dcf32564", - "blank_Should_load_a_promise_to_a_table_": "54a46ba7c9b6d2b0ffed358c86a0440a" + "superstore_doesn_t_leak_elements_": "7e23692b466d8ce84daadc429760e698", + "superstore_doesn_t_leak_views_when_setting_row_pivots_": "8db9fdb4b1f621e354455740febfee87", + "superstore_doesn_t_leak_views_when_setting_filters_": "3e63f35a79b76758303f450039bd9308", + "superstore_shows_a_grid_without_any_settings_applied_": "4237044c535f3df68de0609b04331aa8", + "superstore_pivots_by_a_row_": "2130fb71dab53108b74ea097857fb339", + "superstore_pivots_by_two_rows_": "173347ecaf4d57c7b0c9a034cbf62416", + "superstore_pivots_by_a_column_": "1af355105b64f9d20cd86a4ccfdd078d", + "superstore_pivots_by_a_row_and_a_column_": "d88405880f7a9de11f39a023b4104550", + "superstore_pivots_by_two_rows_and_two_columns_": "1f63a9af942e901116e575286c2c9b81", + "superstore_sorts_by_a_hidden_column_": "2768c62f5ffec373925d217a14ca484a", + "superstore_sorts_by_a_numeric_column_": "2e3b1715285e6917e32ee264c55a8823", + "superstore_filters_by_a_numeric_column_": "7a9d86e3ceeb4d8c08e067ec2dac3af6", + "superstore_filters_by_a_datetime_column_": "4f42856384f85f542fcd0bc88e3db026", + "superstore_highlights_invalid_filter_": "39364f4ed56c268904a63b643fdb9fce", + "superstore_sorts_by_an_alpha_column_": "c568a537bcb99ff62960edb15b6c90ad", + "superstore_displays_visible_columns_": "829d7459e18635ff40138800169360ff", + "superstore_Responsive_Layout_shows_horizontal_columns_on_small_vertical_viewports_": "cee1b7cb765cf7206ea749e57118fcc6", + "superstore_Responsive_Layout_shows_horizontal_columns_on_small_vertical_and_horizontal_viewports_": "f4c954eb93063f876aa6ddb1873eec8a", + "superstore_replaces_all_rows_": "4fdc4ff8207baaabc784456436bf2fc3", + "blank_When_transferables_are_enabled,_transfers_an_arrow_in_load_": "0734ea9a591e2449fc30347fe5466695", + "blank_When_transferables_are_enabled,_transfers_an_arrow_in_update_": "0734ea9a591e2449fc30347fe5466695", + "Computed_Expressions_A_type-invalid_expression_should_show_an_error_message": "78f9b6b59210484aa189f7c2f9612a18", + "Computed_Expressions_An_expression_with_invalid_inputs_should_show_an_error_message": "c42040c8568d5d0bb82473ec5416a7b6", + "Computed_Expressions_An_expression_that_overwrites_a_real_column_should_show_an_error_message": "c7881446a2b6ac40371da5185b60b563", + "Computed_Expressions_An_expression_that_overwrites_a_computed_column_with_a_different_type_should_show_an_error_message": "239c549b93d102216f883ff2de38b390", + "filters_autocomplete_on_date_column": "7e6f74c6fd2ee292c3cec310cbf0d9b3", + "filters_autocomplete_on_datetime_column": "c1f9f648d4842fcd0e9d45d49dd2757a", + "filters_equals_on_date_column": "2907cd2aeb3b0dde9169ffe2131c49b1", + "filters_equals_ISO_string_on_datetime_column": "1d849a81da0466321cb8cfab821a519c", + "filters_equals_US_locale_string_on_datetime_column": "060fdad41aed7820a653528b313fc9c1", + "filters_greater_than_on_date_column": "bab33b8dda6d1da2d035dcc41ed08d27", + "filters_greater_than_ISO_string_on_datetime_column": "db9e8035071f4a1438872cc810faea89", + "filters_greater_than_US_locale_string_on_datetime_column": "a04d6a83f64c1158b0463525c9c53b80", + "filters_less_than_on_date_column": "d435384ca8c1406e1654d359a96a6f87", + "filters_less_than_ISO_string_on_datetime_column": "4fdc48fcd95a87b1ae36bfe6f9a1bac7", + "filters_less_than_US_locale_string_on_datetime_column": "5ddd05cdaeafaf5b818ba490e1453d3d", + "blank_Should_load_a_promise_to_a_table_": "a3841665c5fc438c5e959c9858540744" } \ No newline at end of file diff --git a/packages/perspective-workspace/src/js/index.js b/packages/perspective-workspace/src/js/index.js index c9ffbc3a4e..71d85c2c8e 100644 --- a/packages/perspective-workspace/src/js/index.js +++ b/packages/perspective-workspace/src/js/index.js @@ -138,7 +138,19 @@ class PerspectiveWorkspaceElement extends HTMLElement { * workspace.tables.set("superstore", await worker.table(data)); */ restore(layout) { - return this.workspace.restore(layout); + this.workspace.restore(layout); + MessageLoop.flush(); + } + + /** + * An async function which resolves when all pending DOM changes at the + * time of invocation are resolved. + */ + async flush() { + MessageLoop.flush(); + await new Promise(requestAnimationFrame); + await new Promise(requestAnimationFrame); + await Promise.all(Array.from(this.children).map(x => x.flush())); } addTable(name, table) { @@ -174,6 +186,7 @@ class PerspectiveWorkspaceElement extends HTMLElement { */ notifyResize() { this.workspace.update(); + MessageLoop.flush(); } _light_dom_changed() { @@ -189,7 +202,7 @@ class PerspectiveWorkspaceElement extends HTMLElement { _register_light_dom_listener() { let observer = new MutationObserver(this._light_dom_changed.bind(this)); - let config = {attributes: false, childList: true, subtree: true}; + let config = {attributes: false, childList: true, subtree: false}; observer.observe(this, config); this._light_dom_changed(); } @@ -210,10 +223,9 @@ class PerspectiveWorkspaceElement extends HTMLElement { MessageLoop.sendMessage(this.workspace, Widget.Msg.BeforeAttach); container.insertBefore(this.workspace.node, null); MessageLoop.sendMessage(this.workspace, Widget.Msg.AfterAttach); + MessageLoop.flush(); - window.onresize = () => { - this.workspace.update(); - }; + window.onresize = this.workspace.update.bind(this.workspace); } disconnectedCallback() { diff --git a/packages/perspective-workspace/test/js/integration/dom.spec.js b/packages/perspective-workspace/test/js/integration/dom.spec.js index 350b937fd9..903433f14a 100644 --- a/packages/perspective-workspace/test/js/integration/dom.spec.js +++ b/packages/perspective-workspace/test/js/integration/dom.spec.js @@ -40,13 +40,13 @@ utils.with_server({paths: PATHS}, () => { workspace.appendChild(viewer); workspace.appendChild(viewer2); }); - await page.waitForSelector("perspective-workspace perspective-viewer:not([updating])"); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); await page.evaluate(() => { const viewer = document.body.querySelector('perspective-viewer[name="one"]'); const workspace = document.getElementById("workspace"); workspace.removeChild(viewer); }); - await page.waitForSelector("perspective-workspace perspective-viewer:not([updating])"); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); @@ -63,7 +63,7 @@ utils.with_server({paths: PATHS}, () => { const workspace = document.getElementById("workspace"); workspace.appendChild(viewer); }); - await page.waitForSelector("perspective-workspace perspective-viewer:not([updating])"); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); @@ -82,7 +82,7 @@ utils.with_server({paths: PATHS}, () => { workspace.appendChild(viewer); workspace.appendChild(viewer2); }); - await page.waitForSelector("perspective-workspace perspective-viewer:not([updating])"); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); @@ -98,7 +98,7 @@ utils.with_server({paths: PATHS}, () => { const workspace = document.getElementById("workspace"); workspace.appendChild(viewer); }); - await page.waitForSelector("perspective-workspace perspective-viewer:not([updating])"); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); @@ -112,7 +112,7 @@ utils.with_server({paths: PATHS}, () => { const workspace = document.getElementById("workspace"); workspace.appendChild(viewer); }); - await page.waitForSelector("perspective-workspace perspective-viewer:not([updating])"); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); diff --git a/packages/perspective-workspace/test/js/integration/restore.spec.js b/packages/perspective-workspace/test/js/integration/restore.spec.js index 7c2940bc6e..32611b19eb 100644 --- a/packages/perspective-workspace/test/js/integration/restore.spec.js +++ b/packages/perspective-workspace/test/js/integration/restore.spec.js @@ -45,7 +45,7 @@ utils.with_server({paths: PATHS}, () => { workspace.restore(config); }, config); - while ((await page.$$("perspective-workspace > perspective-viewer[updating]")).length > 0); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); @@ -68,7 +68,7 @@ utils.with_server({paths: PATHS}, () => { workspace.restore(config); }, config); - while ((await page.$$("perspective-workspace > perspective-viewer[updating]")).length > 0); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); @@ -99,7 +99,7 @@ utils.with_server({paths: PATHS}, () => { workspace.restore(config); }, config); - while ((await page.$$("perspective-workspace > perspective-viewer[updating]")).length > 0); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); @@ -126,7 +126,7 @@ utils.with_server({paths: PATHS}, () => { workspace.restore(config); }, config); - while ((await page.$$("perspective-workspace > perspective-viewer[updating]")).length > 0); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); await page.evaluate(() => { const workspace = document.getElementById("workspace").workspace; @@ -134,7 +134,7 @@ utils.with_server({paths: PATHS}, () => { workspace.duplicate(widget); }); - while ((await page.$$("perspective-workspace > perspective-viewer[updating]")).length > 0); + await page.evaluate(async () => await document.querySelector("perspective-workspace").flush()); }, {timeout: 30000} ); diff --git a/packages/perspective-workspace/test/results/linux.docker.json b/packages/perspective-workspace/test/results/linux.docker.json index e0c5fac211..4019f677f0 100644 --- a/packages/perspective-workspace/test/results/linux.docker.json +++ b/packages/perspective-workspace/test/results/linux.docker.json @@ -1,18 +1,18 @@ { - "index_restore_workspace_with_detail_only": "667fe30865a58cbae737b22df17c301f", - "index_restore_workspace_with_master_only": "42143ec93c4b3960e8b875903e8dbafa", - "index_restore_workspace_with_master_and_detail": "9fd7c71911b9e9b409945a65e09bc113", - "__GIT_COMMIT__": "d6344be7a126e4b2bfa05dbb8c4d5f5feca2b8c5", - "index_HTML_Create_One": "acd8158738eccc83be11208bf15eb3ea", - "index_HTML_Create_Multiple": "87cb067db81275344d33c397d99b0edf", - "index_HTML_Create_multiple_with_names": "e66371fc98538288d5abdbb0814cfbb6", - "index_removeChild_Remove_One": "032ca30a6f6e3748dad2776e86aa3477", - "index_appendChild_Create_One": "acd8158738eccc83be11208bf15eb3ea", - "index_appendChild_Create_multiple": "47aad4f9925c44ebcd8c39da9a6c27d1", - "index_appendChild_With_name": "667fe30865a58cbae737b22df17c301f", - "index_appendChild_Without_slot": "acd8158738eccc83be11208bf15eb3ea", - "index_restore_workspace_with_viewers_with_generated_slotids": "c730120d8bb9d9f37cffcfb855ee36d2", - "index_restore_workspace_in_linked_mode": "c5357e9105d3445d14cba63dd866f40a", - "index_selection_is_disabled_if_no_linked_viewers": "1b7088851e43a5c2d051d65bba338407", - "index_selection_is_disabled_if_grid_has_no_row-pivots": "ee1a250773b72a52ba593e272146459f" + "index_restore_workspace_with_detail_only": "9326b40c265268125da1879668282216", + "index_restore_workspace_with_master_only": "797f935b65e49e744d367eeef66f6792", + "index_restore_workspace_with_master_and_detail": "5c55c70ac41b1dce7cb86cb145b9cc79", + "__GIT_COMMIT__": "686bb7147e58992e5d06056778b20d07605a8042", + "index_HTML_Create_One": "ed5f6c831d1d25c583d24a429d13870d", + "index_HTML_Create_Multiple": "05be762fd6213abb48e97d60b1e2162e", + "index_HTML_Create_multiple_with_names": "deb44253b95e09d38db28b3c934c7766", + "index_removeChild_Remove_One": "41e2e5d5f272d79fdf810c8428a527e7", + "index_appendChild_Create_One": "ed5f6c831d1d25c583d24a429d13870d", + "index_appendChild_Create_multiple": "ff2217de5f2b8c13816d38849d52691c", + "index_appendChild_With_name": "9326b40c265268125da1879668282216", + "index_appendChild_Without_slot": "ed5f6c831d1d25c583d24a429d13870d", + "index_restore_workspace_with_viewers_with_generated_slotids": "b5e92e65c678b8efacd019654872d7b8", + "index_restore_workspace_in_linked_mode": "01607ee9ddd5b67736c817784ee22501", + "index_selection_is_disabled_if_no_linked_viewers": "f0646d8b3d42b54e15a7ac72cf7aa114", + "index_selection_is_disabled_if_grid_has_no_row-pivots": "9b253954b8154012e962e1d8b6876628" } \ No newline at end of file diff --git a/packages/perspective/test/js/pivots.js b/packages/perspective/test/js/pivots.js index e149812cf3..d784cba94c 100644 --- a/packages/perspective/test/js/pivots.js +++ b/packages/perspective/test/js/pivots.js @@ -969,10 +969,10 @@ module.exports = perspective => { }); let result2 = await view.to_columns(); expect(result2).toEqual({ - "2019-4-11 23:40:35|x": [null, null, 3, 4], - "2019-4-11 23:40:35|y": [null, null, "c", "d"], - "2019-4-13 03:27:15|x": [1, 2, null, null], - "2019-4-13 03:27:15|y": ["a", "b", null, null] + "4/11/2019, 11:40:35 PM|x": [null, null, 3, 4], + "4/11/2019, 11:40:35 PM|y": [null, null, "c", "d"], + "4/13/2019, 3:27:15 AM|x": [1, 2, null, null], + "4/13/2019, 3:27:15 AM|y": ["a", "b", null, null] }); view.delete(); table.delete();