Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/test/browser/commands/sideEditing.test.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import assert from 'assert';
7
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
8
import { EditOperation, ISingleEditOperation } from '../../../common/core/editOperation.js';
9
import { Position } from '../../../common/core/position.js';
10
import { Range } from '../../../common/core/range.js';
11
import { Selection } from '../../../common/core/selection.js';
12
import { withTestCodeEditor } from '../testCodeEditor.js';
13
14
function testCommand(lines: string[], selections: Selection[], edits: ISingleEditOperation[], expectedLines: string[], expectedSelections: Selection[]): void {
15
withTestCodeEditor(lines, {}, (editor, viewModel) => {
16
const model = editor.getModel()!;
17
18
viewModel.setSelections('tests', selections);
19
20
model.applyEdits(edits);
21
22
assert.deepStrictEqual(model.getLinesContent(), expectedLines);
23
24
const actualSelections = viewModel.getSelections();
25
assert.deepStrictEqual(actualSelections.map(s => s.toString()), expectedSelections.map(s => s.toString()));
26
27
});
28
}
29
30
suite('Editor Side Editing - collapsed selection', () => {
31
32
ensureNoDisposablesAreLeakedInTestSuite();
33
34
test('replace at selection', () => {
35
testCommand(
36
[
37
'first',
38
'second line',
39
'third line',
40
'fourth'
41
],
42
[new Selection(1, 1, 1, 1)],
43
[
44
EditOperation.replace(new Selection(1, 1, 1, 1), 'something ')
45
],
46
[
47
'something first',
48
'second line',
49
'third line',
50
'fourth'
51
],
52
[new Selection(1, 11, 1, 11)]
53
);
54
});
55
56
test('replace at selection 2', () => {
57
testCommand(
58
[
59
'first',
60
'second line',
61
'third line',
62
'fourth'
63
],
64
[new Selection(1, 1, 1, 6)],
65
[
66
EditOperation.replace(new Selection(1, 1, 1, 6), 'something')
67
],
68
[
69
'something',
70
'second line',
71
'third line',
72
'fourth'
73
],
74
[new Selection(1, 1, 1, 10)]
75
);
76
});
77
78
test('insert at selection', () => {
79
testCommand(
80
[
81
'first',
82
'second line',
83
'third line',
84
'fourth'
85
],
86
[new Selection(1, 1, 1, 1)],
87
[
88
EditOperation.insert(new Position(1, 1), 'something ')
89
],
90
[
91
'something first',
92
'second line',
93
'third line',
94
'fourth'
95
],
96
[new Selection(1, 11, 1, 11)]
97
);
98
});
99
100
test('insert at selection sitting on max column', () => {
101
testCommand(
102
[
103
'first',
104
'second line',
105
'third line',
106
'fourth'
107
],
108
[new Selection(1, 6, 1, 6)],
109
[
110
EditOperation.insert(new Position(1, 6), ' something\nnew ')
111
],
112
[
113
'first something',
114
'new ',
115
'second line',
116
'third line',
117
'fourth'
118
],
119
[new Selection(2, 5, 2, 5)]
120
);
121
});
122
123
test('issue #3994: replace on top of selection', () => {
124
testCommand(
125
[
126
'$obj = New-Object "system.col"'
127
],
128
[new Selection(1, 30, 1, 30)],
129
[
130
EditOperation.replaceMove(new Range(1, 19, 1, 31), '"System.Collections"')
131
],
132
[
133
'$obj = New-Object "System.Collections"'
134
],
135
[new Selection(1, 39, 1, 39)]
136
);
137
});
138
139
test('issue #15267: Suggestion that adds a line - cursor goes to the wrong line ', () => {
140
testCommand(
141
[
142
'package main',
143
'',
144
'import (',
145
' "fmt"',
146
')',
147
'',
148
'func main(',
149
' fmt.Println(strings.Con)',
150
'}'
151
],
152
[new Selection(8, 25, 8, 25)],
153
[
154
EditOperation.replaceMove(new Range(5, 1, 5, 1), '\t\"strings\"\n')
155
],
156
[
157
'package main',
158
'',
159
'import (',
160
' "fmt"',
161
' "strings"',
162
')',
163
'',
164
'func main(',
165
' fmt.Println(strings.Con)',
166
'}'
167
],
168
[new Selection(9, 25, 9, 25)]
169
);
170
});
171
172
test('issue #15236: Selections broke after deleting text using vscode.TextEditor.edit ', () => {
173
testCommand(
174
[
175
'foofoofoo, foofoofoo, bar'
176
],
177
[new Selection(1, 1, 1, 10), new Selection(1, 12, 1, 21)],
178
[
179
EditOperation.replace(new Range(1, 1, 1, 10), ''),
180
EditOperation.replace(new Range(1, 12, 1, 21), ''),
181
],
182
[
183
', , bar'
184
],
185
[new Selection(1, 1, 1, 1), new Selection(1, 3, 1, 3)]
186
);
187
});
188
});
189
190
suite('SideEditing', () => {
191
192
ensureNoDisposablesAreLeakedInTestSuite();
193
194
const LINES = [
195
'My First Line',
196
'My Second Line',
197
'Third Line'
198
];
199
200
function _runTest(selection: Selection, editRange: Range, editText: string, editForceMoveMarkers: boolean, expected: Selection, msg: string): void {
201
withTestCodeEditor(LINES.join('\n'), {}, (editor, viewModel) => {
202
viewModel.setSelections('tests', [selection]);
203
editor.getModel().applyEdits([{
204
range: editRange,
205
text: editText,
206
forceMoveMarkers: editForceMoveMarkers
207
}]);
208
const actual = viewModel.getSelection();
209
assert.deepStrictEqual(actual.toString(), expected.toString(), msg);
210
});
211
}
212
213
function runTest(selection: Range, editRange: Range, editText: string, expected: Selection[][]): void {
214
const sel1 = new Selection(selection.startLineNumber, selection.startColumn, selection.endLineNumber, selection.endColumn);
215
_runTest(sel1, editRange, editText, false, expected[0][0], '0-0-regular-no-force');
216
_runTest(sel1, editRange, editText, true, expected[1][0], '1-0-regular-force');
217
218
// RTL selection
219
const sel2 = new Selection(selection.endLineNumber, selection.endColumn, selection.startLineNumber, selection.startColumn);
220
_runTest(sel2, editRange, editText, false, expected[0][1], '0-1-inverse-no-force');
221
_runTest(sel2, editRange, editText, true, expected[1][1], '1-1-inverse-force');
222
}
223
224
suite('insert', () => {
225
suite('collapsed sel', () => {
226
test('before', () => {
227
runTest(
228
new Range(1, 4, 1, 4),
229
new Range(1, 3, 1, 3), 'xx',
230
[
231
[new Selection(1, 6, 1, 6), new Selection(1, 6, 1, 6)],
232
[new Selection(1, 6, 1, 6), new Selection(1, 6, 1, 6)],
233
]
234
);
235
});
236
test('equal', () => {
237
runTest(
238
new Range(1, 4, 1, 4),
239
new Range(1, 4, 1, 4), 'xx',
240
[
241
[new Selection(1, 6, 1, 6), new Selection(1, 6, 1, 6)],
242
[new Selection(1, 6, 1, 6), new Selection(1, 6, 1, 6)],
243
]
244
);
245
});
246
test('after', () => {
247
runTest(
248
new Range(1, 4, 1, 4),
249
new Range(1, 5, 1, 5), 'xx',
250
[
251
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
252
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
253
]
254
);
255
});
256
});
257
suite('non-collapsed dec', () => {
258
test('before', () => {
259
runTest(
260
new Range(1, 4, 1, 9),
261
new Range(1, 3, 1, 3), 'xx',
262
[
263
[new Selection(1, 6, 1, 11), new Selection(1, 11, 1, 6)],
264
[new Selection(1, 6, 1, 11), new Selection(1, 11, 1, 6)],
265
]
266
);
267
});
268
test('start', () => {
269
runTest(
270
new Range(1, 4, 1, 9),
271
new Range(1, 4, 1, 4), 'xx',
272
[
273
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
274
[new Selection(1, 6, 1, 11), new Selection(1, 11, 1, 6)],
275
]
276
);
277
});
278
test('inside', () => {
279
runTest(
280
new Range(1, 4, 1, 9),
281
new Range(1, 5, 1, 5), 'xx',
282
[
283
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
284
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
285
]
286
);
287
});
288
test('end', () => {
289
runTest(
290
new Range(1, 4, 1, 9),
291
new Range(1, 9, 1, 9), 'xx',
292
[
293
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
294
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
295
]
296
);
297
});
298
test('after', () => {
299
runTest(
300
new Range(1, 4, 1, 9),
301
new Range(1, 10, 1, 10), 'xx',
302
[
303
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
304
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
305
]
306
);
307
});
308
});
309
});
310
311
suite('delete', () => {
312
suite('collapsed dec', () => {
313
test('edit.end < range.start', () => {
314
runTest(
315
new Range(1, 4, 1, 4),
316
new Range(1, 1, 1, 3), '',
317
[
318
[new Selection(1, 2, 1, 2), new Selection(1, 2, 1, 2)],
319
[new Selection(1, 2, 1, 2), new Selection(1, 2, 1, 2)],
320
]
321
);
322
});
323
test('edit.end <= range.start', () => {
324
runTest(
325
new Range(1, 4, 1, 4),
326
new Range(1, 2, 1, 4), '',
327
[
328
[new Selection(1, 2, 1, 2), new Selection(1, 2, 1, 2)],
329
[new Selection(1, 2, 1, 2), new Selection(1, 2, 1, 2)],
330
]
331
);
332
});
333
test('edit.start < range.start && edit.end > range.end', () => {
334
runTest(
335
new Range(1, 4, 1, 4),
336
new Range(1, 3, 1, 5), '',
337
[
338
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
339
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
340
]
341
);
342
});
343
test('edit.start >= range.end', () => {
344
runTest(
345
new Range(1, 4, 1, 4),
346
new Range(1, 4, 1, 6), '',
347
[
348
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
349
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
350
]
351
);
352
});
353
test('edit.start > range.end', () => {
354
runTest(
355
new Range(1, 4, 1, 4),
356
new Range(1, 5, 1, 7), '',
357
[
358
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
359
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
360
]
361
);
362
});
363
});
364
suite('non-collapsed dec', () => {
365
test('edit.end < range.start', () => {
366
runTest(
367
new Range(1, 4, 1, 9),
368
new Range(1, 1, 1, 3), '',
369
[
370
[new Selection(1, 2, 1, 7), new Selection(1, 7, 1, 2)],
371
[new Selection(1, 2, 1, 7), new Selection(1, 7, 1, 2)],
372
]
373
);
374
});
375
test('edit.end <= range.start', () => {
376
runTest(
377
new Range(1, 4, 1, 9),
378
new Range(1, 2, 1, 4), '',
379
[
380
[new Selection(1, 2, 1, 7), new Selection(1, 7, 1, 2)],
381
[new Selection(1, 2, 1, 7), new Selection(1, 7, 1, 2)],
382
]
383
);
384
});
385
test('edit.start < range.start && edit.end < range.end', () => {
386
runTest(
387
new Range(1, 4, 1, 9),
388
new Range(1, 3, 1, 5), '',
389
[
390
[new Selection(1, 3, 1, 7), new Selection(1, 7, 1, 3)],
391
[new Selection(1, 3, 1, 7), new Selection(1, 7, 1, 3)],
392
]
393
);
394
});
395
396
test('edit.start < range.start && edit.end == range.end', () => {
397
runTest(
398
new Range(1, 4, 1, 9),
399
new Range(1, 3, 1, 9), '',
400
[
401
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
402
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
403
]
404
);
405
});
406
407
test('edit.start < range.start && edit.end > range.end', () => {
408
runTest(
409
new Range(1, 4, 1, 9),
410
new Range(1, 3, 1, 10), '',
411
[
412
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
413
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
414
]
415
);
416
});
417
418
test('edit.start == range.start && edit.end < range.end', () => {
419
runTest(
420
new Range(1, 4, 1, 9),
421
new Range(1, 4, 1, 6), '',
422
[
423
[new Selection(1, 4, 1, 7), new Selection(1, 7, 1, 4)],
424
[new Selection(1, 4, 1, 7), new Selection(1, 7, 1, 4)],
425
]
426
);
427
});
428
429
test('edit.start == range.start && edit.end == range.end', () => {
430
runTest(
431
new Range(1, 4, 1, 9),
432
new Range(1, 4, 1, 9), '',
433
[
434
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
435
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
436
]
437
);
438
});
439
440
test('edit.start == range.start && edit.end > range.end', () => {
441
runTest(
442
new Range(1, 4, 1, 9),
443
new Range(1, 4, 1, 10), '',
444
[
445
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
446
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
447
]
448
);
449
});
450
451
test('edit.start > range.start && edit.start < range.end && edit.end < range.end', () => {
452
runTest(
453
new Range(1, 4, 1, 9),
454
new Range(1, 5, 1, 7), '',
455
[
456
[new Selection(1, 4, 1, 7), new Selection(1, 7, 1, 4)],
457
[new Selection(1, 4, 1, 7), new Selection(1, 7, 1, 4)],
458
]
459
);
460
});
461
462
test('edit.start > range.start && edit.start < range.end && edit.end == range.end', () => {
463
runTest(
464
new Range(1, 4, 1, 9),
465
new Range(1, 5, 1, 9), '',
466
[
467
[new Selection(1, 4, 1, 5), new Selection(1, 5, 1, 4)],
468
[new Selection(1, 4, 1, 5), new Selection(1, 5, 1, 4)],
469
]
470
);
471
});
472
473
test('edit.start > range.start && edit.start < range.end && edit.end > range.end', () => {
474
runTest(
475
new Range(1, 4, 1, 9),
476
new Range(1, 5, 1, 10), '',
477
[
478
[new Selection(1, 4, 1, 5), new Selection(1, 5, 1, 4)],
479
[new Selection(1, 4, 1, 5), new Selection(1, 5, 1, 4)],
480
]
481
);
482
});
483
484
test('edit.start == range.end', () => {
485
runTest(
486
new Range(1, 4, 1, 9),
487
new Range(1, 9, 1, 11), '',
488
[
489
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
490
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
491
]
492
);
493
});
494
495
test('edit.start > range.end', () => {
496
runTest(
497
new Range(1, 4, 1, 9),
498
new Range(1, 10, 1, 11), '',
499
[
500
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
501
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
502
]
503
);
504
});
505
});
506
});
507
508
suite('replace short', () => {
509
suite('collapsed dec', () => {
510
test('edit.end < range.start', () => {
511
runTest(
512
new Range(1, 4, 1, 4),
513
new Range(1, 1, 1, 3), 'c',
514
[
515
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
516
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
517
]
518
);
519
});
520
test('edit.end <= range.start', () => {
521
runTest(
522
new Range(1, 4, 1, 4),
523
new Range(1, 2, 1, 4), 'c',
524
[
525
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
526
[new Selection(1, 3, 1, 3), new Selection(1, 3, 1, 3)],
527
]
528
);
529
});
530
test('edit.start < range.start && edit.end > range.end', () => {
531
runTest(
532
new Range(1, 4, 1, 4),
533
new Range(1, 3, 1, 5), 'c',
534
[
535
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
536
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
537
]
538
);
539
});
540
test('edit.start >= range.end', () => {
541
runTest(
542
new Range(1, 4, 1, 4),
543
new Range(1, 4, 1, 6), 'c',
544
[
545
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
546
[new Selection(1, 5, 1, 5), new Selection(1, 5, 1, 5)],
547
]
548
);
549
});
550
test('edit.start > range.end', () => {
551
runTest(
552
new Range(1, 4, 1, 4),
553
new Range(1, 5, 1, 7), 'c',
554
[
555
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
556
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
557
]
558
);
559
});
560
});
561
suite('non-collapsed dec', () => {
562
test('edit.end < range.start', () => {
563
runTest(
564
new Range(1, 4, 1, 9),
565
new Range(1, 1, 1, 3), 'c',
566
[
567
[new Selection(1, 3, 1, 8), new Selection(1, 8, 1, 3)],
568
[new Selection(1, 3, 1, 8), new Selection(1, 8, 1, 3)],
569
]
570
);
571
});
572
test('edit.end <= range.start', () => {
573
runTest(
574
new Range(1, 4, 1, 9),
575
new Range(1, 2, 1, 4), 'c',
576
[
577
[new Selection(1, 3, 1, 8), new Selection(1, 8, 1, 3)],
578
[new Selection(1, 3, 1, 8), new Selection(1, 8, 1, 3)],
579
]
580
);
581
});
582
test('edit.start < range.start && edit.end < range.end', () => {
583
runTest(
584
new Range(1, 4, 1, 9),
585
new Range(1, 3, 1, 5), 'c',
586
[
587
[new Selection(1, 4, 1, 8), new Selection(1, 8, 1, 4)],
588
[new Selection(1, 4, 1, 8), new Selection(1, 8, 1, 4)],
589
]
590
);
591
});
592
test('edit.start < range.start && edit.end == range.end', () => {
593
runTest(
594
new Range(1, 4, 1, 9),
595
new Range(1, 3, 1, 9), 'c',
596
[
597
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
598
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
599
]
600
);
601
});
602
test('edit.start < range.start && edit.end > range.end', () => {
603
runTest(
604
new Range(1, 4, 1, 9),
605
new Range(1, 3, 1, 10), 'c',
606
[
607
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
608
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
609
]
610
);
611
});
612
test('edit.start == range.start && edit.end < range.end', () => {
613
runTest(
614
new Range(1, 4, 1, 9),
615
new Range(1, 4, 1, 6), 'c',
616
[
617
[new Selection(1, 4, 1, 8), new Selection(1, 8, 1, 4)],
618
[new Selection(1, 5, 1, 8), new Selection(1, 8, 1, 5)],
619
]
620
);
621
});
622
test('edit.start == range.start && edit.end == range.end', () => {
623
runTest(
624
new Range(1, 4, 1, 9),
625
new Range(1, 4, 1, 9), 'c',
626
[
627
[new Selection(1, 4, 1, 5), new Selection(1, 5, 1, 4)],
628
[new Selection(1, 5, 1, 5), new Selection(1, 5, 1, 5)],
629
]
630
);
631
});
632
test('edit.start == range.start && edit.end > range.end', () => {
633
runTest(
634
new Range(1, 4, 1, 9),
635
new Range(1, 4, 1, 10), 'c',
636
[
637
[new Selection(1, 4, 1, 5), new Selection(1, 5, 1, 4)],
638
[new Selection(1, 5, 1, 5), new Selection(1, 5, 1, 5)],
639
]
640
);
641
});
642
test('edit.start > range.start && edit.start < range.end && edit.end < range.end', () => {
643
runTest(
644
new Range(1, 4, 1, 9),
645
new Range(1, 5, 1, 7), 'c',
646
[
647
[new Selection(1, 4, 1, 8), new Selection(1, 8, 1, 4)],
648
[new Selection(1, 4, 1, 8), new Selection(1, 8, 1, 4)],
649
]
650
);
651
});
652
test('edit.start > range.start && edit.start < range.end && edit.end == range.end', () => {
653
runTest(
654
new Range(1, 4, 1, 9),
655
new Range(1, 5, 1, 9), 'c',
656
[
657
[new Selection(1, 4, 1, 6), new Selection(1, 6, 1, 4)],
658
[new Selection(1, 4, 1, 6), new Selection(1, 6, 1, 4)],
659
]
660
);
661
});
662
test('edit.start > range.start && edit.start < range.end && edit.end > range.end', () => {
663
runTest(
664
new Range(1, 4, 1, 9),
665
new Range(1, 5, 1, 10), 'c',
666
[
667
[new Selection(1, 4, 1, 6), new Selection(1, 6, 1, 4)],
668
[new Selection(1, 4, 1, 6), new Selection(1, 6, 1, 4)],
669
]
670
);
671
});
672
test('edit.start == range.end', () => {
673
runTest(
674
new Range(1, 4, 1, 9),
675
new Range(1, 9, 1, 11), 'c',
676
[
677
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
678
[new Selection(1, 4, 1, 10), new Selection(1, 10, 1, 4)],
679
]
680
);
681
});
682
test('edit.start > range.end', () => {
683
runTest(
684
new Range(1, 4, 1, 9),
685
new Range(1, 10, 1, 11), 'c',
686
[
687
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
688
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
689
]
690
);
691
});
692
});
693
});
694
695
suite('replace long', () => {
696
suite('collapsed dec', () => {
697
test('edit.end < range.start', () => {
698
runTest(
699
new Range(1, 4, 1, 4),
700
new Range(1, 1, 1, 3), 'cccc',
701
[
702
[new Selection(1, 6, 1, 6), new Selection(1, 6, 1, 6)],
703
[new Selection(1, 6, 1, 6), new Selection(1, 6, 1, 6)],
704
]
705
);
706
});
707
test('edit.end <= range.start', () => {
708
runTest(
709
new Range(1, 4, 1, 4),
710
new Range(1, 2, 1, 4), 'cccc',
711
[
712
[new Selection(1, 6, 1, 6), new Selection(1, 6, 1, 6)],
713
[new Selection(1, 6, 1, 6), new Selection(1, 6, 1, 6)],
714
]
715
);
716
});
717
test('edit.start < range.start && edit.end > range.end', () => {
718
runTest(
719
new Range(1, 4, 1, 4),
720
new Range(1, 3, 1, 5), 'cccc',
721
[
722
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
723
[new Selection(1, 7, 1, 7), new Selection(1, 7, 1, 7)],
724
]
725
);
726
});
727
test('edit.start >= range.end', () => {
728
runTest(
729
new Range(1, 4, 1, 4),
730
new Range(1, 4, 1, 6), 'cccc',
731
[
732
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
733
[new Selection(1, 8, 1, 8), new Selection(1, 8, 1, 8)],
734
]
735
);
736
});
737
test('edit.start > range.end', () => {
738
runTest(
739
new Range(1, 4, 1, 4),
740
new Range(1, 5, 1, 7), 'cccc',
741
[
742
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
743
[new Selection(1, 4, 1, 4), new Selection(1, 4, 1, 4)],
744
]
745
);
746
});
747
});
748
suite('non-collapsed dec', () => {
749
test('edit.end < range.start', () => {
750
runTest(
751
new Range(1, 4, 1, 9),
752
new Range(1, 1, 1, 3), 'cccc',
753
[
754
[new Selection(1, 6, 1, 11), new Selection(1, 11, 1, 6)],
755
[new Selection(1, 6, 1, 11), new Selection(1, 11, 1, 6)],
756
]
757
);
758
});
759
test('edit.end <= range.start', () => {
760
runTest(
761
new Range(1, 4, 1, 9),
762
new Range(1, 2, 1, 4), 'cccc',
763
[
764
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
765
[new Selection(1, 6, 1, 11), new Selection(1, 11, 1, 6)],
766
]
767
);
768
});
769
test('edit.start < range.start && edit.end < range.end', () => {
770
runTest(
771
new Range(1, 4, 1, 9),
772
new Range(1, 3, 1, 5), 'cccc',
773
[
774
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
775
[new Selection(1, 7, 1, 11), new Selection(1, 11, 1, 7)],
776
]
777
);
778
});
779
test('edit.start < range.start && edit.end == range.end', () => {
780
runTest(
781
new Range(1, 4, 1, 9),
782
new Range(1, 3, 1, 9), 'cccc',
783
[
784
[new Selection(1, 4, 1, 7), new Selection(1, 7, 1, 4)],
785
[new Selection(1, 7, 1, 7), new Selection(1, 7, 1, 7)],
786
]
787
);
788
});
789
test('edit.start < range.start && edit.end > range.end', () => {
790
runTest(
791
new Range(1, 4, 1, 9),
792
new Range(1, 3, 1, 10), 'cccc',
793
[
794
[new Selection(1, 4, 1, 7), new Selection(1, 7, 1, 4)],
795
[new Selection(1, 7, 1, 7), new Selection(1, 7, 1, 7)],
796
]
797
);
798
});
799
test('edit.start == range.start && edit.end < range.end', () => {
800
runTest(
801
new Range(1, 4, 1, 9),
802
new Range(1, 4, 1, 6), 'cccc',
803
[
804
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
805
[new Selection(1, 8, 1, 11), new Selection(1, 11, 1, 8)],
806
]
807
);
808
});
809
test('edit.start == range.start && edit.end == range.end', () => {
810
runTest(
811
new Range(1, 4, 1, 9),
812
new Range(1, 4, 1, 9), 'cccc',
813
[
814
[new Selection(1, 4, 1, 8), new Selection(1, 8, 1, 4)],
815
[new Selection(1, 8, 1, 8), new Selection(1, 8, 1, 8)],
816
]
817
);
818
});
819
test('edit.start == range.start && edit.end > range.end', () => {
820
runTest(
821
new Range(1, 4, 1, 9),
822
new Range(1, 4, 1, 10), 'cccc',
823
[
824
[new Selection(1, 4, 1, 8), new Selection(1, 8, 1, 4)],
825
[new Selection(1, 8, 1, 8), new Selection(1, 8, 1, 8)],
826
]
827
);
828
});
829
test('edit.start > range.start && edit.start < range.end && edit.end < range.end', () => {
830
runTest(
831
new Range(1, 4, 1, 9),
832
new Range(1, 5, 1, 7), 'cccc',
833
[
834
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
835
[new Selection(1, 4, 1, 11), new Selection(1, 11, 1, 4)],
836
]
837
);
838
});
839
test('edit.start > range.start && edit.start < range.end && edit.end == range.end', () => {
840
runTest(
841
new Range(1, 4, 1, 9),
842
new Range(1, 5, 1, 9), 'cccc',
843
[
844
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
845
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
846
]
847
);
848
});
849
test('edit.start > range.start && edit.start < range.end && edit.end > range.end', () => {
850
runTest(
851
new Range(1, 4, 1, 9),
852
new Range(1, 5, 1, 10), 'cccc',
853
[
854
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
855
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
856
]
857
);
858
});
859
test('edit.start == range.end', () => {
860
runTest(
861
new Range(1, 4, 1, 9),
862
new Range(1, 9, 1, 11), 'cccc',
863
[
864
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
865
[new Selection(1, 4, 1, 13), new Selection(1, 13, 1, 4)],
866
]
867
);
868
});
869
test('edit.start > range.end', () => {
870
runTest(
871
new Range(1, 4, 1, 9),
872
new Range(1, 10, 1, 11), 'cccc',
873
[
874
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
875
[new Selection(1, 4, 1, 9), new Selection(1, 9, 1, 4)],
876
]
877
);
878
});
879
});
880
});
881
});
882
883