1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/tests/mochitest/ajax/mochikit/MochiKit/Test.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,181 @@ 1.4 +/*** 1.5 + 1.6 +MochiKit.Test 1.4 1.7 + 1.8 +See <http://mochikit.com/> for documentation, downloads, license, etc. 1.9 + 1.10 +(c) 2005 Bob Ippolito. All rights Reserved. 1.11 + 1.12 +***/ 1.13 + 1.14 +if (typeof(dojo) != 'undefined') { 1.15 + dojo.provide('MochiKit.Test'); 1.16 + dojo.require('MochiKit.Base'); 1.17 +} 1.18 + 1.19 +if (typeof(JSAN) != 'undefined') { 1.20 + JSAN.use("MochiKit.Base", []); 1.21 +} 1.22 + 1.23 +try { 1.24 + if (typeof(MochiKit.Base) == 'undefined') { 1.25 + throw ""; 1.26 + } 1.27 +} catch (e) { 1.28 + throw "MochiKit.Test depends on MochiKit.Base!"; 1.29 +} 1.30 + 1.31 +if (typeof(MochiKit.Test) == 'undefined') { 1.32 + MochiKit.Test = {}; 1.33 +} 1.34 + 1.35 +MochiKit.Test.NAME = "MochiKit.Test"; 1.36 +MochiKit.Test.VERSION = "1.4"; 1.37 +MochiKit.Test.__repr__ = function () { 1.38 + return "[" + this.NAME + " " + this.VERSION + "]"; 1.39 +}; 1.40 + 1.41 +MochiKit.Test.toString = function () { 1.42 + return this.__repr__(); 1.43 +}; 1.44 + 1.45 + 1.46 +MochiKit.Test.EXPORT = ["runTests"]; 1.47 +MochiKit.Test.EXPORT_OK = []; 1.48 + 1.49 +MochiKit.Test.runTests = function (obj) { 1.50 + if (typeof(obj) == "string") { 1.51 + obj = JSAN.use(obj); 1.52 + } 1.53 + var suite = new MochiKit.Test.Suite(); 1.54 + suite.run(obj); 1.55 +}; 1.56 + 1.57 +MochiKit.Test.Suite = function () { 1.58 + this.testIndex = 0; 1.59 + MochiKit.Base.bindMethods(this); 1.60 +}; 1.61 + 1.62 +MochiKit.Test.Suite.prototype = { 1.63 + run: function (obj) { 1.64 + try { 1.65 + obj(this); 1.66 + } catch (e) { 1.67 + this.traceback(e); 1.68 + } 1.69 + }, 1.70 + traceback: function (e) { 1.71 + var items = MochiKit.Iter.sorted(MochiKit.Base.items(e)); 1.72 + print("not ok " + this.testIndex + " - Error thrown"); 1.73 + for (var i = 0; i < items.length; i++) { 1.74 + var kv = items[i]; 1.75 + if (kv[0] == "stack") { 1.76 + kv[1] = kv[1].split(/\n/)[0]; 1.77 + } 1.78 + this.print("# " + kv.join(": ")); 1.79 + } 1.80 + }, 1.81 + print: function (s) { 1.82 + print(s); 1.83 + }, 1.84 + is: function (got, expected, /* optional */message) { 1.85 + var res = 1; 1.86 + var msg = null; 1.87 + try { 1.88 + res = MochiKit.Base.compare(got, expected); 1.89 + } catch (e) { 1.90 + msg = "Can not compare " + typeof(got) + ":" + typeof(expected); 1.91 + } 1.92 + if (res) { 1.93 + msg = "Expected value did not compare equal"; 1.94 + } 1.95 + if (!res) { 1.96 + return this.testResult(true, message); 1.97 + } 1.98 + return this.testResult(false, message, 1.99 + [[msg], ["got:", got], ["expected:", expected]]); 1.100 + }, 1.101 + 1.102 + testResult: function (pass, msg, failures) { 1.103 + this.testIndex += 1; 1.104 + if (pass) { 1.105 + this.print("ok " + this.testIndex + " - " + msg); 1.106 + return; 1.107 + } 1.108 + this.print("not ok " + this.testIndex + " - " + msg); 1.109 + if (failures) { 1.110 + for (var i = 0; i < failures.length; i++) { 1.111 + this.print("# " + failures[i].join(" ")); 1.112 + } 1.113 + } 1.114 + }, 1.115 + 1.116 + isDeeply: function (got, expected, /* optional */message) { 1.117 + var m = MochiKit.Base; 1.118 + var res = 1; 1.119 + try { 1.120 + res = m.compare(got, expected); 1.121 + } catch (e) { 1.122 + // pass 1.123 + } 1.124 + if (res === 0) { 1.125 + return this.ok(true, message); 1.126 + } 1.127 + var gk = m.keys(got); 1.128 + var ek = m.keys(expected); 1.129 + gk.sort(); 1.130 + ek.sort(); 1.131 + if (m.compare(gk, ek)) { 1.132 + // differing keys 1.133 + var cmp = {}; 1.134 + var i; 1.135 + for (i = 0; i < gk.length; i++) { 1.136 + cmp[gk[i]] = "got"; 1.137 + } 1.138 + for (i = 0; i < ek.length; i++) { 1.139 + if (ek[i] in cmp) { 1.140 + delete cmp[ek[i]]; 1.141 + } else { 1.142 + cmp[ek[i]] = "expected"; 1.143 + } 1.144 + } 1.145 + var diffkeys = m.keys(cmp); 1.146 + diffkeys.sort(); 1.147 + var gotkeys = []; 1.148 + var expkeys = []; 1.149 + while (diffkeys.length) { 1.150 + var k = diffkeys.shift(); 1.151 + if (k in Object.prototype) { 1.152 + continue; 1.153 + } 1.154 + (cmp[k] == "got" ? gotkeys : expkeys).push(k); 1.155 + } 1.156 + 1.157 + 1.158 + } 1.159 + 1.160 + return this.testResult((!res), msg, 1.161 + (msg ? [["got:", got], ["expected:", expected]] : undefined) 1.162 + ); 1.163 + }, 1.164 + 1.165 + ok: function (res, message) { 1.166 + return this.testResult(res, message); 1.167 + } 1.168 +}; 1.169 + 1.170 +MochiKit.Test.__new__ = function () { 1.171 + var m = MochiKit.Base; 1.172 + 1.173 + this.EXPORT_TAGS = { 1.174 + ":common": this.EXPORT, 1.175 + ":all": m.concat(this.EXPORT, this.EXPORT_OK) 1.176 + }; 1.177 + 1.178 + m.nameFunctions(this); 1.179 + 1.180 +}; 1.181 + 1.182 +MochiKit.Test.__new__(); 1.183 + 1.184 +MochiKit.Base._exportSymbols(this, MochiKit.Test);