diff --git a/tests/e2e/helpers/perform-interactions.ts b/tests/e2e/helpers/perform-interactions.ts index 195baa15f2..8776533c54 100644 --- a/tests/e2e/helpers/perform-interactions.ts +++ b/tests/e2e/helpers/perform-interactions.ts @@ -6,6 +6,7 @@ import { doVerticalDrag, } from './mouse-drag-actions'; import { doMouseScroll } from './mouse-scroll-actions'; +import { pageTimeout } from './page-timeout'; import { doLongTouch, doPinchZoomTouch, doSwipeTouch } from './touch-actions'; import { doZoomInZoomOut } from './zoom-action'; @@ -84,7 +85,9 @@ async function performAction( await target.click({ button: 'left' }); break; case 'doubleClick': - await target.click({ button: 'left', clickCount: 2 }); + await target.click({ button: 'left' }); + await pageTimeout(page, 200); + await target.click({ button: 'left' }); break; case 'outsideClick': { diff --git a/tests/e2e/interactions/test-cases/mouse/double-click-pane.js b/tests/e2e/interactions/test-cases/mouse/double-click-pane.js new file mode 100644 index 0000000000..2ccc7aaa59 --- /dev/null +++ b/tests/e2e/interactions/test-cases/mouse/double-click-pane.js @@ -0,0 +1,78 @@ +function generateData() { + const res = []; + const time = new Date(Date.UTC(2018, 0, 1, 0, 0, 0, 0)); + for (let i = 0; i < 500; ++i) { + res.push({ + time: time.getTime() / 1000, + value: i, + }); + + time.setUTCDate(time.getUTCDate() + 1); + } + return res; +} + +function initialInteractionsToPerform() { + return [{ action: 'doubleClick', target: 'pane' }]; +} + +function finalInteractionsToPerform() { + return []; +} + +let chart; +let clickCount = 0; +let dblClickCount = 0; + +function beforeInteractions(container) { + chart = LightweightCharts.createChart(container); + + const mainSeries = chart.addLineSeries(); + + const mainSeriesData = generateData(); + mainSeries.setData(mainSeriesData); + + chart.subscribeDblClick(mouseParams => { + if (!mouseParams) { + return; + } + dblClickCount += 1; + }); + chart.subscribeClick(mouseParams => { + if (!mouseParams) { + return; + } + clickCount += 1; + }); + + return new Promise(resolve => { + requestAnimationFrame(() => { + resolve(); + }); + }); +} + +function afterInitialInteractions() { + return new Promise(resolve => { + requestAnimationFrame(resolve); + }); +} + +function afterFinalInteractions() { + if (clickCount < 1) { + throw new Error('Expected click event handler to be evoked.'); + } + if (dblClickCount < 1) { + throw new Error('Expected double click event handler to be evoked.'); + } + if (clickCount > 1) { + throw new Error('Expected click event handler to be evoked only once.'); + } + if (dblClickCount > 1) { + throw new Error( + 'Expected double click event handler to be evoked only once.' + ); + } + + return Promise.resolve(); +}