@@ -70,6 +70,7 @@ const historyFixturePath = path.join(fixtures, '.node_repl_history');
7070const  historyPath  =  path . join ( common . tmpDir ,  '.fixture_copy_repl_history' ) ; 
7171const  oldHistoryPath  =  path . join ( fixtures ,  'old-repl-history-file.json' ) ; 
7272const  enoentHistoryPath  =  path . join ( fixtures ,  'enoent-repl-history-file.json' ) ; 
73+ const  defaultHistoryPath  =  path . join ( common . tmpDir ,  '.node_repl_history' ) ; 
7374
7475
7576const  tests  =  [ { 
@@ -113,11 +114,7 @@ const tests = [{
113114} , 
114115{ 
115116  env : {  NODE_REPL_HISTORY_FILE : oldHistoryPath  } , 
116-   test : [ UP ,  CLEAR ,  '\'42\'' ,  ENTER /*, function(cb) { 
117-     // XXX(Fishrock123) Allow the REPL to save to disk. 
118-     // There isn't a way to do this programmatically right now. 
119-     setTimeout(cb, 50); 
120-   }*/ ] , 
117+   test : [ UP ,  CLEAR ,  '\'42\'' ,  ENTER ] , 
121118  expected : [ prompt ,  convertMsg ,  prompt ,  prompt  +  '\'=^.^=\'' ,  prompt ,  '\'' , 
122119             '4' ,  '2' ,  '\'' ,  '\'42\'\n' ,  prompt ,  prompt ] , 
123120  after : function  ensureHistoryFixture ( )  { 
@@ -132,7 +129,7 @@ const tests = [{
132129                                    '\'Stay Fresh~\''  +  os . EOL ) ; 
133130  } 
134131} , 
135- { 
132+ {   // Requires the above testcase 
136133  env : { } , 
137134  test : [ UP ,  UP ,  ENTER ] , 
138135  expected : [ prompt ,  prompt  +  '\'42\'' ,  prompt  +  '\'=^.^=\'' ,  '\'=^.^=\'\n' , 
@@ -149,16 +146,45 @@ const tests = [{
149146  test : [ UP ] , 
150147  expected : [ prompt ,  homedirErr ,  prompt ,  replDisabled ,  prompt ] 
151148} ] ; 
149+ const  numtests  =  tests . length ; 
150+ 
151+ 
152+ var  testsNotRan  =  tests . length ; 
152153
154+ process . on ( 'beforeExit' ,  ( )  => 
155+   assert . strictEqual ( testsNotRan ,  0 ) 
156+ ) ; 
157+ 
158+ function  cleanupTmpFile ( )  { 
159+   try  { 
160+     // Write over the file, clearing any history 
161+     fs . writeFileSync ( defaultHistoryPath ,  '' ) ; 
162+   }  catch  ( err )  { 
163+     if  ( err . code  ===  'ENOENT' )  return  true ; 
164+     throw  err ; 
165+   } 
166+   return  true ; 
167+ } 
153168
154169// Copy our fixture to the tmp directory 
155170fs . createReadStream ( historyFixturePath ) 
156-   . pipe ( fs . createWriteStream ( historyPath ) ) . on ( 'unpipe' ,  runTest ) ; 
171+   . pipe ( fs . createWriteStream ( historyPath ) ) . on ( 'unpipe' ,  ( )   =>   runTest ( ) ) ; 
157172
158- function  runTest ( )  { 
173+ function  runTest ( assertCleaned )  { 
159174  const  opts  =  tests . shift ( ) ; 
160175  if  ( ! opts )  return ;  // All done 
161176
177+   if  ( assertCleaned )  { 
178+     try  { 
179+       assert . strictEqual ( fs . readFileSync ( defaultHistoryPath ,  'utf8' ) ,  '' ) ; 
180+     }  catch  ( e )  { 
181+       if  ( e . code  !==  'ENOENT' )  { 
182+         console . error ( `Failed test # ${ numtests  -  tests . length }  ` ) ; 
183+         throw  e ; 
184+       } 
185+     } 
186+   } 
187+ 
162188  const  env  =  opts . env ; 
163189  const  test  =  opts . test ; 
164190  const  expected  =  opts . expected ; 
@@ -177,24 +203,51 @@ function runTest() {
177203        if  ( output . charCodeAt ( 0 )  ===  27  ||  / ^ [ \r \n ] + $ / . test ( output ) ) 
178204          return  next ( ) ; 
179205
180-         assert . strictEqual ( output ,  expected . shift ( ) ) ; 
206+         try  { 
207+           assert . strictEqual ( output ,  expected . shift ( ) ) ; 
208+         }  catch  ( err )  { 
209+           console . error ( `Failed test # ${ numtests  -  tests . length }  ` ) ; 
210+           throw  err ; 
211+         } 
181212        next ( ) ; 
182213      } 
183214    } ) , 
184215    prompt : prompt , 
185216    useColors : false , 
186217    terminal : true 
187218  } ,  function ( err ,  repl )  { 
188-     if  ( err )  throw  err ; 
219+     if  ( err )  { 
220+       console . error ( `Failed test # ${ numtests  -  tests . length }  ` ) ; 
221+       throw  err ; 
222+     } 
189223
190-     if  ( after )  repl . on ( 'close' ,  after ) ; 
224+     repl . once ( 'close' ,  ( )  =>  { 
225+       if  ( repl . _flushing )  { 
226+         repl . once ( 'flushHistory' ,  onClose ) ; 
227+         return ; 
228+       } 
191229
192-     repl . on ( 'close' ,  function ( )  { 
193-       // Ensure everything that we expected was output 
194-       assert . strictEqual ( expected . length ,  0 ) ; 
195-       setImmediate ( runTest ) ; 
230+       onClose ( ) ; 
196231    } ) ; 
197232
233+     function  onClose ( )  { 
234+       if  ( after )  { 
235+         var  cleaned  =  after ( ) ; 
236+       }  else  { 
237+         var  cleaned  =  cleanupTmpFile ( ) ; 
238+       } 
239+ 
240+       try  { 
241+         // Ensure everything that we expected was output 
242+         assert . strictEqual ( expected . length ,  0 ) ; 
243+         testsNotRan -- ; 
244+         setImmediate ( runTest ,  cleaned ) ; 
245+       }  catch  ( err )  { 
246+         console . error ( `Failed test # ${ numtests  -  tests . length }  ` ) ; 
247+         throw  err ; 
248+       } 
249+     } 
250+ 
198251    repl . inputStream . run ( test ) ; 
199252  } ) ; 
200253} 
0 commit comments