You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							40 lines
						
					
					
						
							1.3 KiB
						
					
					
				'use strict' | 
						|
var fs = require('graceful-fs') | 
						|
var path = require('path') | 
						|
var test = require('tap').test | 
						|
var rimraf = require('rimraf') | 
						|
var writeStream = require('../index.js') | 
						|
 | 
						|
var target = path.resolve(__dirname, 'test-chown') | 
						|
 | 
						|
test('slow close', function (t) { | 
						|
  t.plan(2) | 
						|
  // The goal here is to simulate the "file close" step happening so slowly | 
						|
  // that the whole close/rename process could finish before the file is | 
						|
  // actually closed (and thus buffers truely flushed to the OS). In | 
						|
  // previous versions of this module, this would result in the module | 
						|
  // emitting finish & close before the file was fully written and in | 
						|
  // turn, could break other layers that tried to read the new file. | 
						|
  var realEmit = fs.WriteStream.prototype.emit | 
						|
  var reallyClosed = false | 
						|
  fs.WriteStream.prototype.emit = function (event) { | 
						|
    if (event !== 'close') return realEmit.apply(this, arguments) | 
						|
    setTimeout(function () { | 
						|
      reallyClosed = true | 
						|
      realEmit.call(this, 'close') | 
						|
    }.bind(this), 200) | 
						|
  } | 
						|
  var stream = writeStream(target) | 
						|
  stream.on('finish', function () { | 
						|
    t.is(reallyClosed, true, "didn't finish before target was closed") | 
						|
  }) | 
						|
  stream.on('close', function () { | 
						|
    t.is(reallyClosed, true, "didn't close before target was closed") | 
						|
  }) | 
						|
  stream.end() | 
						|
}) | 
						|
 | 
						|
test('cleanup', function (t) { | 
						|
  rimraf.sync(target) | 
						|
  t.end() | 
						|
})
 | 
						|
 |