@@ -670,4 +670,75 @@ test.describe('Collaboration', () => {
670
670
` ,
671
671
) ;
672
672
} ) ;
673
+
674
+ test ( '$handleNormalizationMergeConflicts handles nodes that have been reparented' , async ( {
675
+ page,
676
+ isCollab,
677
+ } ) => {
678
+ test . skip ( ! isCollab ) ;
679
+
680
+ // Add paragraph, type ABC into second paragraph, bold the B, backspace text into the first paragraph to reparent the text nodes
681
+ await focusEditor ( page ) ;
682
+ await page . keyboard . press ( 'Enter' ) ;
683
+ await page . keyboard . type ( 'ABC' ) ;
684
+ await page . keyboard . press ( 'ArrowLeft' ) ;
685
+ await selectCharacters ( page , 'left' , 'B' . length ) ;
686
+ await toggleBold ( page ) ;
687
+ await page . keyboard . press ( 'ArrowLeft' ) ;
688
+ await page . keyboard . press ( 'ArrowLeft' ) ;
689
+ await page . keyboard . press ( 'Backspace' ) ;
690
+
691
+ await assertHTML (
692
+ page ,
693
+ html `
694
+ < p
695
+ class ="PlaygroundEditorTheme__paragraph PlaygroundEditorTheme__ltr "
696
+ dir ="ltr ">
697
+ < span data-lexical-text ="true "> A</ span >
698
+ < strong
699
+ class ="PlaygroundEditorTheme__textBold "
700
+ data-lexical-text ="true ">
701
+ B
702
+ </ strong >
703
+ < span data-lexical-text ="true "> C</ span >
704
+ </ p >
705
+ ` ,
706
+ ) ;
707
+
708
+ // Right collaborator deletes A, left deletes B.
709
+ await sleep ( 1050 ) ;
710
+ await page . keyboard . press ( 'Delete' ) ;
711
+ await sleep ( 50 ) ;
712
+ await page
713
+ . frameLocator ( 'iframe[name="right"]' )
714
+ . locator ( '[data-lexical-editor="true"]' )
715
+ . focus ( ) ;
716
+ await page . keyboard . press ( 'Delete' ) ;
717
+
718
+ await assertHTML (
719
+ page ,
720
+ html `
721
+ < p
722
+ class ="PlaygroundEditorTheme__paragraph PlaygroundEditorTheme__ltr "
723
+ dir ="ltr ">
724
+ < span data-lexical-text ="true "> C</ span >
725
+ </ p >
726
+ ` ,
727
+ ) ;
728
+
729
+ // Left collaborator undoes their deletion of A.
730
+ await page . frameLocator ( 'iframe[name="left"]' ) . getByLabel ( 'Undo' ) . click ( ) ;
731
+
732
+ // Check that normalization worked properly.
733
+ await assertHTML (
734
+ page ,
735
+ html `
736
+ < p
737
+ class ="PlaygroundEditorTheme__paragraph PlaygroundEditorTheme__ltr "
738
+ dir ="ltr ">
739
+ < span data-lexical-text ="true "> AC</ span >
740
+ </ p >
741
+ ` ,
742
+ ) ;
743
+ } ) ;
673
744
} ) ;
0 commit comments