less 4.2.1 → 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/less.js +98 -38
- package/dist/less.min.js +3 -3
- package/dist/less.min.js.map +1 -1
- package/lib/less/parser/parser.js +35 -6
- package/lib/less/parser/parser.js.map +1 -1
- package/lib/less/tree/nested-at-rule.js +4 -0
- package/lib/less/tree/nested-at-rule.js.map +1 -1
- package/lib/less/tree/query-in-parens.js +32 -1
- package/lib/less/tree/query-in-parens.js.map +1 -1
- package/package.json +4 -4
- package/test/browser/generator/generate.js +2 -2
- package/test/mocha-playwright/runner.js +210 -0
|
@@ -39,6 +39,10 @@ var NestableAtRulePrototype = {
|
|
|
39
39
|
var path = context.mediaPath.concat([this]);
|
|
40
40
|
// Extract the media-query conditions separated with `,` (OR).
|
|
41
41
|
for (i = 0; i < path.length; i++) {
|
|
42
|
+
if (path[i].type !== this.type) {
|
|
43
|
+
context.mediaBlocks.splice(i, 1);
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
42
46
|
value = path[i].features instanceof value_1.default ?
|
|
43
47
|
path[i].features.value : path[i].features;
|
|
44
48
|
path[i] = Array.isArray(value) ? value : [value];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested-at-rule.js","sourceRoot":"","sources":["../../../src/less/tree/nested-at-rule.js"],"names":[],"mappings":"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","sourcesContent":["import Ruleset from './ruleset';\nimport Value from './value';\nimport Selector from './selector';\nimport Anonymous from './anonymous';\nimport Expression from './expression';\nimport * as utils from '../utils';\n\nconst NestableAtRulePrototype = {\n\n isRulesetLike() {\n return true;\n },\n\n accept(visitor) {\n if (this.features) {\n this.features = visitor.visit(this.features);\n }\n if (this.rules) {\n this.rules = visitor.visitArray(this.rules);\n }\n },\n\n evalTop(context) {\n let result = this;\n\n // Render all dependent Media blocks.\n if (context.mediaBlocks.length > 1) {\n const selectors = (new Selector([], null, null, this.getIndex(), this.fileInfo())).createEmptySelectors();\n result = new Ruleset(selectors, context.mediaBlocks);\n result.multiMedia = true;\n result.copyVisibilityInfo(this.visibilityInfo());\n this.setParent(result, this);\n }\n\n delete context.mediaBlocks;\n delete context.mediaPath;\n\n return result;\n },\n\n evalNested(context) {\n let i;\n let value;\n const path = context.mediaPath.concat([this]);\n\n // Extract the media-query conditions separated with `,` (OR).\n for (i = 0; i < path.length; i++) {\n value = path[i].features instanceof Value ?\n path[i].features.value : path[i].features;\n path[i] = Array.isArray(value) ? value : [value];\n }\n\n // Trace all permutations to generate the resulting media-query.\n //\n // (a, b and c) with nested (d, e) ->\n // a and d\n // a and e\n // b and c and d\n // b and c and e\n this.features = new Value(this.permute(path).map(path => {\n path = path.map(fragment => fragment.toCSS ? fragment : new Anonymous(fragment));\n\n for (i = path.length - 1; i > 0; i--) {\n path.splice(i, 0, new Anonymous('and'));\n }\n\n return new Expression(path);\n }));\n this.setParent(this.features, this);\n\n // Fake a tree-node that doesn't output anything.\n return new Ruleset([], []);\n },\n\n permute(arr) {\n if (arr.length === 0) {\n return [];\n } else if (arr.length === 1) {\n return arr[0];\n } else {\n const result = [];\n const rest = this.permute(arr.slice(1));\n for (let i = 0; i < rest.length; i++) {\n for (let j = 0; j < arr[0].length; j++) {\n result.push([arr[0][j]].concat(rest[i]));\n }\n }\n return result;\n }\n },\n\n bubbleSelectors(selectors) {\n if (!selectors) {\n return;\n }\n this.rules = [new Ruleset(utils.copyArray(selectors), [this.rules[0]])];\n this.setParent(this.rules, this);\n }\n};\n\nexport default NestableAtRulePrototype;\n"]}
|
|
1
|
+
{"version":3,"file":"nested-at-rule.js","sourceRoot":"","sources":["../../../src/less/tree/nested-at-rule.js"],"names":[],"mappings":"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","sourcesContent":["import Ruleset from './ruleset';\nimport Value from './value';\nimport Selector from './selector';\nimport Anonymous from './anonymous';\nimport Expression from './expression';\nimport * as utils from '../utils';\n\nconst NestableAtRulePrototype = {\n\n isRulesetLike() {\n return true;\n },\n\n accept(visitor) {\n if (this.features) {\n this.features = visitor.visit(this.features);\n }\n if (this.rules) {\n this.rules = visitor.visitArray(this.rules);\n }\n },\n\n evalTop(context) {\n let result = this;\n\n // Render all dependent Media blocks.\n if (context.mediaBlocks.length > 1) {\n const selectors = (new Selector([], null, null, this.getIndex(), this.fileInfo())).createEmptySelectors();\n result = new Ruleset(selectors, context.mediaBlocks);\n result.multiMedia = true;\n result.copyVisibilityInfo(this.visibilityInfo());\n this.setParent(result, this);\n }\n\n delete context.mediaBlocks;\n delete context.mediaPath;\n\n return result;\n },\n\n evalNested(context) {\n let i;\n let value;\n const path = context.mediaPath.concat([this]);\n\n // Extract the media-query conditions separated with `,` (OR).\n for (i = 0; i < path.length; i++) {\n if (path[i].type !== this.type) { \n context.mediaBlocks.splice(i, 1); \n \n return this; \n }\n \n value = path[i].features instanceof Value ?\n path[i].features.value : path[i].features;\n path[i] = Array.isArray(value) ? value : [value];\n }\n\n // Trace all permutations to generate the resulting media-query.\n //\n // (a, b and c) with nested (d, e) ->\n // a and d\n // a and e\n // b and c and d\n // b and c and e\n this.features = new Value(this.permute(path).map(path => {\n path = path.map(fragment => fragment.toCSS ? fragment : new Anonymous(fragment));\n\n for (i = path.length - 1; i > 0; i--) {\n path.splice(i, 0, new Anonymous('and'));\n }\n\n return new Expression(path);\n }));\n this.setParent(this.features, this);\n\n // Fake a tree-node that doesn't output anything.\n return new Ruleset([], []);\n },\n\n permute(arr) {\n if (arr.length === 0) {\n return [];\n } else if (arr.length === 1) {\n return arr[0];\n } else {\n const result = [];\n const rest = this.permute(arr.slice(1));\n for (let i = 0; i < rest.length; i++) {\n for (let j = 0; j < arr[0].length; j++) {\n result.push([arr[0][j]].concat(rest[i]));\n }\n }\n return result;\n }\n },\n\n bubbleSelectors(selectors) {\n if (!selectors) {\n return;\n }\n this.rules = [new Ruleset(utils.copyArray(selectors), [this.rules[0]])];\n this.setParent(this.rules, this);\n }\n};\n\nexport default NestableAtRulePrototype;\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var tslib_1 = require("tslib");
|
|
4
|
+
var copy_anything_1 = require("copy-anything");
|
|
5
|
+
var declaration_1 = tslib_1.__importDefault(require("./declaration"));
|
|
4
6
|
var node_1 = tslib_1.__importDefault(require("./node"));
|
|
5
7
|
var QueryInParens = function (op, l, m, op2, r, i) {
|
|
6
8
|
this.op = op.trim();
|
|
@@ -9,6 +11,7 @@ var QueryInParens = function (op, l, m, op2, r, i) {
|
|
|
9
11
|
this.op2 = op2 ? op2.trim() : null;
|
|
10
12
|
this.rvalue = r;
|
|
11
13
|
this._index = i;
|
|
14
|
+
this.mvalues = [];
|
|
12
15
|
};
|
|
13
16
|
QueryInParens.prototype = Object.assign(new node_1.default(), {
|
|
14
17
|
type: 'QueryInParens',
|
|
@@ -21,7 +24,32 @@ QueryInParens.prototype = Object.assign(new node_1.default(), {
|
|
|
21
24
|
},
|
|
22
25
|
eval: function (context) {
|
|
23
26
|
this.lvalue = this.lvalue.eval(context);
|
|
24
|
-
|
|
27
|
+
var variableDeclaration;
|
|
28
|
+
var rule;
|
|
29
|
+
for (var i = 0; (rule = context.frames[i]); i++) {
|
|
30
|
+
if (rule.type === 'Ruleset') {
|
|
31
|
+
variableDeclaration = rule.rules.find(function (r) {
|
|
32
|
+
if ((r instanceof declaration_1.default) && r.variable) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
});
|
|
37
|
+
if (variableDeclaration) {
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!this.mvalueCopy) {
|
|
43
|
+
this.mvalueCopy = (0, copy_anything_1.copy)(this.mvalue);
|
|
44
|
+
}
|
|
45
|
+
if (variableDeclaration) {
|
|
46
|
+
this.mvalue = this.mvalueCopy;
|
|
47
|
+
this.mvalue = this.mvalue.eval(context);
|
|
48
|
+
this.mvalues.push(this.mvalue);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.mvalue = this.mvalue.eval(context);
|
|
52
|
+
}
|
|
25
53
|
if (this.rvalue) {
|
|
26
54
|
this.rvalue = this.rvalue.eval(context);
|
|
27
55
|
}
|
|
@@ -30,6 +58,9 @@ QueryInParens.prototype = Object.assign(new node_1.default(), {
|
|
|
30
58
|
genCSS: function (context, output) {
|
|
31
59
|
this.lvalue.genCSS(context, output);
|
|
32
60
|
output.add(' ' + this.op + ' ');
|
|
61
|
+
if (this.mvalues.length > 0) {
|
|
62
|
+
this.mvalue = this.mvalues.shift();
|
|
63
|
+
}
|
|
33
64
|
this.mvalue.genCSS(context, output);
|
|
34
65
|
if (this.rvalue) {
|
|
35
66
|
output.add(' ' + this.op2 + ' ');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-in-parens.js","sourceRoot":"","sources":["../../../src/less/tree/query-in-parens.js"],"names":[],"mappings":";;;AAAA,wDAA0B;AAE1B,IAAM,aAAa,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC/C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACpB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"query-in-parens.js","sourceRoot":"","sources":["../../../src/less/tree/query-in-parens.js"],"names":[],"mappings":"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","sourcesContent":["import { copy } from 'copy-anything';\nimport Declaration from './declaration';\nimport Node from './node';\n\nconst QueryInParens = function (op, l, m, op2, r, i) {\n this.op = op.trim();\n this.lvalue = l;\n this.mvalue = m;\n this.op2 = op2 ? op2.trim() : null;\n this.rvalue = r;\n this._index = i;\n this.mvalues = [];\n};\n\nQueryInParens.prototype = Object.assign(new Node(), {\n type: 'QueryInParens',\n\n accept(visitor) {\n this.lvalue = visitor.visit(this.lvalue);\n this.mvalue = visitor.visit(this.mvalue);\n if (this.rvalue) {\n this.rvalue = visitor.visit(this.rvalue);\n }\n },\n\n eval(context) {\n this.lvalue = this.lvalue.eval(context);\n \n let variableDeclaration;\n let rule;\n\n for (let i = 0; (rule = context.frames[i]); i++) {\n if (rule.type === 'Ruleset') {\n variableDeclaration = rule.rules.find(function (r) {\n if ((r instanceof Declaration) && r.variable) {\n return true;\n }\n\n return false;\n });\n \n if (variableDeclaration) {\n break;\n }\n }\n }\n\n if (!this.mvalueCopy) {\n this.mvalueCopy = copy(this.mvalue);\n }\n \n if (variableDeclaration) {\n this.mvalue = this.mvalueCopy;\n this.mvalue = this.mvalue.eval(context);\n this.mvalues.push(this.mvalue);\n } else {\n this.mvalue = this.mvalue.eval(context);\n }\n\n if (this.rvalue) {\n this.rvalue = this.rvalue.eval(context);\n }\n return this;\n },\n\n genCSS(context, output) {\n this.lvalue.genCSS(context, output);\n output.add(' ' + this.op + ' ');\n if (this.mvalues.length > 0) {\n this.mvalue = this.mvalues.shift();\n }\n this.mvalue.genCSS(context, output);\n if (this.rvalue) {\n output.add(' ' + this.op2 + ' ');\n this.rvalue.genCSS(context, output);\n }\n },\n});\n\nexport default QueryInParens;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "less",
|
|
3
|
-
"version": "4.2.
|
|
3
|
+
"version": "4.2.2",
|
|
4
4
|
"description": "Leaner CSS",
|
|
5
5
|
"homepage": "http://lesscss.org",
|
|
6
6
|
"author": {
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"source-map": "~0.6.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@less/test-data": "^4.2.
|
|
59
|
+
"@less/test-data": "^4.2.2",
|
|
60
60
|
"@less/test-import-module": "^4.0.0",
|
|
61
61
|
"@rollup/plugin-commonjs": "^17.0.0",
|
|
62
62
|
"@rollup/plugin-json": "^4.1.0",
|
|
@@ -82,10 +82,10 @@
|
|
|
82
82
|
"html-template-tag": "^3.2.0",
|
|
83
83
|
"jit-grunt": "^0.10.0",
|
|
84
84
|
"less-plugin-autoprefix": "^1.5.1",
|
|
85
|
-
"less-plugin-clean-css": "^1.
|
|
85
|
+
"less-plugin-clean-css": "^1.6.0",
|
|
86
86
|
"minimist": "^1.2.0",
|
|
87
87
|
"mocha": "^6.2.1",
|
|
88
|
-
"
|
|
88
|
+
"playwright": "^1.49.0",
|
|
89
89
|
"mocha-teamcity-reporter": "^3.0.0",
|
|
90
90
|
"nock": "^11.8.2",
|
|
91
91
|
"npm-run-all": "^4.1.5",
|
|
@@ -3,7 +3,7 @@ let config
|
|
|
3
3
|
const fs = require('fs-extra')
|
|
4
4
|
const path = require('path')
|
|
5
5
|
const globby = require('globby')
|
|
6
|
-
const { runner } = require('mocha-
|
|
6
|
+
const { runner } = require('../../mocha-playwright/runner')
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
if (process.argv[2]) {
|
|
@@ -57,7 +57,7 @@ Object.entries(config).forEach(entry => {
|
|
|
57
57
|
return runner({
|
|
58
58
|
file,
|
|
59
59
|
timeout: 3500,
|
|
60
|
-
args: ['disable-web-security']
|
|
60
|
+
args: ['disable-web-security', 'no-sandbox', 'disable-setuid-sandbox'],
|
|
61
61
|
})
|
|
62
62
|
})
|
|
63
63
|
})
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const util = require('util');
|
|
5
|
+
const { chromium } = require('playwright');
|
|
6
|
+
const TIMEOUT_MILLISECONDS = 60000;
|
|
7
|
+
|
|
8
|
+
function initMocha(reporter) {
|
|
9
|
+
|
|
10
|
+
console.log = (console => {
|
|
11
|
+
const log = console.log.bind(console);
|
|
12
|
+
return (...args) => args.length ? log(...args) : log('');
|
|
13
|
+
})(console);
|
|
14
|
+
|
|
15
|
+
function shimMochaInstance(m) {
|
|
16
|
+
|
|
17
|
+
const originalReporter = m.reporter.bind(m);
|
|
18
|
+
let reporterIsChanged = false;
|
|
19
|
+
|
|
20
|
+
m.reporter = (...args) => {
|
|
21
|
+
reporterIsChanged = true;
|
|
22
|
+
originalReporter(...args);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const run = m.run.bind(m);
|
|
26
|
+
|
|
27
|
+
m.run = () => {
|
|
28
|
+
const all = [], pending = [], failures = [], passes = [];
|
|
29
|
+
|
|
30
|
+
function error(err) {
|
|
31
|
+
if (!err) return {};
|
|
32
|
+
|
|
33
|
+
let res = {};
|
|
34
|
+
Object.getOwnPropertyNames(err).forEach(key => res[key] = err[key]);
|
|
35
|
+
return res;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function clean(test) {
|
|
39
|
+
return {
|
|
40
|
+
title: test.title,
|
|
41
|
+
fullTitle: test.fullTitle(),
|
|
42
|
+
duration: test.duration,
|
|
43
|
+
err: error(test.err)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function result(stats) {
|
|
48
|
+
return {
|
|
49
|
+
result: {
|
|
50
|
+
stats: {
|
|
51
|
+
tests: all.length,
|
|
52
|
+
passes: passes.length,
|
|
53
|
+
pending: pending.length,
|
|
54
|
+
failures: failures.length,
|
|
55
|
+
start: stats.start.toISOString(),
|
|
56
|
+
end: stats.end.toISOString(),
|
|
57
|
+
duration: stats.duration
|
|
58
|
+
},
|
|
59
|
+
tests: all.map(clean),
|
|
60
|
+
pending: pending.map(clean),
|
|
61
|
+
failures: failures.map(clean),
|
|
62
|
+
passes: passes.map(clean)
|
|
63
|
+
},
|
|
64
|
+
coverage: window.__coverage__
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function setResult() {
|
|
69
|
+
!window.__mochaResult__ && (window.__mochaResult__ = result(this.stats));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
!reporterIsChanged && m.setup({
|
|
73
|
+
reporter: Mocha.reporters[reporter] || Mocha.reporters.spec
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const runner = run(() => setTimeout(() => setResult.call(runner), 0))
|
|
77
|
+
.on('pass', test => { passes.push(test); all.push(test); })
|
|
78
|
+
.on('fail', test => { failures.push(test); all.push(test); })
|
|
79
|
+
.on('pending', test => { pending.push(test); all.push(test); })
|
|
80
|
+
.on('end', setResult);
|
|
81
|
+
|
|
82
|
+
return runner;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function shimMochaProcess(M) {
|
|
87
|
+
// Mocha needs a process.stdout.write in order to change the cursor position.
|
|
88
|
+
!M.process && (M.process = {});
|
|
89
|
+
!M.process.stdout && (M.process.stdout = {});
|
|
90
|
+
|
|
91
|
+
M.process.stdout.write = data => console.log('stdout:', data);
|
|
92
|
+
M.reporters.Base.useColors = true;
|
|
93
|
+
M.reporters.none = function None(runner) {
|
|
94
|
+
M.reporters.Base.call(this, runner);
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
Object.defineProperty(window, 'mocha', {
|
|
99
|
+
get: function() { return undefined },
|
|
100
|
+
set: function(m) {
|
|
101
|
+
shimMochaInstance(m);
|
|
102
|
+
delete window.mocha;
|
|
103
|
+
window.mocha = m
|
|
104
|
+
},
|
|
105
|
+
configurable: true
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
Object.defineProperty(window, 'Mocha', {
|
|
109
|
+
get: function() { return undefined },
|
|
110
|
+
set: function(m) {
|
|
111
|
+
shimMochaProcess(m);
|
|
112
|
+
delete window.Mocha;
|
|
113
|
+
window.Mocha = m;
|
|
114
|
+
},
|
|
115
|
+
configurable: true
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function configureViewport(width, height, page) {
|
|
120
|
+
if (!width && !height) return page;
|
|
121
|
+
|
|
122
|
+
let viewport = page.viewport();
|
|
123
|
+
width && (viewport.width = width);
|
|
124
|
+
height && (viewport.height = height);
|
|
125
|
+
|
|
126
|
+
return page.setViewport(viewport).then(() => page);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function handleConsole(msg) {
|
|
130
|
+
const args = msg.args() || [];
|
|
131
|
+
|
|
132
|
+
Promise.all(args.map(a => a.jsonValue().catch(error => {
|
|
133
|
+
console.warn('Failed to retrieve JSON value from argument:', error);
|
|
134
|
+
return '';
|
|
135
|
+
})))
|
|
136
|
+
.then(args => {
|
|
137
|
+
// process stdout stub
|
|
138
|
+
let isStdout = args[0] === 'stdout:';
|
|
139
|
+
isStdout && (args = args.slice(1));
|
|
140
|
+
|
|
141
|
+
let msg = util.format(...args);
|
|
142
|
+
!isStdout && msg && (msg += '\n');
|
|
143
|
+
process.stdout.write(msg);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function prepareUrl(filePath) {
|
|
148
|
+
if (/^[a-zA-Z]+:\/\//.test(filePath)) {
|
|
149
|
+
// path is URL
|
|
150
|
+
return filePath;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// local path
|
|
154
|
+
let resolvedPath = path.resolve(filePath);
|
|
155
|
+
return `file://${resolvedPath}`;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
exports.runner = function ({ file, reporter, timeout, width, height, args, executablePath, visible, polling }) {
|
|
159
|
+
return new Promise(resolve => {
|
|
160
|
+
|
|
161
|
+
// validate options
|
|
162
|
+
if (!file) {
|
|
163
|
+
throw new Error('Test page path is required.');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
args = [].concat(args || []).map(arg => '--' + arg);
|
|
167
|
+
!timeout && (timeout = TIMEOUT_MILLISECONDS);
|
|
168
|
+
/^\d+$/.test(polling) && (polling = parseInt(polling));
|
|
169
|
+
|
|
170
|
+
const url = prepareUrl(file);
|
|
171
|
+
|
|
172
|
+
const options = {
|
|
173
|
+
ignoreHTTPSErrors: true,
|
|
174
|
+
headless: !visible,
|
|
175
|
+
executablePath,
|
|
176
|
+
args
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
const result = chromium.launch(options)
|
|
180
|
+
.then(browser => browser.newContext()
|
|
181
|
+
.then(context => context.newPage()
|
|
182
|
+
.then(page => {
|
|
183
|
+
if (width || height) {
|
|
184
|
+
return page.setViewportSize({ width: width || 800, height: height || 600 }).then(() => page);
|
|
185
|
+
}
|
|
186
|
+
return page;
|
|
187
|
+
})
|
|
188
|
+
.then(page => {
|
|
189
|
+
page.on('console', handleConsole);
|
|
190
|
+
page.on('dialog', dialog => dialog.dismiss());
|
|
191
|
+
page.on('pageerror', err => console.error(err));
|
|
192
|
+
|
|
193
|
+
return page.addInitScript(initMocha, reporter)
|
|
194
|
+
.then(() => page.goto(url))
|
|
195
|
+
.then(() => page.waitForFunction(() => window.__mochaResult__, { timeout, polling }))
|
|
196
|
+
.then(() => page.evaluate(() => window.__mochaResult__))
|
|
197
|
+
.then(result => {
|
|
198
|
+
if (!result) {
|
|
199
|
+
throw new Error('Mocha results not found after waiting. The tests may not have run correctly.');
|
|
200
|
+
}
|
|
201
|
+
// Close browser before resolving result
|
|
202
|
+
return browser.close().then(() => result);
|
|
203
|
+
});
|
|
204
|
+
})
|
|
205
|
+
)
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
resolve(result);
|
|
209
|
+
});
|
|
210
|
+
};
|