- support for web worker. #11

Changed
- throw error if input type is incorrect.
- prevent webpack to require dependencies.
pull/12/merge
Chen, Yi-Cyuan 8 years ago
parent 8b9a23ce32
commit c00df3af37

@ -1,5 +1,13 @@
# Change Log # Change Log
## v0.5.0 / 2017-07-14
### Added
- support for web worker. #11
### Changed
- throw error if input type is incorrect.
- prevent webpack to require dependencies.
## v0.4.2 / 2017-01-18 ## v0.4.2 / 2017-01-18
### Fixed ### Fixed
- `root` is undefined in some special environment. #7 - `root` is undefined in some special environment. #7

@ -1,6 +1,6 @@
{ {
"name": "js-md5", "name": "js-md5",
"version": "0.4.2", "version": "0.5.0",
"main": ["src/md5.js"], "main": ["src/md5.js"],
"ignore": [ "ignore": [
"tests" "tests"

4
build/md5.min.js vendored

File diff suppressed because one or more lines are too long

@ -91,7 +91,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line141">line 141</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line162">line 162</a>
</li></ul></dd> </li></ul></dd>
@ -198,7 +198,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line523">line 523</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line556">line 556</a>
</li></ul></dd> </li></ul></dd>
@ -314,7 +314,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line535">line 535</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line568">line 568</a>
</li></ul></dd> </li></ul></dd>
@ -432,7 +432,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line557">line 557</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line590">line 590</a>
</li></ul></dd> </li></ul></dd>
@ -548,7 +548,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line501">line 501</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line534">line 534</a>
</li></ul></dd> </li></ul></dd>
@ -664,7 +664,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line456">line 456</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line489">line 489</a>
</li></ul></dd> </li></ul></dd>
@ -780,7 +780,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line489">line 489</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line522">line 522</a>
</li></ul></dd> </li></ul></dd>
@ -954,7 +954,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line169">line 169</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line190">line 190</a>
</li></ul></dd> </li></ul></dd>
@ -1031,7 +1031,7 @@
<br class="clear"> <br class="clear">
<footer> <footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Wed Jan 18 2017 09:43:27 GMT+0800 (CST) Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Fri Jul 14 2017 12:58:59 GMT+0800 (CST)
</footer> </footer>
<script> prettyPrint(); </script> <script> prettyPrint(); </script>

@ -210,7 +210,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line575">line 575</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line608">line 608</a>
</li></ul></dd> </li></ul></dd>
@ -285,7 +285,7 @@
<br class="clear"> <br class="clear">
<footer> <footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Wed Jan 18 2017 09:43:27 GMT+0800 (CST) Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Fri Jul 14 2017 12:58:59 GMT+0800 (CST)
</footer> </footer>
<script> prettyPrint(); </script> <script> prettyPrint(); </script>

@ -95,7 +95,7 @@ md5.buffer(''); // ArrayBuffer, deprecated, This maybe confuse with Buffer in no
<br class="clear"> <br class="clear">
<footer> <footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Wed Jan 18 2017 09:43:27 GMT+0800 (CST) Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Fri Jul 14 2017 12:58:59 GMT+0800 (CST)
</footer> </footer>
<script> prettyPrint(); </script> <script> prettyPrint(); </script>

@ -47,7 +47,7 @@
<dt class="tag-version">Version:</dt> <dt class="tag-version">Version:</dt>
<dd class="tag-version"><ul class="dummy"><li>0.4.2</li></ul></dd> <dd class="tag-version"><ul class="dummy"><li>0.5.0</li></ul></dd>
@ -233,7 +233,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line53">line 53</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line67">line 67</a>
</li></ul></dd> </li></ul></dd>
@ -400,7 +400,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line62">line 62</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line76">line 76</a>
</li></ul></dd> </li></ul></dd>
@ -569,7 +569,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line71">line 71</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line85">line 85</a>
</li></ul></dd> </li></ul></dd>
@ -678,7 +678,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line87">line 87</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line101">line 101</a>
</li></ul></dd> </li></ul></dd>
@ -845,7 +845,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line44">line 44</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line58">line 58</a>
</li></ul></dd> </li></ul></dd>
@ -1012,7 +1012,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line33">line 33</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line47">line 47</a>
</li></ul></dd> </li></ul></dd>
@ -1179,7 +1179,7 @@
<dt class="tag-source">Source:</dt> <dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li> <dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line95">line 95</a> <a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line109">line 109</a>
</li></ul></dd> </li></ul></dd>
@ -1254,7 +1254,7 @@
<br class="clear"> <br class="clear">
<footer> <footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Wed Jan 18 2017 09:43:27 GMT+0800 (CST) Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Fri Jul 14 2017 12:58:59 GMT+0800 (CST)
</footer> </footer>
<script> prettyPrint(); </script> <script> prettyPrint(); </script>

@ -30,7 +30,7 @@
* [js-md5]{@link https://github.com/emn178/js-md5} * [js-md5]{@link https://github.com/emn178/js-md5}
* *
* @namespace md5 * @namespace md5
* @version 0.4.2 * @version 0.5.0
* @author Chen, Yi-Cyuan [emn178@gmail.com] * @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2017 * @copyright Chen, Yi-Cyuan 2014-2017
* @license MIT * @license MIT
@ -38,10 +38,18 @@
(function () { (function () {
'use strict'; 'use strict';
var root = typeof window === 'object' ? window : {}; var ERROR = 'input is invalid type';
var WINDOW = typeof window === 'object';
var root = WINDOW ? window : {};
if (root.JS_MD5_NO_WINDOW) {
WINDOW = false;
}
var WEB_WORKER = !WINDOW &amp;&amp; typeof self === 'object';
var NODE_JS = !root.JS_MD5_NO_NODE_JS &amp;&amp; typeof process === 'object' &amp;&amp; process.versions &amp;&amp; process.versions.node; var NODE_JS = !root.JS_MD5_NO_NODE_JS &amp;&amp; typeof process === 'object' &amp;&amp; process.versions &amp;&amp; process.versions.node;
if (NODE_JS) { if (NODE_JS) {
root = global; root = global;
} else if (WEB_WORKER) {
root = self;
} }
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS &amp;&amp; typeof module === 'object' &amp;&amp; module.exports; var COMMON_JS = !root.JS_MD5_NO_COMMON_JS &amp;&amp; typeof module === 'object' &amp;&amp; module.exports;
var AMD = typeof define === 'function' &amp;&amp; define.amd; var AMD = typeof define === 'function' &amp;&amp; define.amd;
@ -58,6 +66,12 @@
blocks = new Uint32Array(buffer); blocks = new Uint32Array(buffer);
} }
if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {
Array.isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
/** /**
* @method hex * @method hex
* @memberof md5 * @memberof md5
@ -151,17 +165,24 @@
}; };
var nodeWrap = function (method) { var nodeWrap = function (method) {
var crypto = require('crypto'); var crypto = eval("require('crypto')");
var Buffer = require('buffer').Buffer; var Buffer = eval("require('buffer').Buffer");
var nodeMethod = function (message) { var nodeMethod = function (message) {
if (typeof message === 'string') { if (typeof message === 'string') {
return crypto.createHash('md5').update(message, 'utf8').digest('hex'); return crypto.createHash('md5').update(message, 'utf8').digest('hex');
} else if (message.constructor === ArrayBuffer) { } else {
message = new Uint8Array(message); if (message === null || message === undefined) {
} else if (message.length === undefined) { throw ERROR;
} else if (message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
}
}
if (Array.isArray(message) || ArrayBuffer.isView(message) ||
message.constructor === Buffer) {
return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
} else {
return method(message); return method(message);
} }
return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
}; };
return nodeMethod; return nodeMethod;
}; };
@ -208,10 +229,22 @@
return; return;
} }
var notString = typeof(message) != 'string'; var notString = typeof(message) != 'string';
if (notString &amp;&amp; message.constructor == root.ArrayBuffer) { if (notString) {
message = new Uint8Array(message); if (message === null || message === undefined) {
throw ERROR;
} else if (message.constructor === root.ArrayBuffer) {
message = new Uint8Array(message);
}
}
var length = message.length;
if (notString) {
if (typeof length !== 'number' ||
!Array.isArray(message) &amp;&amp;
!(ARRAY_BUFFER &amp;&amp; ArrayBuffer.isView(message))) {
throw ERROR;
}
} }
var code, index = 0, i, length = message.length || 0, blocks = this.blocks; var code, index = 0, i, blocks = this.blocks;
var buffer8 = this.buffer8; var buffer8 = this.buffer8;
while (index &lt; length) { while (index &lt; length) {
@ -641,7 +674,7 @@
<br class="clear"> <br class="clear">
<footer> <footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Wed Jan 18 2017 09:43:27 GMT+0800 (CST) Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Fri Jul 14 2017 12:58:59 GMT+0800 (CST)
</footer> </footer>
<script> prettyPrint(); </script> <script> prettyPrint(); </script>

@ -1,6 +1,6 @@
{ {
"name": "js-md5", "name": "js-md5",
"version": "0.4.2", "version": "0.5.0",
"description": "A simple MD5 hash function for JavaScript supports UTF-8 encoding.", "description": "A simple MD5 hash function for JavaScript supports UTF-8 encoding.",
"main": "src/md5.js", "main": "src/md5.js",
"devDependencies": { "devDependencies": {
@ -9,7 +9,8 @@
"jsdoc": "^3.4.0", "jsdoc": "^3.4.0",
"mocha": "~2.3.4", "mocha": "~2.3.4",
"requirejs": "^2.1.22", "requirejs": "^2.1.22",
"uglifyjs": "~2.4.10" "uglifyjs": "~2.4.10",
"webworker-threads": "^0.7.11"
}, },
"scripts": { "scripts": {
"test": "mocha tests/node-test.js -r jscoverage", "test": "mocha tests/node-test.js -r jscoverage",

@ -2,7 +2,7 @@
* [js-md5]{@link https://github.com/emn178/js-md5} * [js-md5]{@link https://github.com/emn178/js-md5}
* *
* @namespace md5 * @namespace md5
* @version 0.4.2 * @version 0.5.0
* @author Chen, Yi-Cyuan [emn178@gmail.com] * @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2017 * @copyright Chen, Yi-Cyuan 2014-2017
* @license MIT * @license MIT
@ -10,10 +10,18 @@
(function () { (function () {
'use strict'; 'use strict';
var root = typeof window === 'object' ? window : {}; var ERROR = 'input is invalid type';
var WINDOW = typeof window === 'object';
var root = WINDOW ? window : {};
if (root.JS_MD5_NO_WINDOW) {
WINDOW = false;
}
var WEB_WORKER = !WINDOW && typeof self === 'object';
var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node; var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
if (NODE_JS) { if (NODE_JS) {
root = global; root = global;
} else if (WEB_WORKER) {
root = self;
} }
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports; var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
var AMD = typeof define === 'function' && define.amd; var AMD = typeof define === 'function' && define.amd;
@ -30,6 +38,12 @@
blocks = new Uint32Array(buffer); blocks = new Uint32Array(buffer);
} }
if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {
Array.isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
/** /**
* @method hex * @method hex
* @memberof md5 * @memberof md5
@ -123,17 +137,24 @@
}; };
var nodeWrap = function (method) { var nodeWrap = function (method) {
var crypto = require('crypto'); var crypto = eval("require('crypto')");
var Buffer = require('buffer').Buffer; var Buffer = eval("require('buffer').Buffer");
var nodeMethod = function (message) { var nodeMethod = function (message) {
if (typeof message === 'string') { if (typeof message === 'string') {
return crypto.createHash('md5').update(message, 'utf8').digest('hex'); return crypto.createHash('md5').update(message, 'utf8').digest('hex');
} else if (message.constructor === ArrayBuffer) { } else {
message = new Uint8Array(message); if (message === null || message === undefined) {
} else if (message.length === undefined) { throw ERROR;
} else if (message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
}
}
if (Array.isArray(message) || ArrayBuffer.isView(message) ||
message.constructor === Buffer) {
return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
} else {
return method(message); return method(message);
} }
return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
}; };
return nodeMethod; return nodeMethod;
}; };
@ -180,10 +201,22 @@
return; return;
} }
var notString = typeof(message) != 'string'; var notString = typeof(message) != 'string';
if (notString && message.constructor == root.ArrayBuffer) { if (notString) {
message = new Uint8Array(message); if (message === null || message === undefined) {
throw ERROR;
} else if (message.constructor === root.ArrayBuffer) {
message = new Uint8Array(message);
}
}
var length = message.length;
if (notString) {
if (typeof length !== 'number' ||
!Array.isArray(message) &&
!(ARRAY_BUFFER && ArrayBuffer.isView(message))) {
throw ERROR;
}
} }
var code, index = 0, i, length = message.length || 0, blocks = this.blocks; var code, index = 0, i, blocks = this.blocks;
var buffer8 = this.buffer8; var buffer8 = this.buffer8;
while (index < length) { while (index < length) {

@ -1,5 +1,8 @@
// Node.js env
expect = require('expect.js'); expect = require('expect.js');
Worker = require('webworker-threads').Worker;
// Node.js env
BUFFER = true;
md5 = require('../src/md5.js'); md5 = require('../src/md5.js');
require('./test.js'); require('./test.js');
@ -9,6 +12,7 @@ md5 = null
// Webpack browser env // Webpack browser env
JS_MD5_NO_NODE_JS = true; JS_MD5_NO_NODE_JS = true;
BUFFER = false;
window = global; window = global;
md5 = require('../src/md5.js'); md5 = require('../src/md5.js');
require('./test.js'); require('./test.js');
@ -20,6 +24,7 @@ md5 = null;
// browser env // browser env
JS_MD5_NO_NODE_JS = true; JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true; JS_MD5_NO_COMMON_JS = true;
BUFFER = false;
window = global; window = global;
require('../src/md5.js'); require('../src/md5.js');
require('./test.js'); require('./test.js');
@ -32,6 +37,7 @@ md5 = null;
JS_MD5_NO_NODE_JS = true; JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true; JS_MD5_NO_COMMON_JS = true;
JS_MD5_NO_ARRAY_BUFFER = true; JS_MD5_NO_ARRAY_BUFFER = true;
BUFFER = false;
window = global; window = global;
require('../src/md5.js'); require('../src/md5.js');
require('./test.js'); require('./test.js');
@ -44,6 +50,7 @@ md5 = null;
JS_MD5_NO_NODE_JS = true; JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true; JS_MD5_NO_COMMON_JS = true;
JS_MD5_NO_ARRAY_BUFFER = false; JS_MD5_NO_ARRAY_BUFFER = false;
BUFFER = false;
window = global; window = global;
define = function (func) { define = function (func) {
md5 = func(); md5 = func();
@ -52,3 +59,42 @@ define = function (func) {
define.amd = true; define.amd = true;
require('../src/md5.js'); require('../src/md5.js');
delete require.cache[require.resolve('../src/md5.js')];
delete require.cache[require.resolve('./test.js')];
md5 = null;
// webworker
WORKER = 'tests/worker.js';
SOURCE = 'src/md5.js';
require('./worker-test.js');
// cover webworker
JS_MD5_NO_WINDOW = true;
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = false;
JS_MD5_NO_ARRAY_BUFFER = false;
BUFFER = false;
WORKER = './worker.js';
SOURCE = '../src/md5.js';
window = global;
self = global;
Worker = function (file) {
require(file);
currentWorker = this;
this.postMessage = function (data) {
onmessage({data: data});
};
}
postMessage = function (data) {
currentWorker.onmessage({data: data});
}
importScripts = function () {};
md5 = require('../src/md5.js');
require('./worker-test.js');

@ -42,29 +42,30 @@
'd41d8cd98f00b204e9800998ecf8427e': [], 'd41d8cd98f00b204e9800998ecf8427e': [],
'93b885adfe0da089cdf634904fd59f71': [0], '93b885adfe0da089cdf634904fd59f71': [0],
'9e107d9d372bb6826bd81d3542a419d6': [84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103] '9e107d9d372bb6826bd81d3542a419d6': [84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]
}, }
'Uint8Array': { };
if (!(typeof JS_MD5_NO_ARRAY_BUFFER === 'boolean' && JS_MD5_NO_ARRAY_BUFFER)) {
testCases['Uint8Array'] = {
'9e107d9d372bb6826bd81d3542a419d6': new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]) '9e107d9d372bb6826bd81d3542a419d6': new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103])
}, };
'Int8Array': { testCases['Int8Array'] = {
'9e107d9d372bb6826bd81d3542a419d6': new Int8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]) '9e107d9d372bb6826bd81d3542a419d6': new Int8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103])
}, };
'ArrayBuffer': { testCases['ArrayBuffer'] = {
'93b885adfe0da089cdf634904fd59f71': new ArrayBuffer(1) '93b885adfe0da089cdf634904fd59f71': new ArrayBuffer(1)
}, };
'Object': { }
'd41d8cd98f00b204e9800998ecf8427e': {},
'd41d8cd98f00b204e9800998ecf8427e': {what: 'ever'}
}
};
if (typeof process == 'object') { if (typeof BUFFER === 'boolean' && BUFFER) {
testCases['Buffer'] = { testCases['Buffer'] = {
'd41d8cd98f00b204e9800998ecf8427e': new Buffer(0), 'd41d8cd98f00b204e9800998ecf8427e': new Buffer(0),
'9e107d9d372bb6826bd81d3542a419d6': new Buffer(new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103])) '9e107d9d372bb6826bd81d3542a419d6': new Buffer(new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]))
} }
} }
var errorTestCases = [null, undefined, { length: 0 }, 0, 1, false, true, NaN, Infinity, function () {}];
var methods = [ var methods = [
{ {
name: 'md5', name: 'md5',
@ -154,26 +155,26 @@
} }
]; ];
methods.forEach(function (method) { describe('md5', function () {
describe('#' + method.name, function () { methods.forEach(function (method) {
for (var testCaseName in testCases) { describe('#' + method.name, function () {
(function (testCaseName) { for (var testCaseName in testCases) {
var testCase = testCases[testCaseName]; (function (testCaseName) {
context('when ' + testCaseName, function () { var testCase = testCases[testCaseName];
for (var hash in testCase) { context('when ' + testCaseName, function () {
(function (message, hash) { for (var hash in testCase) {
it('should be equal', function () { (function (message, hash) {
expect(method.call(message)).to.be(hash); it('should be equal', function () {
}); expect(method.call(message)).to.be(hash);
})(testCase[hash], hash); });
} })(testCase[hash], hash);
}); }
})(testCaseName); });
} })(testCaseName);
}
});
}); });
});
describe('Md5', function () {
classMethods.forEach(function (method) { classMethods.forEach(function (method) {
describe('#' + method.name, function () { describe('#' + method.name, function () {
for (var testCaseName in testCases) { for (var testCaseName in testCases) {
@ -192,5 +193,17 @@
} }
}); });
}); });
describe('#md5', function () {
errorTestCases.forEach(function (testCase) {
context('when ' + testCase, function () {
it('should throw error', function () {
expect(function () {
md5(testCase);
}).to.throwError(/input is invalid type/);
});
});
});
});
}); });
})(md5); })(md5);

@ -0,0 +1,21 @@
(function () {
var cases = {
'd41d8cd98f00b204e9800998ecf8427e': '',
'9e107d9d372bb6826bd81d3542a419d6': 'The quick brown fox jumps over the lazy dog',
'e4d909c290d0fb1ca068ffaddf22cbd0': 'The quick brown fox jumps over the lazy dog.'
};
describe('#md5', function () {
Object.keys(cases).forEach(function (hash) {
it('should be equal', function (done) {
var worker = new Worker(WORKER);
worker.onmessage = function(event) {
expect(event.data).to.be(hash);
done();
};
worker.postMessage(SOURCE);
worker.postMessage(cases[hash]);
});
});
});
})();

@ -0,0 +1,26 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MD5</title>
<link rel="stylesheet" href="../node_modules/mocha/mocha.css">
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../node_modules/expect.js/index.js"></script>
<script src="../src/md5.js"></script>
</head>
<body>
<div id="mocha"></div>
<script>
WORKER = 'worker.js';
SOURCE = '../src/md5.js';
mocha.setup('bdd');
</script>
<script src="worker-test.js"></script>
<script>
mocha.checkLeaks();
mocha.run();
</script>
<script>
</script>
</body>
</html>

@ -0,0 +1,12 @@
var imported = false;
onmessage = function(e) {
if (imported) {
postMessage(md5(e.data));
if (typeof exports !== 'undefined') {
imported = false;
}
} else {
imported = true;
importScripts(e.data);
}
}
Loading…
Cancel
Save