Skip to content

Commit c5962d6

Browse files
committed
test(json-crdt-extensions): 💍 add test for collapsed slice insertion
1 parent 178381a commit c5962d6

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

src/json-crdt-extensions/peritext/overlay/Overlay.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,6 @@ export class Overlay<T = string> implements Printable, Stateful {
375375
}
376376

377377
private insSlice(slice: Slice<T>): [start: OverlayPoint<T>, end: OverlayPoint<T>] {
378-
// TODO: Test cases where the inserted slice is collapsed to one point.
379378
const x0 = slice.start;
380379
const x1 = slice.end;
381380
const [start, isStartNew] = this.upsertPoint(x0);
@@ -395,10 +394,7 @@ export class Overlay<T = string> implements Printable, Stateful {
395394
let curr: OverlayPoint<T> | undefined = start;
396395
do curr.addLayer(slice);
397396
while ((curr = next(curr)) && curr !== end);
398-
} else {
399-
// TODO: review if this is needed:
400-
start.addMarker(slice);
401-
}
397+
} else start.addMarker(slice);
402398
return [start, end];
403399
}
404400

src/json-crdt-extensions/peritext/overlay/__tests__/Overlay.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,18 @@ describe('slices', () => {
161161
expect(points.length).toBe(4);
162162
});
163163

164+
test('can insert a slice, which is collapsed to a point', () => {
165+
const {peritext} = setup();
166+
peritext.editor.cursor.setAt(3);
167+
const [slice] = peritext.editor.saved.insStack('em', {emphasis: true});
168+
peritext.overlay.refresh();
169+
const [point] = [...peritext.overlay.points()];
170+
expect(point.layers.length).toBe(0);
171+
expect(point.markers.length).toBe(2);
172+
expect(point.markers.find((m) => m === peritext.editor.cursor)).toBe(peritext.editor.cursor);
173+
expect(point.markers.find((m) => m === slice)).toBe(slice);
174+
});
175+
164176
test('intersecting slice chunks point to two slices', () => {
165177
const {peritext} = setup();
166178
peritext.editor.cursor.setAt(2, 2);

0 commit comments

Comments
 (0)