Skip to content

Commit 12658db

Browse files
committed
improve coverage of plotly_relayouting for polar plots
1 parent 082f1d2 commit 12658db

File tree

3 files changed

+95
-39
lines changed

3 files changed

+95
-39
lines changed

Diff for: src/plots/polar/polar.js

+12
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,18 @@ proto.updateRadialDrag = function(fullLayout, polarLayout, rngIndex) {
10471047
moveFn2 = comp < 0.5 ? rotateMove : rerangeMove;
10481048
}
10491049
}
1050+
1051+
var update = {};
1052+
computeRadialAxisUpdates(update);
1053+
gd.emit('plotly_relayouting', update);
1054+
}
1055+
1056+
function computeRadialAxisUpdates(update) {
1057+
if(angle1 !== null) {
1058+
update[_this.id + '.radialaxis.angle'] = angle1;
1059+
} else if(rprime !== null) {
1060+
update[_this.id + '.radialaxis.range[' + rngIndex + ']'] = rprime;
1061+
}
10501062
}
10511063

10521064
function doneFn() {

Diff for: test/jasmine/tests/cartesian_interact_test.js

+3-8
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ describe('main plot pan', function() {
189189
});
190190

191191
it('should emit plotly_relayouting events during pan interactions', function(done) {
192-
var mock = require('@mocks/10.json');
192+
var mock = Lib.extendDeep({}, require('@mocks/10.json'));
193+
mock.layout.dragmode = 'pan';
193194

194195
function _drag(x0, y0, x1, y1, n) {
195196
mouseEvent('mousedown', x0, y0);
@@ -202,13 +203,7 @@ describe('main plot pan', function() {
202203
}
203204

204205
var nsteps = 10; var events = []; var relayoutCallback;
205-
Plotly.plot(gd, mock.data, mock.layout).then(function() {
206-
// Switch to pan mode
207-
modeBar = gd._fullLayout._modeBar;
208-
var buttonPan = selectButton(modeBar, 'pan2d');
209-
buttonPan.click();
210-
expect(buttonPan.isActive()).toBe(true); // switched on dragmode
211-
})
206+
Plotly.plot(gd, mock.data, mock.layout)
212207
.then(function() {
213208
relayoutCallback = jasmine.createSpy('relayoutCallback');
214209
gd.on('plotly_relayout', relayoutCallback);

Diff for: test/jasmine/tests/polar_test.js

+80-31
Original file line numberDiff line numberDiff line change
@@ -1251,38 +1251,83 @@ describe('Test polar interactions:', function() {
12511251
describe('plotly_relayouting', function() {
12521252
afterEach(destroyGraphDiv);
12531253

1254-
['zoom'].forEach(function(dragmode) {
1254+
it('should emit events on radial drag area', function(done) {
1255+
var events = []; var path = [[375, 200], [-100, 0]]; var nsteps = 10;
1256+
var relayoutEvents = [];
1257+
var fig = Lib.extendDeep({}, require('@mocks/polar_scatter.json'));
1258+
// to avoid dragging on hover labels
1259+
fig.layout.hovermode = false;
1260+
1261+
// adjust margins so that middle of plot area is at 300x300
1262+
// with its middle at [200,200]
1263+
fig.layout.width = 400;
1264+
fig.layout.height = 400;
1265+
fig.layout.margin = {l: 50, t: 50, b: 50, r: 50};
1266+
12551267
function _drag(p0, dp, nsteps) {
1256-
var node = d3.select('.polar > .draglayer > .maindrag').node();
1268+
var node = d3.select('.polar > .draglayer > .radialdrag').node();
12571269
return drag(node, dp[0], dp[1], null, p0[0], p0[1], nsteps);
12581270
}
12591271

1260-
it('should emit plotly_relayouting events on ' + dragmode, function(done) {
1261-
var events = []; var path = [[150, 250], [175, 250]]; var relayoutCallback;
1262-
var fig = Lib.extendDeep({}, require('@mocks/polar_scatter.json'));
1263-
fig.layout.dragmode = dragmode;
1272+
var gd = createGraphDiv();
1273+
Plotly.plot(gd, fig)
1274+
.then(function() {
1275+
gd.on('plotly_relayout', function(e) {
1276+
relayoutEvents.push(e);
1277+
});
1278+
gd.on('plotly_relayouting', function(e) {
1279+
events.push(e);
1280+
});
1281+
return _drag(path[0], path[1], nsteps);
1282+
})
1283+
.then(function() {
1284+
var len = events.length;
1285+
expect(len).toEqual(nsteps);
1286+
expect(events[len - 1]['polar.radialaxis.range[1]']).toBeCloseTo(16, -1);
1287+
expect(relayoutEvents.length).toEqual(1);
1288+
Object.keys(relayoutEvents[0]).sort().forEach(function(key) {
1289+
expect(Object.keys(events[len - 1])).toContain(key);
1290+
});
1291+
})
1292+
.catch(failTest)
1293+
.then(done);
1294+
});
12641295

1265-
var gd = createGraphDiv();
1266-
Plotly.plot(gd, fig)
1267-
.then(function() {
1268-
relayoutCallback = jasmine.createSpy('relayoutCallback');
1269-
gd.on('plotly_relayout', relayoutCallback);
1270-
gd.on('plotly_relayouting', function(e) {
1271-
events.push(e);
1272-
});
1273-
return _drag(path[0], path[1]);
1274-
})
1275-
.then(function() {
1276-
expect(events.length).toEqual(path.length - 1);
1277-
expect(events[0]['polar.radialaxis.range']).toBeCloseToArray([6, 11], 0.1);
1278-
expect(relayoutCallback).toHaveBeenCalledTimes(1);
1279-
})
1280-
.catch(failTest)
1281-
.then(done);
1282-
});
1296+
it('should emit events on inner radial drag area', function(done) {
1297+
var events = []; var path = [[150, 250], [175, 250]];
1298+
var relayoutEvents = [];
1299+
var fig = Lib.extendDeep({}, require('@mocks/polar_scatter.json'));
1300+
1301+
function _drag(p0, dp, nsteps) {
1302+
var node = d3.select('.polar > .draglayer > .maindrag').node();
1303+
return drag(node, dp[0], dp[1], null, p0[0], p0[1], nsteps);
1304+
}
1305+
1306+
var gd = createGraphDiv();
1307+
Plotly.plot(gd, fig)
1308+
.then(function() {
1309+
gd.on('plotly_relayout', function(e) {
1310+
relayoutEvents.push(e);
1311+
});
1312+
gd.on('plotly_relayouting', function(e) {
1313+
events.push(e);
1314+
});
1315+
return _drag(path[0], path[1]);
1316+
})
1317+
.then(function() {
1318+
expect(events.length).toEqual(path.length - 1);
1319+
expect(events[0]['polar.radialaxis.range']).toBeCloseToArray([6, 11], 0.1);
1320+
expect(relayoutEvents.length).toEqual(1);
1321+
Object.keys(relayoutEvents[0]).sort().forEach(function(key) {
1322+
expect(Object.keys(events[0])).toContain(key);
1323+
});
1324+
})
1325+
.catch(failTest)
1326+
.then(done);
12831327
});
1284-
it('should emit plotly_relayouting events on angular drag', function(done) {
1285-
var events = []; var relayoutCallback;
1328+
1329+
it('should emit events on angular drag area', function(done) {
1330+
var events = []; var relayoutEvents = []; var nsteps = 10;
12861331
var fig = Lib.extendDeep({}, require('@mocks/polar_scatter.json'));
12871332

12881333
function _drag(p0, dp, nsteps) {
@@ -1295,17 +1340,21 @@ describe('Test polar interactions:', function() {
12951340
var gd = createGraphDiv();
12961341
Plotly.plot(gd, fig)
12971342
.then(function() {
1298-
relayoutCallback = jasmine.createSpy('relayoutCallback');
1299-
gd.on('plotly_relayout', relayoutCallback);
1343+
gd.on('plotly_relayout', function(e) {
1344+
relayoutEvents.push(e);
1345+
});
13001346
gd.on('plotly_relayouting', function(e) {
13011347
events.push(e);
13021348
});
1303-
return _drag(dragPos0, [0, -110], 10);
1349+
return _drag(dragPos0, [0, -110], nsteps);
13041350
})
13051351
.then(function() {
1306-
expect(events.length).toEqual(10);
1352+
expect(events.length).toEqual(nsteps);
13071353
expect(events.splice(-1, 1)[0]['polar.angularaxis.rotation']).toBeCloseTo(29, 0);
1308-
expect(relayoutCallback).toHaveBeenCalledTimes(1);
1354+
expect(relayoutEvents.length).toEqual(1);
1355+
Object.keys(relayoutEvents[0]).sort().forEach(function(key) {
1356+
expect(Object.keys(events[0])).toContain(key);
1357+
});
13091358
})
13101359
.catch(failTest)
13111360
.then(done);

0 commit comments

Comments
 (0)