Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 3x 3x 3x 3x 3x 590x 590x 590x 590x 590x 590x 590x 3x 25x 25x 579x 579x 579x 579x 3x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 3x 1x 1x 1x 18x 18x 18x 3x 2x 2x 2x 2x 2x 2x 2x 2x 2x | import {ModelWithExt as Model, ext} from 'json-joy/lib/json-crdt-extensions';
import {FromSlate} from '../../FromSlate';
import {toSlate} from '../../toSlate';
import {type SlateTrace, SlateTraceRunner} from './traces';
import type {SlateDocument} from '../../../types';
export const assertSlatePeritextSlateRoundtrip = (doc: SlateDocument) => {
const viewRange = FromSlate.convert(doc);
const model = Model.create(ext.peritext.new(''));
const api = model.s.toExt();
api.txt.editor.import(0, viewRange);
api.txt.refresh();
const view = toSlate(api.txt);
expect(view).toEqual(doc);
};
export const assertRoundtripForTraceCheckpoints = (trace: SlateTrace) => {
const runner = new SlateTraceRunner(trace);
while (!runner.endReached()) {
runner.toNextCheckpoint();
const state = runner.state();
try {
assertSlatePeritextSlateRoundtrip(state);
} catch (error) {
console.log('nextOpIdx:', runner.nextOpIdx);
console.log(`operation (${runner.nextOpIdx - 1}):`, runner.trace.operations[runner.nextOpIdx - 1]);
console.log(`operation (${runner.nextOpIdx}):`, runner.trace.operations[runner.nextOpIdx]);
console.log(JSON.stringify(runner.editor.children, null, 2));
throw error;
}
}
};
export const assertCanMergeInto = (doc1: SlateDocument, doc2: SlateDocument) => {
const model = Model.create(ext.peritext.new(''));
const api = model.s.toExt();
api.txt.editor.merge(FromSlate.convert(doc1));
api.txt.refresh();
const view = toSlate(api.txt);
expect(view).toEqual(doc1);
api.txt.editor.merge(FromSlate.convert(doc2));
const view2 = toSlate(api.txt);
expect(view2).toEqual(doc2);
const model2 = Model.create(ext.peritext.new(''));
const slate2 = model2.s.toExt();
const viewRange2 = FromSlate.convert(doc2);
slate2.txt.editor.merge(viewRange2);
slate2.txt.refresh();
expect(slate2.txt.editor.export()).toEqual(api.txt.editor.export());
};
export const assertCanMergeTrain = (docs: SlateDocument[]) => {
const model = Model.create(ext.peritext.new(''));
const slate = model.s.toExt();
for (const doc of docs) {
slate.txt.editor.merge(FromSlate.convert(doc));
const view = toSlate(slate.txt);
expect(view).toEqual(doc);
}
};
export const assertEmptyMerge = (doc: SlateDocument) => {
const model = Model.create(ext.peritext.new(''));
const slate = model.s.toExt();
slate.txt.editor.merge(FromSlate.convert(doc));
slate.txt.refresh();
const model2 = Model.create(ext.peritext.new(''));
const slate2 = model2.s.toExt();
slate2.txt.editor.merge(FromSlate.convert(doc));
slate2.txt.refresh();
expect(slate.txt.editor.export()).toEqual(slate2.txt.editor.export());
};
|