author | Giulio Cesare Solaroli <giulio.cesare@clipperz.com> | 2011-10-02 23:56:18 (UTC) |
---|---|---|
committer | Giulio Cesare Solaroli <giulio.cesare@clipperz.com> | 2011-10-02 23:56:18 (UTC) |
commit | ef68436ac04da078ffdcacd7e1f785473a303d45 (patch) (unidiff) | |
tree | c403752d66a2c4775f00affd4fa8431b29c5b68c /frontend/gamma/js/MochiKit/Test.js | |
parent | 597ecfbc0249d83e1b856cbd558340c01237a360 (diff) | |
download | clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.zip clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.tar.gz clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.tar.bz2 |
First version of the newly restructured repository
Diffstat (limited to 'frontend/gamma/js/MochiKit/Test.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/MochiKit/Test.js | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/frontend/gamma/js/MochiKit/Test.js b/frontend/gamma/js/MochiKit/Test.js new file mode 100644 index 0000000..9520ab2 --- a/dev/null +++ b/frontend/gamma/js/MochiKit/Test.js | |||
@@ -0,0 +1,144 @@ | |||
1 | /*** | ||
2 | |||
3 | MochiKit.Test 1.5 | ||
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._module('Test', '1.5', ['Base']); | ||
12 | |||
13 | MochiKit.Test.runTests = function (obj) { | ||
14 | if (typeof(obj) == "string") { | ||
15 | // TODO: Remove this temporary API change advertisement | ||
16 | throw new TypeError("Automatic module import not supported, call runTests() with proper object: " + obj); | ||
17 | } | ||
18 | var suite = new MochiKit.Test.Suite(); | ||
19 | suite.run(obj); | ||
20 | }; | ||
21 | |||
22 | MochiKit.Test.Suite = function () { | ||
23 | this.testIndex = 0; | ||
24 | MochiKit.Base.bindMethods(this); | ||
25 | }; | ||
26 | |||
27 | MochiKit.Test.Suite.prototype = { | ||
28 | run: function (obj) { | ||
29 | try { | ||
30 | obj(this); | ||
31 | } catch (e) { | ||
32 | this.traceback(e); | ||
33 | } | ||
34 | }, | ||
35 | traceback: function (e) { | ||
36 | var items = MochiKit.Iter.sorted(MochiKit.Base.items(e)); | ||
37 | print("not ok " + this.testIndex + " - Error thrown"); | ||
38 | for (var i = 0; i < items.length; i++) { | ||
39 | var kv = items[i]; | ||
40 | if (kv[0] == "stack") { | ||
41 | kv[1] = kv[1].split(/\n/)[0]; | ||
42 | } | ||
43 | this.print("# " + kv.join(": ")); | ||
44 | } | ||
45 | }, | ||
46 | print: function (s) { | ||
47 | print(s); | ||
48 | }, | ||
49 | is: function (got, expected, /* optional */message) { | ||
50 | var res = 1; | ||
51 | var msg = null; | ||
52 | try { | ||
53 | res = MochiKit.Base.compare(got, expected); | ||
54 | } catch (e) { | ||
55 | msg = "Can not compare " + typeof(got) + ":" + typeof(expected); | ||
56 | } | ||
57 | if (res) { | ||
58 | msg = "Expected value did not compare equal"; | ||
59 | } | ||
60 | if (!res) { | ||
61 | return this.testResult(true, message); | ||
62 | } | ||
63 | return this.testResult(false, message, | ||
64 | [[msg], ["got:", got], ["expected:", expected]]); | ||
65 | }, | ||
66 | |||
67 | testResult: function (pass, msg, failures) { | ||
68 | this.testIndex += 1; | ||
69 | if (pass) { | ||
70 | this.print("ok " + this.testIndex + " - " + msg); | ||
71 | return; | ||
72 | } | ||
73 | this.print("not ok " + this.testIndex + " - " + msg); | ||
74 | if (failures) { | ||
75 | for (var i = 0; i < failures.length; i++) { | ||
76 | this.print("# " + failures[i].join(" ")); | ||
77 | } | ||
78 | } | ||
79 | }, | ||
80 | |||
81 | isDeeply: function (got, expected, /* optional */message) { | ||
82 | var m = MochiKit.Base; | ||
83 | var res = 1; | ||
84 | try { | ||
85 | res = m.compare(got, expected); | ||
86 | } catch (e) { | ||
87 | // pass | ||
88 | } | ||
89 | if (res === 0) { | ||
90 | return this.ok(true, message); | ||
91 | } | ||
92 | var gk = m.keys(got); | ||
93 | var ek = m.keys(expected); | ||
94 | gk.sort(); | ||
95 | ek.sort(); | ||
96 | if (m.compare(gk, ek)) { | ||
97 | // differing keys | ||
98 | var cmp = {}; | ||
99 | var i; | ||
100 | for (i = 0; i < gk.length; i++) { | ||
101 | cmp[gk[i]] = "got"; | ||
102 | } | ||
103 | for (i = 0; i < ek.length; i++) { | ||
104 | if (ek[i] in cmp) { | ||
105 | delete cmp[ek[i]]; | ||
106 | } else { | ||
107 | cmp[ek[i]] = "expected"; | ||
108 | } | ||
109 | } | ||
110 | var diffkeys = m.keys(cmp); | ||
111 | diffkeys.sort(); | ||
112 | var gotkeys = []; | ||
113 | var expkeys = []; | ||
114 | while (diffkeys.length) { | ||
115 | var k = diffkeys.shift(); | ||
116 | if (k in Object.prototype) { | ||
117 | continue; | ||
118 | } | ||
119 | (cmp[k] == "got" ? gotkeys : expkeys).push(k); | ||
120 | } | ||
121 | |||
122 | |||
123 | } | ||
124 | |||
125 | return this.testResult((!res), msg, | ||
126 | (msg ? [["got:", got], ["expected:", expected]] : undefined) | ||
127 | ); | ||
128 | }, | ||
129 | |||
130 | ok: function (res, message) { | ||
131 | return this.testResult(res, message); | ||
132 | } | ||
133 | }; | ||
134 | |||
135 | MochiKit.Test.__new__ = function () { | ||
136 | var m = MochiKit.Base; | ||
137 | this.Suite.__export__ = false; | ||
138 | m.nameFunctions(this); | ||
139 | |||
140 | }; | ||
141 | |||
142 | MochiKit.Test.__new__(); | ||
143 | |||
144 | MochiKit.Base._exportSymbols(this, MochiKit.Test); | ||