'use strict'; const common = require('../common'); const zlib = require('zlib'); const assert = require('assert'); // Work with and without `new` keyword assert.ok(zlib.Deflate() instanceof zlib.Deflate); assert.ok(new zlib.Deflate() instanceof zlib.Deflate); assert.ok(zlib.DeflateRaw() instanceof zlib.DeflateRaw); assert.ok(new zlib.DeflateRaw() instanceof zlib.DeflateRaw); // Throws if `options.chunkSize` is invalid common.expectsError( () => new zlib.Deflate({ chunkSize: 'test' }), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "options.chunkSize" property must be of type number. ' + 'Received type string' } ); common.expectsError( () => new zlib.Deflate({ chunkSize: -Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.chunkSize" is out of range. It must ' + 'be a finite number. Received -Infinity' } ); common.expectsError( () => new zlib.Deflate({ chunkSize: 0 }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.chunkSize" is out of range. It must ' + 'be >= 64. Received 0' } ); // Confirm that maximum chunk size cannot be exceeded because it is `Infinity`. assert.strictEqual(zlib.constants.Z_MAX_CHUNK, Infinity); // Throws if `options.windowBits` is invalid common.expectsError( () => new zlib.Deflate({ windowBits: 'test' }), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "options.windowBits" property must be of type number. ' + 'Received type string' } ); common.expectsError( () => new zlib.Deflate({ windowBits: -Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.windowBits" is out of range. It must ' + 'be a finite number. Received -Infinity' } ); common.expectsError( () => new zlib.Deflate({ windowBits: Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.windowBits" is out of range. It must ' + 'be a finite number. Received Infinity' } ); common.expectsError( () => new zlib.Deflate({ windowBits: 0 }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.windowBits" is out of range. It must ' + 'be >= 8 and <= 15. Received 0' } ); // Throws if `options.level` is invalid common.expectsError( () => new zlib.Deflate({ level: 'test' }), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "options.level" property must be of type number. ' + 'Received type string' } ); common.expectsError( () => new zlib.Deflate({ level: -Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.level" is out of range. It must ' + 'be a finite number. Received -Infinity' } ); common.expectsError( () => new zlib.Deflate({ level: Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.level" is out of range. It must ' + 'be a finite number. Received Infinity' } ); common.expectsError( () => new zlib.Deflate({ level: -2 }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.level" is out of range. It must ' + 'be >= -1 and <= 9. Received -2' } ); // Throws if `level` invalid in `Deflate.prototype.params()` common.expectsError( () => new zlib.Deflate().params('test'), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "level" argument must be of type number. ' + 'Received type string' } ); common.expectsError( () => new zlib.Deflate().params(-Infinity), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "level" is out of range. It must ' + 'be a finite number. Received -Infinity' } ); common.expectsError( () => new zlib.Deflate().params(Infinity), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "level" is out of range. It must ' + 'be a finite number. Received Infinity' } ); common.expectsError( () => new zlib.Deflate().params(-2), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "level" is out of range. It must ' + 'be >= -1 and <= 9. Received -2' } ); // Throws if options.memLevel is invalid common.expectsError( () => new zlib.Deflate({ memLevel: 'test' }), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "options.memLevel" property must be of type number. ' + 'Received type string' } ); common.expectsError( () => new zlib.Deflate({ memLevel: -Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.memLevel" is out of range. It must ' + 'be a finite number. Received -Infinity' } ); common.expectsError( () => new zlib.Deflate({ memLevel: Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.memLevel" is out of range. It must ' + 'be a finite number. Received Infinity' } ); common.expectsError( () => new zlib.Deflate({ memLevel: -2 }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.memLevel" is out of range. It must ' + 'be >= 1 and <= 9. Received -2' } ); // Does not throw if opts.strategy is valid new zlib.Deflate({ strategy: zlib.constants.Z_FILTERED }); new zlib.Deflate({ strategy: zlib.constants.Z_HUFFMAN_ONLY }); new zlib.Deflate({ strategy: zlib.constants.Z_RLE }); new zlib.Deflate({ strategy: zlib.constants.Z_FIXED }); new zlib.Deflate({ strategy: zlib.constants.Z_DEFAULT_STRATEGY }); // Throws if options.strategy is invalid common.expectsError( () => new zlib.Deflate({ strategy: 'test' }), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "options.strategy" property must be of type number. ' + 'Received type string' } ); common.expectsError( () => new zlib.Deflate({ strategy: -Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.strategy" is out of range. It must ' + 'be a finite number. Received -Infinity' } ); common.expectsError( () => new zlib.Deflate({ strategy: Infinity }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.strategy" is out of range. It must ' + 'be a finite number. Received Infinity' } ); common.expectsError( () => new zlib.Deflate({ strategy: -2 }), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "options.strategy" is out of range. It must ' + 'be >= 0 and <= 4. Received -2' } ); // Throws TypeError if `strategy` is invalid in `Deflate.prototype.params()` common.expectsError( () => new zlib.Deflate().params(0, 'test'), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "strategy" argument must be of type number. ' + 'Received type string' } ); common.expectsError( () => new zlib.Deflate().params(0, -Infinity), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "strategy" is out of range. It must ' + 'be a finite number. Received -Infinity' } ); common.expectsError( () => new zlib.Deflate().params(0, Infinity), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "strategy" is out of range. It must ' + 'be a finite number. Received Infinity' } ); common.expectsError( () => new zlib.Deflate().params(0, -2), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "strategy" is out of range. It must ' + 'be >= 0 and <= 4. Received -2' } ); // Throws if opts.dictionary is not a Buffer common.expectsError( () => new zlib.Deflate({ dictionary: 'not a buffer' }), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "options.dictionary" property must be one of type Buffer, ' + 'TypedArray, DataView, or ArrayBuffer. Received type string' } );