testing/mochitest/tests/MochiKit-1.4.2/MochiKit/Test.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:14ac50647719
1 /***
2
3 MochiKit.Test 1.4.2
4
5 See <http://mochikit.com/> for documentation, downloads, license, etc.
6
7 (c) 2005 Bob Ippolito. All rights Reserved.
8
9 ***/
10
11 MochiKit.Base._deps('Test', ['Base']);
12
13 MochiKit.Test.NAME = "MochiKit.Test";
14 MochiKit.Test.VERSION = "1.4.2";
15 MochiKit.Test.__repr__ = function () {
16 return "[" + this.NAME + " " + this.VERSION + "]";
17 };
18
19 MochiKit.Test.toString = function () {
20 return this.__repr__();
21 };
22
23
24 MochiKit.Test.EXPORT = ["runTests"];
25 MochiKit.Test.EXPORT_OK = [];
26
27 MochiKit.Test.runTests = function (obj) {
28 if (typeof(obj) == "string") {
29 obj = JSAN.use(obj);
30 }
31 var suite = new MochiKit.Test.Suite();
32 suite.run(obj);
33 };
34
35 MochiKit.Test.Suite = function () {
36 this.testIndex = 0;
37 MochiKit.Base.bindMethods(this);
38 };
39
40 MochiKit.Test.Suite.prototype = {
41 run: function (obj) {
42 try {
43 obj(this);
44 } catch (e) {
45 this.traceback(e);
46 }
47 },
48 traceback: function (e) {
49 var items = MochiKit.Iter.sorted(MochiKit.Base.items(e));
50 print("not ok " + this.testIndex + " - Error thrown");
51 for (var i = 0; i < items.length; i++) {
52 var kv = items[i];
53 if (kv[0] == "stack") {
54 kv[1] = kv[1].split(/\n/)[0];
55 }
56 this.print("# " + kv.join(": "));
57 }
58 },
59 print: function (s) {
60 print(s);
61 },
62 is: function (got, expected, /* optional */message) {
63 var res = 1;
64 var msg = null;
65 try {
66 res = MochiKit.Base.compare(got, expected);
67 } catch (e) {
68 msg = "Can not compare " + typeof(got) + ":" + typeof(expected);
69 }
70 if (res) {
71 msg = "Expected value did not compare equal";
72 }
73 if (!res) {
74 return this.testResult(true, message);
75 }
76 return this.testResult(false, message,
77 [[msg], ["got:", got], ["expected:", expected]]);
78 },
79
80 testResult: function (pass, msg, failures) {
81 this.testIndex += 1;
82 if (pass) {
83 this.print("ok " + this.testIndex + " - " + msg);
84 return;
85 }
86 this.print("not ok " + this.testIndex + " - " + msg);
87 if (failures) {
88 for (var i = 0; i < failures.length; i++) {
89 this.print("# " + failures[i].join(" "));
90 }
91 }
92 },
93
94 isDeeply: function (got, expected, /* optional */message) {
95 var m = MochiKit.Base;
96 var res = 1;
97 try {
98 res = m.compare(got, expected);
99 } catch (e) {
100 // pass
101 }
102 if (res === 0) {
103 return this.ok(true, message);
104 }
105 var gk = m.keys(got);
106 var ek = m.keys(expected);
107 gk.sort();
108 ek.sort();
109 if (m.compare(gk, ek)) {
110 // differing keys
111 var cmp = {};
112 var i;
113 for (i = 0; i < gk.length; i++) {
114 cmp[gk[i]] = "got";
115 }
116 for (i = 0; i < ek.length; i++) {
117 if (ek[i] in cmp) {
118 delete cmp[ek[i]];
119 } else {
120 cmp[ek[i]] = "expected";
121 }
122 }
123 var diffkeys = m.keys(cmp);
124 diffkeys.sort();
125 var gotkeys = [];
126 var expkeys = [];
127 while (diffkeys.length) {
128 var k = diffkeys.shift();
129 if (k in Object.prototype) {
130 continue;
131 }
132 (cmp[k] == "got" ? gotkeys : expkeys).push(k);
133 }
134
135
136 }
137
138 return this.testResult((!res), msg,
139 (msg ? [["got:", got], ["expected:", expected]] : undefined)
140 );
141 },
142
143 ok: function (res, message) {
144 return this.testResult(res, message);
145 }
146 };
147
148 MochiKit.Test.__new__ = function () {
149 var m = MochiKit.Base;
150
151 this.EXPORT_TAGS = {
152 ":common": this.EXPORT,
153 ":all": m.concat(this.EXPORT, this.EXPORT_OK)
154 };
155
156 m.nameFunctions(this);
157
158 };
159
160 MochiKit.Test.__new__();
161
162 MochiKit.Base._exportSymbols(this, MochiKit.Test);

mercurial