@@ -229,6 +229,54 @@ describe('preprocessor', () => {
229229 } )
230230 } )
231231
232+ describe ( 'when fs.readFile fails' , ( ) => {
233+ var file = { originalPath : '/some/a.js' , path : 'path' }
234+ var getReadFileCallback = ( nthCall ) => {
235+ return mockFs . readFile . args [ nthCall ] [ 1 ]
236+ }
237+
238+ beforeEach ( ( ) => {
239+ sinon . stub ( mockFs , 'readFile' )
240+ } )
241+
242+ it ( 'should retry up to 3 times' , ( done ) => {
243+ var fakePreprocessor = sinon . spy ( ( content , file , done ) => {
244+ done ( null , content )
245+ } )
246+
247+ var injector = new di . Injector ( [ {
248+ 'preprocessor:fake' : [ 'factory' , ( ) => fakePreprocessor ]
249+ } , emitterSetting ] )
250+
251+ var pp = m . createPreprocessor ( { '**/*.js' : [ 'fake' ] } , null , injector )
252+
253+ pp ( file , ( ) => {
254+ expect ( fakePreprocessor ) . to . have . been . called
255+ done ( )
256+ } )
257+ getReadFileCallback ( 0 ) ( 'error' )
258+ getReadFileCallback ( 1 ) ( 'error' )
259+ var thirdCallback = getReadFileCallback ( 2 )
260+ mockFs . readFile . restore ( )
261+ thirdCallback ( 'error' )
262+ } )
263+
264+ it ( 'should abort after 3 retries' , ( done ) => {
265+ var injector = new di . Injector ( [ { } , emitterSetting ] )
266+
267+ var pp = m . createPreprocessor ( { '**/*.js' : [ ] } , null , injector )
268+
269+ pp ( file , ( ) => {
270+ done ( )
271+ } )
272+
273+ getReadFileCallback ( 0 ) ( 'error' )
274+ getReadFileCallback ( 1 ) ( 'error' )
275+ getReadFileCallback ( 2 ) ( 'error' )
276+ getReadFileCallback ( 3 ) ( 'error' )
277+ } )
278+ } )
279+
232280 it ( 'should not preprocess binary files' , ( done ) => {
233281 var fakePreprocessor = sinon . spy ( ( content , file , done ) => {
234282 done ( null , content )
0 commit comments