'use strict';
var expect = require('expect.js'); var sinon = require('sinon'); var fs = require('fs');
var imageSize = require('..');
describe('after done reading from files', function () {
var oldOpen = fs.open; function readFromClosed (descriptor) { fs.readSync(descriptor, new Buffer(1), 0, 1, 0); } describe('should close the file descriptor', function () { it('async', function (done) { var descriptor; var oldOpen = fs.open; fs.open = sinon.spy(function (path, mode, callback) { oldOpen.call(fs, path, mode, function (err, d) { descriptor = d; callback(err, d); }); }); imageSize('specs/images/valid/jpg/large.jpg', function () { expect(readFromClosed.bind(null, descriptor)).to.throwException(function (e) { expect(e.code).to.equal('EBADF'); expect(e).to.be.an(Error); expect(e.message).to.match(/bad file descriptor/); }); fs.open = oldOpen; done(); }); }); it('sync', function () { var descriptor; var oldOpen = fs.openSync; fs.openSync = sinon.spy(function (path, mode) { descriptor = oldOpen.call(fs, path, mode); return descriptor; }); imageSize('specs/images/valid/jpg/large.jpg'); expect(readFromClosed.bind(null, descriptor)).to.throwException(function (e) { expect(e.code).to.equal('EBADF'); expect(e).to.be.an(Error); expect(e.message).to.match(/bad file descriptor/); }); fs.openSync = oldOpen; }); });
});