test.js
 1  var md5 = require('./md5.js');
 2  var assert = require('assert');
 3  
 4  describe('md5', function () {
 5  
 6    it('should throw an error for an undefined value', function() {
 7      assert.throws(function() {
 8        md5(undefined);
 9      });
10    });
11  
12    it('should allow the hashing of the string `undefined`', function() {
13      assert.equal('5e543256c480ac577d30f76f9120eb74', md5('undefined'));
14    });
15  
16    it('should throw an error for `null`', function() {
17      assert.throws(function() {
18        md5(null);
19      });
20    });
21  
22    it('should return the expected MD5 hash for "message"', function() {
23      assert.equal('78e731027d8fd50ed642340b7c9a63b3', md5('message'));
24    });
25  
26    it('should not return the same hash for random numbers twice', function() {
27      var msg1 = Math.floor((Math.random() * 100000) + 1) + (new Date).getTime();
28      var msg2 = Math.floor((Math.random() * 100000) + 1) + (new Date).getTime();
29  
30      if (msg1 !== msg2) {
31        assert.notEqual(md5(msg1), md5(msg2));
32      } else {
33        assert.equal(md5(msg1), md5(msg1));
34      }
35    });
36  
37    it('should support Node.js Buffers', function() {
38      var buffer = new Buffer('message áßäöü', 'utf8');
39  
40      assert.equal(md5(buffer), md5('message áßäöü'));
41    })
42  
43    it('should be able to use a binary encoded string', function() {
44      var hash1 = md5('abc', { asString: true });
45      var hash2 = md5(hash1 + 'a', { asString: true, encoding : 'binary' });
46      var hash3 = md5(hash1 + 'a', { encoding : 'binary' });
47      assert.equal(hash3, '131f0ac52813044f5110e4aec638c169');
48    });
49  
50    it('should support Uint8Array', function() {
51      // Polyfills
52      if (!Array.from) {
53        Array.from = function(src, fn) {
54          var result = new Array(src.length);
55          for (var i = 0; i < src.length; ++i)
56            result[i] = fn(src[i]);
57          return result;
58        };
59      }
60      if (!Uint8Array.from) {
61        Uint8Array.from = function(src) {
62          var result = new Uint8Array(src.length);
63          for (var i = 0; i < src.length; ++i)
64            result[i] = src[i];
65          return result;
66        };
67      }
68  
69      var message = 'foobarbaz';
70      var u8arr = Uint8Array.from(
71        Array.from(message, function(c) { return c.charCodeAt(0); }));
72      var u8aHash = md5(u8arr);
73      assert.equal(u8aHash, md5(message));
74    });
75  });