| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | <!doctype html><html>  <head>    <meta charset="utf-8">    <title>Clone Test-Suite (Browser)</title>    <script>      var module = {};      var tests = exports = module.exports = {};      function require(moduleName) {        if (moduleName == './') {          return clone;        }      }      function log(str) {        logList.innerHTML += '<li>' + str + '</li>';      }    </script>    <script src="clone.js"></script>    <script src="test.js"></script>  </head>  <body>    <h1 id="nodeunit-header">Clone Test-Suite (Browser)</h1>    Tests started: <span id="testsStarted"></span>;    Tests finished: <span id="testsFinished"></span>.    <ul id="logList"></ul>    <script>      /* Methods copied from       * https://github.com/caolan/nodeunit/blob/master/lib/assert.js       */      function isUndefinedOrNull(value) {        return value === null || value === undefined;      }      function isArguments(object) {        return Object.prototype.toString.call(object) == '[object Arguments]';      }      var _keys = function (obj){        if (Object.keys) return Object.keys(obj);        if (typeof obj != 'object' && typeof obj != 'function') {          throw new TypeError('-');        }        var keys = [];        for(var k in obj) if(obj.hasOwnProperty(k)) keys.push(k);        return keys;      };      function objEquiv(a, b) {        if (isUndefinedOrNull(a) || isUndefinedOrNull(b))          return false;        if (a.prototype !== b.prototype)          return false;        if (isArguments(a)) {          if (!isArguments(b)) return false;          a = pSlice.call(a);          b = pSlice.call(b);          return _deepEqual(a, b);        }        try {          var ka = _keys(a), kb = _keys(b), key, i;        } catch (e) {          return false        }        if (ka.length != kb.length)          return false;        ka.sort();        kb.sort();        for (i = ka.length - 1; i >= 0; i--) {          if (ka[i] != kb[i]) return false;        }        for (i = ka.length - 1; i >= 0; i--) {          key = ka[i];          if (!_deepEqual(a[key], b[key] ))            return false;        }        return true;      }      function _deepEqual(actual, expected) {        if (actual === expected) {          return true;        } else if (actual instanceof Date && expected instanceof Date) {          return actual.getTime() === expected.getTime();        } else if (actual instanceof RegExp && expected instanceof RegExp) {          return actual.source === expected.source &&              actual.global === expected.global &&              actual.ignoreCase === expected.ignoreCase &&              actual.multiline === expected.multiline;        } else if (typeof actual != 'object' && typeof expected != 'object') {          return actual == expected;        } else {          return objEquiv(actual, expected);        }      }      for (var testName in tests) {        setTimeout((function (testName) {          try {            testsStarted.innerHTML = (parseInt(testsStarted.innerHTML) || 0) + 1;            function incFinished() {              testsFinished.innerHTML = (parseInt(testsFinished.innerHTML) || 0) + 1;            }            tests[testName]({              expect: function (num) {                this._expect = num              },              ok: function (val) {                if(!val) throw new Error(val + ' is not ok.')              },              equal: function (a,b) {                if (a != b) throw new Error(a + ' is not equal to ' + b)              },              notEqual: function (a,b) {                if (a == b) throw new Error(a + ' is equal to ' + b)              },              strictEqual: function (a,b) {                if (a !== b) throw new Error(a + ' is not strict equal to ' + b)              },              deepEqual: function (a,b) {                if (!_deepEqual(a,b))                  throw new Error(JSON.stringify(a) + ' is not deep equal to ' +                                  JSON.stringify(b))              },              done: function () {                log(testName + ' <span style="color:blue">is ok</span>.');                incFinished();              }            });          } catch(e) {            log(testName + ' <span style="color:red">FAIL.</span> <small>'+ e +'</small>');            incFinished();            console.log(e);          }        })(testName), 1);      }    </script>  </body></html>
 |