@@ -729,6 +729,96 @@ describe('.rightChar()', () => {
729
729
} ) ;
730
730
} ) ;
731
731
732
+ describe ( '.isStartOfStr()' , ( ) => {
733
+ test ( 'returns true if is start of string' , ( ) => {
734
+ const { peritext} = setupWithChunkedText ( ) ;
735
+ const p1 = peritext . pointAtStart ( ) ;
736
+ const p2 = peritext . pointAt ( 0 , Anchor . Before ) ;
737
+ expect ( p1 . isStartOfStr ( ) ) . toBe ( true ) ;
738
+ expect ( p2 . isStartOfStr ( ) ) . toBe ( false ) ;
739
+ } ) ;
740
+ } ) ;
741
+
742
+ describe ( '.isEndOfStr()' , ( ) => {
743
+ test ( 'returns true if is end of string' , ( ) => {
744
+ const { peritext} = setupWithChunkedText ( ) ;
745
+ const p1 = peritext . pointAtEnd ( ) ;
746
+ const p2 = peritext . pointAt ( 8 , Anchor . After ) ;
747
+ expect ( p1 . isEndOfStr ( ) ) . toBe ( true ) ;
748
+ expect ( p2 . isEndOfStr ( ) ) . toBe ( false ) ;
749
+ } ) ;
750
+ } ) ;
751
+
752
+ describe ( '.refBefore()' , ( ) => {
753
+ test ( 'goes to next character, when anchor is switched' , ( ) => {
754
+ const { peritext} = setupWithChunkedText ( ) ;
755
+ const p1 = peritext . pointAt ( 0 , Anchor . After ) ;
756
+ expect ( p1 . rightChar ( ) ! . view ( ) ) . toBe ( '2' ) ;
757
+ const p2 = p1 . clone ( ) ;
758
+ p2 . refBefore ( ) ;
759
+ expect ( p2 . rightChar ( ) ! . view ( ) ) . toBe ( '2' ) ;
760
+ expect ( p1 . anchor ) . toBe ( Anchor . After ) ;
761
+ expect ( p2 . anchor ) . toBe ( Anchor . Before ) ;
762
+ expect ( p1 . id . time + 1 ) . toBe ( p2 . id . time ) ;
763
+ } ) ;
764
+
765
+ test ( 'skips deleted chars' , ( ) => {
766
+ const { peritext} = setupWithChunkedText ( ) ;
767
+ const p1 = peritext . pointAt ( 2 , Anchor . After ) ;
768
+ expect ( p1 . rightChar ( ) ! . view ( ) ) . toBe ( '4' ) ;
769
+ const p2 = p1 . clone ( ) ;
770
+ p2 . refBefore ( ) ;
771
+ expect ( p2 . rightChar ( ) ! . view ( ) ) . toBe ( '4' ) ;
772
+ expect ( p1 . anchor ) . toBe ( Anchor . After ) ;
773
+ expect ( p2 . anchor ) . toBe ( Anchor . Before ) ;
774
+ expect ( p1 . id . time ) . not . toBe ( p2 . id . time ) ;
775
+ } ) ;
776
+
777
+ test ( 'when on last character, attaches to end of str' , ( ) => {
778
+ const { peritext} = setupWithChunkedText ( ) ;
779
+ const p1 = peritext . pointAt ( 8 , Anchor . After ) ;
780
+ expect ( p1 . leftChar ( ) ! . view ( ) ) . toBe ( '9' ) ;
781
+ const p2 = p1 . clone ( ) ;
782
+ p2 . refBefore ( ) ;
783
+ expect ( p2 . isEndOfStr ( ) ) . toBe ( true ) ;
784
+ } ) ;
785
+ } ) ;
786
+
787
+ describe ( '.refAfter()' , ( ) => {
788
+ test ( 'goes to next character, when anchor is switched' , ( ) => {
789
+ const { peritext} = setupWithChunkedText ( ) ;
790
+ const p1 = peritext . pointAt ( 4 , Anchor . Before ) ;
791
+ expect ( p1 . leftChar ( ) ! . view ( ) ) . toBe ( '4' ) ;
792
+ const p2 = p1 . clone ( ) ;
793
+ p2 . refAfter ( ) ;
794
+ expect ( p2 . leftChar ( ) ! . view ( ) ) . toBe ( '4' ) ;
795
+ expect ( p1 . anchor ) . toBe ( Anchor . Before ) ;
796
+ expect ( p2 . anchor ) . toBe ( Anchor . After ) ;
797
+ expect ( p1 . id . time - 1 ) . toBe ( p2 . id . time ) ;
798
+ } ) ;
799
+
800
+ test ( 'skips deleted chars' , ( ) => {
801
+ const { peritext} = setupWithChunkedText ( ) ;
802
+ const p1 = peritext . pointAt ( 7 , Anchor . Before ) ;
803
+ expect ( p1 . leftChar ( ) ! . view ( ) ) . toBe ( '7' ) ;
804
+ const p2 = p1 . clone ( ) ;
805
+ p2 . refAfter ( ) ;
806
+ expect ( p2 . leftChar ( ) ! . view ( ) ) . toBe ( '7' ) ;
807
+ expect ( p1 . anchor ) . toBe ( Anchor . Before ) ;
808
+ expect ( p2 . anchor ) . toBe ( Anchor . After ) ;
809
+ expect ( p2 . chunk ( ) ! . del ) . toBe ( false ) ;
810
+ } ) ;
811
+
812
+ test ( 'when on first character, attaches to start of str' , ( ) => {
813
+ const { peritext} = setupWithChunkedText ( ) ;
814
+ const p1 = peritext . pointAt ( 0 , Anchor . Before ) ;
815
+ expect ( p1 . rightChar ( ) ! . view ( ) ) . toBe ( '1' ) ;
816
+ const p2 = p1 . clone ( ) ;
817
+ p2 . refAfter ( ) ;
818
+ expect ( p2 . isStartOfStr ( ) ) . toBe ( true ) ;
819
+ } ) ;
820
+ } ) ;
821
+
732
822
describe ( '.move()' , ( ) => {
733
823
test ( 'can move forward' , ( ) => {
734
824
const { peritext, model} = setupWithChunkedText ( ) ;
0 commit comments