@@ -1913,6 +1913,92 @@ describe('InputHandler', () => {
19131913 } ) ;
19141914 } ) ;
19151915 } ) ;
1916+
1917+ // issue #3362 and #2979
1918+ describe ( 'EL/ED cursor at buffer.cols' , ( ) => {
1919+ beforeEach ( ( ) => {
1920+ bufferService . resize ( 10 , 5 ) ;
1921+ } ) ;
1922+ describe ( 'cursor should stay at cols / does not overflow' , ( ) => {
1923+ it ( 'EL0' , async ( ) => {
1924+ await inputHandler . parseP ( '##########\x1b[0K' ) ;
1925+ assert . equal ( bufferService . buffer . x , 10 ) ;
1926+ assert . deepEqual ( getLines ( bufferService ) , [ '#' . repeat ( 10 ) , '' , '' , '' , '' ] ) ;
1927+ } ) ;
1928+ it ( 'EL1' , async ( ) => {
1929+ await inputHandler . parseP ( '##########\x1b[1K' ) ;
1930+ assert . equal ( bufferService . buffer . x , 10 ) ;
1931+ assert . deepEqual ( getLines ( bufferService ) , [ '' , '' , '' , '' , '' ] ) ;
1932+ } ) ;
1933+ it ( 'EL2' , async ( ) => {
1934+ await inputHandler . parseP ( '##########\x1b[2K' ) ;
1935+ assert . equal ( bufferService . buffer . x , 10 ) ;
1936+ assert . deepEqual ( getLines ( bufferService ) , [ '' , '' , '' , '' , '' ] ) ;
1937+ } ) ;
1938+ it ( 'ED0' , async ( ) => {
1939+ await inputHandler . parseP ( '##########\x1b[0J' ) ;
1940+ assert . equal ( bufferService . buffer . x , 10 ) ;
1941+ assert . deepEqual ( getLines ( bufferService ) , [ '#' . repeat ( 10 ) , '' , '' , '' , '' ] ) ;
1942+ } ) ;
1943+ it ( 'ED1' , async ( ) => {
1944+ await inputHandler . parseP ( '##########\x1b[1J' ) ;
1945+ assert . equal ( bufferService . buffer . x , 10 ) ;
1946+ assert . deepEqual ( getLines ( bufferService ) , [ '' , '' , '' , '' , '' ] ) ;
1947+ } ) ;
1948+ it ( 'ED2' , async ( ) => {
1949+ await inputHandler . parseP ( '##########\x1b[2J' ) ;
1950+ assert . equal ( bufferService . buffer . x , 10 ) ;
1951+ assert . deepEqual ( getLines ( bufferService ) , [ '' , '' , '' , '' , '' ] ) ;
1952+ } ) ;
1953+ it ( 'ED3' , async ( ) => {
1954+ await inputHandler . parseP ( '##########\x1b[3J' ) ;
1955+ assert . equal ( bufferService . buffer . x , 10 ) ;
1956+ assert . deepEqual ( getLines ( bufferService ) , [ '#' . repeat ( 10 ) , '' , '' , '' , '' ] ) ;
1957+ } ) ;
1958+ } ) ;
1959+ describe ( 'following sequence keeps working' , ( ) => {
1960+ // sequences to test (cursor related ones)
1961+ const SEQ = [
1962+ /* ICH */ '\x1b[10@' ,
1963+ /* SL */ '\x1b[10 @' ,
1964+ /* CUU */ '\x1b[10A' ,
1965+ /* SR */ '\x1b[10 A' ,
1966+ /* CUD */ '\x1b[10B' ,
1967+ /* CUF */ '\x1b[10C' ,
1968+ /* CUB */ '\x1b[10D' ,
1969+ /* CNL */ '\x1b[10E' ,
1970+ /* CPL */ '\x1b[10F' ,
1971+ /* CHA */ '\x1b[10G' ,
1972+ /* CUP */ '\x1b[10;10H' ,
1973+ /* CHT */ '\x1b[10I' ,
1974+ /* IL */ '\x1b[10L' ,
1975+ /* DL */ '\x1b[10M' ,
1976+ /* DCH */ '\x1b[10P' ,
1977+ /* SU */ '\x1b[10S' ,
1978+ /* SD */ '\x1b[10T' ,
1979+ /* ECH */ '\x1b[10X' ,
1980+ /* CBT */ '\x1b[10Z' ,
1981+ /* HPA */ '\x1b[10`' ,
1982+ /* HPR */ '\x1b[10a' ,
1983+ /* REP */ '\x1b[10b' ,
1984+ /* VPA */ '\x1b[10d' ,
1985+ /* VPR */ '\x1b[10e' ,
1986+ /* HVP */ '\x1b[10;10f' ,
1987+ /* TBC */ '\x1b[0g' ,
1988+ /* SCOSC */ '\x1b[s' ,
1989+ /* DECIC */ '\x1b[10\'}' ,
1990+ /* DECDC */ '\x1b[10\'~'
1991+ ] ;
1992+ it ( 'cursor never advances beyond cols' , async ( ) => {
1993+ for ( const seq of SEQ ) {
1994+ await inputHandler . parseP ( '##########\x1b[2J' + seq ) ;
1995+ assert . equal ( bufferService . buffer . x <= bufferService . cols , true ) ;
1996+ inputHandler . reset ( ) ;
1997+ bufferService . reset ( ) ;
1998+ }
1999+ } ) ;
2000+ } ) ;
2001+ } ) ;
19162002} ) ;
19172003
19182004
0 commit comments