@@ -408,7 +408,7 @@ describe("TabContainer popover", () => {
408
408
409
409
describe ( "TabContainer drag and drop tests" , ( ) => {
410
410
const getDragOffset = async ( draggedElement , dropTargetElement , targetPosition ) => {
411
- const EXTRA_OFFSET = 30 ; // TODO
411
+ const OFFSET = 5 ;
412
412
const draggedRectangle = {
413
413
...await draggedElement . getLocation ( ) ,
414
414
...await draggedElement . getSize ( )
@@ -417,27 +417,31 @@ describe("TabContainer drag and drop tests", () => {
417
417
const dropTargetElementRectangle = {
418
418
...await dropTargetElement . getLocation ( ) ,
419
419
...await dropTargetElement . getSize ( )
420
- }
420
+ } ;
421
421
422
- const draggedElementXCenter = ( draggedRectangle . x + draggedRectangle . width / 2 ) ;
423
- const draggedElementYCenter = ( draggedRectangle . y + draggedRectangle . height / 2 ) ;
424
- const droppedElementXCenter = ( dropTargetElementRectangle . x + dropTargetElementRectangle . width / 2 ) ;
425
- const droppedElementYCenter = ( dropTargetElementRectangle . y + dropTargetElementRectangle . height / 2 ) ;
422
+ const draggedElementXCenter = draggedRectangle . x + draggedRectangle . width / 2 ;
423
+ const draggedElementYCenter = draggedRectangle . y + draggedRectangle . height / 2 ;
426
424
427
- let offsetToXCenter = Math . round ( droppedElementXCenter - draggedElementXCenter ) ;
428
- let offsetToYCenter = Math . round ( droppedElementYCenter - draggedElementYCenter ) ;
425
+ let dropTargetX ;
426
+ let dropTargetY ;
429
427
430
428
if ( targetPosition === "Before" ) {
431
- offsetToXCenter -= EXTRA_OFFSET ;
432
- offsetToYCenter -= EXTRA_OFFSET
429
+ dropTargetX = dropTargetElementRectangle . x + OFFSET ;
430
+ dropTargetY = dropTargetElementRectangle . y + OFFSET ;
433
431
} else if ( targetPosition === "After" ) {
434
- offsetToXCenter += EXTRA_OFFSET ;
435
- offsetToYCenter += EXTRA_OFFSET ;
432
+ dropTargetX = dropTargetElementRectangle . x + dropTargetElementRectangle . width - OFFSET ;
433
+ dropTargetY = dropTargetElementRectangle . y + dropTargetElementRectangle . height - OFFSET ;
434
+ } else { // "On"
435
+ dropTargetX = dropTargetElementRectangle . x + dropTargetElementRectangle . width / 2 ;
436
+ dropTargetY = dropTargetElementRectangle . y + dropTargetElementRectangle . height / 2 ;
436
437
}
437
438
439
+ const offsetToX = Math . round ( dropTargetX - draggedElementXCenter ) ;
440
+ const offsetToY = Math . round ( dropTargetY - draggedElementYCenter ) ;
441
+
438
442
return {
439
- x : offsetToXCenter ,
440
- y : offsetToYCenter
443
+ x : offsetToX ,
444
+ y : offsetToY
441
445
} ;
442
446
} ;
443
447
@@ -469,6 +473,12 @@ describe("TabContainer drag and drop tests", () => {
469
473
await stripItemToDrag . dragAndDrop ( { x : dragOffset . x , y : 0 } ) ;
470
474
}
471
475
476
+ const dragAndDropInPopover = async ( popoverItemToDrag , popoverDropTarget , placement ) => {
477
+ const dragOffset = await getDragOffset ( popoverItemToDrag , popoverDropTarget , placement ) ;
478
+
479
+ await popoverItemToDrag . dragAndDrop ( { x : 0 , y : dragOffset . y } , { duration : 5000 } ) ;
480
+ }
481
+
472
482
before ( async ( ) => {
473
483
await browser . url ( `test/pages/TabContainerDragAndDrop.html` ) ;
474
484
await browser . setWindowSize ( 1024 , 1000 ) ;
@@ -477,39 +487,90 @@ describe("TabContainer drag and drop tests", () => {
477
487
it ( "Moving item After another" , async ( ) => {
478
488
await browser . pause ( 5000 ) ; // TODO: this workaround avoids test crash. Find way to avoid it
479
489
let displayedStripItems = await tabContainer . getDisplayedTabStripItems ( "tabContainerDnd" ) ;
480
- let firstStripItem = displayedStripItems [ 0 ] ;
481
- const secondStripItem = displayedStripItems [ 1 ] ;
490
+ let draggedStripItem = displayedStripItems [ 0 ] ;
491
+ let dropTargetStripItem = displayedStripItems [ 1 ] ;
482
492
let expectedOrder = await Promise . all ( await browser . $$ ( `#tabContainerDnd > *` ) . map ( e => e . getAttribute ( "id" ) ) ) ;
483
493
484
- await dragAndDropInStrip ( firstStripItem , secondStripItem , "After" ) ;
485
- expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( firstStripItem ) , await tabContainer . getRealTabId ( secondStripItem ) ) ;
494
+ await dragAndDropInStrip ( draggedStripItem , dropTargetStripItem , "After" ) ;
495
+ expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( draggedStripItem ) , await tabContainer . getRealTabId ( dropTargetStripItem ) ) ;
486
496
assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
487
497
488
498
displayedStripItems = await tabContainer . getDisplayedTabStripItems ( "tabContainerDnd" ) ;
489
- firstStripItem = displayedStripItems [ 1 ] ;
490
- const lastStripItem = displayedStripItems [ displayedStripItems . length - 1 ] ;
491
- await dragAndDropInStrip ( firstStripItem , lastStripItem , "After" ) ;
492
- expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( firstStripItem ) , await tabContainer . getRealTabId ( lastStripItem ) ) ;
499
+ draggedStripItem = displayedStripItems [ 1 ] ;
500
+ dropTargetStripItem = displayedStripItems [ displayedStripItems . length - 1 ] ;
501
+ await dragAndDropInStrip ( draggedStripItem , dropTargetStripItem , "After" ) ;
502
+ expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( draggedStripItem ) , await tabContainer . getRealTabId ( dropTargetStripItem ) ) ;
493
503
assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
494
504
} ) ;
495
505
496
506
it ( "Moving item Before another" , async ( ) => {
497
- let displayedStripItems = await tabContainer . getDisplayedTabStripItems ( "tabContainerDnd" ) ;
498
- const secondToLastStripItem = displayedStripItems [ displayedStripItems . length - 2 ] ;
499
- let lastStripItem = displayedStripItems [ displayedStripItems . length - 1 ] ;
507
+ let displayedStripItems = await tabContainer . getDisplayedTabStripItems ( "tabContainerDnd" ) ;
508
+ let draggedStripItem = displayedStripItems [ displayedStripItems . length - 1 ] ;
509
+ let dropTargetStripItem = displayedStripItems [ displayedStripItems . length - 2 ] ;
500
510
let expectedOrder = await Promise . all ( await browser . $$ ( `#tabContainerDnd > *` ) . map ( e => e . getAttribute ( "id" ) ) ) ;
501
511
502
- await dragAndDropInStrip ( lastStripItem , secondToLastStripItem , "Before" ) ;
503
- expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( lastStripItem ) , await tabContainer . getRealTabId ( secondToLastStripItem ) ) ;
512
+ await dragAndDropInStrip ( draggedStripItem , dropTargetStripItem , "Before" ) ;
513
+ expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( draggedStripItem ) , await tabContainer . getRealTabId ( dropTargetStripItem ) ) ;
504
514
assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
505
515
506
516
displayedStripItems = await tabContainer . getDisplayedTabStripItems ( "tabContainerDnd" ) ;
507
- const firstStripItem = displayedStripItems [ 0 ] ;
508
- lastStripItem = displayedStripItems [ displayedStripItems . length - 2 ] ;
509
- await dragAndDropInStrip ( lastStripItem , firstStripItem , "Before" ) ;
510
- expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( lastStripItem ) , await tabContainer . getRealTabId ( firstStripItem ) ) ;
517
+ draggedStripItem = displayedStripItems [ displayedStripItems . length - 2 ] ;
518
+ dropTargetStripItem = displayedStripItems [ 0 ] ;
519
+ await dragAndDropInStrip ( draggedStripItem , dropTargetStripItem , "Before" ) ;
520
+ expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( draggedStripItem ) , await tabContainer . getRealTabId ( dropTargetStripItem ) ) ;
521
+ assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
522
+ } ) ;
523
+
524
+ it ( "Moving item On another" , async ( ) => {
525
+ let displayedStripItems = await tabContainer . getDisplayedTabStripItems ( "tabContainerDnd" ) ;
526
+ let draggedStripItem = displayedStripItems [ 1 ] ;
527
+ let draggedStripItemId = await tabContainer . getRealTabId ( draggedStripItem ) ;
528
+ let dropTargetStripItem = displayedStripItems [ 2 ] ;
529
+ let expectedOrder = await Promise . all ( await browser . $$ ( `#tabContainerDnd > *` ) . map ( e => e . getAttribute ( "id" ) ) ) ;
530
+
531
+ await dragAndDropInStrip ( draggedStripItem , dropTargetStripItem , "On" ) ;
532
+ expectedOrder = expectedOrder . filter ( id => id !== draggedStripItemId ) ;
533
+ assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
534
+ } ) ;
535
+
536
+ it ( "Moving item After another in end overflow popover" , async ( ) => {
537
+ await tabContainer . getEndOverflow ( "tabContainerDnd" ) . click ( ) ;
538
+
539
+ let displayedPopoverItems = await tabContainer . getCurrentPopoverItems ( "tabContainerDnd" ) ;
540
+ let draggedPopoverItem = displayedPopoverItems [ 1 ] ;
541
+ let dropTargetPopoverItem = displayedPopoverItems [ 2 ] ;
542
+ let expectedOrder = await Promise . all ( await browser . $$ ( `#tabContainerDnd > *` ) . map ( e => e . getAttribute ( "id" ) ) ) ;
543
+
544
+ await dragAndDropInPopover ( draggedPopoverItem , dropTargetPopoverItem , "After" ) ;
545
+ expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( draggedPopoverItem ) , await tabContainer . getRealTabId ( dropTargetPopoverItem ) ) ;
546
+ assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
547
+
548
+ displayedPopoverItems = await tabContainer . getCurrentPopoverItems ( "tabContainerDnd" ) ;
549
+ draggedPopoverItem = displayedPopoverItems [ 2 ] ;
550
+ dropTargetPopoverItem = displayedPopoverItems [ 7 ] ;
551
+ await dragAndDropInPopover ( draggedPopoverItem , dropTargetPopoverItem , "After" ) ;
552
+ expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( draggedPopoverItem ) , await tabContainer . getRealTabId ( dropTargetPopoverItem ) ) ;
511
553
assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
512
554
} ) ;
513
555
514
- // TODO: 1) move inside the popover 2) move from strip to popover 3) move from popover to strip 4) long drag over
556
+ it ( "Moving item Before another in end overflow popover" , async ( ) => {
557
+ let displayedPopoverItems = await tabContainer . getCurrentPopoverItems ( "tabContainerDnd" ) ;
558
+ let draggedPopoverItem = displayedPopoverItems [ 7 ] ;
559
+ let dropTargetPopoverItem = displayedPopoverItems [ 6 ] ;
560
+ let expectedOrder = await Promise . all ( await browser . $$ ( `#tabContainerDnd > *` ) . map ( e => e . getAttribute ( "id" ) ) ) ;
561
+
562
+ await dragAndDropInPopover ( draggedPopoverItem , dropTargetPopoverItem , "Before" ) ;
563
+ expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( draggedPopoverItem ) , await tabContainer . getRealTabId ( dropTargetPopoverItem ) ) ;
564
+ assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
565
+
566
+ displayedPopoverItems = await tabContainer . getCurrentPopoverItems ( "tabContainerDnd" ) ;
567
+ draggedPopoverItem = displayedPopoverItems [ 2 ] ;
568
+ dropTargetPopoverItem = displayedPopoverItems [ 1 ]
569
+ await dragAndDropInPopover ( draggedPopoverItem , dropTargetPopoverItem , "Before" ) ;
570
+ expectedOrder = moveElementById ( expectedOrder , await tabContainer . getRealTabId ( draggedPopoverItem ) , await tabContainer . getRealTabId ( dropTargetPopoverItem ) ) ;
571
+ assert . ok ( await compareItemsOrder ( "tabContainerDnd" , expectedOrder ) , "Items order has changed" ) ;
572
+
573
+ // close the popover
574
+ await tabContainer . getEndOverflow ( "tabContainerDnd" ) . click ( ) ;
575
+ } ) ;
515
576
} ) ;
0 commit comments