1
1
/* eslint-env jest */
2
+ import assert from 'node:assert' ;
2
3
import * as testUtil from '../testUtil' ;
4
+ import type { Buffer } from './Buffer' ;
3
5
4
6
function wait ( ms : number ) : Promise < void > {
5
7
return new Promise ( resolve => {
@@ -14,14 +16,16 @@ describe('Buffer API', () => {
14
16
15
17
// utility to allow each test to be run in its
16
18
// own buffer
17
- function withBuffer ( lines , test ) {
19
+ function withBuffer (
20
+ lines : string [ ] ,
21
+ test : ( buffer : Buffer ) => Promise < void >
22
+ ) {
18
23
return async ( ) => {
19
24
await nvim . command ( 'new!' ) ;
20
25
21
26
const buffer = await nvim . buffer ;
22
27
23
28
if ( lines ) {
24
- await buffer ;
25
29
await buffer . replace ( lines , 0 ) ;
26
30
}
27
31
@@ -151,7 +155,7 @@ describe('Buffer API', () => {
151
155
it (
152
156
'removes last 2 lines' ,
153
157
withBuffer ( [ 'test' , 'bar' , 'foo' , 'a' , 'b' ] , async buffer => {
154
- buffer . remove ( - 3 , - 1 ) ;
158
+ buffer . remove ( - 3 , - 1 , true ) ;
155
159
expect ( await buffer . lines ) . toEqual ( [ 'test' , 'bar' , 'foo' ] ) ;
156
160
} )
157
161
) ;
@@ -178,7 +182,8 @@ describe('Buffer API', () => {
178
182
it ( 'returns -1 for byte offset of unloaded buffer' , async ( ) => {
179
183
await nvim . command ( 'new' ) ;
180
184
await nvim . command ( 'bunload!' ) ;
181
- expect ( await nvim . buffer . getOffset ( 0 ) ) . toEqual ( - 1 ) ;
185
+ const buffer = await nvim . buffer ;
186
+ expect ( await buffer . getOffset ( 0 ) ) . toEqual ( - 1 ) ;
182
187
} ) ;
183
188
184
189
it (
@@ -199,7 +204,7 @@ describe('Buffer API', () => {
199
204
it (
200
205
'can clear the buffer' ,
201
206
withBuffer ( [ 'foo' ] , async buffer => {
202
- buffer . remove ( 0 , - 1 ) ;
207
+ buffer . remove ( 0 , - 1 , true ) ;
203
208
// One empty line
204
209
expect ( await buffer . length ) . toEqual ( 1 ) ;
205
210
expect ( await buffer . lines ) . toEqual ( [ '' ] ) ;
@@ -214,7 +219,7 @@ describe('Buffer API', () => {
214
219
expect ( await buffer . getOption ( 'copyindent' ) ) . toBe ( true ) ;
215
220
buffer . setOption ( 'copyindent' , false ) ;
216
221
expect ( await buffer . getOption ( 'copyindent' ) ) . toBe ( false ) ;
217
-
222
+ assert ( initial !== undefined ) ;
218
223
// Restore option
219
224
buffer . setOption ( 'copyindent' , initial ) ;
220
225
expect ( await buffer . getOption ( 'copyindent' ) ) . toBe ( initial ) ;
@@ -253,7 +258,7 @@ describe('Buffer API', () => {
253
258
'sets virtual text and clears namespace' ,
254
259
withBuffer ( [ 'test' ] , async buffer => {
255
260
const ns = await nvim . createNamespace ( ) ;
256
- await buffer . setVirtualText ( ns , 0 , [ [ 'annotation' ] ] ) ;
261
+ await buffer . setVirtualText ( ns , 0 , [ [ 'annotation' , '' ] ] ) ;
257
262
await buffer . clearNamespace ( { nsId : ns } ) ;
258
263
} )
259
264
) ;
@@ -263,35 +268,39 @@ describe('Buffer API', () => {
263
268
264
269
describe ( 'Chainable API calls' , ( ) => {
265
270
it ( 'sets/gets the current buffer name using api chaining' , async ( ) => {
266
- nvim . buffer . name = 'goodbye.txt' ;
271
+ const buffer = await nvim . buffer ;
272
+ buffer . name = 'goodbye.txt' ;
267
273
expect ( await nvim . buffer . name ) . toMatch ( 'goodbye.txt' ) ;
268
274
} ) ;
269
275
270
276
it ( 'can chain calls from Base class i.e. getOption' , async ( ) => {
271
- const initial = await nvim . buffer . getOption ( 'copyindent' ) ;
272
- nvim . buffer . setOption ( 'copyindent' , true ) ;
273
- expect ( await nvim . buffer . getOption ( 'copyindent' ) ) . toBe ( true ) ;
274
- nvim . buffer . setOption ( 'copyindent' , false ) ;
275
- expect ( await nvim . buffer . getOption ( 'copyindent' ) ) . toBe ( false ) ;
276
-
277
+ const buffer = await nvim . buffer ;
278
+ const initial = await buffer . getOption ( 'copyindent' ) ;
279
+ buffer . setOption ( 'copyindent' , true ) ;
280
+ expect ( await buffer . getOption ( 'copyindent' ) ) . toBe ( true ) ;
281
+ buffer . setOption ( 'copyindent' , false ) ;
282
+ expect ( await buffer . getOption ( 'copyindent' ) ) . toBe ( false ) ;
283
+ assert ( initial !== undefined ) ;
277
284
// Restore option
278
- nvim . buffer . setOption ( 'copyindent' , initial ) ;
279
- expect ( await nvim . buffer . getOption ( 'copyindent' ) ) . toBe ( initial ) ;
285
+ buffer . setOption ( 'copyindent' , initial ) ;
286
+ expect ( await buffer . getOption ( 'copyindent' ) ) . toBe ( initial ) ;
280
287
} ) ;
281
288
282
289
it ( 'sets current buffer name to "bar.js" using api chaining' , async ( ) => {
283
- await ( nvim . buffer . name = 'bar.js' ) ;
284
- expect ( await nvim . buffer . name ) . toMatch ( 'bar.js' ) ;
290
+ const buffer = await nvim . buffer ;
291
+ buffer . name = 'bar.js' ;
292
+ expect ( await buffer . name ) . toMatch ( 'bar.js' ) ;
285
293
286
- await ( nvim . buffer . name = 'test2.js' ) ;
287
- expect ( await nvim . buffer . name ) . toMatch ( 'test2.js' ) ;
294
+ buffer . name = 'test2.js' ;
295
+ expect ( await buffer . name ) . toMatch ( 'test2.js' ) ;
288
296
} ) ;
289
297
290
298
it (
291
299
'can replace first line of nvim.buffer with a string' ,
292
300
withBuffer ( [ ] , async ( ) => {
293
- await nvim . buffer . replace ( 'test' , 0 ) ;
294
- expect ( await nvim . buffer . lines ) . toEqual ( [ 'test' ] ) ;
301
+ const buffer = await nvim . buffer ;
302
+ await buffer . replace ( 'test' , 0 ) ;
303
+ expect ( await buffer . lines ) . toEqual ( [ 'test' ] ) ;
295
304
} )
296
305
) ;
297
306
@@ -300,9 +309,10 @@ describe('Buffer API', () => {
300
309
withBuffer (
301
310
[ '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' ] ,
302
311
async ( ) => {
303
- await nvim . buffer . replace ( [ 'a' , 'b' , 'c' ] , 2 ) ;
312
+ const buffer = await nvim . buffer ;
313
+ await buffer . replace ( [ 'a' , 'b' , 'c' ] , 2 ) ;
304
314
305
- expect ( await nvim . buffer . lines ) . toEqual ( [
315
+ expect ( await buffer . lines ) . toEqual ( [
306
316
'0' ,
307
317
'1' ,
308
318
'a' ,
@@ -321,24 +331,27 @@ describe('Buffer API', () => {
321
331
it (
322
332
'can insert lines at beginning of buffer' ,
323
333
withBuffer ( [ 'test' ] , async ( ) => {
324
- await nvim . buffer . insert ( [ 'test' , 'foo' ] , 0 ) ;
325
- expect ( await nvim . buffer . lines ) . toEqual ( [ 'test' , 'foo' , 'test' ] ) ;
334
+ const buffer = await nvim . buffer ;
335
+ await buffer . insert ( [ 'test' , 'foo' ] , 0 ) ;
336
+ expect ( await buffer . lines ) . toEqual ( [ 'test' , 'foo' , 'test' ] ) ;
326
337
} )
327
338
) ;
328
339
329
340
it (
330
341
'can replace nvim.buffer starting at line 1' ,
331
342
withBuffer ( [ 'test' , 'foo' ] , async ( ) => {
332
- await nvim . buffer . replace ( [ 'bar' , 'bar' , 'bar' ] , 1 ) ;
333
- expect ( await nvim . buffer . lines ) . toEqual ( [ 'test' , 'bar' , 'bar' , 'bar' ] ) ;
343
+ const buffer = await nvim . buffer ;
344
+ await buffer . replace ( [ 'bar' , 'bar' , 'bar' ] , 1 ) ;
345
+ expect ( await buffer . lines ) . toEqual ( [ 'test' , 'bar' , 'bar' , 'bar' ] ) ;
334
346
} )
335
347
) ;
336
348
337
349
it (
338
350
'inserts line at index 2' ,
339
351
withBuffer ( [ 'test' , 'bar' , 'bar' , 'bar' ] , async ( ) => {
340
- await nvim . buffer . insert ( [ 'foo' ] , 2 ) ;
341
- expect ( await nvim . buffer . lines ) . toEqual ( [
352
+ const buffer = await nvim . buffer ;
353
+ await buffer . insert ( [ 'foo' ] , 2 ) ;
354
+ expect ( await buffer . lines ) . toEqual ( [
342
355
'test' ,
343
356
'bar' ,
344
357
'foo' ,
@@ -351,16 +364,18 @@ describe('Buffer API', () => {
351
364
it (
352
365
'removes last 2 lines' ,
353
366
withBuffer ( [ 'test' , 'bar' , 'foo' , 'a' , 'b' ] , async ( ) => {
354
- await nvim . buffer . remove ( - 3 , - 1 ) ;
355
- expect ( await nvim . buffer . lines ) . toEqual ( [ 'test' , 'bar' , 'foo' ] ) ;
367
+ const buffer = await nvim . buffer ;
368
+ await buffer . remove ( - 3 , - 1 , true ) ;
369
+ expect ( await buffer . lines ) . toEqual ( [ 'test' , 'bar' , 'foo' ] ) ;
356
370
} )
357
371
) ;
358
372
359
373
it (
360
374
'append lines to end of buffer' ,
361
375
withBuffer ( [ 'test' , 'bar' , 'foo' ] , async ( ) => {
362
- await nvim . buffer . append ( [ 'test' , 'test' ] ) ;
363
- expect ( await nvim . buffer . lines ) . toEqual ( [
376
+ const buffer = await nvim . buffer ;
377
+ await buffer . append ( [ 'test' , 'test' ] ) ;
378
+ expect ( await buffer . lines ) . toEqual ( [
364
379
'test' ,
365
380
'bar' ,
366
381
'foo' ,
@@ -373,10 +388,11 @@ describe('Buffer API', () => {
373
388
it (
374
389
'can clear the buffer' ,
375
390
withBuffer ( [ 'foo' ] , async ( ) => {
376
- await nvim . buffer . remove ( 0 , - 1 ) ;
391
+ const buffer = await nvim . buffer ;
392
+ await buffer . remove ( 0 , - 1 , true ) ;
377
393
// One empty line
378
- expect ( await nvim . buffer . length ) . toEqual ( 1 ) ;
379
- expect ( await nvim . buffer . lines ) . toEqual ( [ '' ] ) ;
394
+ expect ( await buffer . length ) . toEqual ( 1 ) ;
395
+ expect ( await buffer . lines ) . toEqual ( [ '' ] ) ;
380
396
} )
381
397
) ;
382
398
} ) ;
@@ -394,17 +410,17 @@ describe('Buffer event updates', () => {
394
410
} ) ;
395
411
396
412
beforeEach ( async ( ) => {
397
- await nvim . buffer . remove ( 0 , - 1 ) ;
413
+ await ( await nvim . buffer ) . remove ( 0 , - 1 , true ) ;
398
414
} ) ;
399
415
400
416
it ( 'can listen and unlisten' , async ( ) => {
401
417
const buffer = await nvim . buffer ;
402
418
const mock = jest . fn ( ) ;
403
419
const unlisten = buffer . listen ( 'lines' , mock ) ;
404
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
420
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
405
421
expect ( mock ) . toHaveBeenCalledTimes ( 1 ) ;
406
422
unlisten ( ) ;
407
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
423
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
408
424
expect ( mock ) . toHaveBeenCalledTimes ( 1 ) ;
409
425
} ) ;
410
426
@@ -415,7 +431,7 @@ describe('Buffer event updates', () => {
415
431
await wait ( 10 ) ;
416
432
const mock = jest . fn ( ) ;
417
433
unlisten = buffer . listen ( 'lines' , mock ) ;
418
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
434
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
419
435
expect ( mock ) . toHaveBeenCalledTimes ( 1 ) ;
420
436
unlisten ( ) ;
421
437
} ) ;
@@ -437,18 +453,18 @@ describe('Buffer event updates', () => {
437
453
const mock = jest . fn ( ) ;
438
454
buffer . listen ( 'lines' , mock ) ;
439
455
buffer . listen ( 'lines' , mock ) ;
440
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
456
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
441
457
expect ( mock ) . toHaveBeenCalledTimes ( 1 ) ;
442
458
} ) ;
443
459
444
460
it ( 'can use `buffer.unlisten` to unlisten' , async ( ) => {
445
461
const buffer = await nvim . buffer ;
446
462
const mock = jest . fn ( ) ;
447
463
buffer . listen ( 'lines' , mock ) ;
448
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
464
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
449
465
expect ( mock ) . toHaveBeenCalledTimes ( 1 ) ;
450
466
buffer . unlisten ( 'lines' , mock ) ;
451
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
467
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
452
468
expect ( mock ) . toHaveBeenCalledTimes ( 1 ) ;
453
469
} ) ;
454
470
@@ -457,10 +473,16 @@ describe('Buffer event updates', () => {
457
473
const bufferName = await buffer . name ;
458
474
await buffer . insert ( [ 'test' , 'foo' ] , 0 ) ;
459
475
460
- const promise = new Promise ( resolve => {
476
+ const promise = new Promise < void > ( resolve => {
461
477
const unlisten = buffer . listen (
462
478
'lines' ,
463
- async ( currentBuffer , tick , start , end , data ) => {
479
+ async (
480
+ currentBuffer : Buffer ,
481
+ tick : number ,
482
+ start : number ,
483
+ end : number ,
484
+ data : string [ ]
485
+ ) => {
464
486
expect ( await currentBuffer . name ) . toBe ( bufferName ) ;
465
487
expect ( start ) . toBe ( 1 ) ;
466
488
expect ( end ) . toBe ( 1 ) ;
@@ -471,7 +493,7 @@ describe('Buffer event updates', () => {
471
493
) ;
472
494
} ) ;
473
495
474
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
496
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
475
497
await promise ;
476
498
} ) ;
477
499
@@ -484,12 +506,12 @@ describe('Buffer event updates', () => {
484
506
buffers [ 0 ] . listen ( 'lines' , foo ) ;
485
507
buffers [ 1 ] . listen ( 'lines' , bar ) ;
486
508
487
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
509
+ await ( await nvim . buffer ) . insert ( [ 'bar' ] , 1 ) ;
488
510
expect ( foo ) . toHaveBeenCalledTimes ( 0 ) ;
489
511
expect ( bar ) . toHaveBeenCalledTimes ( 1 ) ;
490
512
await nvim . command ( 'q!' ) ;
491
513
492
- await nvim . buffer . insert ( [ 'foo' ] , 0 ) ;
514
+ await ( await nvim . buffer ) . insert ( [ 'foo' ] , 0 ) ;
493
515
expect ( foo ) . toHaveBeenCalledTimes ( 1 ) ;
494
516
expect ( bar ) . toHaveBeenCalledTimes ( 1 ) ;
495
517
@@ -507,13 +529,13 @@ describe('Buffer event updates', () => {
507
529
const unlisten1 = buffer . listen ( 'lines' , foo ) ;
508
530
const unlisten2 = buffer . listen ( 'lines' , bar ) ;
509
531
510
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
532
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
511
533
expect ( foo ) . toHaveBeenCalledTimes ( 1 ) ;
512
534
expect ( bar ) . toHaveBeenCalledTimes ( 1 ) ;
513
535
514
536
unlisten2 ( ) ;
515
537
516
- await nvim . buffer . insert ( [ 'foo' ] , 0 ) ;
538
+ await buffer . insert ( [ 'foo' ] , 0 ) ;
517
539
expect ( foo ) . toHaveBeenCalledTimes ( 2 ) ;
518
540
expect ( bar ) . toHaveBeenCalledTimes ( 1 ) ;
519
541
@@ -531,13 +553,13 @@ describe('Buffer event updates', () => {
531
553
const unlisten1 = buffer . listen ( 'lines' , foo ) ;
532
554
const unlisten2 = buffer . listen ( 'changedtick' , bar ) ;
533
555
534
- await nvim . buffer . insert ( [ 'bar' ] , 1 ) ;
556
+ await buffer . insert ( [ 'bar' ] , 1 ) ;
535
557
expect ( foo ) . toHaveBeenCalledTimes ( 1 ) ;
536
558
expect ( bar ) . toHaveBeenCalledTimes ( 1 ) ;
537
559
538
560
unlisten2 ( ) ;
539
561
540
- await nvim . buffer . insert ( [ 'foo' ] , 0 ) ;
562
+ await buffer . insert ( [ 'foo' ] , 0 ) ;
541
563
expect ( foo ) . toHaveBeenCalledTimes ( 2 ) ;
542
564
expect ( bar ) . toHaveBeenCalledTimes ( 1 ) ;
543
565
0 commit comments