1 | const Server = require('karma').Server;
|
2 | const closure = require('closure-util');
|
3 | const path = require('path');
|
4 | const processCliArgs = require('karma/lib/cli').process;
|
5 |
|
6 | function insertDependencies(manager, files, previousLookup) {
|
7 | previousLookup = previousLookup || {};
|
8 | let firstIndex = NaN;
|
9 | const original = files.filter((obj, index) => {
|
10 | if (previousLookup[obj.pattern]) {
|
11 | if (isNaN(firstIndex)) {
|
12 | firstIndex = index;
|
13 | }
|
14 | return false;
|
15 | } else {
|
16 | return true;
|
17 | }
|
18 | });
|
19 | if (isNaN(firstIndex)) {
|
20 | firstIndex = 0;
|
21 | }
|
22 | const lookup = {};
|
23 | const dependencies = manager.getDependencies().map(script => {
|
24 | lookup[script.path] = true;
|
25 | return {
|
26 | pattern: script.path,
|
27 | included: true,
|
28 | served: true,
|
29 | watched: false
|
30 | };
|
31 | });
|
32 | original.splice.apply(original, [firstIndex, 0].concat(dependencies));
|
33 | files.length = 0;
|
34 | files.push.apply(files, original);
|
35 |
|
36 | return lookup;
|
37 | }
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | function serve(config, manager, callback) {
|
47 | function exit(code) {
|
48 | let error = null;
|
49 | if (code) {
|
50 | error = new Error(`Karma exited with ${code}`);
|
51 | error.code = code;
|
52 | }
|
53 | callback(error);
|
54 | }
|
55 | const server = new Server(config, exit);
|
56 |
|
57 | const files = server.get('config.files');
|
58 |
|
59 | let lookup = insertDependencies(manager, files);
|
60 |
|
61 |
|
62 | files.unshift({
|
63 | pattern: path.resolve(__dirname, '../test/no-deps.js'),
|
64 | included: true,
|
65 | served: true,
|
66 | watched: false
|
67 | });
|
68 |
|
69 | manager.on('update', () => {
|
70 | lookup = insertDependencies(manager, files, lookup);
|
71 | server.refreshFiles();
|
72 | });
|
73 |
|
74 | server.start();
|
75 | }
|
76 |
|
77 | function main(config, callback) {
|
78 | const manager = new closure.Manager({
|
79 | lib: [
|
80 | 'src/**/*.js',
|
81 | 'build/ol.ext/*.js'
|
82 | ]
|
83 | });
|
84 |
|
85 | manager.on('error', callback);
|
86 |
|
87 | manager.on('ready', () => {
|
88 | serve(config, manager, callback);
|
89 | });
|
90 | }
|
91 |
|
92 | if (require.main === module) {
|
93 | const config = processCliArgs();
|
94 | main(config, (err, manager) => {
|
95 | if (err) {
|
96 | process.stderr.write(err.message, () => process.exit(1));
|
97 | return;
|
98 | } else {
|
99 | process.exit(0);
|
100 | }
|
101 | });
|
102 | }
|