Tighten constructor and quality param checks #221

This commit is contained in:
Lovell Fuller 2015-06-01 14:48:57 +01:00
parent f19b6c48ca
commit e2c53b59ce
2 changed files with 43 additions and 11 deletions

View File

@ -87,9 +87,11 @@ var Sharp = function(input) {
} else if (typeof input === 'object' && input instanceof Buffer) { } else if (typeof input === 'object' && input instanceof Buffer) {
// input=buffer // input=buffer
this.options.bufferIn = input; this.options.bufferIn = input;
} else { } else if (typeof input === 'undefined') {
// input=stream // input=stream
this.options.streamIn = true; this.options.streamIn = true;
} else {
throw new Error('Unsupported input ' + typeof input);
} }
return this; return this;
}; };
@ -394,7 +396,7 @@ Sharp.prototype.sequentialRead = function(sequentialRead) {
}; };
Sharp.prototype.quality = function(quality) { Sharp.prototype.quality = function(quality) {
if (!Number.isNaN(quality) && quality >= 1 && quality <= 100) { if (!Number.isNaN(quality) && quality >= 1 && quality <= 100 && quality % 1 === 0) {
this.options.quality = quality; this.options.quality = quality;
} else { } else {
throw new Error('Invalid quality (1 to 100) ' + quality); throw new Error('Invalid quality (1 to 100) ' + quality);

View File

@ -221,6 +221,29 @@ describe('Input/output', function() {
}); });
}); });
describe('Fail for unsupported input', function() {
it('Numeric', function() {
assert.throws(function() {
sharp(1);
});
});
it('Boolean', function() {
assert.throws(function() {
sharp(true);
});
});
it('Empty Object', function() {
assert.throws(function() {
sharp({});
});
});
it('Error Object', function() {
assert.throws(function() {
sharp(new Error());
});
});
});
it('Promises/A+', function(done) { it('Promises/A+', function(done) {
sharp(fixtures.inputJpg).resize(320, 240).toBuffer().then(function(data) { sharp(fixtures.inputJpg).resize(320, 240).toBuffer().then(function(data) {
sharp(data).toBuffer(function(err, data, info) { sharp(data).toBuffer(function(err, data, info) {
@ -252,15 +275,22 @@ describe('Input/output', function() {
}); });
}); });
it('Invalid quality', function(done) { describe('Invalid quality', function() {
var isValid = true; it('Negative integer', function() {
try { assert.throws(function() {
sharp(fixtures.inputJpg).quality(-1); sharp(fixtures.inputJpg).quality(-1);
} catch (err) { });
isValid = false; });
} it('Non integral', function() {
assert.strictEqual(false, isValid); assert.throws(function() {
done(); sharp(fixtures.inputJpg).quality(88.2);
});
});
it('String', function() {
assert.throws(function() {
sharp(fixtures.inputJpg).quality('test');
});
});
}); });
it('Progressive JPEG image', function(done) { it('Progressive JPEG image', function(done) {