@@ -331,56 +331,75 @@ describe('BufferLine', function(): void {
331331 describe ( 'translateToString with and w\'o trimming' , function ( ) : void {
332332 it ( 'empty line' , function ( ) : void {
333333 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 , [ ] ) ;
336339 } ) ;
337340 it ( 'ASCII' , function ( ) : void {
341+ const columns : number [ ] = [ ] ;
338342 const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
339343 line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
340344 line . setCell ( 2 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
341345 line . setCell ( 4 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
342346 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+ }
351359
352360 } ) ;
353361 it ( 'surrogate' , function ( ) : void {
362+ const columns : number [ ] = [ ] ;
354363 const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
355364 line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
356365 line . setCell ( 2 , CellData . fromCharData ( [ 1 , '𝄞' , 1 , '𝄞' . charCodeAt ( 0 ) ] ) ) ;
357366 line . setCell ( 4 , CellData . fromCharData ( [ 1 , '𝄞' , 1 , '𝄞' . charCodeAt ( 0 ) ] ) ) ;
358367 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+ }
367380 } ) ;
368381 it ( 'combining' , function ( ) : void {
382+ const columns : number [ ] = [ ] ;
369383 const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
370384 line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
371385 line . setCell ( 2 , CellData . fromCharData ( [ 1 , 'e\u0301' , 1 , '\u0301' . charCodeAt ( 0 ) ] ) ) ;
372386 line . setCell ( 4 , CellData . fromCharData ( [ 1 , 'e\u0301' , 1 , '\u0301' . charCodeAt ( 0 ) ] ) ) ;
373387 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+ }
382400 } ) ;
383401 it ( 'fullwidth' , function ( ) : void {
402+ const columns : number [ ] = [ ] ;
384403 const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
385404 line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
386405 line . setCell ( 2 , CellData . fromCharData ( [ 1 , '1' , 2 , '1' . charCodeAt ( 0 ) ] ) ) ;
@@ -389,43 +408,55 @@ describe('BufferLine', function(): void {
389408 line . setCell ( 6 , CellData . fromCharData ( [ 0 , '' , 0 , 0 ] ) ) ;
390409 line . setCell ( 7 , CellData . fromCharData ( [ 1 , '1' , 2 , '1' . charCodeAt ( 0 ) ] ) ) ;
391410 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+ }
406429 } ) ;
407430 it ( 'space at end' , function ( ) : void {
431+ const columns : number [ ] = [ ] ;
408432 const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , NULL_CELL_WIDTH , NULL_CELL_CODE ] ) , false ) ;
409433 line . setCell ( 0 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
410434 line . setCell ( 2 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
411435 line . setCell ( 4 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
412436 line . setCell ( 5 , CellData . fromCharData ( [ 1 , 'a' , 1 , 'a' . charCodeAt ( 0 ) ] ) ) ;
413437 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 ] ) ;
416442 } ) ;
417443 it ( 'should always return some sane value' , function ( ) : void {
444+ const columns : number [ ] = [ ] ;
418445 // sanity check - broken line with invalid out of bound null width cells
419446 // this can atm happen with deleting/inserting chars in inputhandler by "breaking"
420447 // fullwidth pairs --> needs to be fixed after settling BufferLine impl
421448 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 , [ ] ) ;
424453 } ) ;
425454 it ( 'should work with endCol=0' , ( ) => {
455+ const columns : number [ ] = [ ] ;
426456 const line = new TestBufferLine ( 10 , CellData . fromCharData ( [ DEFAULT_ATTR , NULL_CELL_CHAR , 0 , NULL_CELL_CODE ] ) , false ) ;
427457 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 , [ ] ) ;
429460 } ) ;
430461 } ) ;
431462 describe ( 'addCharToCell' , ( ) => {
0 commit comments