11import { Model } from '../../../../json-crdt/model' ;
22import { Peritext } from '../../Peritext' ;
33import { Anchor } from '../../constants' ;
4- import { Editor } from '../../editor/Editor' ;
54
65const setup = ( insert : ( peritext : Peritext ) => void = ( peritext ) => peritext . strApi ( ) . ins ( 0 , 'Hello world!' ) ) => {
76 const model = Model . withLogicalClock ( ) ;
@@ -74,15 +73,15 @@ describe('.isCollapsed()', () => {
7473 describe ( 'when range is collapsed' , ( ) => {
7574 test ( 'returns true at the beginning of string' , ( ) => {
7675 const { peritext} = setup ( ) ;
77- const point = peritext . pointAtStart ( ) ;
76+ const point = peritext . pointAbsStart ( ) ;
7877 const range = peritext . range ( point , point ) ;
7978 const isCollapsed = range . isCollapsed ( ) ;
8079 expect ( isCollapsed ) . toBe ( true ) ;
8180 } ) ;
8281
8382 test ( 'returns true at the end of string' , ( ) => {
8483 const { peritext} = setup ( ) ;
85- const point = peritext . pointAtEnd ( ) ;
84+ const point = peritext . pointAbsEnd ( ) ;
8685 const range = peritext . range ( point , point ) ;
8786 const isCollapsed = range . isCollapsed ( ) ;
8887 expect ( isCollapsed ) . toBe ( true ) ;
@@ -117,7 +116,7 @@ describe('.isCollapsed()', () => {
117116 describe ( 'when first character is deleted' , ( ) => {
118117 test ( 'returns true at the beginning of string' , ( ) => {
119118 const { peritext} = setupEvenDeleted ( ) ;
120- const point = peritext . pointAtStart ( ) ;
119+ const point = peritext . pointAbsStart ( ) ;
121120 const range = peritext . range ( point , point ) ;
122121 const isCollapsed = range . isCollapsed ( ) ;
123122 expect ( isCollapsed ) . toBe ( true ) ;
@@ -130,7 +129,9 @@ describe('.isCollapsed()', () => {
130129 const isCollapsed = range . isCollapsed ( ) ;
131130 expect ( isCollapsed ) . toBe ( true ) ;
132131 } ) ;
132+ } ) ;
133133
134+ describe ( 'when characters are deleted' , ( ) => {
134135 test ( 'returns true when in the middle of deleted characters' , ( ) => {
135136 const { peritext} = setupEvenDeleted ( ) ;
136137 const range = peritext . rangeAt ( 2 , 1 ) ;
@@ -146,10 +147,48 @@ describe('.isCollapsed()', () => {
146147 peritext . strApi ( ) . del ( 0 , 5 ) ;
147148 expect ( range . isCollapsed ( ) ) . toBe ( true ) ;
148149 } ) ;
150+
151+ test ( 'when all text is selected' , ( ) => {
152+ const { peritext} = setupEvenDeleted ( ) ;
153+ const range = peritext . range ( peritext . pointAbsStart ( ) , peritext . pointAbsEnd ( ) ) ;
154+ expect ( range . isCollapsed ( ) ) . toBe ( false ) ;
155+ peritext . strApi ( ) . del ( 0 , 5 ) ;
156+ expect ( range . isCollapsed ( ) ) . toBe ( true ) ;
157+ } ) ;
149158 } ) ;
150159 } ) ;
151160} ) ;
152161
162+ describe ( '.collapseToStart()' , ( ) => {
163+ test ( 'collapses range to start' , ( ) => {
164+ const { peritext} = setup ( ) ;
165+ const range = peritext . rangeAt ( 2 , 3 ) ;
166+ range . collapseToStart ( ) ;
167+ expect ( range . isCollapsed ( ) ) . toBe ( true ) ;
168+ expect ( range . start . rightChar ( ) ?. view ( ) ) . toBe ( 'l' ) ;
169+ expect ( range . end . rightChar ( ) ?. view ( ) ) . toBe ( 'l' ) ;
170+ } ) ;
171+ } ) ;
172+
173+ describe ( '.collapseToEnd()' , ( ) => {
174+ test ( 'collapses range to end' , ( ) => {
175+ const { peritext} = setup ( ) ;
176+ const range = peritext . rangeAt ( 2 , 3 ) ;
177+ range . collapseToEnd ( ) ;
178+ expect ( range . isCollapsed ( ) ) . toBe ( true ) ;
179+ expect ( range . start . leftChar ( ) ?. view ( ) ) . toBe ( 'o' ) ;
180+ expect ( range . end . leftChar ( ) ?. view ( ) ) . toBe ( 'o' ) ;
181+ } ) ;
182+ } ) ;
183+
184+ describe ( '.view()' , ( ) => {
185+ test ( 'returns correct view' , ( ) => {
186+ const { peritext} = setup ( ) ;
187+ const range = peritext . rangeAt ( 2 , 3 ) ;
188+ expect ( range . views ( ) ) . toEqual ( [ 2 , 3 ] ) ;
189+ } ) ;
190+ } ) ;
191+
153192describe ( '.contains()' , ( ) => {
154193 test ( 'returns true if slice is contained' , ( ) => {
155194 const { peritext} = setup ( ) ;
0 commit comments