1 | void (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 |
|
3 | runTest = 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 |
|
32 | exports.spawnTests = spawnTests = function(manifestFile) {
|
33 | var command;
|
34 | command = "node" + (process.platform === 'win32' ? '.cmd' : '') + " " + __filename + " " + manifestFile;
|
35 | require('../builder/utility').spawn(command);
|
36 | };
|
37 |
|
38 | exports.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 |
|
119 | exports.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 |
|
178 | exports.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 |
|
217 | if (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 |