@@ -8,6 +8,7 @@ var mock = require('@mocks/sankey_energy.json');
8
8
var mockDark = require ( '@mocks/sankey_energy_dark.json' ) ;
9
9
var mockCircular = require ( '@mocks/sankey_circular.json' ) ;
10
10
var mockCircularLarge = require ( '@mocks/sankey_circular_large.json' ) ;
11
+ var mockXY = require ( '@mocks/sankey_x_y.json' ) ;
11
12
var Sankey = require ( '@src/traces/sankey' ) ;
12
13
13
14
var createGraphDiv = require ( '../assets/create_graph_div' ) ;
@@ -20,6 +21,7 @@ var supplyAllDefaults = require('../assets/supply_defaults');
20
21
var defaultColors = require ( '@src/components/color/attributes' ) . defaults ;
21
22
22
23
var drag = require ( '../assets/drag' ) ;
24
+ var checkOverlap = require ( '../assets/check_overlap' ) ;
23
25
24
26
describe ( 'sankey tests' , function ( ) {
25
27
@@ -510,6 +512,32 @@ describe('sankey tests', function() {
510
512
} ) ;
511
513
} ) ;
512
514
515
+ it ( 'prevents nodes from overlapping in snap arrangement' , function ( done ) {
516
+ function checkElementOverlap ( i , j ) {
517
+ var base = document . querySelector ( '.sankey-node:nth-of-type(' + i + ')' ) ;
518
+ base = base . querySelector ( '.node-rect' ) ;
519
+ var compare = document . querySelector ( '.sankey-node:nth-of-type(' + j + ')' ) ;
520
+ compare = compare . querySelector ( '.node-rect' ) ;
521
+ return checkOverlap ( base , compare ) ;
522
+ }
523
+
524
+ var mockCopy = Lib . extendDeep ( { } , mockXY ) ;
525
+
526
+ Plotly . plot ( gd , mockCopy )
527
+ . then ( function ( ) {
528
+ // Nodes overlap
529
+ expect ( checkElementOverlap ( 3 , 6 ) ) . toBeTruthy ( 'nodes do not overlap' ) ;
530
+
531
+ mockCopy . data [ 0 ] . arrangement = 'snap' ;
532
+ return Plotly . newPlot ( gd , mockCopy ) ;
533
+ } )
534
+ . then ( function ( ) {
535
+ // Nodes do not overlap in snap
536
+ expect ( checkElementOverlap ( 3 , 6 ) ) . not . toBeTruthy ( 'nodes overlap' ) ;
537
+ } )
538
+ . catch ( failTest )
539
+ . then ( done ) ;
540
+ } ) ;
513
541
} ) ;
514
542
515
543
describe ( 'Test hover/click interactions:' , function ( ) {
@@ -1039,7 +1067,7 @@ describe('sankey tests', function() {
1039
1067
nodes = document . getElementsByClassName ( 'sankey-node' ) ;
1040
1068
node = nodes . item ( nodeId ) ;
1041
1069
position = getNodeCoords ( node ) ;
1042
- var timeDelay = ( arrangement === 'snap' ) ? 1000 : 0 ; // Wait for force simulation to finish
1070
+ var timeDelay = ( arrangement === 'snap' ) ? 2000 : 0 ; // Wait for force simulation to finish
1043
1071
return drag ( node , move [ 0 ] , move [ 1 ] , false , false , false , 10 , false , timeDelay ) ;
1044
1072
} )
1045
1073
. then ( function ( ) {
@@ -1075,11 +1103,12 @@ describe('sankey tests', function() {
1075
1103
1076
1104
it ( 'should persist the position of every nodes after drag in attributes nodes.(x|y)' , function ( done ) {
1077
1105
mockCopy . data [ 0 ] . arrangement = arrangement ;
1078
- var move = [ 50 , 50 ] ;
1106
+ var move = [ 50 , - 50 ] ;
1079
1107
var nodes ;
1080
1108
var node ;
1081
1109
var x , x1 ;
1082
1110
var y , y1 ;
1111
+ var precision = 3 ;
1083
1112
1084
1113
Plotly . newPlot ( gd , mockCopy )
1085
1114
. then ( function ( ) {
@@ -1106,13 +1135,13 @@ describe('sankey tests', function() {
1106
1135
x1 = gd . _fullData [ 0 ] . node . x . slice ( ) ;
1107
1136
y1 = gd . _fullData [ 0 ] . node . y . slice ( ) ;
1108
1137
if ( arrangement === 'freeform' ) expect ( x1 [ nodeId ] ) . not . toBeCloseTo ( x [ nodeId ] , 2 , 'node ' + nodeId + ' has not changed x position' ) ;
1109
- expect ( y1 [ nodeId ] ) . not . toBeCloseTo ( y [ nodeId ] , 2 , 'node ' + nodeId + ' has not changed y position' ) ;
1138
+ expect ( y1 [ nodeId ] ) . not . toBeCloseTo ( y [ nodeId ] , precision , 'node ' + nodeId + ' has not changed y position' ) ;
1110
1139
1111
1140
// All nodes should have same x, y values after drag
1112
1141
for ( var i = 0 ; i < x . length ; i ++ ) {
1113
1142
if ( i === nodeId ) continue ; // except the one was just dragged
1114
- if ( arrangement === 'freeform' ) expect ( x [ i ] ) . toBeCloseTo ( x [ i ] , 3 , 'node ' + i + ' has changed x position' ) ;
1115
- expect ( y [ i ] ) . toBeCloseTo ( y [ i ] , 3 , 'node ' + i + ' has changed y position' ) ;
1143
+ if ( arrangement === 'freeform' ) expect ( x1 [ i ] ) . toBeCloseTo ( x [ i ] , 3 , 'node ' + i + ' has changed x position' ) ;
1144
+ expect ( y1 [ i ] ) . toBeCloseTo ( y [ i ] , precision , 'node ' + i + ' has changed y position' ) ;
1116
1145
}
1117
1146
return true ;
1118
1147
} )
@@ -1121,8 +1150,8 @@ describe('sankey tests', function() {
1121
1150
} ) ;
1122
1151
} ) ;
1123
1152
} ) ;
1124
-
1125
1153
} ) ;
1154
+
1126
1155
it ( 'emits a warning if node.pad is too large' , function ( done ) {
1127
1156
var gd = createGraphDiv ( ) ;
1128
1157
var mockCopy = Lib . extendDeep ( { } , mock ) ;
0 commit comments