@ -32,100 +32,104 @@ function FakeInput() {
inherits ( FakeInput , EventEmitter ) ;
FakeInput . prototype . resume = function ( ) { } ;
FakeInput . prototype . pause = function ( ) { } ;
FakeInput . prototype . write = function ( ) { } ;
FakeInput . prototype . end = function ( ) { } ;
var fi ;
var rli ;
var called ;
[ true , false ] . forEach ( function ( terminal ) {
var fi ;
var rli ;
var called ;
// sending a full line
fi = new FakeInput ( ) ;
rli = new readline . Interface ( fi , { } ) ;
called = false ;
rli . on ( 'line' , function ( line ) {
called = true ;
assert . equal ( line , 'asdf' ) ;
} ) ;
fi . emit ( 'data' , 'asdf\n' ) ;
assert . ok ( called ) ;
// sending a full line
fi = new FakeInput ( ) ;
rli = new readline . Interface ( { input : fi , output : fi , terminal : terminal } ) ;
called = false ;
rli . on ( 'line' , function ( line ) {
called = true ;
assert . equal ( line , 'asdf' ) ;
} ) ;
fi . emit ( 'data' , 'asdf\n' ) ;
assert . ok ( called ) ;
// sending a blank line
fi = new FakeInput ( ) ;
rli = new readline . Interface ( fi , { } ) ;
called = false ;
rli . on ( 'line' , function ( line ) {
called = true ;
assert . equal ( line , '' ) ;
} ) ;
fi . emit ( 'data' , '\n' ) ;
assert . ok ( called ) ;
// sending a blank line
fi = new FakeInput ( ) ;
rli = new readline . Interface ( { input : fi , output : fi , terminal : terminal } ) ;
called = false ;
rli . on ( 'line' , function ( line ) {
called = true ;
assert . equal ( line , '' ) ;
} ) ;
fi . emit ( 'data' , '\n' ) ;
assert . ok ( called ) ;
// sending a single character with no newline
fi = new FakeInput ( ) ;
rli = new readline . Interface ( fi , { } ) ;
called = false ;
rli . on ( 'line' , function ( line ) {
called = true ;
} ) ;
fi . emit ( 'data' , 'a' ) ;
assert . ok ( ! called ) ;
rli . close ( ) ;
// sending a single character with no newline
fi = new FakeInput ( ) ;
rli = new readline . Interface ( fi , { } ) ;
called = false ;
rli . on ( 'line' , function ( line ) {
called = true ;
} ) ;
fi . emit ( 'data' , 'a' ) ;
assert . ok ( ! called ) ;
rli . close ( ) ;
// sending a single character with no newline and then a newline
fi = new FakeInput ( ) ;
rli = new readline . Interface ( fi , { } ) ;
called = false ;
rli . on ( 'line' , function ( line ) {
called = true ;
assert . equal ( line , 'a' ) ;
} ) ;
fi . emit ( 'data' , 'a' ) ;
assert . ok ( ! called ) ;
fi . emit ( 'data' , '\n' ) ;
assert . ok ( called ) ;
rli . close ( ) ;
// sending a single character with no newline and then a newline
fi = new FakeInput ( ) ;
rli = new readline . Interface ( { input : fi , output : fi , terminal : terminal } ) ;
called = false ;
rli . on ( 'line' , function ( line ) {
called = true ;
assert . equal ( line , 'a' ) ;
} ) ;
fi . emit ( 'data' , 'a' ) ;
assert . ok ( ! called ) ;
fi . emit ( 'data' , '\n' ) ;
assert . ok ( called ) ;
rli . close ( ) ;
// sending multiple newlines at once
fi = new FakeInput ( ) ;
rli = new readline . Interface ( fi , { } ) ;
var expectedLines = [ 'foo\n ' , 'bar\n ' , 'baz\n ' ] ;
var callCount = 0 ;
rli . on ( 'line' , function ( line ) {
assert . equal ( line , expectedLines [ callCount ] ) ;
callCount ++ ;
} ) ;
fi . emit ( 'data' , expectedLines . join ( '\n' ) + '\n' ) ;
assert . equal ( callCount , expectedLines . length ) ;
rli . close ( ) ;
// sending multiple newlines at once
fi = new FakeInput ( ) ;
rli = new readline . Interface ( { input : fi , output : fi , terminal : terminal } ) ;
var expectedLines = [ 'foo' , 'bar' , 'baz' ] ;
var callCount = 0 ;
rli . on ( 'line' , function ( line ) {
assert . equal ( line , expectedLines [ callCount ] ) ;
callCount ++ ;
} ) ;
fi . emit ( 'data' , expectedLines . join ( '\n' ) + '\n' ) ;
assert . equal ( callCount , expectedLines . length ) ;
rli . close ( ) ;
// sending multiple newlines at once that does not end with a new line
fi = new FakeInput ( ) ;
rli = new readline . Interface ( fi , { } ) ;
var expectedLines = [ 'foo\n ' , 'bar\n ' , 'baz\n ' , 'bat' ] ;
var callCount = 0 ;
rli . on ( 'line' , function ( line ) {
assert . equal ( line , expectedLines [ callCount ] ) ;
callCount ++ ;
} ) ;
fi . emit ( 'data' , expectedLines . join ( '\n' ) ) ;
assert . equal ( callCount , expectedLines . length - 1 ) ;
rli . close ( ) ;
// sending multiple newlines at once that does not end with a new line
fi = new FakeInput ( ) ;
rli = new readline . Interface ( { input : fi , output : fi , terminal : terminal } ) ;
expectedLines = [ 'foo' , 'bar' , 'baz' , 'bat' ] ;
callCount = 0 ;
rli . on ( 'line' , function ( line ) {
assert . equal ( line , expectedLines [ callCount ] ) ;
callCount ++ ;
} ) ;
fi . emit ( 'data' , expectedLines . join ( '\n' ) ) ;
assert . equal ( callCount , expectedLines . length - 1 ) ;
rli . close ( ) ;
// sending a multi-byte utf8 char over multiple writes
var buf = Buffer ( '☮' , 'utf8' ) ;
fi = new FakeInput ( ) ;
rli = new readline . Interface ( fi , { } ) ;
callCount = 0 ;
rli . on ( 'line' , function ( line ) {
callCount ++ ;
assert . equal ( line , buf . toString ( 'utf8' ) ) ;
} ) ;
[ ] . forEach . call ( buf , function ( i ) {
fi . emit ( 'data' , Buffer ( [ i ] ) ) ;
} ) ;
assert . equal ( callCount , 0 ) ;
fi . emit ( 'data' , '\n' ) ;
assert . equal ( callCount , 1 ) ;
rli . close ( ) ;
// sending a multi-byte utf8 char over multiple writes
var buf = Buffer ( '☮' , 'utf8' ) ;
fi = new FakeInput ( ) ;
rli = new readline . Interface ( { input : fi , output : fi , terminal : terminal } ) ;
callCount = 0 ;
rli . on ( 'line' , function ( line ) {
callCount ++ ;
assert . equal ( line , buf . toString ( 'utf8' ) ) ;
} ) ;
[ ] . forEach . call ( buf , function ( i ) {
fi . emit ( 'data' , Buffer ( [ i ] ) ) ;
} ) ;
assert . equal ( callCount , 0 ) ;
fi . emit ( 'data' , '\n' ) ;
assert . equal ( callCount , 1 ) ;
rli . close ( ) ;
assert . deepEqual ( fi . listeners ( 'end' ) , [ ] ) ;
assert . deepEqual ( fi . listeners ( 'data' ) , [ ] ) ;
assert . deepEqual ( fi . listeners ( 'end' ) , [ ] ) ;
assert . deepEqual ( fi . listeners ( terminal ? 'keypress' : 'data' ) , [ ] ) ;
} ) ;