UNPKG

7.59 kBJavaScriptView Raw
1void (function(){var _ion_browser_tester_ = function(module,exports,require){var args, file, manifest, manifestFile, moduleId, modules, np, runTest, runTests, spawnTests, utility, _i, _len, _ref;
2
3runTest = function(name, test, callback) {
4 var e, expectedCallbacks, key, result, value;
5 expectedCallbacks = [];
6 if (typeof test === 'object') {
7 for (key in test) {
8 value = test[key];
9 expectedCallbacks = expectedCallbacks.concat(runTest(name + ' ' + key, value, callback));
10 }
11 } else if (typeof test === 'function') {
12 if (/^\s*function\s*[a-zA-Z_0-9]*\s*\(\s*(done)?\s*\)/.test(test.toString())) {
13 expectedCallbacks.push(name);
14 try {
15 if (test.length === 1) {
16 test(function(error, warning) {
17 return callback(name, error, warning);
18 });
19 } else {
20 result = test();
21 callback(name, null, result);
22 }
23 } catch (_error) {
24 e = _error;
25 callback(name, e, null);
26 }
27 }
28 }
29 return expectedCallbacks;
30};
31
32exports.spawnTests = spawnTests = function(manifestFile) {
33 var command;
34 command = "node" + (process.platform === 'win32' ? '.cmd' : '') + " " + __filename + " " + manifestFile;
35 require('../builder/utility').spawn(command);
36};
37
38exports.runTests = runTests = function(moduleIds, callback) {
39 var array, duration, e, error, expectedCallbacks, getIncompleteCallbacks, handler, inc, key, module, moduleId, name, timeout, waitingForFinishTimeout, warning, _i, _len;
40 if (!moduleIds) {
41 throw new Error("moduleIds is required");
42 }
43 if (callback == null) {
44 callback = exports.createCallback();
45 }
46 expectedCallbacks = {};
47 waitingForFinishTimeout = null;
48 handler = function(name, error, warning) {
49 var inc;
50 expectedCallbacks[name] = true;
51 callback(name, error, warning);
52 if (waitingForFinishTimeout != null) {
53 inc = getIncompleteCallbacks();
54 if (inc.length === 0) {
55 clearTimeout(waitingForFinishTimeout);
56 return callback();
57 }
58 }
59 };
60 for (key in moduleIds) {
61 moduleId = moduleIds[key];
62 try {
63 module = require(moduleId);
64 name = Array.isArray(moduleIds) ? moduleId : key;
65 array = runTest(name, module.test, handler);
66 for (_i = 0, _len = array.length; _i < _len; _i++) {
67 name = array[_i];
68 if (expectedCallbacks[name] == null) {
69 expectedCallbacks[name] = false;
70 }
71 }
72 } catch (_error) {
73 e = _error;
74 handler(moduleId, e, null);
75 }
76 }
77 getIncompleteCallbacks = function() {
78 var value;
79 return (function() {
80 var _results;
81 _results = [];
82 for (name in expectedCallbacks) {
83 value = expectedCallbacks[name];
84 if (!value) {
85 _results.push(name);
86 }
87 }
88 return _results;
89 })();
90 };
91 inc = getIncompleteCallbacks();
92 if (inc.length === 0) {
93 return callback();
94 } else {
95 duration = 1000;
96 error = "Timed out after " + duration + " ms";
97 warning = void 0;
98 timeout = (function(_this) {
99 return function() {
100 var _j, _len1;
101 inc = getIncompleteCallbacks();
102 for (_j = 0, _len1 = inc.length; _j < _len1; _j++) {
103 name = inc[_j];
104 callback(name, error, warning);
105 }
106 return callback();
107 };
108 })(this);
109 if (global.setTimeout != null) {
110 return waitingForFinishTimeout = setTimeout(timeout, duration);
111 } else {
112 error = void 0;
113 warning = "Platform missing setTimeout";
114 return timeout();
115 }
116 }
117};
118
119exports.createCallback = function(options, html) {
120 var beep, blue, endColor, endLine, fails, green, log, plain, red, start, tests, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
121 if (html == null) {
122 html = global.window != null;
123 }
124 if (options == null) {
125 options = html ? {
126 red: '<span style="color:red;white-space:pre">',
127 green: '<span style="color:green;white-space:pre">',
128 blue: '<span style="color:blue;white-space:pre">',
129 plain: '<span>',
130 endColor: '</span>',
131 log: function(x) {
132 return document.body.innerHTML += x;
133 },
134 beep: '',
135 endLine: '<br>'
136 } : {};
137 }
138 red = (_ref = options.red) != null ? _ref : '\u001b[31m';
139 green = (_ref1 = options.green) != null ? _ref1 : '\u001b[32m';
140 blue = (_ref2 = options.blue) != null ? _ref2 : '\u001b[36m';
141 endColor = (_ref3 = options.endColor) != null ? _ref3 : '\u001b[0m';
142 plain = (_ref4 = options.plain) != null ? _ref4 : '';
143 beep = (_ref5 = options.beep) != null ? _ref5 : '\u0007';
144 log = (_ref6 = options.log) != null ? _ref6 : function(x) {
145 return console.log(x);
146 };
147 endLine = (_ref7 = options.endLine) != null ? _ref7 : '';
148 tests = 0;
149 fails = 0;
150 start = null;
151 return function(name, error, result) {
152 var color, finish, passed, time, title, _ref10, _ref8, _ref9;
153 if (start == null) {
154 start = new Date().getTime();
155 }
156 if (name != null) {
157 tests++;
158 if (error != null) {
159 fails++;
160 }
161 color = error != null ? red : result != null ? blue : plain;
162 return log(color + name + ": " + ((_ref8 = (_ref9 = (_ref10 = error != null ? error.stack : void 0) != null ? _ref10 : error) != null ? _ref9 : result) != null ? _ref8 : "") + endColor + endLine);
163 } else {
164 finish = new Date().getTime();
165 time = finish - start;
166 passed = tests - fails;
167 log(endLine);
168 color = passed === tests ? green : red + beep;
169 log(color + (title = "" + passed + "/" + tests + " Passed (" + time + " ms).") + endColor + endLine);
170 if (global.document) {
171 document.title = title;
172 }
173 return log(endLine);
174 }
175 };
176};
177
178exports.test = function() {
179 var assert, tests;
180 assert = {
181 equal: function(a, b) {
182 if (!a == b) {
183 throw new Error("" + a + " != " + b);
184 }
185 }
186 };
187 tests = {
188 alpha: function() {
189 throw "Failure";
190 },
191 beta: function() {},
192 charlie: function() {
193 return "Return value";
194 }
195 };
196 runTest('fail', (function() {
197 throw 'Failure';
198 }), function(name, error, result) {
199 assert.equal(name, 'fail');
200 assert.equal(error, 'Failure');
201 return assert.equal(result, null);
202 });
203 runTest('pass', (function() {}), function(name, error, result) {
204 assert.equal(name, 'pass');
205 assert.equal(error, null);
206 return assert.equal(result, null);
207 });
208 runTest('warn', (function() {
209 return 'warning';
210 }), function(name, error, result) {
211 assert.equal(name, 'warn');
212 assert.equal(error, null);
213 return assert.equal(result, 'warning');
214 });
215};
216
217if (require.main === module) {
218 np = require('path');
219 args = process.argv.slice(2).map(function(x) {
220 return x.replace(/\\/g, '\/');
221 });
222 if (args.length < 1) {
223 console.log("Usage: tester manifestFile");
224 return;
225 }
226 manifestFile = args[0];
227 utility = require('../builder/utility');
228 manifest = JSON.parse(utility.read(manifestFile));
229 modules = {};
230 _ref = manifest.files;
231 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
232 file = _ref[_i];
233 moduleId = np.join(process.cwd(), np.dirname(manifestFile), file);
234 modules[file] = moduleId;
235 }
236 console.log("------------------------------------------------------");
237 runTests(modules);
238}
239
240 }
241 if (typeof require === 'function') {
242 if (require.register)
243 require.register('ion/browser/tester',_ion_browser_tester_);
244 else
245 _ion_browser_tester_.call(this, module, exports, require);
246 }
247 else {
248 _ion_browser_tester_.call(this);
249 }
250}).call(this)
\No newline at end of file