From d49f0adad97f3c6ea42733d08b5eccb3d552243b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Thu, 25 May 2017 11:59:01 -0400 Subject: [PATCH 1/2] test sort transform event data using hover only - hover and click when invoked programmatically back-to-back don't behave well. - this test case makes assertions on the event data (i.e. gd._hoverdata) which is the same for hover and click - use `delete gd._lastHoverTime` to :hocho: that annoying wait promise --- test/jasmine/tests/transform_sort_test.js | 32 ++++------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/test/jasmine/tests/transform_sort_test.js b/test/jasmine/tests/transform_sort_test.js index aa055af14a6..225f25d8098 100644 --- a/test/jasmine/tests/transform_sort_test.js +++ b/test/jasmine/tests/transform_sort_test.js @@ -258,7 +258,7 @@ describe('Test sort transform interactions:', function() { .then(done); }); - it('does not preserve hover/click `pointNumber` value', function(done) { + it('does not preserve event data `pointNumber` value', function(done) { var gd = createGraphDiv(); function getPxPos(gd, id) { @@ -275,6 +275,7 @@ describe('Test sort transform interactions:', function() { function hover(gd, id) { return new Promise(function(resolve) { gd.once('plotly_hover', function(eventData) { + delete gd._lastHoverTime; resolve(eventData); }); @@ -283,25 +284,6 @@ describe('Test sort transform interactions:', function() { }); } - function click(gd, id) { - return new Promise(function(resolve) { - gd.once('plotly_click', function(eventData) { - resolve(eventData); - }); - - var pos = getPxPos(gd, id); - mouseEvent('mousemove', pos[0], pos[1]); - mouseEvent('mousedown', pos[0], pos[1]); - mouseEvent('mouseup', pos[0], pos[1]); - }); - } - - function wait() { - return new Promise(function(resolve) { - setTimeout(resolve, 100); - }); - } - function assertPt(eventData, x, y, pointNumber, id) { var pt = eventData.points[0]; @@ -334,12 +316,10 @@ describe('Test sort transform interactions:', function() { .then(function(eventData) { assertPt(eventData, 0, 1, 3, 'D'); }) - .then(wait) - .then(function() { return click(gd, 'G'); }) + .then(function() { return hover(gd, 'G'); }) .then(function(eventData) { assertPt(eventData, 1, 1, 6, 'G'); }) - .then(wait) .then(function() { return Plotly.restyle(gd, 'transforms[0].enabled', true); }) @@ -347,8 +327,7 @@ describe('Test sort transform interactions:', function() { .then(function(eventData) { assertPt(eventData, 0, 1, 1, 'D'); }) - .then(wait) - .then(function() { return click(gd, 'G'); }) + .then(function() { return hover(gd, 'G'); }) .then(function(eventData) { assertPt(eventData, 1, 1, 5, 'G'); }) @@ -359,8 +338,7 @@ describe('Test sort transform interactions:', function() { .then(function(eventData) { assertPt(eventData, 0, 1, 1, 'D'); }) - .then(wait) - .then(function() { return click(gd, 'G'); }) + .then(function() { return hover(gd, 'G'); }) .then(function(eventData) { assertPt(eventData, 1, 1, 5, 'G'); }) From 50e36f5e562335b92453e20feb551317f1bf135f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Thu, 25 May 2017 13:34:11 -0400 Subject: [PATCH 2/2] reject hover promise if didn't resolve after 100ms --- test/jasmine/tests/transform_sort_test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/jasmine/tests/transform_sort_test.js b/test/jasmine/tests/transform_sort_test.js index 225f25d8098..c3d4e5774d0 100644 --- a/test/jasmine/tests/transform_sort_test.js +++ b/test/jasmine/tests/transform_sort_test.js @@ -273,7 +273,7 @@ describe('Test sort transform interactions:', function() { } function hover(gd, id) { - return new Promise(function(resolve) { + return new Promise(function(resolve, reject) { gd.once('plotly_hover', function(eventData) { delete gd._lastHoverTime; resolve(eventData); @@ -281,6 +281,10 @@ describe('Test sort transform interactions:', function() { var pos = getPxPos(gd, id); mouseEvent('mousemove', pos[0], pos[1]); + + setTimeout(function() { + reject('plotly_hover did not get called!'); + }, 100); }); }