@@ -820,15 +820,96 @@ describe('.refAfter()', () => {
820820} ) ;
821821
822822describe ( '.move()' , ( ) => {
823- test ( 'can move forward' , ( ) => {
823+ test ( 'smoke test' , ( ) => {
824+ const { peritext} = setupWithChunkedText ( ) ;
825+ const p = peritext . pointAt ( 1 , Anchor . After ) ;
826+ expect ( p . viewPos ( ) ) . toBe ( 2 ) ;
827+ p . move ( 1 ) ;
828+ expect ( p . viewPos ( ) ) . toBe ( 3 ) ;
829+ p . move ( 2 ) ;
830+ expect ( p . viewPos ( ) ) . toBe ( 5 ) ;
831+ p . move ( 2 ) ;
832+ expect ( p . viewPos ( ) ) . toBe ( 7 ) ;
833+ p . move ( - 3 ) ;
834+ expect ( p . viewPos ( ) ) . toBe ( 4 ) ;
835+ p . move ( - 3 ) ;
836+ expect ( p . viewPos ( ) ) . toBe ( 1 ) ;
837+ p . move ( - 3 ) ;
838+ expect ( p . viewPos ( ) ) . toBe ( 0 ) ;
839+ } ) ;
840+
841+ test ( 'can reach the end of str' , ( ) => {
842+ const { peritext} = setupWithChunkedText ( ) ;
843+ const p = peritext . pointAt ( 0 , Anchor . After ) ;
844+ p . move ( 1 ) ;
845+ p . move ( 2 ) ;
846+ p . move ( 3 ) ;
847+ p . move ( 4 ) ;
848+ p . move ( 5 ) ;
849+ p . move ( 6 ) ;
850+ expect ( p . isEndOfStr ( ) ) . toBe ( true ) ;
851+ expect ( p . viewPos ( ) ) . toBe ( 9 ) ;
852+ expect ( p . leftChar ( ) ! . view ( ) ) . toBe ( '9' ) ;
853+ expect ( p . anchor ) . toBe ( Anchor . Before ) ;
854+ } ) ;
855+
856+ test ( 'can reach the start of str' , ( ) => {
857+ const { peritext} = setupWithChunkedText ( ) ;
858+ const p = peritext . pointAt ( 8 , Anchor . Before ) ;
859+ p . move ( - 22 ) ;
860+ expect ( p . isStartOfStr ( ) ) . toBe ( true ) ;
861+ expect ( p . viewPos ( ) ) . toBe ( 0 ) ;
862+ expect ( p . rightChar ( ) ! . view ( ) ) . toBe ( '1' ) ;
863+ expect ( p . anchor ) . toBe ( Anchor . After ) ;
864+ } ) ;
865+
866+ test ( 'can move forward, when anchor = Before' , ( ) => {
824867 const { peritext, model} = setupWithChunkedText ( ) ;
825868 model . api . str ( [ 'text' ] ) . del ( 4 , 1 ) ;
826869 const txt = '12346789' ;
827870 for ( let i = 0 ; i < txt . length - 1 ; i ++ ) {
828871 const p = peritext . pointAt ( i , Anchor . Before ) ;
872+ expect ( p . pos ( ) ) . toBe ( i ) ;
829873 for ( let j = i + 1 ; j < txt . length - 1 ; j ++ ) {
830874 const p2 = p . clone ( ) ;
831875 p2 . move ( j - i ) ;
876+ expect ( p2 . pos ( ) ) . toBe ( j ) ;
877+ expect ( p2 . anchor ) . toBe ( Anchor . Before ) ;
878+ expect ( p2 . rightChar ( ) ! . view ( ) ) . toBe ( txt [ j ] ) ;
879+ }
880+ }
881+ } ) ;
882+
883+ test ( 'can move forward, when anchor = After' , ( ) => {
884+ const { peritext, model} = setupWithChunkedText ( ) ;
885+ model . api . str ( [ 'text' ] ) . del ( 4 , 1 ) ;
886+ const txt = '12346789' ;
887+ for ( let i = 0 ; i < txt . length - 1 ; i ++ ) {
888+ const p = peritext . pointAt ( i , Anchor . After ) ;
889+ expect ( p . pos ( ) ) . toBe ( i ) ;
890+ expect ( p . leftChar ( ) ! . view ( ) ) . toBe ( txt [ i ] ) ;
891+ for ( let j = i + 1 ; j < txt . length - 1 ; j ++ ) {
892+ const p2 = p . clone ( ) ;
893+ p2 . move ( j - i ) ;
894+ expect ( p2 . pos ( ) ) . toBe ( j ) ;
895+ expect ( p2 . anchor ) . toBe ( Anchor . After ) ;
896+ expect ( p2 . leftChar ( ) ! . view ( ) ) . toBe ( txt [ j ] ) ;
897+ }
898+ }
899+ } ) ;
900+
901+ test ( 'can move backward, when anchor = Before' , ( ) => {
902+ const { peritext, model} = setupWithChunkedText ( ) ;
903+ model . api . str ( [ 'text' ] ) . del ( 4 , 1 ) ;
904+ const txt = '12346789' ;
905+ for ( let i = txt . length - 1 ; i > 0 ; i -- ) {
906+ const p = peritext . pointAt ( i , Anchor . Before ) ;
907+ expect ( p . viewPos ( ) ) . toBe ( i ) ;
908+ for ( let j = i - 1 ; j > 0 ; j -- ) {
909+ const p2 = p . clone ( ) ;
910+ p2 . move ( j - i ) ;
911+ expect ( p2 . pos ( ) ) . toBe ( j ) ;
912+ expect ( p2 . anchor ) . toBe ( Anchor . Before ) ;
832913 expect ( p2 . rightChar ( ) ! . view ( ) ) . toBe ( txt [ j ] ) ;
833914 }
834915 }
0 commit comments