diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..52b37ae --- /dev/null +++ b/.babelrc @@ -0,0 +1,19 @@ +{ + "presets": [ + [ + "env", + { + "targets": { + "node": "current" + } + } + ] + ], + "env": { + "development": { + "presets": [ + "power-assert" + ] + } + } +} diff --git a/README.md b/README.md index f0ca4c5..3859113 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ bin ディレクトリから必要なものを利用してください。 - zlib_and_gzip.min.js: ZLIB + GZIP + (Raw) * rawdeflate.js: Raw Deflate - * rawinflate.js: Raw Inflate + * raw.js: Raw Inflate + zlib.min.js: ZLIB Inflate + Deflate * inflate.min.js: ZLIB Inflate * deflate.min.js: ZLIB Deflate diff --git a/build.xml b/build.xml deleted file mode 100644 index 13785fb..0000000 --- a/build.xml +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/closure-primitives/deps.js b/closure-primitives/deps.js index fa41975..2288bda 100644 --- a/closure-primitives/deps.js +++ b/closure-primitives/deps.js @@ -11,7 +11,7 @@ goog.addDependency('../src/gunzip_member.js', ['Zlib.GunzipMember'], []); goog.addDependency('../src/gzip.js', ['Zlib.Gzip'], ['USE_TYPEDARRAY', 'Zlib.CRC32', 'Zlib.RawDeflate']); goog.addDependency('../src/heap.js', ['Zlib.Heap'], ['USE_TYPEDARRAY']); goog.addDependency('../src/huffman.js', ['Zlib.Huffman'], ['USE_TYPEDARRAY']); -goog.addDependency('../src/inflate.js', ['Zlib.Inflate'], ['USE_TYPEDARRAY', 'Zlib.Adler32', 'Zlib.RawInflate']); +goog.addDependency('../src/Zlib.js', ['Zlib.Inflate'], ['USE_TYPEDARRAY', 'Zlib.Adler32', 'Zlib.RawInflate']); goog.addDependency('../src/inflate_stream.js', ['Zlib.InflateStream'], ['USE_TYPEDARRAY', 'Zlib', 'Zlib.RawInflateStream']); goog.addDependency('../src/rawdeflate.js', ['Zlib.RawDeflate'], ['USE_TYPEDARRAY', 'Zlib.BitStream', 'Zlib.Heap']); goog.addDependency('../src/rawinflate.js', ['Zlib.RawInflate'], ['USE_TYPEDARRAY', 'Zlib.Huffman']); @@ -19,4 +19,4 @@ goog.addDependency('../src/rawinflate_stream.js', ['Zlib.RawInflateStream'], ['U goog.addDependency('../src/unzip.js', ['Zlib.Unzip'], ['FixPhantomJSFunctionApplyBug_StringFromCharCode', 'USE_TYPEDARRAY', 'Zlib.CRC32', 'Zlib.RawInflate', 'Zlib.Zip']); goog.addDependency('../src/util.js', ['Zlib.Util'], []); goog.addDependency('../src/zip.js', ['Zlib.Zip'], ['USE_TYPEDARRAY', 'Zlib.CRC32', 'Zlib.RawDeflate']); -goog.addDependency('../src/zlib.js', ['Zlib'], []); +goog.addDependency('../src/Zlib.js', ['Zlib'], []); diff --git a/deps.js b/deps.js index 8c6756f..811e62b 100644 --- a/deps.js +++ b/deps.js @@ -1,6 +1,6 @@ // This file was autogenerated by closure-primitives/depswriter.py. // Please do not edit. -goog.addDependency('../bin/zlib.pretty.js', ['USE_TYPEDARRAY', 'Zlib', 'Zlib.Adler32', 'Zlib.BitStream', 'Zlib.CRC32', 'Zlib.Deflate', 'Zlib.Gunzip', 'Zlib.GunzipMember', 'Zlib.Gzip', 'Zlib.Heap', 'Zlib.Huffman', 'Zlib.Inflate', 'Zlib.InflateStream', 'Zlib.RawDeflate', 'Zlib.RawInflate', 'Zlib.RawInflateStream', 'Zlib.Unzip', 'Zlib.Util', 'Zlib.Zip', 'Zlib.exportObject'], ['USE_TYPEDARRAY', 'Zlib', 'Zlib.Adler32', 'Zlib.BitStream', 'Zlib.CRC32', 'Zlib.Deflate', 'Zlib.Gunzip', 'Zlib.GunzipMember', 'Zlib.Gzip', 'Zlib.Heap', 'Zlib.Huffman', 'Zlib.Inflate', 'Zlib.InflateStream', 'Zlib.RawDeflate', 'Zlib.RawInflate', 'Zlib.RawInflateStream', 'Zlib.Unzip', 'Zlib.Util', 'Zlib.Zip', 'Zlib.exportObject']); +goog.addDependency('../bin/Zlib.pretty.js', ['USE_TYPEDARRAY', 'Zlib', 'Zlib.Adler32', 'Zlib.BitStream', 'Zlib.CRC32', 'Zlib.Deflate', 'Zlib.Gunzip', 'Zlib.GunzipMember', 'Zlib.Gzip', 'Zlib.Heap', 'Zlib.Huffman', 'Zlib.Inflate', 'Zlib.InflateStream', 'Zlib.RawDeflate', 'Zlib.RawInflate', 'Zlib.RawInflateStream', 'Zlib.Unzip', 'Zlib.Util', 'Zlib.Zip', 'Zlib.exportObject'], ['USE_TYPEDARRAY', 'Zlib', 'Zlib.Adler32', 'Zlib.BitStream', 'Zlib.CRC32', 'Zlib.Deflate', 'Zlib.Gunzip', 'Zlib.GunzipMember', 'Zlib.Gzip', 'Zlib.Heap', 'Zlib.Huffman', 'Zlib.Inflate', 'Zlib.InflateStream', 'Zlib.RawDeflate', 'Zlib.RawInflate', 'Zlib.RawInflateStream', 'Zlib.Unzip', 'Zlib.Util', 'Zlib.Zip', 'Zlib.exportObject']); goog.addDependency('../closure-primitives/base.js', ['goog'], []); goog.addDependency('../define/typedarray/hybrid.js', ['USE_TYPEDARRAY'], []); goog.addDependency('../define/typedarray/use.js', ['USE_TYPEDARRAY'], []); @@ -14,7 +14,7 @@ goog.addDependency('../src/gunzip_member.js', ['Zlib.GunzipMember'], []); goog.addDependency('../src/gzip.js', ['Zlib.Gzip'], ['USE_TYPEDARRAY', 'Zlib.CRC32', 'Zlib.RawDeflate']); goog.addDependency('../src/heap.js', ['Zlib.Heap'], ['USE_TYPEDARRAY']); goog.addDependency('../src/huffman.js', ['Zlib.Huffman'], ['USE_TYPEDARRAY']); -goog.addDependency('../src/inflate.js', ['Zlib.Inflate'], ['USE_TYPEDARRAY', 'Zlib.Adler32', 'Zlib.RawInflate']); +goog.addDependency('../src/Zlib.js', ['Zlib.Inflate'], ['USE_TYPEDARRAY', 'Zlib.Adler32', 'Zlib.RawInflate']); goog.addDependency('../src/inflate_stream.js', ['Zlib.InflateStream'], ['USE_TYPEDARRAY', 'Zlib', 'Zlib.RawInflateStream']); goog.addDependency('../src/rawdeflate.js', ['Zlib.RawDeflate'], ['USE_TYPEDARRAY', 'Zlib.BitStream', 'Zlib.Heap']); goog.addDependency('../src/rawinflate.js', ['Zlib.RawInflate'], ['USE_TYPEDARRAY', 'Zlib.Huffman']); @@ -22,4 +22,4 @@ goog.addDependency('../src/rawinflate_stream.js', ['Zlib.RawInflateStream'], ['U goog.addDependency('../src/unzip.js', ['Zlib.Unzip'], ['USE_TYPEDARRAY', 'Zlib.CRC32', 'Zlib.RawInflate', 'Zlib.Zip']); goog.addDependency('../src/util.js', ['Zlib.Util'], []); goog.addDependency('../src/zip.js', ['Zlib.Zip'], ['USE_TYPEDARRAY', 'Zlib.CRC32', 'Zlib.RawDeflate']); -goog.addDependency('../src/zlib.js', ['Zlib'], []); +goog.addDependency('../src/Zlib.js', ['Zlib'], []); diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..9549cd4 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,107 @@ +// Karma configuration +// Generated on Tue Oct 04 2016 06:12:57 GMT+0900 (JST) + +module.exports = function(config) { + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['mocha', 'sinon', 'power-assert'], + + + // list of files / patterns to load in the browser + files: [ + 'test/browser/base.js', + 'test/browser/util.js', + 'vendor/mt.js/mt.js', + + // load all Zlib library and avoid conflict + 'bin/zlib.pretty.dev.js', + 'test/browser/avoid_conflict/zlib.pretty.js', + + 'bin/rawinflate.dev.min.js', + 'test/browser/avoid_conflict/rawinflate.js', + + 'bin/rawdeflate.dev.min.js', + 'test/browser/avoid_conflict/rawdeflate.js', + + 'bin/gzip.dev.min.js', + 'test/browser/avoid_conflict/gzip.js', + + 'bin/gunzip.dev.min.js', + 'test/browser/avoid_conflict/gunzip.js', + + 'bin/zip.dev.min.js', + 'test/browser/avoid_conflict/zip.js', + + 'bin/unzip.dev.min.js', + 'test/browser/avoid_conflict/unzip.js', + + 'bin/zlib.dev.min.js', + 'test/browser/avoid_conflict/zlib.js', + + + // test files + /* + 'test/browser/code-path-test.js', + 'test/browser/raw-inflate-test.js', + 'test/browser/inflate-test.js' + */ + 'test/browser/*-test.js' + //'test/browser/main.js' + ], + + + // list of files to exclude + exclude: [ + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + 'test/**/*-test.js': ['espower'] + }, + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['mocha'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['Chrome'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false, + + browserNoActivityTimeout: 100000, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }) +}; diff --git a/package.json b/package.json index 296fa52..15b86aa 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,5 @@ { "author": { - "name": "Yuta Imaya" - }, - "contributors": { "name": "Yuta Imaya", "email": "imaya.devel@gmail.com" }, @@ -15,18 +12,27 @@ "type": "git", "url": "git://github.com/imaya/zlib.js.git" }, - "dependencies" : { - }, + "dependencies": {}, "devDependencies": { - "buster" : ">=0.7.4", - "grunt-closure-tools": ">=0.9.3", - "grunt-contrib-concat": ">=0.3.0" + "babel-preset-env": "^1.5.1", + "babel-preset-power-assert": "^1.0.0", + "babel-register": "^6.24.1", + "karma": "^1.3.0", + "karma-chrome-launcher": "^2.0.0", + "karma-espower-preprocessor": "^1.1.0", + "karma-mocha": "^1.2.0", + "karma-mocha-reporter": "^2.2.0", + "karma-power-assert": "0.0.4", + "karma-sinon": "^1.0.5", + "mocha": "^3.1.0", + "power-assert": "^1.4.1" }, "optionalDependencies": {}, "engines": { "node": "*" }, - "scripts" : { - "test" : "node_modules/.bin/buster-test" + "scripts": { + "test-mocha": "mocha --compilers js:babel-register test/nodejs/node-test.js", + "test-karma": "karma start --single-run" } } diff --git a/test/browser-codepath-test.js b/test/browser-codepath-test.js deleted file mode 100644 index 023ca1e..0000000 --- a/test/browser-codepath-test.js +++ /dev/null @@ -1,191 +0,0 @@ -(function() { - -buster.testCase( - "code path", - { - setUp: function() { - var size = 76543; - var testData = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - - console.log("use typedarray:", USE_TYPEDARRAY); - - this.testData = testData; - this.none = sinon.spy(Zlib.RawDeflate.prototype, "makeNocompressBlock"); - this.fixed = sinon.spy(Zlib.RawDeflate.prototype, "makeFixedHuffmanBlock"); - this.dynamic = sinon.spy(Zlib.RawDeflate.prototype, "makeDynamicHuffmanBlock"); - }, - tearDown: function() { - this.none.restore(); - this.fixed.restore(); - this.dynamic.restore(); - }, - "undercomitted": function() { - var data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]; - var compressed = new Zlib.Deflate(data).compress(); - var decompressed = new Zlib.Inflate(compressed).decompress(); - buster.assert(arrayEquals(data, Array.prototype.slice.call(decompressed))); - }, - "uncompressed random data": function() { - makeRandomData(this.testData); - inflateTest('random', this.testData, Zlib.Deflate.CompressionType.NONE); - - buster.assert(this.none.called); - buster.refute(this.fixed.called); - buster.refute(this.dynamic.called); - }, - "fixed random data": function() { - makeRandomData(this.testData); - inflateTest('random', this.testData, Zlib.Deflate.CompressionType.FIXED); - - buster.refute(this.none.called); - buster.assert(this.fixed.called); - buster.refute(this.dynamic.called); - }, - "dynamic random data": function() { - makeRandomData(this.testData); - inflateTest('random', this.testData, Zlib.Deflate.CompressionType.DYNAMIC); - - buster.refute(this.none.called); - buster.refute(this.fixed.called); - buster.assert(this.dynamic.called); - }, - "uncompressed sequential data": function() { - makeSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.NONE); - - buster.assert(this.none.called); - buster.refute(this.fixed.called); - buster.refute(this.dynamic.called); - }, - "fixed sequential data": function() { - makeSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.FIXED); - - buster.refute(this.none.called); - buster.assert(this.fixed.called); - buster.refute(this.dynamic.called); - }, - "dynamic sequential data": function() { - makeSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.DYNAMIC); - - buster.refute(this.none.called); - buster.refute(this.fixed.called); - buster.assert(this.dynamic.called); - }, - "uncompressed random sequential data": function() { - makeRandomSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.NONE); - - buster.assert(this.none.called); - buster.refute(this.fixed.called); - buster.refute(this.dynamic.called); - }, - "fixed random sequential data": function() { - makeRandomSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.FIXED); - - buster.refute(this.none.called); - buster.assert(this.fixed.called); - buster.refute(this.dynamic.called); - }, - "dynamic random sequential data": function() { - makeRandomSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.DYNAMIC); - - buster.refute(this.none.called); - buster.refute(this.fixed.called); - buster.assert(this.dynamic.called); - }, - //------------------------------------------------------------------------- - // stream - //------------------------------------------------------------------------- - "uncompressed random sequential data (stream)": function() { - makeRandomSequentialData(this.testData); - inflateStreamTest('sequential', this.testData, Zlib.Deflate.CompressionType.NONE); - - buster.assert(this.none.called); - buster.refute(this.fixed.called); - buster.refute(this.dynamic.called); - }, - "fixed random sequential data (stream)": function() { - makeRandomSequentialData(this.testData); - inflateStreamTest('sequential', this.testData, Zlib.Deflate.CompressionType.FIXED); - - buster.refute(this.none.called); - buster.assert(this.fixed.called); - buster.refute(this.dynamic.called); - }, - "dynamic random sequential data (stream)": function() { - makeRandomSequentialData(this.testData); - inflateStreamTest('sequential', this.testData, Zlib.Deflate.CompressionType.DYNAMIC); - - buster.refute(this.none.called); - buster.refute(this.fixed.called); - buster.assert(this.dynamic.called); - } - } -); - -// inflate test -function inflateTest(mode, testData, compressionType) { - var deflate; - var inflate; - - console.log("mode:", mode); - console.log("type:", compressionType); - - // deflate - deflate = new Zlib.Deflate(testData, { - compressionType: compressionType - }).compress(); - console.log("deflated data size:", deflate.length); - - // inflate - inflate = (new Zlib.Inflate(deflate, { - verify: true - })).decompress(); - console.log("inflated data size:", inflate.length) - - // assertion - buster.assert(inflate.length, testData.length); - buster.assert(arrayEquals(inflate, testData)); -} - -// inflate test -function inflateStreamTest(mode, testData, compressionType) { - var deflate; - var inflate; - var inflator; - var buf; - var tmp; - var i; - var il; - - console.log("mode:", mode); - console.log("type:", compressionType); - - // deflate - deflate = Zlib.Deflate.compress(testData, { - compressionType: compressionType - }); - console.log("deflated data size:", deflate.length); - - // inflate - inflator = new Zlib.InflateStream(); - inflate = new (USE_TYPEDARRAY ? Uint8Array : Array)(); - for (i = 0, il = deflate.length; i < il; ++i) { - buf = inflator.decompress(deflate.subarray(i, i + 1)); - tmp = new (USE_TYPEDARRAY ? Uint8Array : Array)(buf.length + inflate.length); - tmp.set(inflate, 0); - tmp.set(buf, inflate.length); - inflate = tmp; - } - console.log("inflated data size:", inflate.length) - - // assertion - buster.assert(inflate.length, testData.length); - buster.assert(arrayEquals(inflate, testData)); -} - -})(); diff --git a/test/browser-gunzip-test.js b/test/browser-gunzip-test.js deleted file mode 100644 index 156dc95..0000000 --- a/test/browser-gunzip-test.js +++ /dev/null @@ -1,42 +0,0 @@ -buster.testCase( - 'gunzip', - { - //------------------------------------------------------------------------- - "pre-compressed data": - //------------------------------------------------------------------------- - function() { - var testData = - "H4sIAAAAAAAAA0tMTEwEAEXlmK0EAAAA"; - var plain = new Uint8Array("aaaa".split('').map(function(c) { return c.charCodeAt(0); })); - - var decodedData = decodeB64(testData); - - var inflator = new Zlib.Gunzip(decodedData); - var inflated = inflator.decompress(); - - buster.assert.equals(inflated.length, plain.length, "inflated data size"); - buster.assert.equals(inflated, plain); - }, - //------------------------------------------------------------------------- - "decompress pre-compressed data with filename": - //------------------------------------------------------------------------- - function() { - var testData = - "H4sICOzl1k8AA2hvZ2UudHh0AMtIzcnJVyjPL8pJ4QIALTsIrwwAAAA="; - var plain = new Uint8Array( - "hello world".split('').map(function(c) { return c.charCodeAt(0); }).concat(0x0a) - ); - - var decodedData = decodeB64(testData); - console.log(decodedData); - - var inflator = new Zlib.Gunzip(decodedData); - var inflated = inflator.decompress(); - - buster.assert.equals(inflated.length, plain.length, "inflated data size"); - buster.assert.equals(inflated, plain); - buster.assert.equals((inflator.getMembers())[0].getName(), 'hoge.txt'); - } - } -); - diff --git a/test/browser-gzip-test.js b/test/browser-gzip-test.js deleted file mode 100644 index 5a29681..0000000 --- a/test/browser-gzip-test.js +++ /dev/null @@ -1,85 +0,0 @@ -buster.testCase( - "gzip", - { - //------------------------------------------------------------------------- - setUp: - //------------------------------------------------------------------------- - function() { - var size = 76543; - var testData = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - - console.log("use typedarray:", USE_TYPEDARRAY); - - this.testData = testData; - }, - //------------------------------------------------------------------------- - "random sequential data": - //------------------------------------------------------------------------- - function() { - makeRandomSequentialData(this.testData); - - var deflator = new Zlib.Gzip(this.testData); - var deflated = deflator.compress(); - - var inflator = new Zlib.Gunzip(deflated); - var inflated = inflator.decompress(); - - buster.assert.equals(inflated.length, this.testData.length, "inflated data size"); - buster.assert.equals(inflated, this.testData); - }, - //------------------------------------------------------------------------- - "compress with filename": - //------------------------------------------------------------------------- - function() { - makeRandomSequentialData(this.testData); - - var deflator = - new Zlib.Gzip( - this.testData, - { - flags: { - fname: true, - fcommenct: false, - fhcrc: false - }, - filename: 'foobar.filename' - } - ); - var deflated = deflator.compress(); - - var inflator = new Zlib.Gunzip(deflated); - var inflated = inflator.decompress(); - - buster.assert.equals(inflated.length, this.testData.length, "inflated data size"); - buster.assert.equals(inflated, this.testData); - buster.assert.equals((inflator.getMembers())[0].getName(), 'foobar.filename'); - }, - //------------------------------------------------------------------------- - "compress with filename (seed: 1346432776267)": - //------------------------------------------------------------------------- - function() { - makeRandomSequentialData(this.testData, 1346432776267); - - var deflator = - new Zlib.Gzip( - this.testData, - { - flags: { - fname: true, - fcommenct: false, - fhcrc: false - }, - filename: 'foobar.filename' - } - ); - var deflated = deflator.compress(); - - var inflator = new Zlib.Gunzip(deflated); - var inflated = inflator.decompress(); - - buster.assert.equals(inflated.length, this.testData.length, "inflated data size"); - buster.assert.equals(inflated, this.testData); - buster.assert.equals((inflator.getMembers())[0].getName(), 'foobar.filename'); - } - } -); \ No newline at end of file diff --git a/test/browser-inflate-test.js b/test/browser-inflate-test.js deleted file mode 100644 index 45ea163..0000000 --- a/test/browser-inflate-test.js +++ /dev/null @@ -1,190 +0,0 @@ -(function() { - -var fixedData = - 'eJztzydhGAAAALDd/v////////////////////////////////9no6BxkF+///z99x8A' + - 'EAgYBBQMHAISChoGFg4eAREJGQUVDR0DEwsbBxcPn4CQiJiElIycgpKKmoaWjp6BkYmZ' + - 'hZWNnYOTi5uHl49fQFBIWERUTFxCUkpaRlZOXkFRSVlFVU1dQ1NLW0dXT9/A0MjYxNTM' + - '3MLSytrG1s7ewdHJ2cXVzd3D08vbx9fPPyAwKDgkNCw8IjIqOiY2Lj4hMSk5JTUtPSMz' + - 'KzsnNy+/oLCouKS0rLyisqq6prauvqGxqbmlta29o7Oru6e3r39gcGh4ZHRsfGJyanpm' + - 'dm5+YXFpeWV1bX1jc2t7Z3dv/+Dw6Pjk9Oz84vLq+ub27v7h8en55fXt/ePz5//z//n/' + - '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + - '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + - '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + - 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + - '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + - '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + - '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + - '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + - 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + - '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + - '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + - '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + - '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + - 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + - '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + - '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + - '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + - '//n//H/+P/+f/8//5//z//n//H/+3+P/Ba1OJPE='; - -function inflateOnlyTest(done, compressed, plain) { - var inflated = zlib.inflateSync(compressed); - - buster.assert.equals(inflated.length, plain.length); - buster.assert(arrayEquals(inflated, plain)); -} - -buster.testCase( - "inflate only", - { - //------------------------------------------------------------------------- - "pre-deflated data": - //------------------------------------------------------------------------- - function() { - var size = 123456; - var plain = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - var i, il; - var testData = fixedData; - - // make plain data - for (i = 0, il = size; i < il; ++i) { - plain[i] = i & 0xff; - } - - var decodedData = decodeB64(testData); - - // testdata size - buster.assert.equals(testData.length, 1604, "source data size"); - buster.assert.equals(decodedData.length, 1202, "base64 decoded data size"); - - var inflator = new Zlib.Inflate(decodedData); - var inflated = inflator.decompress(); - - buster.assert.equals(inflated.length, size, "inflated data size"); - buster.assert(arrayEquals(inflated, plain)); - }, - //------------------------------------------------------------------------- - "pre-deflated data with inflate bufferSize option": - //------------------------------------------------------------------------- - function() { - var size = 123456; - var plain = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - var i, il; - var testData = fixedData; - - // make plain data - for (i = 0, il = size; i < il; ++i) { - plain[i] = i & 0xff; - } - - var decodedData = decodeB64(testData); - - // testdata size - buster.assert.equals(testData.length, 1604, "source data size"); - buster.assert.equals(decodedData.length, 1202, "base64 decoded data size"); - - var inflator = new Zlib.Inflate(decodedData, {bufferSize: 123456}); - var inflated = inflator.decompress(); - - console.log("buffer size:", inflated.buffer.byteLength); - buster.assert.equals(inflated.length, size, "inflated data size"); - buster.assert.equals(inflated.buffer.byteLength, 123456, "inflated data buffer size"); - buster.assert(arrayEquals(inflated, plain)); - }, - //------------------------------------------------------------------------- - "pre-deflated data with inflate bufferType option": - //------------------------------------------------------------------------- - function() { - var size = 123456; - var plain = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - var i, il; - var testData = fixedData; - - // make plain data - for (i = 0, il = size; i < il; ++i) { - plain[i] = i & 0xff; - } - - var decodedData = decodeB64(testData); - - // testdata size - buster.assert.equals(testData.length, 1604, "source data size"); - buster.assert.equals(decodedData.length, 1202, "base64 decoded data size"); - - var inflator = new Zlib.Inflate(decodedData, { - bufferType: Zlib.Inflate.BufferType.BLOCK, - bufferSize: 41152, - verify: true - }); - var inflated = inflator.decompress(); - - console.log("buffer size:", inflated.buffer.byteLength); - buster.assert.equals(inflated.length, size, "inflated data size"); - buster.assert.equals(inflated.buffer.byteLength, 123456, "inflated data buffer size"); - buster.assert(arrayEquals(inflated, plain)); - }, - //------------------------------------------------------------------------- - "pre-deflated data with inflate resize option": - //------------------------------------------------------------------------- - function() { - var size = 123456; - var plain = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - var i, il; - var testData = fixedData; - - // make plain data - for (i = 0, il = size; i < il; ++i) { - plain[i] = i & 0xff; - } - - var decodedData = decodeB64(testData); - - // testdata size - buster.assert.equals(testData.length, 1604, "source data size"); - buster.assert.equals(decodedData.length, 1202, "base64 decoded data size"); - - var inflator = new Zlib.Inflate(decodedData, { - bufferType: Zlib.Inflate.BufferType.BLOCK, - bufferSize: 41153, - resize: true - }); - var inflated = inflator.decompress(); - - console.log("buffer size:", inflated.buffer.byteLength); - buster.assert.equals(inflated.length, size, "inflated data size"); - buster.assert.equals(inflated.buffer.byteLength, 123456, "inflated data buffer size"); - buster.assert(arrayEquals(inflated, plain)); - }, - "issue#35 wrong inflate 1": - function() { - var compressed = decodeB64( - "eJx9jq0NQCEMhG8YJMOwAgJdhWYA9kAyAIuQoBmkvNQ80Z+kP/l6uRy8urIysOVoprTaLlOlcXyzvE7qP3jBuo4XCDg/QAyZCQjI" - ); - var plain = - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,228,0,0,0,0,0,0,97,0,0,215,0,0,0,0,0,97,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,166,0,0,0,0,101,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,111,0,0,218,0,0,0,0,0,0,0,0,0,0,0,111]; - - inflateOnlyTest(compressed, plain); - }, - "issue#35 wrong inflate 2": - function() { - var compressed = decodeB64( - "eJxtjD0NgEAMhd8IBlDAigNMsDCxsSIIAyScikvOzAk4A02Tdujf8r2/FPl1Fctk8jufDzSGbGdJ17A7fbAZd6iowMMswM78tLjCy9+417UEYNsIeA==" - ); - var plain = - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,231,0,0,0,0,0,0,0,0,22,8,0,0,0,0,0,0,0,0,0,0,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,194,0,0,0,0,8,0,0,0,0,0,0,9,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,191,0,0,108,0,0,0,0,169,0,0,60,0,0,0,0,165,0,0,0,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; - - inflateOnlyTest(compressed, plain); - }, - "issue#35 take a long time and throw exception": - function(done) { - var compressed = decodeB64( - "eJx1jb8NQFAQxj+J2MAASo1EJGIEM1hAhV6iVEg0GgvozGEHG+jscDm5Q/L+FL/3+y73vjfAfVbciDXkqFR9lKretz3XWHbxxl44RSKb+9PWmFw/7+U+MvNlgtTa2D0s3jwyAsYZMgl65Qwx" - ); - var plain = - [125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0,237,0,41,0,0,0,0,0,0,0,0,54,0,90,0,0,0,0,0,0,0,0,4,0,72,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,140,103,0,145,170,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,33,0,0,0,0,0,0,0,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,196,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,133,0,0,0,0,6,0,0,0,0,215,21,0,0,0,0]; - - inflateOnlyTest(compressed, plain); - } - } -); - -})(); \ No newline at end of file diff --git a/test/browser-raw-test.js b/test/browser-raw-test.js deleted file mode 100644 index de8da2b..0000000 --- a/test/browser-raw-test.js +++ /dev/null @@ -1,98 +0,0 @@ -(function() { - -buster.testCase( - 'raw', - { - setUp: function() { - var size = 76543; - var testData = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - - console.log("use typedarray:", USE_TYPEDARRAY); - - this.testData = testData; - }, - - "uncompressed random data": - function() { - makeRandomData(this.testData); - rawInflateTest('random', this.testData, Zlib.RawDeflate.CompressionType.NONE); - }, - "fixed random data": - function() { - makeRandomData(this.testData); - rawInflateTest('random', this.testData, Zlib.RawDeflate.CompressionType.FIXED); - }, - "dynamic random data": - function() { - makeRandomData(this.testData); - rawInflateTest('random', this.testData, Zlib.RawDeflate.CompressionType.DYNAMIC); - }, - "uncompressed sequential data": - function() { - makeSequentialData(this.testData); - rawInflateTest('sequential', this.testData, Zlib.RawDeflate.CompressionType.NONE); - }, - "fixed sequential data": - function() { - makeSequentialData(this.testData); - rawInflateTest('sequential', this.testData, Zlib.RawDeflate.CompressionType.FIXED); - }, - "dynamic sequential data": - function() { - makeSequentialData(this.testData); - rawInflateTest('sequential', this.testData, Zlib.RawDeflate.CompressionType.DYNAMIC); - }, - "uncompressed random sequential data": - function() { - makeRandomSequentialData(this.testData); - rawInflateTest('sequential', this.testData, Zlib.RawDeflate.CompressionType.NONE); - }, - "fixed random sequential data": - function() { - makeRandomSequentialData(this.testData); - rawInflateTest('sequential', this.testData, Zlib.RawDeflate.CompressionType.FIXED); - }, - "dynamic random sequential data": - function() { - makeRandomSequentialData(this.testData); - rawInflateTest('sequential', this.testData, Zlib.RawDeflate.CompressionType.DYNAMIC); - }, - "undercomitted": - function() { - var data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]; - var compressed = new Zlib.RawDeflate(data).compress(); - var decompressed = new Zlib.RawInflate(compressed).decompress(); - buster.assert(arrayEquals(data, Array.prototype.slice.call(decompressed))); - } - } -); - - -// inflate test -function rawInflateTest(mode, testData, compressionType, inflateOption) { - var deflate; - var inflate; - - console.log("type:", compressionType); - - // deflate - deflate = new Zlib.RawDeflate(testData, { - compressionType: compressionType - }).compress(); - console.log("deflated data size:", deflate.length); - - // inflate - if (inflateOption) { - inflateOption.verify = true; - } else { - inflateOption = {verify: true}; - } - inflate = (new Zlib.RawInflate(deflate, inflateOption)).decompress(); - console.log("inflated data size:", inflate.length) - - // assertion - buster.assert(inflate.length, testData.length); - buster.assert(arrayEquals(inflate, testData)); -} - -})(); diff --git a/test/browser-test.js b/test/browser-test.js deleted file mode 100644 index e69de29..0000000 diff --git a/test/browser-unzip-test.js b/test/browser-unzip-test.js deleted file mode 100644 index 20ecabc..0000000 --- a/test/browser-unzip-test.js +++ /dev/null @@ -1,108 +0,0 @@ -buster.testCase( - "unzip", - { - //------------------------------------------------------------------------- - 'decompression files': - //------------------------------------------------------------------------- - function() { - var testData = - "UEsDBAoAAAAAALZDSEKdh+K5BQAAAAUAAAAIABwAaG9nZS50eHRVVAkAA+g4FFHoOBR"+ - "RdXgLAAEE9gEAAAQUAAAAaG9nZQpQSwMECgAAAAAAukNIQgNLGl0FAAAABQAAAAgAHA"+ - "BmdWdhLnR4dFVUCQAD7zgUUe84FFF1eAsAAQT2AQAABBQAAABmdWdhClBLAwQKAAAAA"+ - "ADCQ0hC8mJOIAUAAAAFAAAACAAcAHBpeW8udHh0VVQJAAP7OBRR+zgUUXV4CwABBPYB"+ - "AAAEFAAAAHBpeW8KUEsBAh4DCgAAAAAAtkNIQp2H4rkFAAAABQAAAAgAGAAAAAAAAQA"+ - "AAKSBAAAAAGhvZ2UudHh0VVQFAAPoOBRRdXgLAAEE9gEAAAQUAAAAUEsBAh4DCgAAAA"+ - "AAukNIQgNLGl0FAAAABQAAAAgAGAAAAAAAAQAAAKSBRwAAAGZ1Z2EudHh0VVQFAAPvO"+ - "BRRdXgLAAEE9gEAAAQUAAAAUEsBAh4DCgAAAAAAwkNIQvJiTiAFAAAABQAAAAgAGAAA"+ - "AAAAAQAAAKSBjgAAAHBpeW8udHh0VVQFAAP7OBRRdXgLAAEE9gEAAAQUAAAAUEsFBgA"+ - "AAAADAAMA6gAAANUAAAAAAA=="; - var decodedData = decodeB64(testData); - var unzip = new Zlib.Unzip(decodedData, { - verify: true - }); - var files = {}; - var filenames = unzip.getFilenames(); - var i, il; - - for (i = 0, il = filenames.length; i < il; ++i) { - files[filenames[i]] = unzip.decompress(filenames[i]); - } - - buster.assert( - arrayEquals( - files['hoge.txt'], - new Uint8Array(stringToByteArray("hoge\x0a")) - ), - "hoge.txt" - ); - buster.assert( - arrayEquals( - files['fuga.txt'], - new Uint8Array(stringToByteArray("fuga\x0a")) - ), - "fuga.txt" - ); - buster.assert( - arrayEquals( - files['piyo.txt'], - new Uint8Array(stringToByteArray("piyo\x0a")) - ), - "piyo.txt" - ); - }, - //------------------------------------------------------------------------- - 'decompression files (encrypted)': - //------------------------------------------------------------------------- - function() { - var testData = - "UEsDBAoACwAAALZDSEKdh+K5EQAAAAUAAAAIABwAaG9nZS50eHRVVAkAA+g4FFFLkE"+ - "FRdXgLAAEE9gEAAAQUAAAAmLCXJJ8ekVoXli8htr9XeT1QSwcInYfiuREAAAAFAAAA"+ - "UEsDBAoACwAAALpDSEIDSxpdEQAAAAUAAAAIABwAZnVnYS50eHRVVAkAA+84FFFLkE"+ - "FRdXgLAAEE9gEAAAQUAAAA70GVr9WG+kUsWOZjPLDJl3tQSwcIA0saXREAAAAFAAAA"+ - "UEsDBAoACwAAAMJDSELyYk4gEQAAAAUAAAAIABwAcGl5by50eHRVVAkAA/s4FFFLkE"+ - "FRdXgLAAEE9gEAAAQUAAAAwYLuQ1RwgIqnjpzimP0odIJQSwcI8mJOIBEAAAAFAAAA"+ - "UEsBAh4DCgALAAAAtkNIQp2H4rkRAAAABQAAAAgAGAAAAAAAAQAAAKSBAAAAAGhvZ2"+ - "UudHh0VVQFAAPoOBRRdXgLAAEE9gEAAAQUAAAAUEsBAh4DCgALAAAAukNIQgNLGl0R"+ - "AAAABQAAAAgAGAAAAAAAAQAAAKSBYwAAAGZ1Z2EudHh0VVQFAAPvOBRRdXgLAAEE9g"+ - "EAAAQUAAAAUEsBAh4DCgALAAAAwkNIQvJiTiARAAAABQAAAAgAGAAAAAAAAQAAAKSB"+ - "xgAAAHBpeW8udHh0VVQFAAP7OBRRdXgLAAEE9gEAAAQUAAAAUEsFBgAAAAADAAMA6g"+ - "AAACkBAAAAAA=="; - var decodedData = decodeB64(testData); - var unzip = new Zlib.Unzip(decodedData, { - password: "hogefugapiyo".split('').map(function(s) { return s.charCodeAt(0); }), - verify: true - }); - var files = {}; - var filenames = unzip.getFilenames(); - var i, il; - - for (i = 0, il = filenames.length; i < il; ++i) { - files[filenames[i]] = unzip.decompress(filenames[i]); - } - - buster.assert( - arrayEquals( - files['hoge.txt'], - new Uint8Array(stringToByteArray("hoge\x0a")) - ), - "hoge.txt" - ); - buster.assert( - arrayEquals( - files['fuga.txt'], - new Uint8Array(stringToByteArray("fuga\x0a")) - ), - "fuga.txt" - ); - buster.assert( - arrayEquals( - files['piyo.txt'], - new Uint8Array(stringToByteArray("piyo\x0a")) - ), - "piyo.txt" - ); - } - - - } -); \ No newline at end of file diff --git a/test/browser-zip-test.js b/test/browser-zip-test.js deleted file mode 100644 index dab6983..0000000 --- a/test/browser-zip-test.js +++ /dev/null @@ -1,277 +0,0 @@ -buster.testCase( - "zip", - { - //------------------------------------------------------------------------- - setUp: - //------------------------------------------------------------------------- - function() { - var size = 76543; - var testData = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - - console.log("use typedarray:", USE_TYPEDARRAY); - - this.testData = testData; - }, - //------------------------------------------------------------------------- - 'compress (store)': - //------------------------------------------------------------------------- - function() { - makeRandomSequentialData(this.testData); - - var testData = { - 'hogehoge': this.testData, - 'fugafuga': this.testData, - 'piyopiyo': this.testData - }; - var keys = []; - var key; - var i = 0; - var il; - - for (key in testData) { - keys[i++] = key; - } - - var zip = new Zlib.Zip(); - for (i = 0, il = keys.length; i < il; ++i) { - key = keys[i]; - zip.addFile(testData[key], { - filename: stringToByteArray(key), - compressionMethod: Zlib.Zip.CompressionMethod.STORE - }); - } - var zipped = zip.compress(); - - var unzip = new Zlib.Unzip(zipped, { - 'verify': true - }); - var files = {}; - var filenames = unzip.getFilenames(); - - for (i = 0, il = filenames.length; i < il; ++i) { - files[filenames[i]] = unzip.decompress(filenames[i]); - } - - buster.assert( - arrayEquals( - files['hogehoge'], - this.testData - ), - "hogehoge" - ); - buster.assert( - arrayEquals( - files['fugafuga'], - this.testData - ), - "fugafuga" - ); - buster.assert( - arrayEquals( - files['piyopiyo'], - this.testData - ), - "piyopiyo" - ); - }, - //------------------------------------------------------------------------- - 'compress (deflate)': - //------------------------------------------------------------------------- - function() { - makeRandomSequentialData(this.testData); - - var testData = { - 'hogehoge': this.testData, - 'fugafuga': this.testData, - 'piyopiyo': this.testData - }; - var keys = []; - var key; - var i = 0; - var il; - - for (key in testData) { - keys[i++] = key; - } - - var zip = new Zlib.Zip(); - for (i = 0, il = keys.length; i < il; ++i) { - key = keys[i]; - zip.addFile(testData[key], { - filename: stringToByteArray(key), - compressionMethod: Zlib.Zip.CompressionMethod.DEFLATE - }); - } - var zipped = zip.compress(); - - var unzip = new Zlib.Unzip(zipped, { - 'verify': true - }); - var files = {}; - var filenames = unzip.getFilenames(); - - for (i = 0, il = filenames.length; i < il; ++i) { - files[filenames[i]] = unzip.decompress(filenames[i]); - } - - buster.assert( - arrayEquals( - files['hogehoge'], - this.testData - ), - "hogehoge" - ); - buster.assert( - arrayEquals( - files['fugafuga'], - this.testData - ), - "fugafuga" - ); - buster.assert( - arrayEquals( - files['piyopiyo'], - this.testData - ), - "piyopiyo" - ); - }, - //------------------------------------------------------------------------- - 'compress with password (deflate)': - //------------------------------------------------------------------------- - function() { - makeRandomSequentialData(this.testData); - - var testData = { - 'hogehoge': this.testData, - 'fugafuga': this.testData, - 'piyopiyo': this.testData - }; - var keys = []; - var key; - var i = 0; - var il; - - for (key in testData) { - keys[i++] = key; - } - - var zip = new Zlib.Zip(); - zip.setPassword([0,1,2,3,4,5,6,7,8,9]); - for (i = 0, il = keys.length; i < il; ++i) { - key = keys[i]; - zip.addFile(testData[key], { - filename: stringToByteArray(key), - compressionMethod: Zlib.Zip.CompressionMethod.DEFLATE - }); - } - var zipped = zip.compress(); - - var unzip = new Zlib.Unzip(zipped, { - 'password': [0,1,2,3,4,5,6,7,8,9], - 'verify': true - }); - var files = {}; - var filenames = unzip.getFilenames(); - - for (i = 0, il = filenames.length; i < il; ++i) { - files[filenames[i]] = unzip.decompress(filenames[i]); - } - - buster.assert( - arrayEquals( - files['hogehoge'], - this.testData - ), - "hogehoge" - ); - buster.assert( - arrayEquals( - files['fugafuga'], - this.testData - ), - "fugafuga" - ); - buster.assert( - arrayEquals( - files['piyopiyo'], - this.testData - ), - "piyopiyo" - ); - }, - //------------------------------------------------------------------------- - 'compress with password (each file)': - //------------------------------------------------------------------------- - function() { - makeRandomSequentialData(this.testData); - - var testData = { - 'hogehoge': [this.testData, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], - 'fugafuga': [this.testData, [0, 2, 4, 6, 8,10,12,14,16,18]], - 'piyopiyo': [this.testData, [1, 3, 5, 7, 9,11,13,15,17,19]] - }; - var keys = []; - var key; - var i = 0; - var il; - - for (key in testData) { - keys[i++] = key; - } - - var zip = new Zlib.Zip(); - for (i = 0, il = keys.length; i < il; ++i) { - key = keys[i]; - zip.addFile(testData[key][0], { - filename: stringToByteArray(key), - compressionMethod: Zlib.Zip.CompressionMethod.DEFLATE, - password: testData[key][1] - }); - } - var zipped = zip.compress(); - - var unzip = new Zlib.Unzip(zipped, { - 'verify': true - }); - var files = {}; - var filenames = unzip.getFilenames(); - - for (i = 0, il = filenames.length; i < il; ++i) { - files[filenames[i]] = unzip.decompress( - filenames[i], - { - 'password': testData[filenames[i]][1] - } - ); - } - - buster.assert( - arrayEquals( - files['hogehoge'], - this.testData - ), - "hogehoge" - ); - buster.assert( - arrayEquals( - files['fugafuga'], - this.testData - ), - "fugafuga" - ); - buster.assert( - arrayEquals( - files['piyopiyo'], - this.testData - ), - "piyopiyo" - ); - } - } -); - - - - - diff --git a/test/browser-zlib-test.js b/test/browser-zlib-test.js deleted file mode 100644 index 321336a..0000000 --- a/test/browser-zlib-test.js +++ /dev/null @@ -1,99 +0,0 @@ -(function() { - -buster.testCase( - 'zlib', - { - setUp: function() { - var size = 76543; - var testData = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); - - console.log("use typedarray:", USE_TYPEDARRAY); - - this.testData = testData; - }, - - "uncompressed random data": - function() { - makeRandomData(this.testData); - inflateTest('random', this.testData, Zlib.Deflate.CompressionType.NONE); - }, - "fixed random data": - function() { - makeRandomData(this.testData); - inflateTest('random', this.testData, Zlib.Deflate.CompressionType.FIXED); - }, - "dynamic random data": - function() { - makeRandomData(this.testData); - inflateTest('random', this.testData, Zlib.Deflate.CompressionType.DYNAMIC); - }, - "uncompressed sequential data": - function() { - makeSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.NONE); - }, - "fixed sequential data": - function() { - makeSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.FIXED); - }, - "dynamic sequential data": - function() { - makeSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.DYNAMIC); - }, - "uncompressed random sequential data": - function() { - makeRandomSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.NONE); - }, - "fixed random sequential data": - function() { - makeRandomSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.FIXED); - }, - "dynamic random sequential data": - function() { - makeRandomSequentialData(this.testData); - inflateTest('sequential', this.testData, Zlib.Deflate.CompressionType.DYNAMIC); - }, - "undercomitted": - function() { - var data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]; - var compressed = new Zlib.Deflate(data).compress(); - var decompressed = new Zlib.Inflate(compressed).decompress(); - buster.assert(arrayEquals(data, Array.prototype.slice.call(decompressed))); - } - } -); - - -// inflate test -function inflateTest(mode, testData, compressionType, inflateOption) { - var deflate; - var inflate; - - console.log("mode:", mode); - console.log("type:", compressionType); - - // deflate - deflate = new Zlib.Deflate(testData, { - compressionType: compressionType - }).compress(); - console.log("deflated data size:", deflate.length); - - // inflate - if (inflateOption) { - inflateOption.verify = true; - } else { - inflateOption = {verify: true}; - } - inflate = (new Zlib.Inflate(deflate, inflateOption)).decompress(); - console.log("inflated data size:", inflate.length) - - // assertion - buster.assert(inflate.length, testData.length); - buster.assert(arrayEquals(inflate, testData)); -} - -})(); diff --git a/test/browser/avoid_conflict/gunzip.js b/test/browser/avoid_conflict/gunzip.js new file mode 100644 index 0000000..35bd073 --- /dev/null +++ b/test/browser/avoid_conflict/gunzip.js @@ -0,0 +1,2 @@ +ZlibGunzip = Zlib; +Zlib = void 0; \ No newline at end of file diff --git a/test/browser/avoid_conflict/gzip.js b/test/browser/avoid_conflict/gzip.js new file mode 100644 index 0000000..e0c0ad6 --- /dev/null +++ b/test/browser/avoid_conflict/gzip.js @@ -0,0 +1,2 @@ +ZlibGzip = Zlib; +Zlib = void 0; \ No newline at end of file diff --git a/test/browser/avoid_conflict/rawdeflate.js b/test/browser/avoid_conflict/rawdeflate.js new file mode 100644 index 0000000..63caadb --- /dev/null +++ b/test/browser/avoid_conflict/rawdeflate.js @@ -0,0 +1,2 @@ +ZlibRawDeflate = Zlib; +Zlib = void 0; \ No newline at end of file diff --git a/test/browser/avoid_conflict/rawinflate.js b/test/browser/avoid_conflict/rawinflate.js new file mode 100644 index 0000000..dc77481 --- /dev/null +++ b/test/browser/avoid_conflict/rawinflate.js @@ -0,0 +1,2 @@ +ZlibRawInflate = Zlib; +Zlib = void 0; \ No newline at end of file diff --git a/test/browser/avoid_conflict/unzip.js b/test/browser/avoid_conflict/unzip.js new file mode 100644 index 0000000..6fcd537 --- /dev/null +++ b/test/browser/avoid_conflict/unzip.js @@ -0,0 +1,2 @@ +ZlibUnzip = Zlib; +Zlib = void 0; \ No newline at end of file diff --git a/test/browser/avoid_conflict/zip.js b/test/browser/avoid_conflict/zip.js new file mode 100644 index 0000000..f3373ff --- /dev/null +++ b/test/browser/avoid_conflict/zip.js @@ -0,0 +1,2 @@ +ZlibZip = Zlib; +Zlib = void 0; \ No newline at end of file diff --git a/test/browser/avoid_conflict/zlib.js b/test/browser/avoid_conflict/zlib.js new file mode 100644 index 0000000..e651441 --- /dev/null +++ b/test/browser/avoid_conflict/zlib.js @@ -0,0 +1,2 @@ +ZlibOriginal = Zlib; +Zlib = void 0; \ No newline at end of file diff --git a/test/browser/avoid_conflict/zlib.pretty.js b/test/browser/avoid_conflict/zlib.pretty.js new file mode 100644 index 0000000..4174ff4 --- /dev/null +++ b/test/browser/avoid_conflict/zlib.pretty.js @@ -0,0 +1,2 @@ +ZlibPretty = Zlib; +Zlib = void 0; \ No newline at end of file diff --git a/test/browser/base.js b/test/browser/base.js new file mode 100644 index 0000000..d9d540b --- /dev/null +++ b/test/browser/base.js @@ -0,0 +1,57 @@ +// inflate test +function compressionAndDecompressionTest(testData, compressionType) { + var deflate; + var inflate; + + // deflate + deflate = new Zlib.Deflate(testData, { + compressionType: compressionType + }).compress(); + + // inflate + inflate = (new Zlib.Inflate(deflate, { + verify: true + })).decompress(); + + // assertion + assert(inflate.length, testData.length); + assert.deepEqual(inflate, testData); +} + +// inflate test +function compressionAndDecompressionByStreamTest(testData, compressionType) { + var deflate; + var inflate; + var inflator; + var buf; + var tmp; + var i; + var il; + + // deflate + deflate = new Zlib.Deflate.compress(testData, { + compressionType: compressionType + }); + + // inflate + inflator = new Zlib.InflateStream(); + inflate = new (USE_TYPEDARRAY ? Uint8Array : Array)(); + for (i = 0, il = deflate.length; i < il; ++i) { + buf = inflator.decompress(deflate.subarray(i, i + 1)); + tmp = new (USE_TYPEDARRAY ? Uint8Array : Array)(buf.length + inflate.length); + tmp.set(inflate, 0); + tmp.set(buf, inflate.length); + inflate = tmp; + } + + // assertion + assert(inflate.length === testData.length); + assert.deepEqual(inflate, testData); +} + +function decompressionTest(compressed, plain) { + var inflated = new Zlib.Inflate(compressed).decompress(); + + assert(inflated.length === plain.length); + assert.deepEqual(inflated, plain); +} \ No newline at end of file diff --git a/test/browser/code-path-test.js b/test/browser/code-path-test.js new file mode 100644 index 0000000..a2fa9d4 --- /dev/null +++ b/test/browser/code-path-test.js @@ -0,0 +1,153 @@ +describe("code path", function () { + var size = 76543; + var none; + var fixed; + var dynamic; + + before(function() { + Zlib = ZlibPretty; + }); + + beforeEach(function () { + none = sinon.spy(ZlibPretty.RawDeflate.prototype, "makeNocompressBlock"); + fixed = sinon.spy(ZlibPretty.RawDeflate.prototype, "makeFixedHuffmanBlock"); + dynamic = sinon.spy(ZlibPretty.RawDeflate.prototype, "makeDynamicHuffmanBlock"); + }); + + afterEach(function () { + none.restore(); + fixed.restore(); + dynamic.restore(); + }); + + it("undercomitted", function () { + var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]; + var compressed = new ZlibPretty.Deflate(data).compress(); + var decompressed = new ZlibPretty.Inflate(compressed).decompress(); + + assert.deepEqual(data, Array.prototype.slice.call(decompressed)); + }); + + it("uncompressed random data", function () { + var testData = makeRandomData(size); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.NONE); + + assert(none.called === true); + assert(fixed.called === false); + assert(dynamic.called === false); + }); + + it("fixed random data", function () { + var testData = makeRandomData(testData); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.FIXED); + + assert(none.called === false); + assert(fixed.called === true); + assert(dynamic.called === false); + }); + + it("dynamic random data", function () { + var testData = makeRandomData(testData); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.DYNAMIC); + + assert(none.called == false); + assert(fixed.called === false); + assert(dynamic.called === true); + }); + + it("uncompressed sequential data", function () { + var testData = makeSequentialData(testData); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.NONE); + + assert(none.called === true); + assert(fixed.called === false); + assert(dynamic.called === false); + }); + + it("fixed sequential data", function () { + var testData = makeSequentialData(testData); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.FIXED); + + assert(none.called === false); + assert(fixed.called === true); + assert(dynamic.called === false); + }); + + it("dynamic sequential data", function () { + var testData = makeSequentialData(testData); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.DYNAMIC); + + assert(none.called == false); + assert(fixed.called === false); + assert(dynamic.called === true); + }); + + it("uncompressed random sequential data", function () { + var testData = makeRandomSequentialData(testData); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.NONE); + + assert(none.called === true); + assert(fixed.called === false); + assert(dynamic.called === false); + }); + + it("fixed random sequential data", function () { + var testData = makeRandomSequentialData(testData); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.FIXED); + + assert(none.called === false); + assert(fixed.called === true); + assert(dynamic.called === false); + }); + + it("dynamic random sequential data", function () { + var testData = makeRandomSequentialData(testData); + + compressionAndDecompressionTest(testData, ZlibPretty.Deflate.CompressionType.DYNAMIC); + + assert(none.called == false); + assert(fixed.called === false); + assert(dynamic.called === true); + }); + + //------------------------------------------------------------------------- + // stream + //------------------------------------------------------------------------- + it("uncompressed random sequential data (stream)", function () { + var testData = makeRandomSequentialData(testData); + + compressionAndDecompressionByStreamTest(testData, ZlibPretty.Deflate.CompressionType.NONE); + + assert(none.called === true); + assert(fixed.called === false); + assert(dynamic.called === false); + }); + + it("fixed random sequential data (stream)", function () { + var testData = makeRandomSequentialData(testData); + + compressionAndDecompressionByStreamTest(testData, ZlibPretty.Deflate.CompressionType.FIXED); + + assert(none.called === false); + assert(fixed.called === true); + assert(dynamic.called === false); + }); + + it("dynamic random sequential data (stream)", function () { + var testData = makeRandomSequentialData(testData); + + compressionAndDecompressionByStreamTest(testData, ZlibPretty.Deflate.CompressionType.DYNAMIC); + + assert(none.called == false); + assert(fixed.called === false); + assert(dynamic.called === true); + }); +}); diff --git a/test/browser/gunzip-test.js b/test/browser/gunzip-test.js new file mode 100644 index 0000000..8741383 --- /dev/null +++ b/test/browser/gunzip-test.js @@ -0,0 +1,39 @@ +describe('gunzip', function() { + before(function() { + Zlib = { + Gzip: ZlibGzip.Gzip, + Gunzip: ZlibGunzip.Gunzip + } + }); + + it("pre-compressed data", function() { + var testData = + "H4sIAAAAAAAAA0tMTEwEAEXlmK0EAAAA"; + var plain = new Uint8Array("aaaa".split('').map(function(c) { return c.charCodeAt(0); })); + + var decodedData = base64toArray(testData); + + var inflator = new Zlib.Gunzip(decodedData); + var inflated = inflator.decompress(); + + assert(inflated.length === plain.length); + assert.deepEqual(inflated, plain); + }); + + it("decompress pre-compressed data with filename", function() { + var testData = + "H4sICOzl1k8AA2hvZ2UudHh0AMtIzcnJVyjPL8pJ4QIALTsIrwwAAAA="; + var plain = new Uint8Array( + "hello world".split('').map(function(c) { return c.charCodeAt(0); }).concat(0x0a) + ); + + var decodedData = base64toArray(testData); + var inflator = new Zlib.Gunzip(decodedData); + var inflated = inflator.decompress(); + + assert(inflated.length === plain.length); + assert.deepEqual(inflated, plain); + assert((inflator.getMembers())[0].getName() === 'hoge.txt'); + }); +}); + diff --git a/test/browser/gzip-test.js b/test/browser/gzip-test.js new file mode 100644 index 0000000..fcfcdb4 --- /dev/null +++ b/test/browser/gzip-test.js @@ -0,0 +1,69 @@ +describe("gzip", function() { + var size = 76543; + + before(function() { + Zlib = { + Gzip: Zlib.Gzip, + Gunzip: Zlib.Gunzip + } + }); + + it("random sequential data", function () { + var testData = makeRandomSequentialData(size); + + var deflator = new Zlib.Gzip(testData); + var deflated = deflator.compress(); + + var inflator = new Zlib.Gunzip(deflated); + var inflated = inflator.decompress(); + + assert(inflated.length === testData.length); + assert.deepEqual(inflated, testData); + }); + + it("compress with filename", function () { + var testData = makeRandomSequentialData(size); + var deflator = new Zlib.Gzip( + testData, + { + flags: { + fname: true, + fcommenct: false, + fhcrc: false + }, + filename: 'foobar.filename' + } + ); + var deflated = deflator.compress(); + + var inflator = new Zlib.Gunzip(deflated); + var inflated = inflator.decompress(); + + assert(inflated.length === testData.length); + assert.deepEqual(inflated, testData); + assert((inflator.getMembers())[0].getName() === 'foobar.filename'); + }); + + it("compress with filename (seed: 1346432776267)", function () { + var testData = makeRandomSequentialData(testData, 1346432776267); + var deflator = new Zlib.Gzip( + testData, + { + flags: { + fname: true, + fcommenct: false, + fhcrc: false + }, + filename: 'foobar.filename' + } + ); + var deflated = deflator.compress(); + + var inflator = new Zlib.Gunzip(deflated); + var inflated = inflator.decompress(); + + assert(inflated.length === testData.length); + assert.deepEqual(inflated, testData); + assert((inflator.getMembers())[0].getName() === 'foobar.filename'); + }); +}); \ No newline at end of file diff --git a/test/browser/inflate-test.js b/test/browser/inflate-test.js new file mode 100644 index 0000000..665b421 --- /dev/null +++ b/test/browser/inflate-test.js @@ -0,0 +1,169 @@ +describe("Zlib.Inflate", function() { + var USE_TYPEDARRAY = window.Uint8Array !== void 0; + var fixedData = + 'eJztzydhGAAAALDd/v////////////////////////////////9no6BxkF+///z99x8A' + + 'EAgYBBQMHAISChoGFg4eAREJGQUVDR0DEwsbBxcPn4CQiJiElIycgpKKmoaWjp6BkYmZ' + + 'hZWNnYOTi5uHl49fQFBIWERUTFxCUkpaRlZOXkFRSVlFVU1dQ1NLW0dXT9/A0MjYxNTM' + + '3MLSytrG1s7ewdHJ2cXVzd3D08vbx9fPPyAwKDgkNCw8IjIqOiY2Lj4hMSk5JTUtPSMz' + + 'KzsnNy+/oLCouKS0rLyisqq6prauvqGxqbmlta29o7Oru6e3r39gcGh4ZHRsfGJyanpm' + + 'dm5+YXFpeWV1bX1jc2t7Z3dv/+Dw6Pjk9Oz84vLq+ub27v7h8en55fXt/ePz5//z//n/' + + '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + + '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + + '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + + 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + + '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + + '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + + '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + + '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + + 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + + '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + + '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + + '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + + '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + + 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + + '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + + '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + + '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + + '//n//H/+P/+f/8//5//z//n//H/+3+P/Ba1OJPE='; + + before(function() { + Zlib = ZlibOriginal; + }); + + it("pre-deflated data", function() { + var size = 123456; + var plain = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); + var i, il; + var testData = fixedData; + + // make plain data + for (i = 0, il = size; i < il; ++i) { + plain[i] = i & 0xff; + } + + var decodedData = base64toArray(testData); + + // testdata size + assert(testData.length === 1604); + assert(decodedData.length === 1202); + + var inflator = new Zlib.Inflate(decodedData); + var inflated = inflator.decompress(); + + assert(inflated.length === size); + assert.deepEqual(inflated, plain); + }); + + it("pre-deflated data with inflate bufferSize option", function() { + var size = 123456; + var plain = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); + var i, il; + var testData = fixedData; + + // make plain data + for (i = 0, il = size; i < il; ++i) { + plain[i] = i & 0xff; + } + + var decodedData = base64toArray(testData); + + // testdata size + assert(testData.length === 1604); + assert(decodedData.length === 1202); + + var inflator = new Zlib.Inflate(decodedData, {bufferSize: 123456}); + var inflated = inflator.decompress(); + + assert(inflated.length === size); + assert(inflated.buffer.byteLength === 123456); + assert.deepEqual(inflated, plain); + }); + + it("pre-deflated data with inflate bufferType option", function() { + var size = 123456; + var plain = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); + var i, il; + var testData = fixedData; + + // make plain data + for (i = 0, il = size; i < il; ++i) { + plain[i] = i & 0xff; + } + + var decodedData = base64toArray(testData); + + // testdata size + assert(testData.length === 1604); + assert(decodedData.length === 1202); + + var inflator = new Zlib.Inflate(decodedData, { + bufferType: Zlib.Inflate.BufferType.BLOCK, + bufferSize: 41152, + verify: true + }); + var inflated = inflator.decompress(); + + assert(inflated.length === size); + assert(inflated.buffer.byteLength === 123456); + assert.deepEqual(inflated, plain); + }); + + it("pre-deflated data with inflate resize option", function() { + var size = 123456; + var plain = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); + var i, il; + var testData = fixedData; + + // make plain data + for (i = 0, il = size; i < il; ++i) { + plain[i] = i & 0xff; + } + + var decodedData = base64toArray(testData); + + // testdata size + assert(testData.length === 1604); + assert(decodedData.length === 1202); + + var inflator = new Zlib.Inflate(decodedData, { + bufferType: Zlib.Inflate.BufferType.BLOCK, + bufferSize: 41153, + resize: true + }); + var inflated = inflator.decompress(); + + assert(inflated.length === size); + assert(inflated.buffer.byteLength === 123456); + assert.deepEqual(inflated, plain); + }); + + it("issue#35 wrong inflate 1", function() { + var compressed = base64toArray( + "eJx9jq0NQCEMhG8YJMOwAgJdhWYA9kAyAIuQoBmkvNQ80Z+kP/l6uRy8urIysOVoprTaLlOlcXyzvE7qP3jBuo4XCDg/QAyZCQjI" + ); + var plain = + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,228,0,0,0,0,0,0,97,0,0,215,0,0,0,0,0,97,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,166,0,0,0,0,101,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,111,0,0,218,0,0,0,0,0,0,0,0,0,0,0,111]; + + decompressionTest(compressed, plain); + }); + + it("issue#35 wrong inflate 2", function() { + var compressed = base64toArray( + "eJxtjD0NgEAMhd8IBlDAigNMsDCxsSIIAyScikvOzAk4A02Tdujf8r2/FPl1Fctk8jufDzSGbGdJ17A7fbAZd6iowMMswM78tLjCy9+417UEYNsIeA==" + ); + var plain = + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,231,0,0,0,0,0,0,0,0,22,8,0,0,0,0,0,0,0,0,0,0,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,194,0,0,0,0,8,0,0,0,0,0,0,9,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,191,0,0,108,0,0,0,0,169,0,0,60,0,0,0,0,165,0,0,0,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + + decompressionTest(compressed, plain); + }); + + it("issue#35 take a long time and throw exception", function() { + var compressed = base64toArray( + "eJx1jb8NQFAQxj+J2MAASo1EJGIEM1hAhV6iVEg0GgvozGEHG+jscDm5Q/L+FL/3+y73vjfAfVbciDXkqFR9lKretz3XWHbxxl44RSKb+9PWmFw/7+U+MvNlgtTa2D0s3jwyAsYZMgl65Qwx" + ); + var plain = + [125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0,237,0,41,0,0,0,0,0,0,0,0,54,0,90,0,0,0,0,0,0,0,0,4,0,72,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,140,103,0,145,170,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,33,0,0,0,0,0,0,0,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,196,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,133,0,0,0,0,6,0,0,0,0,215,21,0,0,0,0]; + + decompressionTest(compressed, plain); + }); +}); diff --git a/test/browser/raw-inflate-test.js b/test/browser/raw-inflate-test.js new file mode 100644 index 0000000..24ecdf2 --- /dev/null +++ b/test/browser/raw-inflate-test.js @@ -0,0 +1,94 @@ +//define(['base', 'rawinflate', 'util'], function() { + describe('raw-inflate', function() { + var size = 76543; + var testData; + + before(function() { + Zlib = { + RawInflate: ZlibRawInflate.RawInflate, + RawDeflate: ZlibRawDeflate.RawDeflate + }; + }); + + beforeEach(function() { + testData = new (USE_TYPEDARRAY ? Uint8Array : Array)(size); + }); + + it("uncompressed random data", function() { + makeRandomData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.NONE); + }); + + it("fixed random data", function() { + makeRandomData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.FIXED); + }); + + it("dynamic random data", function() { + makeRandomData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.DYNAMIC); + }); + + it("uncompressed sequential data", function() { + makeSequentialData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.NONE); + }); + + it("fixed sequential data", function() { + makeSequentialData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.FIXED); + }); + + it("dynamic sequential data", function() { + makeSequentialData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.DYNAMIC); + }); + + it("uncompressed random sequential data", function() { + makeRandomSequentialData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.NONE); + }); + + it("fixed random sequential data", function() { + makeRandomSequentialData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.FIXED); + }); + + it("dynamic random sequential data", function() { + makeRandomSequentialData(testData); + rawInflateTest(testData, Zlib.RawDeflate.CompressionType.DYNAMIC); + }); + + it("undercomitted", function() { + var data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]; + var compressed = new Zlib.RawDeflate(data).compress(); + var decompressed = new Zlib.RawInflate(compressed).decompress(); + + assert.deepEqual(data, Array.prototype.slice.call(decompressed)); + }); + }); +//}); + + +// inflate test +function rawInflateTest(testData, compressionType, inflateOption) { + var deflate; + var inflate; + + // deflate + deflate = new Zlib.RawDeflate(testData, { + compressionType: compressionType + }).compress(); + + // inflate + if (inflateOption) { + inflateOption.verify = true; + } else { + inflateOption = {verify: true}; + } + inflate = (new Zlib.RawInflate(deflate, inflateOption)).decompress(); + + // assertion + assert(inflate.length === testData.length); + assert.deepEqual(inflate, testData); +} diff --git a/test/browser/unzip-test.js b/test/browser/unzip-test.js new file mode 100644 index 0000000..4428f03 --- /dev/null +++ b/test/browser/unzip-test.js @@ -0,0 +1,68 @@ +describe("unzip", function() { + before(function() { + Zlib = ZlibUnzip; + }); + + it('decompression files', function () { + var testData = + "UEsDBAoAAAAAALZDSEKdh+K5BQAAAAUAAAAIABwAaG9nZS50eHRVVAkAA+g4FFHoOBR" + + "RdXgLAAEE9gEAAAQUAAAAaG9nZQpQSwMECgAAAAAAukNIQgNLGl0FAAAABQAAAAgAHA" + + "BmdWdhLnR4dFVUCQAD7zgUUe84FFF1eAsAAQT2AQAABBQAAABmdWdhClBLAwQKAAAAA" + + "ADCQ0hC8mJOIAUAAAAFAAAACAAcAHBpeW8udHh0VVQJAAP7OBRR+zgUUXV4CwABBPYB" + + "AAAEFAAAAHBpeW8KUEsBAh4DCgAAAAAAtkNIQp2H4rkFAAAABQAAAAgAGAAAAAAAAQA" + + "AAKSBAAAAAGhvZ2UudHh0VVQFAAPoOBRRdXgLAAEE9gEAAAQUAAAAUEsBAh4DCgAAAA" + + "AAukNIQgNLGl0FAAAABQAAAAgAGAAAAAAAAQAAAKSBRwAAAGZ1Z2EudHh0VVQFAAPvO" + + "BRRdXgLAAEE9gEAAAQUAAAAUEsBAh4DCgAAAAAAwkNIQvJiTiAFAAAABQAAAAgAGAAA" + + "AAAAAQAAAKSBjgAAAHBpeW8udHh0VVQFAAP7OBRRdXgLAAEE9gEAAAQUAAAAUEsFBgA" + + "AAAADAAMA6gAAANUAAAAAAA=="; + var decodedData = base64toArray(testData); + var unzip = new Zlib.Unzip(decodedData, { + verify: true + }); + var files = {}; + var filenames = unzip.getFilenames(); + var i, il; + + for (i = 0, il = filenames.length; i < il; ++i) { + files[filenames[i]] = unzip.decompress(filenames[i]); + } + + assert.deepEqual(files['hoge.txt'], new Uint8Array(stringToByteArray("hoge\x0a"))); + assert.deepEqual(files['fuga.txt'], new Uint8Array(stringToByteArray("fuga\x0a"))); + assert.deepEqual(files['piyo.txt'], new Uint8Array(stringToByteArray("piyo\x0a"))); + }); + + it('decompression files (encrypted)', function () { + var testData = + "UEsDBAoACwAAALZDSEKdh+K5EQAAAAUAAAAIABwAaG9nZS50eHRVVAkAA+g4FFFLkE" + + "FRdXgLAAEE9gEAAAQUAAAAmLCXJJ8ekVoXli8htr9XeT1QSwcInYfiuREAAAAFAAAA" + + "UEsDBAoACwAAALpDSEIDSxpdEQAAAAUAAAAIABwAZnVnYS50eHRVVAkAA+84FFFLkE" + + "FRdXgLAAEE9gEAAAQUAAAA70GVr9WG+kUsWOZjPLDJl3tQSwcIA0saXREAAAAFAAAA" + + "UEsDBAoACwAAAMJDSELyYk4gEQAAAAUAAAAIABwAcGl5by50eHRVVAkAA/s4FFFLkE" + + "FRdXgLAAEE9gEAAAQUAAAAwYLuQ1RwgIqnjpzimP0odIJQSwcI8mJOIBEAAAAFAAAA" + + "UEsBAh4DCgALAAAAtkNIQp2H4rkRAAAABQAAAAgAGAAAAAAAAQAAAKSBAAAAAGhvZ2" + + "UudHh0VVQFAAPoOBRRdXgLAAEE9gEAAAQUAAAAUEsBAh4DCgALAAAAukNIQgNLGl0R" + + "AAAABQAAAAgAGAAAAAAAAQAAAKSBYwAAAGZ1Z2EudHh0VVQFAAPvOBRRdXgLAAEE9g" + + "EAAAQUAAAAUEsBAh4DCgALAAAAwkNIQvJiTiARAAAABQAAAAgAGAAAAAAAAQAAAKSB" + + "xgAAAHBpeW8udHh0VVQFAAP7OBRRdXgLAAEE9gEAAAQUAAAAUEsFBgAAAAADAAMA6g" + + "AAACkBAAAAAA=="; + var decodedData = base64toArray(testData); + var unzip = new Zlib.Unzip(decodedData, { + password: "hogefugapiyo".split('').map(function (s) { + return s.charCodeAt(0); + }), + verify: true + }); + var files = {}; + var filenames = unzip.getFilenames(); + var i, il; + + for (i = 0, il = filenames.length; i < il; ++i) { + files[filenames[i]] = unzip.decompress(filenames[i]); + } + + assert.deepEqual(files['hoge.txt'], new Uint8Array(stringToByteArray("hoge\x0a"))); + assert.deepEqual(files['fuga.txt'], new Uint8Array(stringToByteArray("fuga\x0a"))); + assert.deepEqual(files['piyo.txt'], new Uint8Array(stringToByteArray("piyo\x0a"))); + }); +}); \ No newline at end of file diff --git a/test/util.js b/test/browser/util.js similarity index 89% rename from test/util.js rename to test/browser/util.js index 1017442..17b38e2 100644 --- a/test/util.js +++ b/test/browser/util.js @@ -2,7 +2,7 @@ // base64 decoder // see http://sourceforge.net/projects/libb64/ //----------------------------------------------------------------------------- -function decodeB64(str) { +function base64toArray(str) { var c, decoded, fragment, i, op, n, table_length, v, il; var table = [ 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, @@ -89,7 +89,8 @@ function stringToByteArray(str) { //----------------------------------------------------------------------------- // make random data //----------------------------------------------------------------------------- -function makeRandomData(data) { +function makeRandomData(size, typedarray) { + var data = new (typedarray ? Uint8Array : Array)(size); var seed = +new Date(); var mt = new MersenneTwister(seed); var i, il; @@ -100,24 +101,30 @@ function makeRandomData(data) { for (i = 0, il = data.length; i < il; ++i) { data[i] = mt.nextInt(256); } + + return data; } //----------------------------------------------------------------------------- // make sequential data //----------------------------------------------------------------------------- -function makeSequentialData(data) { +function makeSequentialData(size, typedarray) { + var data = new (typedarray ? Uint8Array : Array)(size); var i, il; // make sequential data for (i = 0, il = data.length; i < il; ++i) { data[i] = i & 0xff; } + + return data; } //----------------------------------------------------------------------------- // make random sequential data //----------------------------------------------------------------------------- -function makeRandomSequentialData(data) { +function makeRandomSequentialData(size, typedarray) { + var data = new (typedarray ? Uint8Array : Array)(size); var seed = +new Date(); var mt = new MersenneTwister(seed); var i, il; @@ -136,4 +143,6 @@ function makeRandomSequentialData(data) { data[i++] = random1++ & 0xff; } } + + return data; } \ No newline at end of file diff --git a/test/browser/zip-test.js b/test/browser/zip-test.js new file mode 100644 index 0000000..b1253d8 --- /dev/null +++ b/test/browser/zip-test.js @@ -0,0 +1,186 @@ +describe("zip", function() { + var size = 76543; + + before(function() { + Zlib = { + Unzip: ZlibUnzip.Unzip, + Zip: ZlibZip.Zip + } + }); + + it('compress (store)', function () { + var testData = makeRandomSequentialData(size); + + testData = { + 'hogehoge': testData, + 'fugafuga': testData, + 'piyopiyo': testData + }; + var keys = []; + var key; + var i = 0; + var il; + + for (key in testData) { + keys[i++] = key; + } + + var zip = new Zlib.Zip(); + for (i = 0, il = keys.length; i < il; ++i) { + key = keys[i]; + zip.addFile(testData[key], { + filename: stringToByteArray(key), + compressionMethod: Zlib.Zip.CompressionMethod.STORE + }); + } + var zipped = zip.compress(); + + var unzip = new Zlib.Unzip(zipped, { + 'verify': true + }); + var files = {}; + var filenames = unzip.getFilenames(); + + for (i = 0, il = filenames.length; i < il; ++i) { + files[filenames[i]] = unzip.decompress(filenames[i]); + } + + assert.deepEqual(files[keys[0]], testData[keys[0]]); + assert.deepEqual(files[keys[1]], testData[keys[1]]); + assert.deepEqual(files[keys[2]], testData[keys[2]]); + }); + + it('compress (deflate)', function () { + var testData = makeRandomSequentialData(size); + + testData = { + 'hogehoge': testData, + 'fugafuga': testData, + 'piyopiyo': testData + }; + var keys = []; + var key; + var i = 0; + var il; + + for (key in testData) { + keys[i++] = key; + } + + var zip = new Zlib.Zip(); + for (i = 0, il = keys.length; i < il; ++i) { + key = keys[i]; + zip.addFile(testData[key], { + filename: stringToByteArray(key), + compressionMethod: Zlib.Zip.CompressionMethod.DEFLATE + }); + } + var zipped = zip.compress(); + + var unzip = new Zlib.Unzip(zipped, { + 'verify': true + }); + var files = {}; + var filenames = unzip.getFilenames(); + + for (i = 0, il = filenames.length; i < il; ++i) { + files[filenames[i]] = unzip.decompress(filenames[i]); + } + + assert.deepEqual(files[keys[0]], testData[keys[0]]); + assert.deepEqual(files[keys[1]], testData[keys[1]]); + assert.deepEqual(files[keys[2]], testData[keys[2]]); + }); + + it('compress with password (deflate)', function () { + var testData = makeRandomSequentialData(size); + + testData = { + 'hogehoge': testData, + 'fugafuga': testData, + 'piyopiyo': testData + }; + var keys = []; + var key; + var i = 0; + var il; + + for (key in testData) { + keys[i++] = key; + } + + var zip = new Zlib.Zip(); + zip.setPassword([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); + for (i = 0, il = keys.length; i < il; ++i) { + key = keys[i]; + zip.addFile(testData[key], { + filename: stringToByteArray(key), + compressionMethod: Zlib.Zip.CompressionMethod.DEFLATE + }); + } + var zipped = zip.compress(); + + var unzip = new Zlib.Unzip(zipped, { + 'password': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], + 'verify': true + }); + var files = {}; + var filenames = unzip.getFilenames(); + + for (i = 0, il = filenames.length; i < il; ++i) { + files[filenames[i]] = unzip.decompress(filenames[i]); + } + + assert.deepEqual(files[keys[0]], testData[keys[0]]); + assert.deepEqual(files[keys[1]], testData[keys[1]]); + assert.deepEqual(files[keys[2]], testData[keys[2]]); + }); + + it('compress with password (each file)', function () { + var testData = makeRandomSequentialData(size); + + testData = { + 'hogehoge': [testData, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], + 'fugafuga': [testData, [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]], + 'piyopiyo': [testData, [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]] + }; + var keys = []; + var key; + var i = 0; + var il; + + for (key in testData) { + keys[i++] = key; + } + + var zip = new Zlib.Zip(); + for (i = 0, il = keys.length; i < il; ++i) { + key = keys[i]; + zip.addFile(testData[key][0], { + filename: stringToByteArray(key), + compressionMethod: Zlib.Zip.CompressionMethod.DEFLATE, + password: testData[key][1] + }); + } + var zipped = zip.compress(); + + var unzip = new Zlib.Unzip(zipped, { + 'verify': true + }); + var files = {}; + var filenames = unzip.getFilenames(); + + for (i = 0, il = filenames.length; i < il; ++i) { + files[filenames[i]] = unzip.decompress( + filenames[i], + { + 'password': testData[filenames[i]][1] + } + ); + } + + assert.deepEqual(files[keys[0]], testData[keys[0]][0]); + assert.deepEqual(files[keys[1]], testData[keys[1]][0]); + assert.deepEqual(files[keys[2]], testData[keys[2]][0]); + }); +}); diff --git a/test/browser/zlib-test.js b/test/browser/zlib-test.js new file mode 100644 index 0000000..0efed5d --- /dev/null +++ b/test/browser/zlib-test.js @@ -0,0 +1,61 @@ +describe('zlib', function() { + var size = 76543; + + before(function() { + Zlib = ZlibOriginal; + }); + + it("uncompressed random data", function () { + var testData = makeRandomData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.NONE); + }); + + it("fixed random data", function () { + var testData = makeRandomData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.FIXED); + }); + + it("dynamic random data", function () { + var testData = makeRandomData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.DYNAMIC); + }); + + it("uncompressed sequential data", function () { + var testData = makeSequentialData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.NONE); + }); + + it("fixed sequential data", function () { + var testData = makeSequentialData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.FIXED); + }); + + it("dynamic sequential data", function () { + var testData = makeSequentialData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.DYNAMIC); + }); + + it("uncompressed random sequential data", function () { + var testData = makeRandomSequentialData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.NONE); + }); + + it("fixed random sequential data", function () { + var testData = makeRandomSequentialData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.FIXED); + }); + + it("dynamic random sequential data", function () { + var testData = makeRandomSequentialData(size); + compressionAndDecompressionTest(testData, Zlib.Deflate.CompressionType.DYNAMIC); + }); + + it("undercomitted", function () { + var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]; + var compressed = new Zlib.Deflate(data).compress(); + var decompressed = new Zlib.Inflate(compressed).decompress(); + + assert.deepEqual(data, Array.prototype.slice.call(decompressed)); + }); +}); + diff --git a/test/buster.js b/test/buster.js deleted file mode 100644 index 7914b2f..0000000 --- a/test/buster.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * unit test settings for BusterJS. - */ -var config = module.exports; - -// ブラウザ共通設定 -var browserCommon = { - rootPath: "../", - environment: "browser", - libs: [ - "vendor/mt.js/mt.js", - "test/use_typedarray.js", - "test/util.js" - ], - tests: [ - 'test/browser-inflate-test.js', - 'test/browser-zlib-test.js', - 'test/browser-gunzip-test.js', - 'test/browser-gzip-test.js', - 'test/browser-unzip-test.js', - 'test/browser-zip-test.js' - ] -}; - -// ブラウザでコンパイル前のテスト -config["codepath"] = mixin( - mixin({}, browserCommon), - { - resources: [ - "src/**/*.js" - ], - libs: [ - "closure-primitives/base.js", - "closure-primitives/deps.js", - "test/plain.js" - ], - tests: [ - 'test/browser-codepath-test.js', - 'test/browser-raw-test.js' - ] - } -); - -// ブラウザで独立ビルド版のテスト -config["respectively build"] = mixin( - mixin({}, browserCommon), - { - tests: [ - 'test/browser-raw-test.js' - ], - libs: [ - "bin/rawinflate.dev.min.js", - "bin/rawdeflate.dev.min.js", - "bin/inflate.dev.min.js", - "bin/deflate.dev.min.js", - "bin/gunzip.dev.min.js", - "bin/gzip.dev.min.js", - "bin/unzip.dev.min.js", - "bin/zip.dev.min.js" - ] - } -); - -// ブラウザで Zlib まとめてビルド版のテスト -config["zlib"] = mixin( - mixin({}, browserCommon), - { - libs: [ - "bin/inflate.dev.min.js", - "bin/zip.dev.min.js", - "bin/unzip.dev.min.js", - "bin/zlib_and_gzip.dev.min.js" - ] - } -); - -// node -config["node"] = { - rootPath: "../", - environment: "node", - tests: [ - "test/node-test.js" - ] -}; - -// config mixin -function mixin(dst, src) { - var i; - - for (i in src) { - if (dst[i] instanceof Array && src[i] instanceof Array) { - dst[i] = dst[i].concat(src[i]); - } else if (typeof dst[i] === 'object' && typeof src[i] === 'object') { - mixin(dst[i], src[i]); - } else { - dst[i] = src[i]; - } - } - - return dst; -} diff --git a/test/make_deflated_testdata.js b/test/make_deflated_testdata.js index 2462ff3..cfb3355 100644 --- a/test/make_deflated_testdata.js +++ b/test/make_deflated_testdata.js @@ -7,7 +7,7 @@ for (i = 0, il = size; i < il; ++i) { testData[i] = i & 0xff; } -var Zlib = require('zlib'); +var Zlib = require('Zlib'); var deflated = zlib.deflateSync(testData); var USE_TYPEDARRAY = typeof Uint8Array === 'function'; diff --git a/test/node-test.js b/test/node-test.js deleted file mode 100644 index 6f39a69..0000000 --- a/test/node-test.js +++ /dev/null @@ -1,347 +0,0 @@ -var buster = require('buster'); -var nodeZlib = require('zlib'); -var zlib = require('../bin/node-zlib.js'); -var mt_rand = require('../vendor/mt.js/node-mt.js'); - -//----------------------------------------------------------------------------- -// array assertion -//----------------------------------------------------------------------------- -function arrayEquals(expected, actuals) { - var i, il; - if (!(expected instanceof actuals.constructor)) { - return false; - } - - if (expected.length !== actuals.length) { - return false; - } - - for (i = 0, il = expected.length; i < il; ++i) { - if (expected[i] !== actuals[i]) { - return false; - } - } - - return true; -} - -//----------------------------------------------------------------------------- -// test cases -//----------------------------------------------------------------------------- -buster.testCase( - "node inflate and deflate", - { - setUp: function() { - var size = 1234567; - var testData = new Buffer(size); - - this.timeout = 3000; - this.testData = testData; - }, - "inflate pre-deflated data": function() { - var size = 123456; - var plain = new Buffer(size); - var i, il; - var testData = - 'eJztzydhGAAAALDd/v////////////////////////////////9no6BxkF+///z99x8A'+ - 'EAgYBBQMHAISChoGFg4eAREJGQUVDR0DEwsbBxcPn4CQiJiElIycgpKKmoaWjp6BkYmZ'+ - 'hZWNnYOTi5uHl49fQFBIWERUTFxCUkpaRlZOXkFRSVlFVU1dQ1NLW0dXT9/A0MjYxNTM'+ - '3MLSytrG1s7ewdHJ2cXVzd3D08vbx9fPPyAwKDgkNCw8IjIqOiY2Lj4hMSk5JTUtPSMz'+ - 'KzsnNy+/oLCouKS0rLyisqq6prauvqGxqbmlta29o7Oru6e3r39gcGh4ZHRsfGJyanpm'+ - 'dm5+YXFpeWV1bX1jc2t7Z3dv/+Dw6Pjk9Oz84vLq+ub27v7h8en55fXt/ePz5//z//n/'+ - '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f'+ - '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z'+ - '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+'+ - 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//'+ - '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/'+ - '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f'+ - '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z'+ - '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+'+ - 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//'+ - '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/'+ - '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f'+ - '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z'+ - '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+'+ - 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//'+ - '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/'+ - '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f'+ - '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z'+ - '//n//H/+P/+f/8//5//z//n//H/+3+P/Ba1OJPE='; - - // make plain data - for (i = 0, il = size; i < il; ++i) { - plain[i] = i & 0xff; - } - - var decodedData = new Buffer(testData, 'base64'); - - // testdata size - buster.assert.equals(testData.length, 1604, "source data size"); - buster.assert.equals(decodedData.length, 1202, "base64 decoded data size"); - - var inflated = zlib.inflateSync(decodedData); - - buster.assert.equals(inflated.length, size, "inflated data size"); - buster.assert(arrayEquals(inflated, plain)); - }, - // native deflate, js inflate - "uncompressed random data": function(done) { - var data = this.testData; - - makeRandomData(data); - - zlibBuffer(new nodeZlib.Deflate({level: 0}), data, function(err, buf) { - var inflated = zlib.inflateSync(buf); - - buster.assert.equals(inflated.length, data.length); - buster.assert.equals(inflated, data); - - done(); - }); - }, - "maxlevel random data": function(done) { - var data = this.testData; - - makeRandomData(data); - - zlibBuffer(new nodeZlib.Deflate({level: 9}), data, function(err, buf) { - var inflated = zlib.inflateSync(buf); - - buster.assert.equals(inflated.length, data.length); - buster.assert(arrayEquals(inflated, data)); - - done(); - }); - }, - "undercomitted": function() { - var data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]; - var compressed = zlib.deflateSync(data); - var decompressed = zlib.inflateSync(compressed); - buster.assert(arrayEquals(data, Array.prototype.slice.call(decompressed))); - }, - // js deflate, native inflate - "random data": function(done) { - makeRandomData(this.testData); - inflateTest(done, this.testData); - }, - "sequential data": function(done) { - makeSequentialData(this.testData); - inflateTest(done, this.testData); - }, - "random sequential data": function(done) { - makeRandomSequentialData(this.testData); - inflateTest(done, this.testData); - }, - // native gzip, js gunzip - "gunzip random data": function(done) { - makeRandomData(this.testData); - gunzipTest(done, this.testData); - }, - "gunzip sequential data": function(done) { - makeSequentialData(this.testData); - gunzipTest(done, this.testData); - }, - "gunzip random sequential data": function(done) { - makeRandomSequentialData(this.testData); - gunzipTest(done, this.testData); - }, - // js gzip, native gunzip - "gzip random data": function(done) { - makeRandomData(this.testData); - gzipTest(done, this.testData); - }, - "gzip sequential data": function(done) { - makeSequentialData(this.testData); - gzipTest(done, this.testData); - }, - "gzip random sequential data": function(done) { - makeRandomSequentialData(this.testData); - gzipTest(done, this.testData); - }, - // 過去に失敗したことのあるテスト - "bitbuflen error": function(done) { - makeRandomSequentialData(this.testData, 1339494909128); - gunzipTest(done, this.testData); - }, - "issue#35 wrong inflate 1": function() { - var compressed = new Buffer( - "eJx9jq0NQCEMhG8YJMOwAgJdhWYA9kAyAIuQoBmkvNQ80Z+kP/l6uRy8urIysOVoprTaLlOlcXyzvE7qP3jBuo4XCDg/QAyZCQjI", - "base64" - ); - var plain = new Buffer( - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,228,0,0,0,0,0,0,97,0,0,215,0,0,0,0,0,97,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,166,0,0,0,0,101,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,111,0,0,218,0,0,0,0,0,0,0,0,0,0,0,111] - ); - - inflateOnlyTest(compressed, plain); - }, - "issue#35 wrong inflate 2": function() { - var compressed = new Buffer( - "eJxtjD0NgEAMhd8IBlDAigNMsDCxsSIIAyScikvOzAk4A02Tdujf8r2/FPl1Fctk8jufDzSGbGdJ17A7fbAZd6iowMMswM78tLjCy9+417UEYNsIeA==", - "base64" - ); - var plain = new Buffer( - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,231,0,0,0,0,0,0,0,0,22,8,0,0,0,0,0,0,0,0,0,0,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,0,194,0,0,0,0,8,0,0,0,0,0,0,9,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,191,0,0,108,0,0,0,0,169,0,0,60,0,0,0,0,165,0,0,0,0,0,0,0,0,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - ); - - inflateOnlyTest(compressed, plain); - }, - "issue#35 take a long time and throw exception": function() { - var compressed = new Buffer( - "eJx1jb8NQFAQxj+J2MAASo1EJGIEM1hAhV6iVEg0GgvozGEHG+jscDm5Q/L+FL/3+y73vjfAfVbciDXkqFR9lKretz3XWHbxxl44RSKb+9PWmFw/7+U+MvNlgtTa2D0s3jwyAsYZMgl65Qwx", - "base64" - ); - var plain = new Buffer( - [125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0,237,0,41,0,0,0,0,0,0,0,0,54,0,90,0,0,0,0,0,0,0,0,4,0,72,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,140,103,0,145,170,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,33,0,0,0,0,0,0,0,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,196,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,133,0,0,0,0,6,0,0,0,0,215,21,0,0,0,0] - ); - - inflateOnlyTest(compressed, plain); - } - } -); - -// inflate test -function inflateTest(done, testData) { - var deflate; - - // deflate - deflate = zlib.deflateSync(testData); - console.log("deflated data size:", deflate.length); - - // inflate - nodeZlib.inflate(deflate, function(err, buffer) { - console.log("inflated data size:", buffer.length); - - // assertion - buster.assert(buffer.length, testData.length); - buster.assert(arrayEquals(buffer, testData)); - - done(); - }); -} - -function inflateOnlyTest(compressed, plain) { - var inflated = zlib.inflateSync(compressed); - - buster.assert.equals(inflated.length, plain.length); - buster.assert.equals(inflated, plain); -} - -// gzip test -function gzipTest(done, testData) { - var deflated = zlib.gzipSync(testData); - - console.log("Source:", testData.length); - console.log("Deflate:", deflated.length); - nodeZlib.gunzip(deflated, function(err, buf) { - console.log("Inflate:", buf.length); - buster.assert.equals(buf.length, testData.length); - buster.assert(arrayEquals(buf, testData)); - - done(); - }); -} - -// gunzip test -function gunzipTest(done, testData) { - nodeZlib.gzip(testData, function(err, buf) { - var inflated = zlib.gunzipSync(buf); - - buster.assert.equals(inflated.length, testData.length); - buster.assert(arrayEquals(inflated, testData)); - - done(); - }); -} - -// random -function makeRandomData(data, opt_seed) { - var seed = typeof opt_seed === 'number' ? opt_seed : +new Date(); - var mt = new mt_rand.MersenneTwister(seed); - var i, il; - - console.log("seed:", seed); - - // make random data - for (i = 0, il = data.length; i < il; ++i) { - data[i] = mt.nextInt(256); - } -} - -// sequential -function makeSequentialData(data) { - var i, il; - - // make sequential data - for (i = 0, il = data.length; i < il; ++i) { - data[i] = i & 0xff; - } -} - -// random sequential -function makeRandomSequentialData(data, opt_seed) { - var seed = typeof opt_seed === 'number' ? opt_seed : +new Date(); - var mt = new mt_rand.MersenneTwister(seed); - var i, il; - var random1, random2; - - console.log("seed:", seed); - - // make random data - for (i = 0, il = data.length; i < il;) { - random1 = mt.nextInt(256); - random2 = mt.nextInt(256); - while (random2--) { - if (i === il) { - break; - } - data[i++] = random1++ & 0xff; - } - } -} -//----------------------------------------------------------------------------- -// extract from node.js implementation -//----------------------------------------------------------------------------- -function zlibBuffer(engine, buffer, callback) { - var buffers = []; - var nread = 0; - - function onError(err) { - engine.removeListener('end', onEnd); - engine.removeListener('error', onError); - callback(err); - } - - function onData(chunk) { - buffers.push(chunk); - nread += chunk.length; - } - - function onEnd() { - var buffer; - switch (buffers.length) { - case 0: - buffer = new Buffer(0); - break; - case 1: - buffer = buffers[0]; - break; - default: - buffer = new Buffer(nread); - var n = 0; - buffers.forEach(function(b) { - var l = b.length; - b.copy(buffer, n, 0, l); - n += l; - }); - break; - } - callback(null, buffer); - } - - engine.on('error', onError); - engine.on('data', onData); - engine.on('end', onEnd); - - engine.write(buffer); - engine.end(); -} diff --git a/test/nodejs/node-test.js b/test/nodejs/node-test.js new file mode 100644 index 0000000..b122fe6 --- /dev/null +++ b/test/nodejs/node-test.js @@ -0,0 +1,327 @@ +"use strict"; +import * as NodeZlib from 'zlib'; +import * as Zlib from '../../bin/node-zlib.js'; +import * as MersenneTwister from '../../vendor/mt.js/node-mt.js'; +import * as assert from 'power-assert'; + +//----------------------------------------------------------------------------- +// array assertion +//----------------------------------------------------------------------------- +function arrayEquals(expected, actuals) { + if (!(expected instanceof actuals.constructor)) { + console.error(`[constructor] expected: ${ expected.constructor.name } / actuals: ${ actuals.constructor.name }`); + return false; + } + + if (expected.length !== actuals.length) { + console.error(`[size] expected: ${ expected.length } / actuals: ${ actuals.length}`); + return false; + } + + for (let i = 0, il = expected.length; i < il; ++i) { + if (expected[i] !== actuals[i]) { + console.error(`[value index=${ i }] expected: ${ expected[i] } / actuals: ${ actuals[i] }`); + return false; + } + } + + return true; +} + +//----------------------------------------------------------------------------- +// test cases +//----------------------------------------------------------------------------- +describe("node inflate and deflate", function() { + this.timeout(10000); + const size = 1234567; + + it("inflate pre-deflated data", function () { + const size = 123456; + const plain = new Buffer(new Uint8Array(size)); + const testData = + 'eJztzydhGAAAALDd/v////////////////////////////////9no6BxkF+///z99x8A' + + 'EAgYBBQMHAISChoGFg4eAREJGQUVDR0DEwsbBxcPn4CQiJiElIycgpKKmoaWjp6BkYmZ' + + 'hZWNnYOTi5uHl49fQFBIWERUTFxCUkpaRlZOXkFRSVlFVU1dQ1NLW0dXT9/A0MjYxNTM' + + '3MLSytrG1s7ewdHJ2cXVzd3D08vbx9fPPyAwKDgkNCw8IjIqOiY2Lj4hMSk5JTUtPSMz' + + 'KzsnNy+/oLCouKS0rLyisqq6prauvqGxqbmlta29o7Oru6e3r39gcGh4ZHRsfGJyanpm' + + 'dm5+YXFpeWV1bX1jc2t7Z3dv/+Dw6Pjk9Oz84vLq+ub27v7h8en55fXt/ePz5//z//n/' + + '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + + '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + + '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + + 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + + '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + + '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + + '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + + '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + + 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + + '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + + '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + + '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + + '//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+' + + 'P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//' + + '5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n/' + + '/H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f' + + '/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z//n//H/+P/+f/8//5//z' + + '//n//H/+P/+f/8//5//z//n//H/+3+P/Ba1OJPE='; + const decodedData = new Buffer(testData, 'base64'); + const inflated = Zlib.inflateSync(decodedData); + + // make plain data + for (let i = 0, il = size; i < il; ++i) { + plain[i] = i; + } + + assert(testData.length === 1604); + assert(decodedData.length === 1202); + assert(arrayEquals(inflated, plain)); + }); + + // native deflate, js inflate + it('uncompressed random data', function (done) { + const data = makeRandomData(size); + + zlibBuffer(new NodeZlib.Deflate({level: 0}), data, function (err, buf) { + const inflated = Zlib.inflateSync(buf); + + assert(arrayEquals(inflated, data)); + + done(); + }); + }); + + it('maxlevel random data', function (done) { + const data = makeRandomData(size); + + zlibBuffer(new NodeZlib.Deflate({level: 9}), data, function (err, buf) { + const inflated = Zlib.inflateSync(buf); + + assert(arrayEquals(inflated, data)); + + done(); + }); + }); + + it('undercomitted', function () { + const data = new Buffer([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]); + const compressed = Zlib.deflateSync(data); + const decompressed = Zlib.inflateSync(compressed); + + assert(arrayEquals(data, decompressed)); + }); + + // js deflate, native inflate + it('random data', function (done) { + inflateTest(done, makeRandomData(size)); + }); + it('sequential data', function (done) { + inflateTest(done, makeSequentialData(size)); + }); + it('random sequential data', function (done) { + inflateTest(done, makeRandomSequentialData(size)); + }); + + // native gzip, js gunzip + it('gunzip random data', function (done) { + gunzipTest(done, makeRandomData(size)); + }); + it('gunzip sequential data', function (done) { + gunzipTest(done, makeSequentialData(size)); + }); + it('gunzip random sequential data', function (done) { + gunzipTest(done, makeRandomSequentialData(size)); + }); + + // js gzip, native gunzip + it('gzip random data', function (done) { + gzipTest(done, makeRandomData(size)); + }); + it('gzip sequential data', function (done) { + gzipTest(done, makeSequentialData(size)); + }); + it('gzip random sequential data', function (done) { + gzipTest(done, makeRandomSequentialData(this.testData)); + }); + + // 過去に失敗したことのあるテスト + it('bitbuflen error', function (done) { + gunzipTest(done, makeRandomSequentialData(this.testData, 1339494909128)); + }); + + it('issue#35 wrong inflate 1', function () { + const compressed = new Buffer( + "eJx9jq0NQCEMhG8YJMOwAgJdhWYA9kAyAIuQoBmkvNQ80Z+kP/l6uRy8urIysOVoprTaLlOlcXyzvE7qP3jBuo4XCDg/QAyZCQjI", + "base64" + ); + const plain = new Buffer( + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 97, 0, 0, 215, 0, 0, 0, 0, 0, 97, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 166, 0, 0, 0, 0, 101, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 111, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111] + ); + + inflateOnlyTest(compressed, plain); + }); + + it('issue#35 wrong inflate 2', function () { + const compressed = new Buffer( + "eJxtjD0NgEAMhd8IBlDAigNMsDCxsSIIAyScikvOzAk4A02Tdujf8r2/FPl1Fctk8jufDzSGbGdJ17A7fbAZd6iowMMswM78tLjCy9+417UEYNsIeA==", + "base64" + ); + const plain = new Buffer( + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 22, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 194, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 108, 0, 0, 0, 0, 169, 0, 0, 60, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + ); + + inflateOnlyTest(compressed, plain); + }); + + it('issue#35 take a long time and throw exception', function () { + const compressed = new Buffer( + "eJx1jb8NQFAQxj+J2MAASo1EJGIEM1hAhV6iVEg0GgvozGEHG+jscDm5Q/L+FL/3+y73vjfAfVbciDXkqFR9lKretz3XWHbxxl44RSKb+9PWmFw/7+U+MvNlgtTa2D0s3jwyAsYZMgl65Qwx", + "base64" + ); + const plain = new Buffer( + [125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 237, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 103, 0, 145, 170, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 33, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 196, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 6, 0, 0, 0, 0, 215, 21, 0, 0, 0, 0] + ); + + inflateOnlyTest(compressed, plain); + }); +}); + +// inflate test +function inflateTest(done, testData) { + const deflate = Zlib.deflateSync(testData); + + // inflate + NodeZlib.inflate(deflate, function(err, buffer) { + assert(arrayEquals(buffer, testData)); + + done(); + }); +} + +function inflateOnlyTest(compressed, plain) { + const inflated = Zlib.inflateSync(compressed); + + assert(arrayEquals(inflated, plain)); +} + +// gzip test +function gzipTest(done, testData) { + const deflated = Zlib.gzipSync(testData); + + NodeZlib.gunzip(deflated, function(err, buf) { + assert(arrayEquals(buf, testData)); + + done(); + }); +} + +// gunzip test +function gunzipTest(done, testData) { + NodeZlib.gzip(testData, function(err, buf) { + const inflated = Zlib.gunzipSync(buf); + + assert(arrayEquals(inflated, testData)); + + done(); + }); +} + +// random +function makeRandomData(size, opt_seed) { + const data = new Buffer(new Uint8Array(size)); + const seed = typeof opt_seed === 'number' ? opt_seed : +new Date(); + const mt = new MersenneTwister.MersenneTwister(seed); + + console.log("[MersenneTwister] Seed: ", seed); + + // make random data + for (let i = 0, il = data.length; i < il; ++i) { + data[i] = mt.nextInt(256); + } + + return data; +} + +// sequential +function makeSequentialData(size) { + const data = new Buffer(new Uint8Array(size)); + + // make sequential data + for (let i = 0, il = data.length; i < il; ++i) { + data[i] = i & 0xff; + } + + return data; +} + +// random sequential +function makeRandomSequentialData(size, opt_seed) { + const data = new Buffer(new Uint8Array(size)); + const seed = typeof opt_seed === 'number' ? opt_seed : +new Date(); + const mt = new MersenneTwister.MersenneTwister(seed); + + console.log("[MersenneTwister] Seed: ", seed); + + // make random data + for (let i = 0, il = data.length; i < il;) { + let random1 = mt.nextInt(256); + let random2 = mt.nextInt(256); + + while (random2--) { + if (i === il) { + break; + } + data[i++] = random1++ & 0xff; + } + } + + return data; +} +//----------------------------------------------------------------------------- +// extract from node.js implementation +//----------------------------------------------------------------------------- +function zlibBuffer(engine, buffer, callback) { + const buffers = []; + let nread = 0; + + function onError(err) { + engine.removeListener('end', onEnd); + engine.removeListener('error', onError); + callback(err); + } + + function onData(chunk) { + buffers.push(chunk); + nread += chunk.length; + } + + function onEnd() { + let buffer; + let n = 0; + + switch (buffers.length) { + case 0: + buffer = new Buffer(0); + break; + case 1: + buffer = buffers[0]; + break; + default: + buffer = new Buffer(nread); + buffers.forEach(function(b) { + const l = b.length; + + b.copy(buffer, n, 0, l); + n += l; + }); + break; + } + + callback(null, buffer); + } + + engine.on('error', onError); + engine.on('data', onData); + engine.on('end', onEnd); + + engine.write(buffer); + engine.end(); +} diff --git a/test/plain.js b/test/plain.js deleted file mode 100644 index ccb3f74..0000000 --- a/test/plain.js +++ /dev/null @@ -1,5 +0,0 @@ -(function() { - for (var key in goog.dependencies_.nameToPath) { - goog.require(key); - } -})(); diff --git a/test/use_typedarray.js b/test/use_typedarray.js deleted file mode 100644 index 9e07f52..0000000 --- a/test/use_typedarray.js +++ /dev/null @@ -1 +0,0 @@ -var USE_TYPEDARRAY = window.Uint8Array !== void 0;