var common = require('../common'); var WriteStreamStub = GENTLY.stub('fs', 'WriteStream'); var File = require(common.lib + '/file'), EventEmitter = require('events').EventEmitter, file, gently; function test(test) { gently = new Gently(); file = new File(); test(); gently.verify(test.name); } test(function constructor() { assert.ok(file instanceof EventEmitter); assert.strictEqual(file.size, 0); assert.strictEqual(file.path, null); assert.strictEqual(file.name, null); assert.strictEqual(file.type, null); assert.strictEqual(file.lastModifiedDate, null); assert.strictEqual(file._writeStream, null); (function testSetProperties() { var file2 = new File({foo: 'bar'}); assert.equal(file2.foo, 'bar'); })(); }); test(function open() { var WRITE_STREAM; file.path = '/foo'; gently.expect(WriteStreamStub, 'new', function (path) { WRITE_STREAM = this; assert.strictEqual(path, file.path); }); file.open(); assert.strictEqual(file._writeStream, WRITE_STREAM); }); test(function write() { var BUFFER = {length: 10}, CB_STUB, CB = function() { CB_STUB.apply(this, arguments); }; file._writeStream = {}; gently.expect(file._writeStream, 'write', function (buffer, cb) { assert.strictEqual(buffer, BUFFER); gently.expect(file, 'emit', function (event, bytesWritten) { assert.ok(file.lastModifiedDate instanceof Date); assert.equal(event, 'progress'); assert.equal(bytesWritten, file.size); }); CB_STUB = gently.expect(function writeCb() { assert.equal(file.size, 10); }); cb(); gently.expect(file, 'emit', function (event, bytesWritten) { assert.equal(event, 'progress'); assert.equal(bytesWritten, file.size); }); CB_STUB = gently.expect(function writeCb() { assert.equal(file.size, 20); }); cb(); }); file.write(BUFFER, CB); }); test(function end() { var CB_STUB, CB = function() { CB_STUB.apply(this, arguments); }; file._writeStream = {}; gently.expect(file._writeStream, 'end', function (cb) { gently.expect(file, 'emit', function (event) { assert.equal(event, 'end'); }); CB_STUB = gently.expect(function endCb() { }); cb(); }); file.end(CB); });