@@ -331,56 +331,75 @@ describe('BufferLine', function(): void {
331
331
describe ( 'translateToString with and w\'o trimming' , function ( ) : void {
332
332
it ( 'empty line' , function ( ) : void {
333
333
const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
334
- assert . equal ( line . translateToString ( false ) , ' ' ) ;
335
- assert . equal ( line . translateToString ( true ) , '' ) ;
334
+ const columns : number [ ] = [ ] ;
335
+ assert . equal ( line . translateToString ( false , undefined , undefined , columns ) , ' ' ) ;
336
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ;
337
+ assert . equal ( line . translateToString ( true , undefined , undefined , columns ) , '' ) ;
338
+ assert . deepEqual ( columns , [ ] ) ;
336
339
} ) ;
337
340
it ( 'ASCII' , function ( ) : void {
341
+ const columns : number [ ] = [ ] ;
338
342
const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
339
343
line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
340
344
line . setCell ( 2 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
341
345
line . setCell ( 4 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
342
346
line . setCell ( 5 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
343
- assert . equal ( line . translateToString ( false ) , 'a a aa ' ) ;
344
- assert . equal ( line . translateToString ( true ) , 'a a aa' ) ;
345
- assert . equal ( line . translateToString ( false , 0 , 5 ) , 'a a a' ) ;
346
- assert . equal ( line . translateToString ( false , 0 , 4 ) , 'a a ' ) ;
347
- assert . equal ( line . translateToString ( false , 0 , 3 ) , 'a a' ) ;
348
- assert . equal ( line . translateToString ( true , 0 , 5 ) , 'a a a' ) ;
349
- assert . equal ( line . translateToString ( true , 0 , 4 ) , 'a a ' ) ;
350
- assert . equal ( line . translateToString ( true , 0 , 3 ) , 'a a' ) ;
347
+ assert . equal ( line . translateToString ( false , undefined , undefined , columns ) , 'a a aa ' ) ;
348
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ;
349
+ assert . equal ( line . translateToString ( true , undefined , undefined , columns ) , 'a a aa' ) ;
350
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 3 , 4 , 5 ] ) ;
351
+ for ( const trimRight of [ true , false ] ) {
352
+ assert . equal ( line . translateToString ( trimRight , 0 , 5 , columns ) , 'a a a' ) ;
353
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 3 , 4 ] ) ;
354
+ assert . equal ( line . translateToString ( trimRight , 0 , 4 , columns ) , 'a a ' ) ;
355
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 3 ] ) ;
356
+ assert . equal ( line . translateToString ( trimRight , 0 , 3 , columns ) , 'a a' ) ;
357
+ assert . deepEqual ( columns , [ 0 , 1 , 2 ] ) ;
358
+ }
351
359
352
360
} ) ;
353
361
it ( 'surrogate' , function ( ) : void {
362
+ const columns : number [ ] = [ ] ;
354
363
const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
355
364
line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
356
365
line . setCell ( 2 , CellData . fromCharData ( [ 1 , '𝄞' , 1 , '𝄞' . charCodeAt ( 0 ) ] ) ) ;
357
366
line . setCell ( 4 , CellData . fromCharData ( [ 1 , '𝄞' , 1 , '𝄞' . charCodeAt ( 0 ) ] ) ) ;
358
367
line . setCell ( 5 , CellData . fromCharData ( [ 1 , '𝄞' , 1 , '𝄞' . charCodeAt ( 0 ) ] ) ) ;
359
- assert . equal ( line . translateToString ( false ) , 'a 𝄞 𝄞𝄞 ' ) ;
360
- assert . equal ( line . translateToString ( true ) , 'a 𝄞 𝄞𝄞' ) ;
361
- assert . equal ( line . translateToString ( false , 0 , 5 ) , 'a 𝄞 𝄞' ) ;
362
- assert . equal ( line . translateToString ( false , 0 , 4 ) , 'a 𝄞 ' ) ;
363
- assert . equal ( line . translateToString ( false , 0 , 3 ) , 'a 𝄞' ) ;
364
- assert . equal ( line . translateToString ( true , 0 , 5 ) , 'a 𝄞 𝄞' ) ;
365
- assert . equal ( line . translateToString ( true , 0 , 4 ) , 'a 𝄞 ' ) ;
366
- assert . equal ( line . translateToString ( true , 0 , 3 ) , 'a 𝄞' ) ;
368
+ assert . equal ( line . translateToString ( false , undefined , undefined , columns ) , 'a 𝄞 𝄞𝄞 ' ) ;
369
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 , 3 , 4 , 4 , 5 , 5 , 6 , 7 , 8 , 9 ] ) ;
370
+ assert . equal ( line . translateToString ( true , undefined , undefined , columns ) , 'a 𝄞 𝄞𝄞' ) ;
371
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 , 3 , 4 , 4 , 5 , 5 ] ) ;
372
+ for ( const trimRight of [ true , false ] ) {
373
+ assert . equal ( line . translateToString ( trimRight , 0 , 5 , columns ) , 'a 𝄞 𝄞' ) ;
374
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 , 3 , 4 , 4 ] ) ;
375
+ assert . equal ( line . translateToString ( trimRight , 0 , 4 , columns ) , 'a 𝄞 ' ) ;
376
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 , 3 ] ) ;
377
+ assert . equal ( line . translateToString ( trimRight , 0 , 3 , columns ) , 'a 𝄞' ) ;
378
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 ] ) ;
379
+ }
367
380
} ) ;
368
381
it ( 'combining' , function ( ) : void {
382
+ const columns : number [ ] = [ ] ;
369
383
const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
370
384
line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
371
385
line . setCell ( 2 , CellData . fromCharData ( [ 1 , 'e\u0301' , 1 , '\u0301' . charCodeAt ( 0 ) ] ) ) ;
372
386
line . setCell ( 4 , CellData . fromCharData ( [ 1 , 'e\u0301' , 1 , '\u0301' . charCodeAt ( 0 ) ] ) ) ;
373
387
line . setCell ( 5 , CellData . fromCharData ( [ 1 , 'e\u0301' , 1 , '\u0301' . charCodeAt ( 0 ) ] ) ) ;
374
- assert . equal ( line . translateToString ( false ) , 'a e\u0301 e\u0301e\u0301 ' ) ;
375
- assert . equal ( line . translateToString ( true ) , 'a e\u0301 e\u0301e\u0301' ) ;
376
- assert . equal ( line . translateToString ( false , 0 , 5 ) , 'a e\u0301 e\u0301' ) ;
377
- assert . equal ( line . translateToString ( false , 0 , 4 ) , 'a e\u0301 ' ) ;
378
- assert . equal ( line . translateToString ( false , 0 , 3 ) , 'a e\u0301' ) ;
379
- assert . equal ( line . translateToString ( true , 0 , 5 ) , 'a e\u0301 e\u0301' ) ;
380
- assert . equal ( line . translateToString ( true , 0 , 4 ) , 'a e\u0301 ' ) ;
381
- assert . equal ( line . translateToString ( true , 0 , 3 ) , 'a e\u0301' ) ;
388
+ assert . equal ( line . translateToString ( false , undefined , undefined , columns ) , 'a e\u0301 e\u0301e\u0301 ' ) ;
389
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 , 3 , 4 , 4 , 5 , 5 , 6 , 7 , 8 , 9 ] ) ;
390
+ assert . equal ( line . translateToString ( true , undefined , undefined , columns ) , 'a e\u0301 e\u0301e\u0301' ) ;
391
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 , 3 , 4 , 4 , 5 , 5 ] ) ;
392
+ for ( const trimRight of [ true , false ] ) {
393
+ assert . equal ( line . translateToString ( trimRight , 0 , 5 , columns ) , 'a e\u0301 e\u0301' ) ;
394
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 , 3 , 4 , 4 ] ) ;
395
+ assert . equal ( line . translateToString ( trimRight , 0 , 4 , columns ) , 'a e\u0301 ' ) ;
396
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 , 3 ] ) ;
397
+ assert . equal ( line . translateToString ( trimRight , 0 , 3 , columns ) , 'a e\u0301' ) ;
398
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 2 ] ) ;
399
+ }
382
400
} ) ;
383
401
it ( 'fullwidth' , function ( ) : void {
402
+ const columns : number [ ] = [ ] ;
384
403
const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
385
404
line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
386
405
line . setCell ( 2 , CellData . fromCharData ( [ 1 , '1' , 2 , '1' . charCodeAt ( 0 ) ] ) ) ;
@@ -389,43 +408,55 @@ describe('BufferLine', function(): void {
389
408
line . setCell ( 6 , CellData . fromCharData ( [ 0 , '' , 0 , 0 ] ) ) ;
390
409
line . setCell ( 7 , CellData . fromCharData ( [ 1 , '1' , 2 , '1' . charCodeAt ( 0 ) ] ) ) ;
391
410
line . setCell ( 8 , CellData . fromCharData ( [ 0 , '' , 0 , 0 ] ) ) ;
392
- assert . equal ( line . translateToString ( false ) , 'a 1 11 ' ) ;
393
- assert . equal ( line . translateToString ( true ) , 'a 1 11' ) ;
394
- assert . equal ( line . translateToString ( false , 0 , 7 ) , 'a 1 1' ) ;
395
- assert . equal ( line . translateToString ( false , 0 , 6 ) , 'a 1 1' ) ;
396
- assert . equal ( line . translateToString ( false , 0 , 5 ) , 'a 1 ' ) ;
397
- assert . equal ( line . translateToString ( false , 0 , 4 ) , 'a 1' ) ;
398
- assert . equal ( line . translateToString ( false , 0 , 3 ) , 'a 1' ) ;
399
- assert . equal ( line . translateToString ( false , 0 , 2 ) , 'a ' ) ;
400
- assert . equal ( line . translateToString ( true , 0 , 7 ) , 'a 1 1' ) ;
401
- assert . equal ( line . translateToString ( true , 0 , 6 ) , 'a 1 1' ) ;
402
- assert . equal ( line . translateToString ( true , 0 , 5 ) , 'a 1 ' ) ;
403
- assert . equal ( line . translateToString ( true , 0 , 4 ) , 'a 1' ) ;
404
- assert . equal ( line . translateToString ( true , 0 , 3 ) , 'a 1' ) ;
405
- assert . equal ( line . translateToString ( true , 0 , 2 ) , 'a ' ) ;
411
+ assert . equal ( line . translateToString ( false , undefined , undefined , columns ) , 'a 1 11 ' ) ;
412
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 4 , 5 , 7 , 9 ] ) ;
413
+ assert . equal ( line . translateToString ( true , undefined , undefined , columns ) , 'a 1 11' ) ;
414
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 4 , 5 , 7 ] ) ;
415
+ for ( const trimRight of [ true , false ] ) {
416
+ assert . equal ( line . translateToString ( trimRight , 0 , 7 , columns ) , 'a 1 1' ) ;
417
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 4 , 5 ] ) ;
418
+ assert . equal ( line . translateToString ( trimRight , 0 , 6 , columns ) , 'a 1 1' ) ;
419
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 4 , 5 ] ) ;
420
+ assert . equal ( line . translateToString ( trimRight , 0 , 5 , columns ) , 'a 1 ' ) ;
421
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 4 ] ) ;
422
+ assert . equal ( line . translateToString ( trimRight , 0 , 4 , columns ) , 'a 1' ) ;
423
+ assert . deepEqual ( columns , [ 0 , 1 , 2 ] ) ;
424
+ assert . equal ( line . translateToString ( trimRight , 0 , 3 , columns ) , 'a 1' ) ;
425
+ assert . deepEqual ( columns , [ 0 , 1 , 2 ] ) ;
426
+ assert . equal ( line . translateToString ( trimRight , 0 , 2 , columns ) , 'a ' ) ;
427
+ assert . deepEqual ( columns , [ 0 , 1 ] ) ;
428
+ }
406
429
} ) ;
407
430
it ( 'space at end' , function ( ) : void {
431
+ const columns : number [ ] = [ ] ;
408
432
const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
409
433
line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
410
434
line . setCell ( 2 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
411
435
line . setCell ( 4 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
412
436
line . setCell ( 5 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
413
437
line . setCell ( 6 , CellData . fromCharData ( [ 1 , ' ' , 1 , ' ' . charCodeAt ( 0 ) ] ) ) ;
414
- assert . equal ( line . translateToString ( false ) , 'a a aa ' ) ;
415
- assert . equal ( line . translateToString ( true ) , 'a a aa ' ) ;
438
+ assert . equal ( line . translateToString ( false , undefined , undefined , columns ) , 'a a aa ' ) ;
439
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ;
440
+ assert . equal ( line . translateToString ( true , undefined , undefined , columns ) , 'a a aa ' ) ;
441
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
416
442
} ) ;
417
443
it ( 'should always return some sane value' , function ( ) : void {
444
+ const columns : number [ ] = [ ] ;
418
445
// sanity check - broken line with invalid out of bound null width cells
419
446
// this can atm happen with deleting/inserting chars in inputhandler by "breaking"
420
447
// fullwidth pairs --> needs to be fixed after settling BufferLine impl
421
448
const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , 0 , NULL_CELL_CODE ] ) , false ) ;
422
- assert . equal ( line . translateToString ( false ) , ' ' ) ;
423
- assert . equal ( line . translateToString ( true ) , '' ) ;
449
+ assert . equal ( line . translateToString ( false , undefined , undefined , columns ) , ' ' ) ;
450
+ assert . deepEqual ( columns , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ;
451
+ assert . equal ( line . translateToString ( true , undefined , undefined , columns ) , '' ) ;
452
+ assert . deepEqual ( columns , [ ] ) ;
424
453
} ) ;
425
454
it ( 'should work with endCol=0' , ( ) => {
455
+ const columns : number [ ] = [ ] ;
426
456
const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , 0 , NULL_CELL_CODE ] ) , false ) ;
427
457
line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
428
- assert . equal ( line . translateToString ( true , 0 , 0 ) , '' ) ;
458
+ assert . equal ( line . translateToString ( true , 0 , 0 , columns ) , '' ) ;
459
+ assert . deepEqual ( columns , [ ] ) ;
429
460
} ) ;
430
461
} ) ;
431
462
describe ( 'addCharToCell' , ( ) => {
0 commit comments