]> git.proxmox.com Git - mirror_novnc.git/blob - tests/run_from_console.zombie.js
5ae51846643671c0791193254823b2c506b97296
[mirror_novnc.git] / tests / run_from_console.zombie.js
1 var Browser = require('zombie');
2 var path = require('path');
3 var EventEmitter = require('events').EventEmitter;
4 var Q = require('q');
5
6 var provide_emitter = function(file_paths) {
7 var emitter = new EventEmitter();
8
9 file_paths.reduce(function(prom, file_path, path_ind) {
10 return prom.then(function(browser) {
11 browser.visit('file://'+file_path, function() {
12 if (browser.error) throw new Error(browser.errors);
13
14 var res_json = {};
15 res_json.file_ind = path_ind;
16
17 res_json.num_tests = browser.querySelectorAll('li.test').length;
18 res_json.num_fails = browser.querySelectorAll('li.test.fail').length;
19 res_json.num_passes = browser.querySelectorAll('li.test.pass').length;
20 res_json.num_slow = browser.querySelectorAll('li.test.pass:not(.fast)').length;
21 res_json.duration = browser.text('li.duration em');
22
23 var traverse_node = function(elem) {
24 var classList = elem.className.split(' ');
25 if (classList.indexOf('suite') > -1) {
26 var res = {
27 type: 'suite',
28 name: elem.querySelector('h1').textContent,
29 has_subfailures: elem.querySelectorAll('li.test.fail').length > 0
30 }
31
32 var child_elems = elem.querySelector('ul').children;
33 res.children = Array.prototype.map.call(child_elems, traverse_node);
34 return res;
35 }
36 else {
37 var h2_content = elem.querySelector('h2').childNodes;
38 var res = {
39 type: 'test',
40 text: h2_content[0].textContent
41 }
42
43 if (classList.indexOf('pass') > -1) {
44 res.pass = true;
45 res.slow = classList.indexOf('fast') < 0;
46 res.duration = h2_content[1].textContent;
47 }
48 else {
49 res.error = elem.querySelector('pre.error').textContent;
50 }
51
52 return res;
53 }
54 }
55
56 var top_suites = browser.querySelectorAll('#mocha-report > li.suite');
57 res_json.suites = Array.prototype.map.call(top_suites, traverse_node);
58 res_json.replay = browser.querySelector('a.replay').textContent;
59
60 emitter.emit('test_ready', res_json);
61 });
62
63 return new Browser();
64 });
65 }, Q(new Browser()));
66
67 return emitter;
68 }
69
70 module.exports = {
71 provide_emitter: provide_emitter,
72 name: 'ZombieJS'
73 }