Skip to content

Commit 61ea690

Browse files
committed
test(json-crdt-extensions): 💍 improve refresh tests
1 parent 2f87b8a commit 61ea690

File tree

1 file changed

+108
-1
lines changed

1 file changed

+108
-1
lines changed

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

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ describe('Overlay.refresh()', () => {
4343
});
4444
};
4545

46-
describe('slices', () => {
46+
describe('saved slices', () => {
4747
describe('updates hash', () => {
4848
testRefresh('when a slice is inserted', (kit, refresh) => {
4949
kit.peritext.editor.cursor.setAt(1, 4);
@@ -141,6 +141,104 @@ describe('Overlay.refresh()', () => {
141141
});
142142
});
143143

144+
describe('extra slices', () => {
145+
describe('updates hash', () => {
146+
testRefresh('when a slice is inserted', (kit, refresh) => {
147+
const range = kit.peritext.rangeAt(1, 4);
148+
refresh();
149+
kit.peritext.extraSlices.insOverwrite(range, 'bold');
150+
});
151+
152+
testRefresh('when a collapsed slice is inserted', (kit, refresh) => {
153+
const range = kit.peritext.rangeAt(5);
154+
refresh();
155+
kit.peritext.extraSlices.insStack(range, '<flag>');
156+
});
157+
158+
testRefresh('when a marker is inserted', (kit, refresh) => {
159+
const range = kit.peritext.rangeAt(0);
160+
refresh();
161+
kit.peritext.extraSlices.insMarker(range, '<paragraph>');
162+
});
163+
164+
testRefresh('when a marker is inserted at the same position', (kit, refresh) => {
165+
const range = kit.peritext.rangeAt(0);
166+
kit.peritext.extraSlices.insMarker(range, '<paragraph>');
167+
refresh();
168+
kit.peritext.extraSlices.insMarker(range, '<paragraph>');
169+
});
170+
171+
testRefresh('when slice is deleted', (kit, refresh) => {
172+
const range = kit.peritext.rangeAt(0, 1);
173+
const slice = kit.peritext.extraSlices.insMarker(range, '<b>');
174+
refresh();
175+
kit.peritext.extraSlices.del(slice.id);
176+
});
177+
178+
testRefresh('when slice type is changed', (kit, refresh) => {
179+
const range = kit.peritext.rangeAt(0, 1);
180+
const slice = kit.peritext.extraSlices.insStack(range, '<b>');
181+
refresh();
182+
slice.update({type: '<i>'});
183+
});
184+
185+
testRefresh('when slice behavior is changed', (kit, refresh) => {
186+
const range = kit.peritext.rangeAt(2, 7);
187+
const slice = kit.peritext.extraSlices.insStack(range, 123);
188+
refresh();
189+
slice.update({behavior: SliceBehavior.Erase});
190+
});
191+
192+
testRefresh('when slice data is overwritten', (kit, refresh) => {
193+
const range = kit.peritext.rangeAt(2, 7);
194+
const slice = kit.peritext.extraSlices.insStack(range, 123, 'a');
195+
refresh();
196+
slice.update({data: 'b'});
197+
});
198+
199+
testRefresh('when slice data is updated inline', (kit, refresh) => {
200+
const range = kit.peritext.rangeAt(1, 1);
201+
const slice = kit.peritext.extraSlices.insStack(range, 123, {foo: 'bar'});
202+
refresh();
203+
const api = slice.dataNode()! as ObjApi;
204+
api.set({foo: 'baz'});
205+
});
206+
207+
testRefresh('when slice start point anchor is changed', (kit, refresh) => {
208+
const range = kit.peritext.rangeAt(0, 1);
209+
const slice = kit.peritext.extraSlices.insStack(range, 123, 456);
210+
expect(slice.start.anchor).toBe(Anchor.Before);
211+
refresh();
212+
const range2 = slice.range();
213+
range2.start.anchor = Anchor.After;
214+
slice.update({range: range2});
215+
});
216+
217+
testRefresh('when slice end point anchor is changed', (kit, refresh) => {
218+
const range = kit.peritext.rangeAt(3, 3);
219+
const slice = kit.peritext.extraSlices.insStack(range, 0, 0);
220+
expect(slice.end.anchor).toBe(Anchor.After);
221+
refresh();
222+
const range2 = slice.range();
223+
range2.end.anchor = Anchor.Before;
224+
slice.update({range: range2});
225+
});
226+
227+
testRefresh('when slice range changes', (kit, refresh) => {
228+
const range = kit.peritext.rangeAt(3, 3);
229+
kit.peritext.extraSlices.insStack(range, 0, 0);
230+
kit.peritext.extraSlices.insStack(range, 1, 1);
231+
kit.peritext.extraSlices.insStack(range, 3, 3);
232+
const range1 = kit.peritext.rangeAt(1, 2);
233+
const slice = kit.peritext.extraSlices.insErase(range1, 'gg');
234+
expect(slice.end.anchor).toBe(Anchor.After);
235+
refresh();
236+
const range2 = kit.peritext.rangeAt(2, 2);
237+
slice.update({range: range2});
238+
});
239+
});
240+
});
241+
144242
describe('cursor', () => {
145243
describe('updates hash', () => {
146244
testRefresh('when cursor char ID changes', (kit, refresh) => {
@@ -166,6 +264,15 @@ describe('Overlay.refresh()', () => {
166264
end.anchor = Anchor.Before;
167265
kit.peritext.editor.cursor.setRange(kit.peritext.range(kit.peritext.editor.cursor.start, end));
168266
});
267+
268+
testRefresh('when cursor data changes', (kit, refresh) => {
269+
kit.peritext.editor.cursor.setAt(3, 3);
270+
const slice = kit.peritext.editor.cursor;
271+
slice.update({data: {a: 'b'}});
272+
refresh();
273+
const api = slice.dataNode()! as ObjApi;
274+
api.set({a: 'c'});
275+
});
169276
});
170277
});
171278
});

0 commit comments

Comments
 (0)