|
|
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); });
|