@appium/base-driver 8.5.7 → 8.7.0
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/build/lib/basedriver/capabilities.js +2 -2
- package/build/lib/basedriver/commands/execute.d.ts +11 -0
- package/build/lib/basedriver/commands/execute.d.ts.map +1 -0
- package/build/lib/basedriver/commands/execute.js +62 -0
- package/build/lib/basedriver/commands/index.d.ts +1 -1
- package/build/lib/basedriver/commands/index.d.ts.map +1 -1
- package/build/lib/basedriver/commands/index.js +5 -2
- package/build/lib/basedriver/commands/log.js +2 -4
- package/build/lib/basedriver/core.d.ts +11 -0
- package/build/lib/basedriver/core.d.ts.map +1 -1
- package/build/lib/basedriver/core.js +6 -1
- package/build/lib/basedriver/helpers.js +2 -2
- package/build/lib/express/server.d.ts +70 -7
- package/build/lib/express/server.d.ts.map +1 -1
- package/build/lib/express/server.js +19 -16
- package/build/lib/express/websocket.d.ts +12 -30
- package/build/lib/express/websocket.d.ts.map +1 -1
- package/build/lib/express/websocket.js +6 -4
- package/build/lib/index.d.ts +12 -180
- package/build/lib/index.d.ts.map +1 -1
- package/build/lib/index.js +107 -80
- package/build/lib/jsonwp-proxy/protocol-converter.js +2 -4
- package/build/lib/jsonwp-proxy/proxy.js +3 -7
- package/build/lib/protocol/index.d.ts +3 -1
- package/build/lib/protocol/index.js +13 -1
- package/build/lib/protocol/protocol.d.ts +8 -4
- package/build/lib/protocol/protocol.d.ts.map +1 -1
- package/build/lib/protocol/protocol.js +7 -7
- package/build/lib/protocol/routes.js +2 -6
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/basedriver/commands/execute.js +65 -0
- package/lib/basedriver/commands/index.js +3 -1
- package/lib/basedriver/core.js +15 -0
- package/lib/express/server.js +126 -36
- package/lib/express/websocket.js +13 -11
- package/lib/index.js +19 -61
- package/lib/protocol/index.js +4 -0
- package/lib/protocol/protocol.js +10 -3
- package/package.json +17 -15
- package/build/test/basedriver/README.md +0 -5
- package/build/test/basedriver/driver-e2e-tests.js +0 -413
- package/build/test/basedriver/driver-tests.js +0 -572
- package/build/test/basedriver/index.js +0 -26
- package/build/test/e2e/basedriver/driver.e2e.spec.js +0 -15
- package/build/test/e2e/basedriver/helpers.e2e.spec.js +0 -192
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +0 -87
- package/build/test/e2e/express/server.e2e.spec.js +0 -159
- package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +0 -59
- package/build/test/e2e/protocol/fake-driver.js +0 -163
- package/build/test/e2e/protocol/helpers.js +0 -25
- package/build/test/e2e/protocol/protocol.e2e.spec.js +0 -1186
- package/build/test/helpers.js +0 -55
- package/build/test/unit/basedriver/capabilities.spec.js +0 -672
- package/build/test/unit/basedriver/capability.spec.js +0 -353
- package/build/test/unit/basedriver/commands/event.spec.js +0 -110
- package/build/test/unit/basedriver/commands/log.spec.js +0 -92
- package/build/test/unit/basedriver/device-settings.spec.js +0 -97
- package/build/test/unit/basedriver/driver.spec.js +0 -15
- package/build/test/unit/basedriver/helpers.spec.js +0 -151
- package/build/test/unit/basedriver/timeout.spec.js +0 -135
- package/build/test/unit/express/server.spec.js +0 -155
- package/build/test/unit/express/static.spec.js +0 -26
- package/build/test/unit/jsonwp-proxy/mock-request.js +0 -91
- package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +0 -171
- package/build/test/unit/jsonwp-proxy/proxy.spec.js +0 -292
- package/build/test/unit/jsonwp-proxy/url.spec.js +0 -165
- package/build/test/unit/jsonwp-status/status.spec.js +0 -34
- package/build/test/unit/protocol/errors.spec.js +0 -390
- package/build/test/unit/protocol/routes.spec.js +0 -80
- package/build/test/unit/protocol/validator.spec.js +0 -149
- package/test/basedriver/README.md +0 -5
- package/test/basedriver/driver-e2e-tests.js +0 -386
- package/test/basedriver/driver-tests.js +0 -624
- package/test/basedriver/index.js +0 -6
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
var _static = require("../../../lib/express/static");
|
|
6
|
-
|
|
7
|
-
var _sinon = require("sinon");
|
|
8
|
-
|
|
9
|
-
describe('welcome', function () {
|
|
10
|
-
let sandbox;
|
|
11
|
-
beforeEach(function () {
|
|
12
|
-
sandbox = (0, _sinon.createSandbox)();
|
|
13
|
-
});
|
|
14
|
-
afterEach(function () {
|
|
15
|
-
sandbox.restore();
|
|
16
|
-
});
|
|
17
|
-
it('should fill the template', async function () {
|
|
18
|
-
let res = {
|
|
19
|
-
send: sandbox.stub()
|
|
20
|
-
};
|
|
21
|
-
await (0, _static.welcome)({}, res);
|
|
22
|
-
res.send.calledOnce.should.be.true;
|
|
23
|
-
res.send.args[0][0].should.include("Let's browse!");
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsInNhbmRib3giLCJiZWZvcmVFYWNoIiwiY3JlYXRlU2FuZGJveCIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJpdCIsInJlcyIsInNlbmQiLCJzdHViIiwid2VsY29tZSIsImNhbGxlZE9uY2UiLCJzaG91bGQiLCJiZSIsInRydWUiLCJhcmdzIiwiaW5jbHVkZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9leHByZXNzL3N0YXRpYy5zcGVjLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQge3dlbGNvbWV9IGZyb20gJy4uLy4uLy4uL2xpYi9leHByZXNzL3N0YXRpYyc7XG5pbXBvcnQge2NyZWF0ZVNhbmRib3h9IGZyb20gJ3Npbm9uJztcblxuZGVzY3JpYmUoJ3dlbGNvbWUnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBzYW5kYm94O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBjcmVhdGVTYW5kYm94KCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmlsbCB0aGUgdGVtcGxhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHJlcyA9IHtcbiAgICAgIHNlbmQ6IHNhbmRib3guc3R1YigpLFxuICAgIH07XG4gICAgYXdhaXQgd2VsY29tZSh7fSwgcmVzKTtcblxuICAgIHJlcy5zZW5kLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWU7XG4gICAgcmVzLnNlbmQuYXJnc1swXVswXS5zaG91bGQuaW5jbHVkZShcIkxldCdzIGJyb3dzZSFcIik7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFQTs7QUFDQTs7QUFFQUEsUUFBUSxDQUFDLFNBQUQsRUFBWSxZQUFZO0VBQzlCLElBQUlDLE9BQUo7RUFFQUMsVUFBVSxDQUFDLFlBQVk7SUFDckJELE9BQU8sR0FBRyxJQUFBRSxvQkFBQSxHQUFWO0VBQ0QsQ0FGUyxDQUFWO0VBSUFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3BCSCxPQUFPLENBQUNJLE9BQVI7RUFDRCxDQUZRLENBQVQ7RUFJQUMsRUFBRSxDQUFDLDBCQUFELEVBQTZCLGtCQUFrQjtJQUMvQyxJQUFJQyxHQUFHLEdBQUc7TUFDUkMsSUFBSSxFQUFFUCxPQUFPLENBQUNRLElBQVI7SUFERSxDQUFWO0lBR0EsTUFBTSxJQUFBQyxlQUFBLEVBQVEsRUFBUixFQUFZSCxHQUFaLENBQU47SUFFQUEsR0FBRyxDQUFDQyxJQUFKLENBQVNHLFVBQVQsQ0FBb0JDLE1BQXBCLENBQTJCQyxFQUEzQixDQUE4QkMsSUFBOUI7SUFDQVAsR0FBRyxDQUFDQyxJQUFKLENBQVNPLElBQVQsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLEVBQW9CSCxNQUFwQixDQUEyQkksT0FBM0IsQ0FBbUMsZUFBbkM7RUFDRCxDQVJDLENBQUY7QUFTRCxDQXBCTyxDQUFSIn0=
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
require("source-map-support/register");
|
|
9
|
-
|
|
10
|
-
function resFixture(url, method) {
|
|
11
|
-
if (/\/status$/.test(url)) {
|
|
12
|
-
return [200, {
|
|
13
|
-
status: 0,
|
|
14
|
-
value: {
|
|
15
|
-
foo: 'bar'
|
|
16
|
-
}
|
|
17
|
-
}];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
if (/\/element\/bad\/text$/.test(url)) {
|
|
21
|
-
return [500, {
|
|
22
|
-
status: 11,
|
|
23
|
-
value: {
|
|
24
|
-
message: 'Invisible element'
|
|
25
|
-
}
|
|
26
|
-
}];
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (/\/element\/200\/text$/.test(url)) {
|
|
30
|
-
return [200, {
|
|
31
|
-
status: 11,
|
|
32
|
-
value: {
|
|
33
|
-
message: 'Invisible element'
|
|
34
|
-
}
|
|
35
|
-
}];
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if (/\/element\/200\/value$/.test(url)) {
|
|
39
|
-
return [200, {
|
|
40
|
-
status: 0,
|
|
41
|
-
sessionId: 'innersessionid',
|
|
42
|
-
value: 'foobar'
|
|
43
|
-
}];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (/\/session$/.test(url) && method === 'POST') {
|
|
47
|
-
return [200, {
|
|
48
|
-
status: 0,
|
|
49
|
-
sessionId: '123',
|
|
50
|
-
value: {
|
|
51
|
-
browserName: 'boo'
|
|
52
|
-
}
|
|
53
|
-
}];
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (/\/nochrome$/.test(url)) {
|
|
57
|
-
return [100, {
|
|
58
|
-
status: 0,
|
|
59
|
-
value: {
|
|
60
|
-
message: 'chrome not reachable'
|
|
61
|
-
}
|
|
62
|
-
}];
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
throw new Error("Can't handle url " + url);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
async function request(opts) {
|
|
69
|
-
const {
|
|
70
|
-
url,
|
|
71
|
-
method,
|
|
72
|
-
json
|
|
73
|
-
} = opts;
|
|
74
|
-
|
|
75
|
-
if (/badurl$/.test(url)) {
|
|
76
|
-
throw new Error('noworky');
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const [status, data] = resFixture(url, method, json);
|
|
80
|
-
return {
|
|
81
|
-
status,
|
|
82
|
-
headers: {
|
|
83
|
-
'content-type': 'application/json; charset=utf-8'
|
|
84
|
-
},
|
|
85
|
-
data
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
var _default = request;
|
|
90
|
-
exports.default = _default;
|
|
91
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNGaXh0dXJlIiwidXJsIiwibWV0aG9kIiwidGVzdCIsInN0YXR1cyIsInZhbHVlIiwiZm9vIiwibWVzc2FnZSIsInNlc3Npb25JZCIsImJyb3dzZXJOYW1lIiwiRXJyb3IiLCJyZXF1ZXN0Iiwib3B0cyIsImpzb24iLCJkYXRhIiwiaGVhZGVycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9qc29ud3AtcHJveHkvbW9jay1yZXF1ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHJlc0ZpeHR1cmUodXJsLCBtZXRob2QpIHtcbiAgaWYgKC9cXC9zdGF0dXMkLy50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gWzIwMCwge3N0YXR1czogMCwgdmFsdWU6IHtmb286ICdiYXInfX1dO1xuICB9XG4gIGlmICgvXFwvZWxlbWVudFxcL2JhZFxcL3RleHQkLy50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gWzUwMCwge3N0YXR1czogMTEsIHZhbHVlOiB7bWVzc2FnZTogJ0ludmlzaWJsZSBlbGVtZW50J319XTtcbiAgfVxuICBpZiAoL1xcL2VsZW1lbnRcXC8yMDBcXC90ZXh0JC8udGVzdCh1cmwpKSB7XG4gICAgcmV0dXJuIFsyMDAsIHtzdGF0dXM6IDExLCB2YWx1ZToge21lc3NhZ2U6ICdJbnZpc2libGUgZWxlbWVudCd9fV07XG4gIH1cbiAgaWYgKC9cXC9lbGVtZW50XFwvMjAwXFwvdmFsdWUkLy50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gWzIwMCwge3N0YXR1czogMCwgc2Vzc2lvbklkOiAnaW5uZXJzZXNzaW9uaWQnLCB2YWx1ZTogJ2Zvb2Jhcid9XTtcbiAgfVxuICBpZiAoL1xcL3Nlc3Npb24kLy50ZXN0KHVybCkgJiYgbWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICByZXR1cm4gWzIwMCwge3N0YXR1czogMCwgc2Vzc2lvbklkOiAnMTIzJywgdmFsdWU6IHticm93c2VyTmFtZTogJ2Jvbyd9fV07XG4gIH1cbiAgaWYgKC9cXC9ub2Nocm9tZSQvLnRlc3QodXJsKSkge1xuICAgIHJldHVybiBbMTAwLCB7c3RhdHVzOiAwLCB2YWx1ZToge21lc3NhZ2U6ICdjaHJvbWUgbm90IHJlYWNoYWJsZSd9fV07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgaGFuZGxlIHVybCBcIiArIHVybCk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KG9wdHMpIHtcbiAgY29uc3Qge3VybCwgbWV0aG9kLCBqc29ufSA9IG9wdHM7XG4gIGlmICgvYmFkdXJsJC8udGVzdCh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3dvcmt5Jyk7XG4gIH1cblxuICBjb25zdCBbc3RhdHVzLCBkYXRhXSA9IHJlc0ZpeHR1cmUodXJsLCBtZXRob2QsIGpzb24pO1xuICByZXR1cm4ge1xuICAgIHN0YXR1cyxcbiAgICBoZWFkZXJzOiB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04J30sXG4gICAgZGF0YSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVxdWVzdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBU0EsVUFBVCxDQUFvQkMsR0FBcEIsRUFBeUJDLE1BQXpCLEVBQWlDO0VBQy9CLElBQUksWUFBWUMsSUFBWixDQUFpQkYsR0FBakIsQ0FBSixFQUEyQjtJQUN6QixPQUFPLENBQUMsR0FBRCxFQUFNO01BQUNHLE1BQU0sRUFBRSxDQUFUO01BQVlDLEtBQUssRUFBRTtRQUFDQyxHQUFHLEVBQUU7TUFBTjtJQUFuQixDQUFOLENBQVA7RUFDRDs7RUFDRCxJQUFJLHdCQUF3QkgsSUFBeEIsQ0FBNkJGLEdBQTdCLENBQUosRUFBdUM7SUFDckMsT0FBTyxDQUFDLEdBQUQsRUFBTTtNQUFDRyxNQUFNLEVBQUUsRUFBVDtNQUFhQyxLQUFLLEVBQUU7UUFBQ0UsT0FBTyxFQUFFO01BQVY7SUFBcEIsQ0FBTixDQUFQO0VBQ0Q7O0VBQ0QsSUFBSSx3QkFBd0JKLElBQXhCLENBQTZCRixHQUE3QixDQUFKLEVBQXVDO0lBQ3JDLE9BQU8sQ0FBQyxHQUFELEVBQU07TUFBQ0csTUFBTSxFQUFFLEVBQVQ7TUFBYUMsS0FBSyxFQUFFO1FBQUNFLE9BQU8sRUFBRTtNQUFWO0lBQXBCLENBQU4sQ0FBUDtFQUNEOztFQUNELElBQUkseUJBQXlCSixJQUF6QixDQUE4QkYsR0FBOUIsQ0FBSixFQUF3QztJQUN0QyxPQUFPLENBQUMsR0FBRCxFQUFNO01BQUNHLE1BQU0sRUFBRSxDQUFUO01BQVlJLFNBQVMsRUFBRSxnQkFBdkI7TUFBeUNILEtBQUssRUFBRTtJQUFoRCxDQUFOLENBQVA7RUFDRDs7RUFDRCxJQUFJLGFBQWFGLElBQWIsQ0FBa0JGLEdBQWxCLEtBQTBCQyxNQUFNLEtBQUssTUFBekMsRUFBaUQ7SUFDL0MsT0FBTyxDQUFDLEdBQUQsRUFBTTtNQUFDRSxNQUFNLEVBQUUsQ0FBVDtNQUFZSSxTQUFTLEVBQUUsS0FBdkI7TUFBOEJILEtBQUssRUFBRTtRQUFDSSxXQUFXLEVBQUU7TUFBZDtJQUFyQyxDQUFOLENBQVA7RUFDRDs7RUFDRCxJQUFJLGNBQWNOLElBQWQsQ0FBbUJGLEdBQW5CLENBQUosRUFBNkI7SUFDM0IsT0FBTyxDQUFDLEdBQUQsRUFBTTtNQUFDRyxNQUFNLEVBQUUsQ0FBVDtNQUFZQyxLQUFLLEVBQUU7UUFBQ0UsT0FBTyxFQUFFO01BQVY7SUFBbkIsQ0FBTixDQUFQO0VBQ0Q7O0VBQ0QsTUFBTSxJQUFJRyxLQUFKLENBQVUsc0JBQXNCVCxHQUFoQyxDQUFOO0FBQ0Q7O0FBR0QsZUFBZVUsT0FBZixDQUF1QkMsSUFBdkIsRUFBNkI7RUFDM0IsTUFBTTtJQUFDWCxHQUFEO0lBQU1DLE1BQU47SUFBY1c7RUFBZCxJQUFzQkQsSUFBNUI7O0VBQ0EsSUFBSSxVQUFVVCxJQUFWLENBQWVGLEdBQWYsQ0FBSixFQUF5QjtJQUN2QixNQUFNLElBQUlTLEtBQUosQ0FBVSxTQUFWLENBQU47RUFDRDs7RUFFRCxNQUFNLENBQUNOLE1BQUQsRUFBU1UsSUFBVCxJQUFpQmQsVUFBVSxDQUFDQyxHQUFELEVBQU1DLE1BQU4sRUFBY1csSUFBZCxDQUFqQztFQUNBLE9BQU87SUFDTFQsTUFESztJQUVMVyxPQUFPLEVBQUU7TUFBQyxnQkFBZ0I7SUFBakIsQ0FGSjtJQUdMRDtFQUhLLENBQVA7QUFLRDs7ZUFFY0gsTyJ9
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("source-map-support/register");
|
|
6
|
-
|
|
7
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
|
-
|
|
9
|
-
var _constants = require("../../../lib/constants");
|
|
10
|
-
|
|
11
|
-
var _protocolConverter = _interopRequireWildcard(require("../../../lib/jsonwp-proxy/protocol-converter"));
|
|
12
|
-
|
|
13
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
-
|
|
15
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
-
|
|
17
|
-
const {
|
|
18
|
-
MJSONWP,
|
|
19
|
-
W3C
|
|
20
|
-
} = _constants.PROTOCOLS;
|
|
21
|
-
describe('Protocol Converter', function () {
|
|
22
|
-
describe('getTimeoutRequestObjects', function () {
|
|
23
|
-
let converter;
|
|
24
|
-
before(function () {
|
|
25
|
-
converter = new _protocolConverter.default(_lodash.default.noop);
|
|
26
|
-
});
|
|
27
|
-
it('should take W3C inputs and produce MJSONWP compatible objects', function () {
|
|
28
|
-
converter.downstreamProtocol = MJSONWP;
|
|
29
|
-
let timeoutObjects = converter.getTimeoutRequestObjects({
|
|
30
|
-
script: 100
|
|
31
|
-
});
|
|
32
|
-
timeoutObjects.length.should.equal(1);
|
|
33
|
-
timeoutObjects[0].should.eql({
|
|
34
|
-
type: 'script',
|
|
35
|
-
ms: 100
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
it('should ignore invalid entries while converting from W3C', function () {
|
|
39
|
-
converter.downstreamProtocol = MJSONWP;
|
|
40
|
-
let timeoutObjects = converter.getTimeoutRequestObjects({
|
|
41
|
-
script: 100,
|
|
42
|
-
sessionId: '5432a4f3-cd89-4781-8905-ea9d3150840c',
|
|
43
|
-
bar: -1,
|
|
44
|
-
baz: undefined
|
|
45
|
-
});
|
|
46
|
-
timeoutObjects.length.should.equal(1);
|
|
47
|
-
timeoutObjects[0].should.eql({
|
|
48
|
-
type: 'script',
|
|
49
|
-
ms: 100
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
it('should take multiple W3C timeouts and produce multiple MJSONWP compatible objects', function () {
|
|
53
|
-
converter.downstreamProtocol = MJSONWP;
|
|
54
|
-
let [scriptTimeout, pageLoadTimeout, implicitTimeout] = converter.getTimeoutRequestObjects({
|
|
55
|
-
script: 100,
|
|
56
|
-
pageLoad: 200,
|
|
57
|
-
implicit: 300
|
|
58
|
-
});
|
|
59
|
-
scriptTimeout.should.eql({
|
|
60
|
-
type: 'script',
|
|
61
|
-
ms: 100
|
|
62
|
-
});
|
|
63
|
-
pageLoadTimeout.should.eql({
|
|
64
|
-
type: 'page load',
|
|
65
|
-
ms: 200
|
|
66
|
-
});
|
|
67
|
-
implicitTimeout.should.eql({
|
|
68
|
-
type: 'implicit',
|
|
69
|
-
ms: 300
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
it('should take MJSONWP input and produce W3C compatible object', function () {
|
|
73
|
-
converter.downstreamProtocol = W3C;
|
|
74
|
-
let timeoutObjects = converter.getTimeoutRequestObjects({
|
|
75
|
-
type: 'implicit',
|
|
76
|
-
ms: 300
|
|
77
|
-
});
|
|
78
|
-
timeoutObjects.length.should.equal(1);
|
|
79
|
-
timeoutObjects[0].should.eql({
|
|
80
|
-
implicit: 300
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
it('should not change the input if protocol name is unknown', function () {
|
|
84
|
-
converter.downstreamProtocol = null;
|
|
85
|
-
let timeoutObjects = converter.getTimeoutRequestObjects({
|
|
86
|
-
type: 'implicit',
|
|
87
|
-
ms: 300
|
|
88
|
-
});
|
|
89
|
-
timeoutObjects.length.should.equal(1);
|
|
90
|
-
timeoutObjects[0].should.eql({
|
|
91
|
-
type: 'implicit',
|
|
92
|
-
ms: 300
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
it('should not change the input if protocol name is unchanged', function () {
|
|
96
|
-
converter.downstreamProtocol = MJSONWP;
|
|
97
|
-
let timeoutObjects = converter.getTimeoutRequestObjects({
|
|
98
|
-
type: 'implicit',
|
|
99
|
-
ms: 300
|
|
100
|
-
});
|
|
101
|
-
timeoutObjects.length.should.equal(1);
|
|
102
|
-
timeoutObjects[0].should.eql({
|
|
103
|
-
type: 'implicit',
|
|
104
|
-
ms: 300
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
describe('setValue', function () {
|
|
109
|
-
let converter;
|
|
110
|
-
let responseBody;
|
|
111
|
-
before(function () {
|
|
112
|
-
responseBody = null;
|
|
113
|
-
converter = new _protocolConverter.default((url, method, body) => {
|
|
114
|
-
responseBody = body;
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
beforeEach(function () {
|
|
118
|
-
responseBody = {};
|
|
119
|
-
});
|
|
120
|
-
it('should calculate value if not present', async function () {
|
|
121
|
-
await converter.proxySetValue('', '', {
|
|
122
|
-
text: 'bla'
|
|
123
|
-
});
|
|
124
|
-
responseBody.should.eql({
|
|
125
|
-
text: 'bla',
|
|
126
|
-
value: ['b', 'l', 'a']
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
it('should calculate text if not present', async function () {
|
|
130
|
-
await converter.proxySetValue('', '', {
|
|
131
|
-
value: ['b', 'l', 'a']
|
|
132
|
-
});
|
|
133
|
-
responseBody.should.eql({
|
|
134
|
-
text: 'bla',
|
|
135
|
-
value: ['b', 'l', 'a']
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
it('should keep the response body unchanged if both value and text are present', async function () {
|
|
139
|
-
await converter.proxySetValue('', '', {
|
|
140
|
-
text: 'bla',
|
|
141
|
-
value: ['b', 'l', 'a']
|
|
142
|
-
});
|
|
143
|
-
responseBody.should.eql({
|
|
144
|
-
text: 'bla',
|
|
145
|
-
value: ['b', 'l', 'a']
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
describe('getProperty', function () {
|
|
150
|
-
let jsonwpConverter, w3cConverter;
|
|
151
|
-
before(function () {
|
|
152
|
-
for (let command of _protocolConverter.COMMAND_URLS_CONFLICTS) {
|
|
153
|
-
if (command.commandNames.includes('getProperty')) {
|
|
154
|
-
jsonwpConverter = command.jsonwpConverter;
|
|
155
|
-
w3cConverter = command.w3cConverter;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
it('should convert "property/value" to "attribute/value"', function () {
|
|
160
|
-
jsonwpConverter('/session/123/element/456/property/value').should.equal('/session/123/element/456/attribute/value');
|
|
161
|
-
});
|
|
162
|
-
it('should convert "property/:somePropName" to "attribute/:somePropName"', function () {
|
|
163
|
-
jsonwpConverter('/session/123/element/456/property/somePropName').should.equal('/session/123/element/456/attribute/somePropName');
|
|
164
|
-
});
|
|
165
|
-
it('should not convert from JSONWP to W3C', function () {
|
|
166
|
-
w3cConverter('/session/123/element/456/attribute/someAttr').should.equal('/session/123/element/456/attribute/someAttr');
|
|
167
|
-
w3cConverter('/session/123/element/456/property/someProp').should.equal('/session/123/element/456/property/someProp');
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNSlNPTldQIiwiVzNDIiwiUFJPVE9DT0xTIiwiZGVzY3JpYmUiLCJjb252ZXJ0ZXIiLCJiZWZvcmUiLCJQcm90b2NvbENvbnZlcnRlciIsIl8iLCJub29wIiwiaXQiLCJkb3duc3RyZWFtUHJvdG9jb2wiLCJ0aW1lb3V0T2JqZWN0cyIsImdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyIsInNjcmlwdCIsImxlbmd0aCIsInNob3VsZCIsImVxdWFsIiwiZXFsIiwidHlwZSIsIm1zIiwic2Vzc2lvbklkIiwiYmFyIiwiYmF6IiwidW5kZWZpbmVkIiwic2NyaXB0VGltZW91dCIsInBhZ2VMb2FkVGltZW91dCIsImltcGxpY2l0VGltZW91dCIsInBhZ2VMb2FkIiwiaW1wbGljaXQiLCJyZXNwb25zZUJvZHkiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiYmVmb3JlRWFjaCIsInByb3h5U2V0VmFsdWUiLCJ0ZXh0IiwidmFsdWUiLCJqc29ud3BDb252ZXJ0ZXIiLCJ3M2NDb252ZXJ0ZXIiLCJjb21tYW5kIiwiQ09NTUFORF9VUkxTX0NPTkZMSUNUUyIsImNvbW1hbmROYW1lcyIsImluY2x1ZGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2pzb253cC1wcm94eS9wcm90b2NvbC1jb252ZXJ0ZXIuc3BlYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtQUk9UT0NPTFN9IGZyb20gJy4uLy4uLy4uL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IFByb3RvY29sQ29udmVydGVyLCB7XG4gIENPTU1BTkRfVVJMU19DT05GTElDVFMsXG59IGZyb20gJy4uLy4uLy4uL2xpYi9qc29ud3AtcHJveHkvcHJvdG9jb2wtY29udmVydGVyJztcblxuY29uc3Qge01KU09OV1AsIFczQ30gPSBQUk9UT0NPTFM7XG5cbmRlc2NyaWJlKCdQcm90b2NvbCBDb252ZXJ0ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdnZXRUaW1lb3V0UmVxdWVzdE9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGNvbnZlcnRlcjtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgY29udmVydGVyID0gbmV3IFByb3RvY29sQ29udmVydGVyKF8ubm9vcCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0YWtlIFczQyBpbnB1dHMgYW5kIHByb2R1Y2UgTUpTT05XUCBjb21wYXRpYmxlIG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb252ZXJ0ZXIuZG93bnN0cmVhbVByb3RvY29sID0gTUpTT05XUDtcbiAgICAgIGxldCB0aW1lb3V0T2JqZWN0cyA9IGNvbnZlcnRlci5nZXRUaW1lb3V0UmVxdWVzdE9iamVjdHMoe3NjcmlwdDogMTAwfSk7XG4gICAgICB0aW1lb3V0T2JqZWN0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdGltZW91dE9iamVjdHNbMF0uc2hvdWxkLmVxbCh7dHlwZTogJ3NjcmlwdCcsIG1zOiAxMDB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBpbnZhbGlkIGVudHJpZXMgd2hpbGUgY29udmVydGluZyBmcm9tIFczQycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnZlcnRlci5kb3duc3RyZWFtUHJvdG9jb2wgPSBNSlNPTldQO1xuICAgICAgbGV0IHRpbWVvdXRPYmplY3RzID0gY29udmVydGVyLmdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyh7XG4gICAgICAgIHNjcmlwdDogMTAwLFxuICAgICAgICBzZXNzaW9uSWQ6ICc1NDMyYTRmMy1jZDg5LTQ3ODEtODkwNS1lYTlkMzE1MDg0MGMnLFxuICAgICAgICBiYXI6IC0xLFxuICAgICAgICBiYXo6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgdGltZW91dE9iamVjdHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHRpbWVvdXRPYmplY3RzWzBdLnNob3VsZC5lcWwoe3R5cGU6ICdzY3JpcHQnLCBtczogMTAwfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0YWtlIG11bHRpcGxlIFczQyB0aW1lb3V0cyBhbmQgcHJvZHVjZSBtdWx0aXBsZSBNSlNPTldQIGNvbXBhdGlibGUgb2JqZWN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnZlcnRlci5kb3duc3RyZWFtUHJvdG9jb2wgPSBNSlNPTldQO1xuICAgICAgbGV0IFtzY3JpcHRUaW1lb3V0LCBwYWdlTG9hZFRpbWVvdXQsIGltcGxpY2l0VGltZW91dF0gPSBjb252ZXJ0ZXIuZ2V0VGltZW91dFJlcXVlc3RPYmplY3RzKHtcbiAgICAgICAgc2NyaXB0OiAxMDAsXG4gICAgICAgIHBhZ2VMb2FkOiAyMDAsXG4gICAgICAgIGltcGxpY2l0OiAzMDAsXG4gICAgICB9KTtcbiAgICAgIHNjcmlwdFRpbWVvdXQuc2hvdWxkLmVxbCh7XG4gICAgICAgIHR5cGU6ICdzY3JpcHQnLFxuICAgICAgICBtczogMTAwLFxuICAgICAgfSk7XG4gICAgICBwYWdlTG9hZFRpbWVvdXQuc2hvdWxkLmVxbCh7XG4gICAgICAgIHR5cGU6ICdwYWdlIGxvYWQnLFxuICAgICAgICBtczogMjAwLFxuICAgICAgfSk7XG4gICAgICBpbXBsaWNpdFRpbWVvdXQuc2hvdWxkLmVxbCh7XG4gICAgICAgIHR5cGU6ICdpbXBsaWNpdCcsXG4gICAgICAgIG1zOiAzMDAsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRha2UgTUpTT05XUCBpbnB1dCBhbmQgcHJvZHVjZSBXM0MgY29tcGF0aWJsZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb252ZXJ0ZXIuZG93bnN0cmVhbVByb3RvY29sID0gVzNDO1xuICAgICAgbGV0IHRpbWVvdXRPYmplY3RzID0gY29udmVydGVyLmdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyh7XG4gICAgICAgIHR5cGU6ICdpbXBsaWNpdCcsXG4gICAgICAgIG1zOiAzMDAsXG4gICAgICB9KTtcbiAgICAgIHRpbWVvdXRPYmplY3RzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0aW1lb3V0T2JqZWN0c1swXS5zaG91bGQuZXFsKHtpbXBsaWNpdDogMzAwfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgY2hhbmdlIHRoZSBpbnB1dCBpZiBwcm90b2NvbCBuYW1lIGlzIHVua25vd24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb252ZXJ0ZXIuZG93bnN0cmVhbVByb3RvY29sID0gbnVsbDtcbiAgICAgIGxldCB0aW1lb3V0T2JqZWN0cyA9IGNvbnZlcnRlci5nZXRUaW1lb3V0UmVxdWVzdE9iamVjdHMoe1xuICAgICAgICB0eXBlOiAnaW1wbGljaXQnLFxuICAgICAgICBtczogMzAwLFxuICAgICAgfSk7XG4gICAgICB0aW1lb3V0T2JqZWN0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdGltZW91dE9iamVjdHNbMF0uc2hvdWxkLmVxbCh7dHlwZTogJ2ltcGxpY2l0JywgbXM6IDMwMH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IGNoYW5nZSB0aGUgaW5wdXQgaWYgcHJvdG9jb2wgbmFtZSBpcyB1bmNoYW5nZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb252ZXJ0ZXIuZG93bnN0cmVhbVByb3RvY29sID0gTUpTT05XUDtcbiAgICAgIGxldCB0aW1lb3V0T2JqZWN0cyA9IGNvbnZlcnRlci5nZXRUaW1lb3V0UmVxdWVzdE9iamVjdHMoe1xuICAgICAgICB0eXBlOiAnaW1wbGljaXQnLFxuICAgICAgICBtczogMzAwLFxuICAgICAgfSk7XG4gICAgICB0aW1lb3V0T2JqZWN0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdGltZW91dE9iamVjdHNbMF0uc2hvdWxkLmVxbCh7dHlwZTogJ2ltcGxpY2l0JywgbXM6IDMwMH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0VmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGNvbnZlcnRlcjtcbiAgICBsZXQgcmVzcG9uc2VCb2R5O1xuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXNwb25zZUJvZHkgPSBudWxsO1xuICAgICAgY29udmVydGVyID0gbmV3IFByb3RvY29sQ29udmVydGVyKCh1cmwsIG1ldGhvZCwgYm9keSkgPT4ge1xuICAgICAgICByZXNwb25zZUJvZHkgPSBib2R5O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXNwb25zZUJvZHkgPSB7fTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2FsY3VsYXRlIHZhbHVlIGlmIG5vdCBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgY29udmVydGVyLnByb3h5U2V0VmFsdWUoJycsICcnLCB7XG4gICAgICAgIHRleHQ6ICdibGEnLFxuICAgICAgfSk7XG4gICAgICByZXNwb25zZUJvZHkuc2hvdWxkLmVxbCh7XG4gICAgICAgIHRleHQ6ICdibGEnLFxuICAgICAgICB2YWx1ZTogWydiJywgJ2wnLCAnYSddLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBjYWxjdWxhdGUgdGV4dCBpZiBub3QgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGNvbnZlcnRlci5wcm94eVNldFZhbHVlKCcnLCAnJywge1xuICAgICAgICB2YWx1ZTogWydiJywgJ2wnLCAnYSddLFxuICAgICAgfSk7XG4gICAgICByZXNwb25zZUJvZHkuc2hvdWxkLmVxbCh7XG4gICAgICAgIHRleHQ6ICdibGEnLFxuICAgICAgICB2YWx1ZTogWydiJywgJ2wnLCAnYSddLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBrZWVwIHRoZSByZXNwb25zZSBib2R5IHVuY2hhbmdlZCBpZiBib3RoIHZhbHVlIGFuZCB0ZXh0IGFyZSBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgY29udmVydGVyLnByb3h5U2V0VmFsdWUoJycsICcnLCB7XG4gICAgICAgIHRleHQ6ICdibGEnLFxuICAgICAgICB2YWx1ZTogWydiJywgJ2wnLCAnYSddLFxuICAgICAgfSk7XG4gICAgICByZXNwb25zZUJvZHkuc2hvdWxkLmVxbCh7XG4gICAgICAgIHRleHQ6ICdibGEnLFxuICAgICAgICB2YWx1ZTogWydiJywgJ2wnLCAnYSddLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnZ2V0UHJvcGVydHknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGpzb253cENvbnZlcnRlciwgdzNjQ29udmVydGVyO1xuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIG9mIENPTU1BTkRfVVJMU19DT05GTElDVFMpIHtcbiAgICAgICAgaWYgKGNvbW1hbmQuY29tbWFuZE5hbWVzLmluY2x1ZGVzKCdnZXRQcm9wZXJ0eScpKSB7XG4gICAgICAgICAganNvbndwQ29udmVydGVyID0gY29tbWFuZC5qc29ud3BDb252ZXJ0ZXI7XG4gICAgICAgICAgdzNjQ29udmVydGVyID0gY29tbWFuZC53M2NDb252ZXJ0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgXCJwcm9wZXJ0eS92YWx1ZVwiIHRvIFwiYXR0cmlidXRlL3ZhbHVlXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBqc29ud3BDb252ZXJ0ZXIoJy9zZXNzaW9uLzEyMy9lbGVtZW50LzQ1Ni9wcm9wZXJ0eS92YWx1ZScpLnNob3VsZC5lcXVhbChcbiAgICAgICAgJy9zZXNzaW9uLzEyMy9lbGVtZW50LzQ1Ni9hdHRyaWJ1dGUvdmFsdWUnXG4gICAgICApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY29udmVydCBcInByb3BlcnR5Lzpzb21lUHJvcE5hbWVcIiB0byBcImF0dHJpYnV0ZS86c29tZVByb3BOYW1lXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBqc29ud3BDb252ZXJ0ZXIoJy9zZXNzaW9uLzEyMy9lbGVtZW50LzQ1Ni9wcm9wZXJ0eS9zb21lUHJvcE5hbWUnKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICcvc2Vzc2lvbi8xMjMvZWxlbWVudC80NTYvYXR0cmlidXRlL3NvbWVQcm9wTmFtZSdcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgY29udmVydCBmcm9tIEpTT05XUCB0byBXM0MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3M2NDb252ZXJ0ZXIoJy9zZXNzaW9uLzEyMy9lbGVtZW50LzQ1Ni9hdHRyaWJ1dGUvc29tZUF0dHInKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICcvc2Vzc2lvbi8xMjMvZWxlbWVudC80NTYvYXR0cmlidXRlL3NvbWVBdHRyJ1xuICAgICAgKTtcbiAgICAgIHczY0NvbnZlcnRlcignL3Nlc3Npb24vMTIzL2VsZW1lbnQvNDU2L3Byb3BlcnR5L3NvbWVQcm9wJykuc2hvdWxkLmVxdWFsKFxuICAgICAgICAnL3Nlc3Npb24vMTIzL2VsZW1lbnQvNDU2L3Byb3BlcnR5L3NvbWVQcm9wJ1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7OztBQUlBLE1BQU07RUFBQ0EsT0FBRDtFQUFVQztBQUFWLElBQWlCQyxvQkFBdkI7QUFFQUMsUUFBUSxDQUFDLG9CQUFELEVBQXVCLFlBQVk7RUFDekNBLFFBQVEsQ0FBQywwQkFBRCxFQUE2QixZQUFZO0lBQy9DLElBQUlDLFNBQUo7SUFDQUMsTUFBTSxDQUFDLFlBQVk7TUFDakJELFNBQVMsR0FBRyxJQUFJRSwwQkFBSixDQUFzQkMsZUFBQSxDQUFFQyxJQUF4QixDQUFaO0lBQ0QsQ0FGSyxDQUFOO0lBR0FDLEVBQUUsQ0FBQywrREFBRCxFQUFrRSxZQUFZO01BQzlFTCxTQUFTLENBQUNNLGtCQUFWLEdBQStCVixPQUEvQjtNQUNBLElBQUlXLGNB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
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("source-map-support/register");
|
|
6
|
-
|
|
7
|
-
var _lib = require("../../../lib");
|
|
8
|
-
|
|
9
|
-
var _mockRequest = _interopRequireDefault(require("./mock-request"));
|
|
10
|
-
|
|
11
|
-
var _errors = require("../../../lib/protocol/errors");
|
|
12
|
-
|
|
13
|
-
var _helpers = require("../../helpers");
|
|
14
|
-
|
|
15
|
-
function buildReqRes(url, method, body) {
|
|
16
|
-
let req = {
|
|
17
|
-
originalUrl: url,
|
|
18
|
-
method,
|
|
19
|
-
body
|
|
20
|
-
};
|
|
21
|
-
let res = {};
|
|
22
|
-
res.headers = {};
|
|
23
|
-
|
|
24
|
-
res.set = (k, v) => {
|
|
25
|
-
res[k] = v;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
res.status = code => {
|
|
29
|
-
res.sentCode = code;
|
|
30
|
-
return res;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
res.send = body => {
|
|
34
|
-
try {
|
|
35
|
-
body = JSON.parse(body);
|
|
36
|
-
} catch (e) {}
|
|
37
|
-
|
|
38
|
-
res.sentBody = body;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
return [req, res];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
describe('proxy', function () {
|
|
45
|
-
let port;
|
|
46
|
-
|
|
47
|
-
function mockProxy(opts = {}) {
|
|
48
|
-
opts = {
|
|
49
|
-
server: _helpers.TEST_HOST,
|
|
50
|
-
port,
|
|
51
|
-
...opts
|
|
52
|
-
};
|
|
53
|
-
let proxy = new _lib.JWProxy(opts);
|
|
54
|
-
|
|
55
|
-
proxy.request = async function (...args) {
|
|
56
|
-
return await (0, _mockRequest.default)(...args);
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
return proxy;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
before(async function () {
|
|
63
|
-
port = await (0, _helpers.getTestPort)();
|
|
64
|
-
});
|
|
65
|
-
it('should override default params', function () {
|
|
66
|
-
let j = mockProxy({
|
|
67
|
-
server: '127.0.0.2',
|
|
68
|
-
port
|
|
69
|
-
});
|
|
70
|
-
j.server.should.equal('127.0.0.2');
|
|
71
|
-
j.port.should.equal(port);
|
|
72
|
-
});
|
|
73
|
-
it('should save session id on session creation', async function () {
|
|
74
|
-
let j = mockProxy();
|
|
75
|
-
let [res, body] = await j.proxy('/session', 'POST', {
|
|
76
|
-
desiredCapabilities: {}
|
|
77
|
-
});
|
|
78
|
-
res.statusCode.should.equal(200);
|
|
79
|
-
body.should.eql({
|
|
80
|
-
status: 0,
|
|
81
|
-
sessionId: '123',
|
|
82
|
-
value: {
|
|
83
|
-
browserName: 'boo'
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
j.sessionId.should.equal('123');
|
|
87
|
-
});
|
|
88
|
-
describe('getUrlForProxy', function () {
|
|
89
|
-
it('should modify session id, host, and port', function () {
|
|
90
|
-
let j = mockProxy({
|
|
91
|
-
sessionId: '123'
|
|
92
|
-
});
|
|
93
|
-
j.getUrlForProxy('http://host.com:1234/session/456/element/200/value').should.eql(`http://${_helpers.TEST_HOST}:${port}/session/123/element/200/value`);
|
|
94
|
-
});
|
|
95
|
-
it('should prepend scheme, host and port if not provided', function () {
|
|
96
|
-
let j = mockProxy({
|
|
97
|
-
sessionId: '123'
|
|
98
|
-
});
|
|
99
|
-
j.getUrlForProxy('/session/456/element/200/value').should.eql(`http://${_helpers.TEST_HOST}:${port}/session/123/element/200/value`);
|
|
100
|
-
});
|
|
101
|
-
it('should respect nonstandard incoming request base path', function () {
|
|
102
|
-
let j = mockProxy({
|
|
103
|
-
sessionId: '123',
|
|
104
|
-
reqBasePath: ''
|
|
105
|
-
});
|
|
106
|
-
j.getUrlForProxy('/session/456/element/200/value').should.eql(`http://${_helpers.TEST_HOST}:${port}/session/123/element/200/value`);
|
|
107
|
-
j = mockProxy({
|
|
108
|
-
sessionId: '123',
|
|
109
|
-
reqBasePath: '/my/base/path'
|
|
110
|
-
});
|
|
111
|
-
j.getUrlForProxy('/my/base/path/session/456/element/200/value').should.eql(`http://${_helpers.TEST_HOST}:${port}/session/123/element/200/value`);
|
|
112
|
-
});
|
|
113
|
-
it('should work with urls which do not have session ids', function () {
|
|
114
|
-
let j = mockProxy({
|
|
115
|
-
sessionId: '123'
|
|
116
|
-
});
|
|
117
|
-
j.getUrlForProxy('http://host.com:1234/session').should.eql(`http://${_helpers.TEST_HOST}:${port}/session`);
|
|
118
|
-
let newUrl = j.getUrlForProxy('/session');
|
|
119
|
-
newUrl.should.eql(`http://${_helpers.TEST_HOST}:${port}/session`);
|
|
120
|
-
});
|
|
121
|
-
it('should throw an error if url requires a sessionId but its null', function () {
|
|
122
|
-
let j = mockProxy();
|
|
123
|
-
let e;
|
|
124
|
-
|
|
125
|
-
try {
|
|
126
|
-
j.getUrlForProxy('/session/456/element/200/value');
|
|
127
|
-
} catch (err) {
|
|
128
|
-
e = err;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
should.exist(e);
|
|
132
|
-
e.message.should.contain('without session id');
|
|
133
|
-
});
|
|
134
|
-
it('should not throw an error if url does not require a session id and its null', function () {
|
|
135
|
-
let j = mockProxy();
|
|
136
|
-
let newUrl = j.getUrlForProxy('/status');
|
|
137
|
-
should.exist(newUrl);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
describe('straight proxy', function () {
|
|
141
|
-
it('should successfully proxy straight', async function () {
|
|
142
|
-
let j = mockProxy();
|
|
143
|
-
let [res, body] = await j.proxy('/status', 'GET');
|
|
144
|
-
res.statusCode.should.equal(200);
|
|
145
|
-
body.should.eql({
|
|
146
|
-
status: 0,
|
|
147
|
-
value: {
|
|
148
|
-
foo: 'bar'
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
it('should pass along request errors', function () {
|
|
153
|
-
let j = mockProxy({
|
|
154
|
-
sessionId: '123'
|
|
155
|
-
});
|
|
156
|
-
j.proxy('/badurl', 'GET').should.eventually.be.rejectedWith('Could not proxy');
|
|
157
|
-
});
|
|
158
|
-
it('should proxy error responses and codes', async function () {
|
|
159
|
-
let j = mockProxy({
|
|
160
|
-
sessionId: '123'
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
try {
|
|
164
|
-
await j.proxy('/element/bad/text', 'GET');
|
|
165
|
-
} catch (e) {
|
|
166
|
-
(0, _errors.isErrorType)(e.getActualError(), _errors.errors.ElementNotVisibleError).should.be.true;
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
describe('command proxy', function () {
|
|
171
|
-
it('should successfully proxy command', async function () {
|
|
172
|
-
let j = mockProxy();
|
|
173
|
-
let res = await j.command('/status', 'GET');
|
|
174
|
-
res.should.eql({
|
|
175
|
-
foo: 'bar'
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
it('should pass along request errors', function () {
|
|
179
|
-
let j = mockProxy({
|
|
180
|
-
sessionId: '123'
|
|
181
|
-
});
|
|
182
|
-
j.command('/badurl', 'GET').should.eventually.be.rejectedWith('Could not proxy');
|
|
183
|
-
});
|
|
184
|
-
it('should throw when a command fails', async function () {
|
|
185
|
-
let j = mockProxy({
|
|
186
|
-
sessionId: '123'
|
|
187
|
-
});
|
|
188
|
-
let e = null;
|
|
189
|
-
|
|
190
|
-
try {
|
|
191
|
-
await j.command('/element/bad/text', 'GET');
|
|
192
|
-
} catch (err) {
|
|
193
|
-
e = err;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
should.exist(e);
|
|
197
|
-
e.message.should.contain('Invisible element');
|
|
198
|
-
});
|
|
199
|
-
it('should throw when a command fails with a 200 because the status is not 0', async function () {
|
|
200
|
-
let j = mockProxy({
|
|
201
|
-
sessionId: '123'
|
|
202
|
-
});
|
|
203
|
-
let e = null;
|
|
204
|
-
|
|
205
|
-
try {
|
|
206
|
-
await j.command('/element/200/text', 'GET');
|
|
207
|
-
} catch (err) {
|
|
208
|
-
e = err;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
should.exist(e);
|
|
212
|
-
e.error.should.eql('element not visible');
|
|
213
|
-
});
|
|
214
|
-
it('should throw when a command fails with a 100', async function () {
|
|
215
|
-
let j = mockProxy({
|
|
216
|
-
sessionId: '123'
|
|
217
|
-
});
|
|
218
|
-
let e = null;
|
|
219
|
-
|
|
220
|
-
try {
|
|
221
|
-
await j.command('/session/badchrome/nochrome', 'GET');
|
|
222
|
-
} catch (err) {
|
|
223
|
-
e = err;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
should.exist(e);
|
|
227
|
-
e.message.should.contain('chrome not reachable');
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
describe('req/res proxy', function () {
|
|
231
|
-
it('should successfully proxy via req and send to res', async function () {
|
|
232
|
-
let j = mockProxy();
|
|
233
|
-
let [req, res] = buildReqRes('/status', 'GET');
|
|
234
|
-
await j.proxyReqRes(req, res);
|
|
235
|
-
res.headers['content-type'].should.equal('application/json; charset=utf-8');
|
|
236
|
-
res.sentCode.should.equal(200);
|
|
237
|
-
res.sentBody.should.eql({
|
|
238
|
-
value: {
|
|
239
|
-
foo: 'bar'
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
it('should rewrite the inner session id so it doesnt change', async function () {
|
|
244
|
-
let j = mockProxy({
|
|
245
|
-
sessionId: '123'
|
|
246
|
-
});
|
|
247
|
-
let [req, res] = buildReqRes('/element/200/value', 'GET');
|
|
248
|
-
await j.proxyReqRes(req, res);
|
|
249
|
-
res.sentBody.should.eql({
|
|
250
|
-
value: 'foobar',
|
|
251
|
-
sessionId: '123'
|
|
252
|
-
});
|
|
253
|
-
});
|
|
254
|
-
it('should rewrite the inner session id with sessionId in url', async function () {
|
|
255
|
-
let j = mockProxy({
|
|
256
|
-
sessionId: '123'
|
|
257
|
-
});
|
|
258
|
-
let [req, res] = buildReqRes('/session/456/element/200/value', 'POST');
|
|
259
|
-
await j.proxyReqRes(req, res);
|
|
260
|
-
res.sentBody.should.eql({
|
|
261
|
-
value: 'foobar',
|
|
262
|
-
sessionId: '456'
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
it('should pass through urls that do not require session IDs', async function () {
|
|
266
|
-
let j = mockProxy({
|
|
267
|
-
sessionId: '123'
|
|
268
|
-
});
|
|
269
|
-
let [req, res] = buildReqRes('/status', 'GET');
|
|
270
|
-
await j.proxyReqRes(req, res);
|
|
271
|
-
res.sentBody.should.eql({
|
|
272
|
-
value: {
|
|
273
|
-
foo: 'bar'
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
it('should proxy strange responses', async function () {
|
|
278
|
-
let j = mockProxy({
|
|
279
|
-
sessionId: '123'
|
|
280
|
-
});
|
|
281
|
-
let [req, res] = buildReqRes('/nochrome', 'GET');
|
|
282
|
-
await j.proxyReqRes(req, res);
|
|
283
|
-
res.sentCode.should.equal(100);
|
|
284
|
-
res.sentBody.should.eql({
|
|
285
|
-
value: {
|
|
286
|
-
message: 'chrome not reachable'
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFJlcVJlcyIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJyZXEiLCJvcmlnaW5hbFVybCIsInJlcyIsImhlYWRlcnMiLCJzZXQiLCJrIiwidiIsInN0YXR1cyIsImNvZGUiLCJzZW50Q29kZSIsInNlbmQiLCJKU09OIiwicGFyc2UiLCJlIiwic2VudEJvZHkiLCJkZXNjcmliZSIsInBvcnQiLCJtb2NrUHJveHkiLCJvcHRzIiwic2VydmVyIiwiVEVTVF9IT1NUIiwicHJveHkiLCJKV1Byb3h5IiwicmVxdWVzdCIsImFyZ3MiLCJiZWZvcmUiLCJnZXRUZXN0UG9ydCIsIml0IiwiaiIsInNob3VsZCIsImVxdWFsIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInN0YXR1c0NvZGUiLCJlcWwiLCJzZXNzaW9uSWQiLCJ2YWx1ZSIsImJyb3dzZXJOYW1lIiwiZ2V0VXJsRm9yUHJveHkiLCJyZXFCYXNlUGF0aCIsIm5ld1VybCIsImVyciIsImV4aXN0IiwibWVzc2FnZSIsImNvbnRhaW4iLCJmb28iLCJldmVudHVhbGx5IiwiYmUiLCJyZWplY3RlZFdpdGgiLCJpc0Vycm9yVHlwZSIsImdldEFjdHVhbEVycm9yIiwiZXJyb3JzIiwiRWxlbWVudE5vdFZpc2libGVFcnJvciIsInRydWUiLCJjb21tYW5kIiwiZXJyb3IiLCJwcm94eVJlcVJlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9qc29ud3AtcHJveHkvcHJveHkuc3BlYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bW9jaGFcblxuaW1wb3J0IHtKV1Byb3h5fSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi9tb2NrLXJlcXVlc3QnO1xuaW1wb3J0IHtpc0Vycm9yVHlwZSwgZXJyb3JzfSBmcm9tICcuLi8uLi8uLi9saWIvcHJvdG9jb2wvZXJyb3JzJztcbmltcG9ydCB7Z2V0VGVzdFBvcnQsIFRFU1RfSE9TVH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5cbmZ1bmN0aW9uIGJ1aWxkUmVxUmVzKHVybCwgbWV0aG9kLCBib2R5KSB7XG4gIGxldCByZXEgPSB7b3JpZ2luYWxVcmw6IHVybCwgbWV0aG9kLCBib2R5fTtcbiAgbGV0IHJlcyA9IHt9O1xuICByZXMuaGVhZGVycyA9IHt9O1xuICByZXMuc2V0ID0gKGssIHYpID0+IHtcbiAgICByZXNba10gPSB2O1xuICB9O1xuICByZXMuc3RhdHVzID0gKGNvZGUpID0+IHtcbiAgICByZXMuc2VudENvZGUgPSBjb2RlO1xuICAgIHJldHVybiByZXM7XG4gIH07XG4gIHJlcy5zZW5kID0gKGJvZHkpID0+IHtcbiAgICB0cnkge1xuICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXMuc2VudEJvZHkgPSBib2R5O1xuICB9O1xuICByZXR1cm4gW3JlcSwgcmVzXTtcbn1cblxuZGVzY3JpYmUoJ3Byb3h5JywgZnVuY3Rpb24gKCkge1xuICBsZXQgcG9ydDtcblxuICBmdW5jdGlvbiBtb2NrUHJveHkob3B0cyA9IHt9KSB7XG4gICAgLy8gc2V0cyBkZWZhdWx0IHNlcnZlci9wb3J0XG4gICAgb3B0cyA9IHtzZXJ2ZXI6IFRFU1RfSE9TVCwgcG9ydCwgLi4ub3B0c307XG4gICAgbGV0IHByb3h5ID0gbmV3IEpXUHJveHkob3B0cyk7XG4gICAgcHJveHkucmVxdWVzdCA9IGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVxdWVzdCguLi5hcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBwcm94eTtcbiAgfVxuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgb3ZlcnJpZGUgZGVmYXVsdCBwYXJhbXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGogPSBtb2NrUHJveHkoe3NlcnZlcjogJzEyNy4wLjAuMicsIHBvcnR9KTtcbiAgICBqLnNlcnZlci5zaG91bGQuZXF1YWwoJzEyNy4wLjAuMicpO1xuICAgIGoucG9ydC5zaG91bGQuZXF1YWwocG9ydCk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHNhdmUgc2Vzc2lvbiBpZCBvbiBzZXNzaW9uIGNyZWF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGxldCBqID0gbW9ja1Byb3h5KCk7XG4gICAgbGV0IFtyZXMsIGJvZHldID0gYXdhaXQgai5wcm94eSgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGRlc2lyZWRDYXBhYmlsaXRpZXM6IHt9LFxuICAgIH0pO1xuICAgIHJlcy5zdGF0dXNDb2RlLnNob3VsZC5lcXVhbCgyMDApO1xuICAgIGJvZHkuc2hvdWxkLmVxbCh7c3RhdHVzOiAwLCBzZXNzaW9uSWQ6ICcxMjMnLCB2YWx1ZToge2Jyb3dzZXJOYW1lOiAnYm9vJ319KTtcbiAgICBqLnNlc3Npb25JZC5zaG91bGQuZXF1YWwoJzEyMycpO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2dldFVybEZvclByb3h5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgbW9kaWZ5IHNlc3Npb24gaWQsIGhvc3QsIGFuZCBwb3J0JywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGouZ2V0VXJsRm9yUHJveHkoJ2h0dHA6Ly9ob3N0LmNvbToxMjM0L3Nlc3Npb24vNDU2L2VsZW1lbnQvMjAwL3ZhbHVlJykuc2hvdWxkLmVxbChcbiAgICAgICAgYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uLzEyMy9lbGVtZW50LzIwMC92YWx1ZWBcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwcmVwZW5kIHNjaGVtZSwgaG9zdCBhbmQgcG9ydCBpZiBub3QgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgai5nZXRVcmxGb3JQcm94eSgnL3Nlc3Npb24vNDU2L2VsZW1lbnQvMjAwL3ZhbHVlJykuc2hvdWxkLmVxbChcbiAgICAgICAgYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uLzEyMy9lbGVtZW50LzIwMC92YWx1ZWBcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXNwZWN0IG5vbnN0YW5kYXJkIGluY29taW5nIHJlcXVlc3QgYmFzZSBwYXRoJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMycsIHJlcUJhc2VQYXRoOiAnJ30pO1xuICAgICAgai5nZXRVcmxGb3JQcm94eSgnL3Nlc3Npb24vNDU2L2VsZW1lbnQvMjAwL3ZhbHVlJykuc2hvdWxkLmVxbChcbiAgICAgICAgYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uLzEyMy9lbGVtZW50LzIwMC92YWx1ZWBcbiAgICAgICk7XG5cbiAgICAgIGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMycsIHJlcUJhc2VQYXRoOiAnL215L2Jhc2UvcGF0aCd9KTtcbiAgICAgIGouZ2V0VXJsRm9yUHJveHkoJy9teS9iYXNlL3BhdGgvc2Vzc2lvbi80NTYvZWxlbWVudC8yMDAvdmFsdWUnKS5zaG91bGQuZXFsKFxuICAgICAgICBgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3Nlc3Npb24vMTIzL2VsZW1lbnQvMjAwL3ZhbHVlYFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCB1cmxzIHdoaWNoIGRvIG5vdCBoYXZlIHNlc3Npb24gaWRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGouZ2V0VXJsRm9yUHJveHkoJ2h0dHA6Ly9ob3N0LmNvbToxMjM0L3Nlc3Npb24nKS5zaG91bGQuZXFsKFxuICAgICAgICBgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3Nlc3Npb25gXG4gICAgICApO1xuXG4gICAgICBsZXQgbmV3VXJsID0gai5nZXRVcmxGb3JQcm94eSgnL3Nlc3Npb24nKTtcbiAgICAgIG5ld1VybC5zaG91bGQuZXFsKGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vc2Vzc2lvbmApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgdXJsIHJlcXVpcmVzIGEgc2Vzc2lvbklkIGJ1dCBpdHMgbnVsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KCk7XG4gICAgICBsZXQgZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGouZ2V0VXJsRm9yUHJveHkoJy9zZXNzaW9uLzQ1Ni9lbGVtZW50LzIwMC92YWx1ZScpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGUgPSBlcnI7XG4gICAgICB9XG4gICAgICBzaG91bGQuZXhpc3QoZSk7XG4gICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmNvbnRhaW4oJ3dpdGhvdXQgc2Vzc2lvbiBpZCcpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IHRocm93IGFuIGVycm9yIGlmIHVybCBkb2VzIG5vdCByZXF1aXJlIGEgc2Vzc2lvbiBpZCBhbmQgaXRzIG51bGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSgpO1xuICAgICAgbGV0IG5ld1VybCA9IGouZ2V0VXJsRm9yUHJveHkoJy9zdGF0dXMnKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KG5ld1VybCk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnc3RyYWlnaHQgcHJveHknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcHJveHkgc3RyYWlnaHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSgpO1xuICAgICAgbGV0IFtyZXMsIGJvZHldID0gYXdhaXQgai5wcm94eSgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIHJlcy5zdGF0dXNDb2RlLnNob3VsZC5lcXVhbCgyMDApO1xuICAgICAgYm9keS5zaG91bGQuZXFsKHtzdGF0dXM6IDAsIHZhbHVlOiB7Zm9vOiAnYmFyJ319KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHBhc3MgYWxvbmcgcmVxdWVzdCBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgai5wcm94eSgnL2JhZHVybCcsICdHRVQnKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoJ0NvdWxkIG5vdCBwcm94eScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcHJveHkgZXJyb3IgcmVzcG9uc2VzIGFuZCBjb2RlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBqLnByb3h5KCcvZWxlbWVudC9iYWQvdGV4dCcsICdHRVQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaXNFcnJvclR5cGUoZS5nZXRBY3R1YWxFcnJvcigpLCBlcnJvcnMuRWxlbWVudE5vdFZpc2libGVFcnJvcikuc2hvdWxkLmJlLnRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnY29tbWFuZCBwcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBwcm94eSBjb21tYW5kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoKTtcbiAgICAgIGxldCByZXMgPSBhd2FpdCBqLmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICByZXMuc2hvdWxkLmVxbCh7Zm9vOiAnYmFyJ30pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcGFzcyBhbG9uZyByZXF1ZXN0IGVycm9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBqLmNvbW1hbmQoJy9iYWR1cmwnLCAnR0VUJykuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKCdDb3VsZCBub3QgcHJveHknKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYSBjb21tYW5kIGZhaWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGouY29tbWFuZCgnL2VsZW1lbnQvYmFkL3RleHQnLCAnR0VUJyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZSA9IGVycjtcbiAgICAgIH1cbiAgICAgIHNob3VsZC5leGlzdChlKTtcbiAgICAgIGUubWVzc2FnZS5zaG91bGQuY29udGFpbignSW52aXNpYmxlIGVsZW1lbnQnKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYSBjb21tYW5kIGZhaWxzIHdpdGggYSAyMDAgYmVjYXVzZSB0aGUgc3RhdHVzIGlzIG5vdCAwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGouY29tbWFuZCgnL2VsZW1lbnQvMjAwL3RleHQnLCAnR0VUJyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZSA9IGVycjtcbiAgICAgIH1cbiAgICAgIHNob3VsZC5leGlzdChlKTtcbiAgICAgIGUuZXJyb3Iuc2hvdWxkLmVxbCgnZWxlbWVudCBub3QgdmlzaWJsZScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhIGNvbW1hbmQgZmFpbHMgd2l0aCBhIDEwMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBsZXQgZSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBqLmNvbW1hbmQoJy9zZXNzaW9uL2JhZGNocm9tZS9ub2Nocm9tZScsICdHRVQnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlID0gZXJyO1xuICAgICAgfVxuICAgICAgc2hvdWxkLmV4aXN0KGUpO1xuICAgICAgZS5tZXNzYWdlLnNob3VsZC5jb250YWluKCdjaHJvbWUgbm90IHJlYWNoYWJsZScpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ3JlcS9yZXMgcHJveHknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcHJveHkgdmlhIHJlcSBhbmQgc2VuZCB0byByZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSgpO1xuICAgICAgbGV0IFtyZXEsIHJlc10gPSBidWlsZFJlcVJlcygnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGF3YWl0IGoucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICAgICAgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLnNob3VsZC5lcXVhbCgnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpO1xuICAgICAgcmVzLnNlbnRDb2RlLnNob3VsZC5lcXVhbCgyMDApO1xuICAgICAgcmVzLnNlbnRCb2R5LnNob3VsZC5lcWwoe3ZhbHVlOiB7Zm9vOiAnYmFyJ319KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJld3JpdGUgdGhlIGlubmVyIHNlc3Npb24gaWQgc28gaXQgZG9lc250IGNoYW5nZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBsZXQgW3JlcSwgcmVzXSA9IGJ1aWxkUmVxUmVzKCcvZWxlbWVudC8yMDAvdmFsdWUnLCAnR0VUJyk7XG4gICAgICBhd2FpdCBqLnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgICAgIHJlcy5zZW50Qm9keS5zaG91bGQuZXFsKHt2YWx1ZTogJ2Zvb2JhcicsIHNlc3Npb25JZDogJzEyMyd9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJld3JpdGUgdGhlIGlubmVyIHNlc3Npb24gaWQgd2l0aCBzZXNzaW9uSWQgaW4gdXJsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBbcmVxLCByZXNdID0gYnVpbGRSZXFSZXMoJy9zZXNzaW9uLzQ1Ni9lbGVtZW50LzIwMC92YWx1ZScsICdQT1NUJyk7XG4gICAgICBhd2FpdCBqLnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgICAgIHJlcy5zZW50Qm9keS5zaG91bGQuZXFsKHt2YWx1ZTogJ2Zvb2JhcicsIHNlc3Npb25JZDogJzQ1Nid9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHBhc3MgdGhyb3VnaCB1cmxzIHRoYXQgZG8gbm90IHJlcXVpcmUgc2Vzc2lvbiBJRHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgbGV0IFtyZXEsIHJlc10gPSBidWlsZFJlcVJlcygnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGF3YWl0IGoucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICAgICAgcmVzLnNlbnRCb2R5LnNob3VsZC5lcWwoe3ZhbHVlOiB7Zm9vOiAnYmFyJ319KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHByb3h5IHN0cmFuZ2UgcmVzcG9uc2VzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBbcmVxLCByZXNdID0gYnVpbGRSZXFSZXMoJy9ub2Nocm9tZScsICdHRVQnKTtcbiAgICAgIGF3YWl0IGoucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICAgICAgcmVzLnNlbnRDb2RlLnNob3VsZC5lcXVhbCgxMDApO1xuICAgICAgcmVzLnNlbnRCb2R5LnNob3VsZC5lcWwoe3ZhbHVlOiB7bWVzc2FnZTogJ2Nocm9tZSBub3QgcmVhY2hhYmxlJ319KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsU0FBU0EsV0FBVCxDQUFxQkMsR0FBckIsRUFBMEJDLE1BQTFCLEVBQWtDQyxJQUFsQyxFQUF3QztFQUN0QyxJQUFJQyxHQUFHLEdBQUc7SUFBQ0MsV0FBVyxFQUFFSixHQUFkO0lBQW1CQyxNQUFuQjtJQUEyQkM7RUFBM0IsQ0FBVjtFQUNBLElBQUlHLEdBQUcsR0FBRyxFQUFWO0VBQ0FBLEdBQUcsQ0FBQ0MsT0FBSixHQUFjLEVBQWQ7O0VBQ0FELEdBQUcsQ0FBQ0UsR0FBSixHQUFVLENBQUNDLENBQUQsRUFBSUMsQ0FBSixLQUFVO0lBQ2xCSixHQUFHLENBQUNHLENBQUQsQ0FBSCxHQUFTQyxDQUFUO0VBQ0QsQ0FGRDs7RUFHQUosR0FBRyxDQUFDSyxNQUFKLEdBQWNDLElBQUQsSUFBVTtJQUNyQk4sR0FBRyxDQUFDTyxRQUFKLEdBQWVELElBQWY7SUFDQSxPQUFPTixHQUFQO0VBQ0QsQ0FIRDs7RUFJQUEsR0FBRyxDQUFDUSxJQUFKLEdBQVlYLElBQUQsSUFBVTtJQUNuQixJQUFJO01BQ0ZBLElBQUksR0FBR1ksSUFBSSxDQUFDQyxLQUFMLENBQVdiLElBQVgsQ0FBUDtJQUNELENBRkQsQ0FFRSxPQUFPYyxDQUFQLEVBQVUsQ0FBRTs7SUFDZFgsR0FBRyxDQUFDWSxRQUFKLEdBQWVmLElBQWY7RUFD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
|