@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.
Files changed (74) hide show
  1. package/build/lib/basedriver/capabilities.js +2 -2
  2. package/build/lib/basedriver/commands/execute.d.ts +11 -0
  3. package/build/lib/basedriver/commands/execute.d.ts.map +1 -0
  4. package/build/lib/basedriver/commands/execute.js +62 -0
  5. package/build/lib/basedriver/commands/index.d.ts +1 -1
  6. package/build/lib/basedriver/commands/index.d.ts.map +1 -1
  7. package/build/lib/basedriver/commands/index.js +5 -2
  8. package/build/lib/basedriver/commands/log.js +2 -4
  9. package/build/lib/basedriver/core.d.ts +11 -0
  10. package/build/lib/basedriver/core.d.ts.map +1 -1
  11. package/build/lib/basedriver/core.js +6 -1
  12. package/build/lib/basedriver/helpers.js +2 -2
  13. package/build/lib/express/server.d.ts +70 -7
  14. package/build/lib/express/server.d.ts.map +1 -1
  15. package/build/lib/express/server.js +19 -16
  16. package/build/lib/express/websocket.d.ts +12 -30
  17. package/build/lib/express/websocket.d.ts.map +1 -1
  18. package/build/lib/express/websocket.js +6 -4
  19. package/build/lib/index.d.ts +12 -180
  20. package/build/lib/index.d.ts.map +1 -1
  21. package/build/lib/index.js +107 -80
  22. package/build/lib/jsonwp-proxy/protocol-converter.js +2 -4
  23. package/build/lib/jsonwp-proxy/proxy.js +3 -7
  24. package/build/lib/protocol/index.d.ts +3 -1
  25. package/build/lib/protocol/index.js +13 -1
  26. package/build/lib/protocol/protocol.d.ts +8 -4
  27. package/build/lib/protocol/protocol.d.ts.map +1 -1
  28. package/build/lib/protocol/protocol.js +7 -7
  29. package/build/lib/protocol/routes.js +2 -6
  30. package/build/tsconfig.tsbuildinfo +1 -1
  31. package/lib/basedriver/commands/execute.js +65 -0
  32. package/lib/basedriver/commands/index.js +3 -1
  33. package/lib/basedriver/core.js +15 -0
  34. package/lib/express/server.js +126 -36
  35. package/lib/express/websocket.js +13 -11
  36. package/lib/index.js +19 -61
  37. package/lib/protocol/index.js +4 -0
  38. package/lib/protocol/protocol.js +10 -3
  39. package/package.json +17 -15
  40. package/build/test/basedriver/README.md +0 -5
  41. package/build/test/basedriver/driver-e2e-tests.js +0 -413
  42. package/build/test/basedriver/driver-tests.js +0 -572
  43. package/build/test/basedriver/index.js +0 -26
  44. package/build/test/e2e/basedriver/driver.e2e.spec.js +0 -15
  45. package/build/test/e2e/basedriver/helpers.e2e.spec.js +0 -192
  46. package/build/test/e2e/basedriver/websockets.e2e.spec.js +0 -87
  47. package/build/test/e2e/express/server.e2e.spec.js +0 -159
  48. package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +0 -59
  49. package/build/test/e2e/protocol/fake-driver.js +0 -163
  50. package/build/test/e2e/protocol/helpers.js +0 -25
  51. package/build/test/e2e/protocol/protocol.e2e.spec.js +0 -1186
  52. package/build/test/helpers.js +0 -55
  53. package/build/test/unit/basedriver/capabilities.spec.js +0 -672
  54. package/build/test/unit/basedriver/capability.spec.js +0 -353
  55. package/build/test/unit/basedriver/commands/event.spec.js +0 -110
  56. package/build/test/unit/basedriver/commands/log.spec.js +0 -92
  57. package/build/test/unit/basedriver/device-settings.spec.js +0 -97
  58. package/build/test/unit/basedriver/driver.spec.js +0 -15
  59. package/build/test/unit/basedriver/helpers.spec.js +0 -151
  60. package/build/test/unit/basedriver/timeout.spec.js +0 -135
  61. package/build/test/unit/express/server.spec.js +0 -155
  62. package/build/test/unit/express/static.spec.js +0 -26
  63. package/build/test/unit/jsonwp-proxy/mock-request.js +0 -91
  64. package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +0 -171
  65. package/build/test/unit/jsonwp-proxy/proxy.spec.js +0 -292
  66. package/build/test/unit/jsonwp-proxy/url.spec.js +0 -165
  67. package/build/test/unit/jsonwp-status/status.spec.js +0 -34
  68. package/build/test/unit/protocol/errors.spec.js +0 -390
  69. package/build/test/unit/protocol/routes.spec.js +0 -80
  70. package/build/test/unit/protocol/validator.spec.js +0 -149
  71. package/test/basedriver/README.md +0 -5
  72. package/test/basedriver/driver-e2e-tests.js +0 -386
  73. package/test/basedriver/driver-tests.js +0 -624
  74. package/test/basedriver/index.js +0 -6
@@ -1,353 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _bluebird = _interopRequireDefault(require("bluebird"));
8
-
9
- var _lib = _interopRequireWildcard(require("../../../lib"));
10
-
11
- var _logger = _interopRequireDefault(require("../../../lib/basedriver/logger"));
12
-
13
- var _sinon = require("sinon");
14
-
15
- 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); }
16
-
17
- 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; }
18
-
19
- describe('Desired Capabilities', function () {
20
- let d;
21
- let sandbox;
22
- beforeEach(function () {
23
- d = new _lib.default();
24
- sandbox = (0, _sinon.createSandbox)();
25
- sandbox.spy(d.log, 'warn');
26
- sandbox.spy(_logger.default, 'warn');
27
- });
28
- afterEach(function () {
29
- sandbox.restore();
30
- });
31
- it('should require platformName and deviceName', async function () {
32
- await d.createSession({
33
- firstMatch: [{}]
34
- }).should.eventually.be.rejectedWith(_lib.errors.SessionNotCreatedError, /platformName/);
35
- });
36
- it('should require platformName', async function () {
37
- await d.createSession({
38
- alwaysMatch: {
39
- 'appium:deviceName': 'Delorean'
40
- }
41
- }).should.eventually.be.rejectedWith(_lib.errors.SessionNotCreatedError, /platformName/);
42
- });
43
- it('should not care about cap order', async function () {
44
- await d.createSession(null, null, {
45
- alwaysMatch: {
46
- 'appium:deviceName': 'Delorean',
47
- platformName: 'iOS'
48
- }
49
- }).should.eventually.be.fulfilled;
50
- });
51
- it('should check required caps which are added to driver', async function () {
52
- d.desiredCapConstraints = {
53
- necessary: {
54
- presence: true
55
- },
56
- proper: {
57
- presence: true,
58
- isString: true,
59
- inclusion: ['Delorean', 'Reventon']
60
- }
61
- };
62
- await d.createSession(null, null, {
63
- alwaysMatch: {
64
- platformName: 'iOS',
65
- 'appium:deviceName': 'Delorean'
66
- }
67
- }).should.eventually.be.rejectedWith(_lib.errors.SessionNotCreatedError, /necessary.*proper/);
68
- });
69
- it('should check added required caps in addition to base', async function () {
70
- d.desiredCapConstraints = {
71
- necessary: {
72
- presence: true
73
- },
74
- proper: {
75
- presence: true,
76
- isString: true,
77
- inclusion: ['Delorean', 'Reventon']
78
- }
79
- };
80
- await d.createSession(null, null, {
81
- alwaysMatch: {
82
- 'appium:necessary': 'yup'
83
- }
84
- }).should.eventually.be.rejectedWith(_lib.errors.SessionNotCreatedError, /platformName/);
85
- });
86
- it('should accept extra capabilities', async function () {
87
- await d.createSession(null, null, {
88
- alwaysMatch: {
89
- platformName: 'iOS',
90
- 'appium:deviceName': 'Delorean',
91
- 'appium:extra': 'cheese',
92
- 'appium:hold the': 'sauce'
93
- }
94
- }).should.eventually.be.fulfilled;
95
- });
96
- it('should log the use of extra caps', async function () {
97
- this.timeout(500);
98
- await d.createSession(null, null, {
99
- alwaysMatch: {
100
- platformName: 'iOS',
101
- 'appium:deviceName': 'Delorean',
102
- 'appium:extra': 'cheese',
103
- 'appium:hold the': 'sauce'
104
- }
105
- });
106
- d.log.warn.should.have.been.called;
107
- });
108
- it('should be sensitive to the case of caps', async function () {
109
- await d.createSession(null, null, {
110
- alwaysMatch: {
111
- platformname: 'iOS',
112
- 'appium:deviceName': 'Delorean'
113
- }
114
- }).should.eventually.be.rejectedWith(_lib.errors.SessionNotCreatedError, /platformName/);
115
- });
116
- describe('boolean capabilities', function () {
117
- it('should allow a string "false"', async function () {
118
- await d.createSession(null, null, {
119
- alwaysMatch: {
120
- platformName: 'iOS',
121
- 'appium:deviceName': 'Delorean',
122
- 'appium:noReset': 'false'
123
- }
124
- });
125
- d.log.warn.should.have.been.called;
126
- let sessions = await d.getSessions();
127
- sessions[0].capabilities.noReset.should.eql(false);
128
- });
129
- it('should allow a string "true"', async function () {
130
- await d.createSession(null, null, {
131
- alwaysMatch: {
132
- platformName: 'iOS',
133
- 'appium:deviceName': 'Delorean',
134
- 'appium:noReset': 'true'
135
- }
136
- });
137
- d.log.warn.should.have.been.called;
138
- let sessions = await d.getSessions();
139
- sessions[0].capabilities.noReset.should.eql(true);
140
- });
141
- it('should allow a string "true" in string capabilities', async function () {
142
- await d.createSession(null, null, {
143
- alwaysMatch: {
144
- platformName: 'iOS',
145
- 'appium:deviceName': 'Delorean',
146
- 'appium:language': 'true'
147
- }
148
- });
149
- d.log.warn.should.not.have.been.called;
150
- let sessions = await d.getSessions();
151
- sessions[0].capabilities.language.should.eql('true');
152
- });
153
- });
154
- describe('number capabilities', function () {
155
- it('should allow a string "1"', async function () {
156
- await d.createSession(null, null, {
157
- alwaysMatch: {
158
- platformName: 'iOS',
159
- 'appium:deviceName': 'Delorean',
160
- 'appium:newCommandTimeout': '1'
161
- }
162
- });
163
- d.log.warn.should.have.been.called;
164
- let sessions = await d.getSessions();
165
- sessions[0].capabilities.newCommandTimeout.should.eql(1);
166
- });
167
- it('should allow a string "1.1"', async function () {
168
- await d.createSession(null, null, {
169
- alwaysMatch: {
170
- platformName: 'iOS',
171
- 'appium:deviceName': 'Delorean',
172
- 'appium:newCommandTimeout': '1.1'
173
- }
174
- });
175
- d.log.warn.should.have.been.called;
176
- let sessions = await d.getSessions();
177
- sessions[0].capabilities.newCommandTimeout.should.eql(1.1);
178
- });
179
- it('should allow a string "1" in string capabilities', async function () {
180
- await d.createSession(null, null, {
181
- alwaysMatch: {
182
- platformName: 'iOS',
183
- 'appium:deviceName': 'Delorean',
184
- 'appium:language': '1'
185
- }
186
- });
187
- d.log.warn.should.not.have.been.called;
188
- let sessions = await d.getSessions();
189
- sessions[0].capabilities.language.should.eql('1');
190
- });
191
- });
192
- it('should error if objects in caps', async function () {
193
- await d.createSession(null, null, {
194
- alwaysMatch: {
195
- platformName: {
196
- a: 'iOS'
197
- },
198
- 'appium:deviceName': 'Delorean'
199
- }
200
- }).should.eventually.be.rejectedWith(_lib.errors.SessionNotCreatedError, /platformName/i);
201
- });
202
- it('should check for deprecated caps', async function () {
203
- this.timeout(500);
204
- d.desiredCapConstraints = {
205
- 'lynx-version': {
206
- deprecated: true
207
- }
208
- };
209
- await d.createSession(null, null, {
210
- alwaysMatch: {
211
- platformName: 'iOS',
212
- 'appium:deviceName': 'Delorean',
213
- 'appium:lynx-version': 5
214
- }
215
- });
216
- _logger.default.warn.should.have.been.called;
217
- });
218
- it('should not warn if deprecated=false', async function () {
219
- this.timeout(500);
220
- d.desiredCapConstraints = {
221
- 'lynx-version': {
222
- deprecated: false
223
- }
224
- };
225
- await d.createSession(null, null, {
226
- alwaysMatch: {
227
- platformName: 'iOS',
228
- 'appium:deviceName': 'Delorean',
229
- 'appium:lynx-version': 5
230
- }
231
- });
232
- d.log.warn.should.not.have.been.called;
233
- });
234
- it('should not validate against null/undefined caps', async function () {
235
- d.desiredCapConstraints = {
236
- foo: {
237
- isString: true
238
- }
239
- };
240
-
241
- try {
242
- await d.createSession(null, null, {
243
- alwaysMatch: {
244
- platformName: 'iOS',
245
- 'appium:deviceName': 'Dumb',
246
- 'appium:foo': null
247
- }
248
- });
249
- } finally {
250
- await d.deleteSession();
251
- }
252
-
253
- await d.createSession(null, null, {
254
- alwaysMatch: {
255
- platformName: 'iOS',
256
- 'appium:deviceName': 'Dumb',
257
- 'appium:foo': 1
258
- }
259
- }).should.eventually.be.rejectedWith(/'foo' must be of type string/);
260
-
261
- try {
262
- await d.createSession(null, null, {
263
- alwaysMatch: {
264
- platformName: 'iOS',
265
- 'appium:deviceName': 'Dumb',
266
- 'appium:foo': undefined
267
- }
268
- });
269
- } finally {
270
- await d.deleteSession();
271
- }
272
-
273
- try {
274
- await d.createSession(null, null, {
275
- alwaysMatch: {
276
- platformName: 'iOS',
277
- 'appium:deviceName': 'Dumb',
278
- 'appium:foo': ''
279
- }
280
- });
281
- } finally {
282
- await d.deleteSession();
283
- }
284
- });
285
- it('should still validate null/undefined/empty caps whose presence is required', async function () {
286
- d.desiredCapConstraints = {
287
- foo: {
288
- presence: true
289
- }
290
- };
291
- await d.createSession(null, null, {
292
- alwaysMatch: {
293
- platformName: 'iOS',
294
- 'appium:deviceName': 'Dumb',
295
- 'appium:foo': null
296
- }
297
- }).should.eventually.be.rejectedWith(/blank/);
298
- await d.createSession(null, {
299
- alwaysMatch: {
300
- platformName: 'iOS',
301
- 'appium:deviceName': 'Dumb',
302
- 'appium:foo': ''
303
- }
304
- }).should.eventually.be.rejectedWith(/blank/);
305
- await d.createSession({
306
- firstMatch: [{
307
- platformName: 'iOS',
308
- 'appium:deviceName': 'Dumb',
309
- 'appium:foo': {}
310
- }]
311
- }).should.eventually.be.rejectedWith(/blank/);
312
- await d.createSession({
313
- alwaysMatch: {
314
- platformName: 'iOS',
315
- 'appium:deviceName': 'Dumb',
316
- 'appium:foo': []
317
- }
318
- }).should.eventually.be.rejectedWith(/blank/);
319
- await d.createSession({
320
- alwaysMatch: {
321
- platformName: 'iOS',
322
- 'appium:deviceName': 'Dumb',
323
- 'appium:foo': ' '
324
- }
325
- }).should.eventually.be.rejectedWith(/blank/);
326
- });
327
- describe('w3c', function () {
328
- it('should accept w3c capabilities', async function () {
329
- const [sessionId, caps] = await d.createSession(null, null, {
330
- alwaysMatch: {
331
- platformName: 'iOS',
332
- 'appium:deviceName': 'Delorean'
333
- },
334
- firstMatch: [{}]
335
- });
336
-
337
- try {
338
- sessionId.should.exist;
339
- caps.should.eql({
340
- platformName: 'iOS',
341
- deviceName: 'Delorean'
342
- });
343
- } finally {
344
- await d.deleteSession();
345
- }
346
- });
347
- it('should raise an error if w3c capabilities is not a plain JSON object', async function () {
348
- const testValues = [true, 'string', [], 100];
349
- await _bluebird.default.map(testValues, val => d.createSession(null, null, val).should.eventually.be.rejectedWith(_lib.errors.SessionNotCreatedError));
350
- });
351
- });
352
- });
353
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsImQiLCJzYW5kYm94IiwiYmVmb3JlRWFjaCIsIkJhc2VEcml2ZXIiLCJjcmVhdGVTYW5kYm94Iiwic3B5IiwibG9nIiwibG9nZ2VyIiwiYWZ0ZXJFYWNoIiwicmVzdG9yZSIsIml0IiwiY3JlYXRlU2Vzc2lvbiIsImZpcnN0TWF0Y2giLCJzaG91bGQiLCJldmVudHVhbGx5IiwiYmUiLCJyZWplY3RlZFdpdGgiLCJlcnJvcnMiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiYWx3YXlzTWF0Y2giLCJwbGF0Zm9ybU5hbWUiLCJmdWxmaWxsZWQiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJuZWNlc3NhcnkiLCJwcmVzZW5jZSIsInByb3BlciIsImlzU3RyaW5nIiwiaW5jbHVzaW9uIiwidGltZW91dCIsIndhcm4iLCJoYXZlIiwiYmVlbiIsImNhbGxlZCIsInBsYXRmb3JtbmFtZSIsInNlc3Npb25zIiwiZ2V0U2Vzc2lvbnMiLCJjYXBhYmlsaXRpZXMiLCJub1Jlc2V0IiwiZXFsIiwibm90IiwibGFuZ3VhZ2UiLCJuZXdDb21tYW5kVGltZW91dCIsImEiLCJkZXByZWNhdGVkIiwiZm9vIiwiZGVsZXRlU2Vzc2lvbiIsInVuZGVmaW5lZCIsInNlc3Npb25JZCIsImNhcHMiLCJleGlzdCIsImRldmljZU5hbWUiLCJ0ZXN0VmFsdWVzIiwiQiIsIm1hcCIsInZhbCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iYXNlZHJpdmVyL2NhcGFiaWxpdHkuc3BlYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIEJhc2VEcml2ZXIsIGVycm9yc30gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvbG9nZ2VyJztcbmltcG9ydCB7Y3JlYXRlU2FuZGJveH0gZnJvbSAnc2lub24nO1xuXG5kZXNjcmliZSgnRGVzaXJlZCBDYXBhYmlsaXRpZXMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBkO1xuICBsZXQgc2FuZGJveDtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBzYW5kYm94ID0gY3JlYXRlU2FuZGJveCgpO1xuICAgIHNhbmRib3guc3B5KGQubG9nLCAnd2FybicpO1xuICAgIHNhbmRib3guc3B5KGxvZ2dlciwgJ3dhcm4nKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXF1aXJlIHBsYXRmb3JtTmFtZSBhbmQgZGV2aWNlTmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBkXG4gICAgICAuY3JlYXRlU2Vzc2lvbih7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aChlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciwgL3BsYXRmb3JtTmFtZS8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlcXVpcmUgcGxhdGZvcm1OYW1lJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGRcbiAgICAgIC5jcmVhdGVTZXNzaW9uKHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IsIC9wbGF0Zm9ybU5hbWUvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgY2FyZSBhYm91dCBjYXAgb3JkZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHtcbiAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdEZWxvcmVhbicsXG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ2lPUycsXG4gICAgICB9LFxuICAgIH0pLnNob3VsZC5ldmVudHVhbGx5LmJlLmZ1bGZpbGxlZDtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjaGVjayByZXF1aXJlZCBjYXBzIHdoaWNoIGFyZSBhZGRlZCB0byBkcml2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZC5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7XG4gICAgICBuZWNlc3Nhcnk6IHtcbiAgICAgICAgcHJlc2VuY2U6IHRydWUsXG4gICAgICB9LFxuICAgICAgcHJvcGVyOiB7XG4gICAgICAgIHByZXNlbmNlOiB0cnVlLFxuICAgICAgICBpc1N0cmluZzogdHJ1ZSxcbiAgICAgICAgaW5jbHVzaW9uOiBbJ0RlbG9yZWFuJywgJ1JldmVudG9uJ10sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBkXG4gICAgICAuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IsIC9uZWNlc3NhcnkuKnByb3Blci8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNoZWNrIGFkZGVkIHJlcXVpcmVkIGNhcHMgaW4gYWRkaXRpb24gdG8gYmFzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBkLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IHtcbiAgICAgIG5lY2Vzc2FyeToge1xuICAgICAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBwcm9wZXI6IHtcbiAgICAgICAgcHJlc2VuY2U6IHRydWUsXG4gICAgICAgIGlzU3RyaW5nOiB0cnVlLFxuICAgICAgICBpbmNsdXNpb246IFsnRGVsb3JlYW4nLCAnUmV2ZW50b24nXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IGRcbiAgICAgIC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICAnYXBwaXVtOm5lY2Vzc2FyeSc6ICd5dXAnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IsIC9wbGF0Zm9ybU5hbWUvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhY2NlcHQgZXh0cmEgY2FwYWJpbGl0aWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7XG4gICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICAnYXBwaXVtOmV4dHJhJzogJ2NoZWVzZScsXG4gICAgICAgICdhcHBpdW06aG9sZCB0aGUnOiAnc2F1Y2UnLFxuICAgICAgfSxcbiAgICB9KS5zaG91bGQuZXZlbnR1YWxseS5iZS5mdWxmaWxsZWQ7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbG9nIHRoZSB1c2Ugb2YgZXh0cmEgY2FwcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRpbWVvdXQoNTAwKTtcblxuICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7XG4gICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICAnYXBwaXVtOmV4dHJhJzogJ2NoZWVzZScsXG4gICAgICAgICdhcHBpdW06aG9sZCB0aGUnOiAnc2F1Y2UnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGQubG9nLndhcm4uc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWQ7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgc2Vuc2l0aXZlIHRvIHRoZSBjYXNlIG9mIGNhcHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgZFxuICAgICAgLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge1xuICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgIHBsYXRmb3JtbmFtZTogJ2lPUycsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0RlbG9yZWFuJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yLCAvcGxhdGZvcm1OYW1lLyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdib29sZWFuIGNhcGFiaWxpdGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFsbG93IGEgc3RyaW5nIFwiZmFsc2VcIicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICAgICdhcHBpdW06bm9SZXNldCc6ICdmYWxzZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGQubG9nLndhcm4uc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWQ7XG5cbiAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IGQuZ2V0U2Vzc2lvbnMoKTtcbiAgICAgIHNlc3Npb25zWzBdLmNhcGFiaWxpdGllcy5ub1Jlc2V0LnNob3VsZC5lcWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBhIHN0cmluZyBcInRydWVcIicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICAgICdhcHBpdW06bm9SZXNldCc6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgZC5sb2cud2Fybi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZDtcblxuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuICAgICAgc2Vzc2lvbnNbMF0uY2FwYWJpbGl0aWVzLm5vUmVzZXQuc2hvdWxkLmVxbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgYSBzdHJpbmcgXCJ0cnVlXCIgaW4gc3RyaW5nIGNhcGFiaWxpdGllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICAgICdhcHBpdW06bGFuZ3VhZ2UnOiAndHJ1ZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGQubG9nLndhcm4uc2hvdWxkLm5vdC5oYXZlLmJlZW4uY2FsbGVkO1xuXG4gICAgICBsZXQgc2Vzc2lvbnMgPSBhd2FpdCBkLmdldFNlc3Npb25zKCk7XG4gICAgICBzZXNzaW9uc1swXS5jYXBhYmlsaXRpZXMubGFuZ3VhZ2Uuc2hvdWxkLmVxbCgndHJ1ZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbnVtYmVyIGNhcGFiaWxpdGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFsbG93IGEgc3RyaW5nIFwiMVwiJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdEZWxvcmVhbicsXG4gICAgICAgICAgJ2FwcGl1bTpuZXdDb21tYW5kVGltZW91dCc6ICcxJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgZC5sb2cud2Fybi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZDtcblxuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuICAgICAgc2Vzc2lvbnNbMF0uY2FwYWJpbGl0aWVzLm5ld0NvbW1hbmRUaW1lb3V0LnNob3VsZC5lcWwoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IGEgc3RyaW5nIFwiMS4xXCInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge1xuICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ2lPUycsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0RlbG9yZWFuJyxcbiAgICAgICAgICAnYXBwaXVtOm5ld0NvbW1hbmRUaW1lb3V0JzogJzEuMScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGQubG9nLndhcm4uc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWQ7XG5cbiAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IGQuZ2V0U2Vzc2lvbnMoKTtcbiAgICAgIHNlc3Npb25zWzBdLmNhcGFiaWxpdGllcy5uZXdDb21tYW5kVGltZW91dC5zaG91bGQuZXFsKDEuMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IGEgc3RyaW5nIFwiMVwiIGluIHN0cmluZyBjYXBhYmlsaXRpZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge1xuICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ2lPUycsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0RlbG9yZWFuJyxcbiAgICAgICAgICAnYXBwaXVtOmxhbmd1YWdlJzogJzEnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBkLmxvZy53YXJuLnNob3VsZC5ub3QuaGF2ZS5iZWVuLmNhbGxlZDtcblxuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuICAgICAgc2Vzc2lvbnNbMF0uY2FwYWJpbGl0aWVzLmxhbmd1YWdlLnNob3VsZC5lcWwoJzEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBlcnJvciBpZiBvYmplY3RzIGluIGNhcHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgZFxuICAgICAgLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge1xuICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZToge2E6ICdpT1MnfSxcbiAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IsIC9wbGF0Zm9ybU5hbWUvaSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2hlY2sgZm9yIGRlcHJlY2F0ZWQgY2FwcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRpbWVvdXQoNTAwKTtcblxuICAgIGQuZGVzaXJlZENhcENvbnN0cmFpbnRzID0ge1xuICAgICAgJ2x5bngtdmVyc2lvbic6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7XG4gICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxuICAgICAgICAnYXBwaXVtOmx5bngtdmVyc2lvbic6IDUsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgbG9nZ2VyLndhcm4uc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWQ7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IHdhcm4gaWYgZGVwcmVjYXRlZD1mYWxzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRpbWVvdXQoNTAwKTtcblxuICAgIGQuZGVzaXJlZENhcENvbnN0cmFpbnRzID0ge1xuICAgICAgJ2x5bngtdmVyc2lvbic6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge1xuICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0RlbG9yZWFuJyxcbiAgICAgICAgJ2FwcGl1bTpseW54LXZlcnNpb24nOiA1LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGQubG9nLndhcm4uc2hvdWxkLm5vdC5oYXZlLmJlZW4uY2FsbGVkO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCB2YWxpZGF0ZSBhZ2FpbnN0IG51bGwvdW5kZWZpbmVkIGNhcHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZC5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7XG4gICAgICBmb286IHtcbiAgICAgICAgaXNTdHJpbmc6IHRydWUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdEdW1iJyxcbiAgICAgICAgICAnYXBwaXVtOmZvbyc6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZC5kZWxldGVTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZFxuICAgICAgLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge1xuICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ2lPUycsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0R1bWInLFxuICAgICAgICAgICdhcHBpdW06Zm9vJzogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKC8nZm9vJyBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdEdW1iJyxcbiAgICAgICAgICAnYXBwaXVtOmZvbyc6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdEdW1iJyxcbiAgICAgICAgICAnYXBwaXVtOmZvbyc6ICcnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdGlsbCB2YWxpZGF0ZSBudWxsL3VuZGVmaW5lZC9lbXB0eSBjYXBzIHdob3NlIHByZXNlbmNlIGlzIHJlcXVpcmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGQuZGVzaXJlZENhcENvbnN0cmFpbnRzID0ge1xuICAgICAgZm9vOiB7XG4gICAgICAgIHByZXNlbmNlOiB0cnVlLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgZFxuICAgICAgLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge1xuICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ2lPUycsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0R1bWInLFxuICAgICAgICAgICdhcHBpdW06Zm9vJzogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKC9ibGFuay8pO1xuXG4gICAgYXdhaXQgZFxuICAgICAgLmNyZWF0ZVNlc3Npb24obnVsbCwge1xuICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ2lPUycsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0R1bWInLFxuICAgICAgICAgICdhcHBpdW06Zm9vJzogJycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgvYmxhbmsvKTtcblxuICAgIGF3YWl0IGRcbiAgICAgIC5jcmVhdGVTZXNzaW9uKHtcbiAgICAgICAgZmlyc3RNYXRjaDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ2lPUycsXG4gICAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRHVtYicsXG4gICAgICAgICAgICAnYXBwaXVtOmZvbyc6IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgvYmxhbmsvKTtcblxuICAgIGF3YWl0IGRcbiAgICAgIC5jcmVhdGVTZXNzaW9uKHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdEdW1iJyxcbiAgICAgICAgICAnYXBwaXVtOmZvbyc6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL2JsYW5rLyk7XG5cbiAgICBhd2FpdCBkXG4gICAgICAuY3JlYXRlU2Vzc2lvbih7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRHVtYicsXG4gICAgICAgICAgJ2FwcGl1bTpmb28nOiAnICAnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL2JsYW5rLyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3M2MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgdzNjIGNhcGFiaWxpdGllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdEZWxvcmVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICB9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlc3Npb25JZC5zaG91bGQuZXhpc3Q7XG4gICAgICAgIGNhcHMuc2hvdWxkLmVxbCh7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICAgICBkZXZpY2VOYW1lOiAnRGVsb3JlYW4nLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByYWlzZSBhbiBlcnJvciBpZiB3M2MgY2FwYWJpbGl0aWVzIGlzIG5vdCBhIHBsYWluIEpTT04gb2JqZWN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdFZhbHVlcyA9IFt0cnVlLCAnc3RyaW5nJywgW10sIDEwMF07XG4gICAgICAvLyB0aGlzIGxvb3AgcnVucyBpbiBwYXJhbGxlbCwgYW5kIGRvZXMgbm90IGd1YXJhbnRlZSBhbGwgYXNzZXJ0aW9ucyB3aWxsIGJlIG1hZGVcbiAgICAgIGF3YWl0IEIubWFwKHRlc3RWYWx1ZXMsICh2YWwpID0+XG4gICAgICAgIGRcbiAgICAgICAgICAuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB2YWwpXG4gICAgICAgICAgLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aChlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcilcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsUUFBUSxDQUFDLHNCQUFELEVBQXlCLFlBQVk7RUFDM0MsSUFBSUMsQ0FBSjtFQUNBLElBQUlDLE9BQUo7RUFFQUMsVUFBVSxDQUFDLFlBQVk7SUFDckJGLENBQUMsR0FBRyxJQUFJRyxZQUFKLEVBQUo7SUFDQUYsT0FBTyxHQUFHLElBQUFHLG9CQUFBLEdBQVY7SUFDQUgsT0FBTyxDQUFDSSxHQUFSLENBQVlMLENBQUMsQ0FBQ00sR0FBZCxFQUFtQixNQUFuQjtJQUNBTCxPQUFPLENBQUNJLEdBQVIsQ0FBWUUsZUFBWixFQUFvQixNQUFwQjtFQUNELENBTFMsQ0FBVjtFQU9BQyxTQUFTLENBQUMsWUFBWTtJQUNwQlAsT0FBTyxDQUFDUSxPQUFSO0VBQ0QsQ0FGUSxDQUFUO0VBSUFDLEVBQUUsQ0FBQyw0Q0FBRCxFQUErQyxrQkFBa0I7SUFDakUsTUFBTVYsQ0FBQyxDQUNKVyxhQURHLENBQ1c7TUFDYkMsVUFBVSxFQUFFLENBQUMsRUFBRDtJQURDLENBRFgsRUFJSEMsTUFKRyxDQUlJQyxVQUpKLENBSWVDLEVBSmYsQ0FJa0JDLFlBSmxCLENBSStCQyxXQUFBLENBQU9DLHNCQUp0QyxFQUk4RCxjQUo5RCxDQUFOO0VBS0QsQ0FOQyxDQUFGO0VBUUFSLEVBQUUsQ0FBQyw2QkFBRCxFQUFnQyxrQkFBa0I7SUFDbEQsTUFBTVYsQ0FBQyxDQUNKVyxhQURHLENBQ1c7TUFDYlEsV0FBVyxFQUFFO1FBQ1gscUJBQXFCO01BRFY7SUFEQSxDQURYLEVBTUhOLE1BTkcsQ0FNSUMsVUFOSixDQU1lQyxFQU5mLENBTWtCQyxZQU5sQixDQU0rQkMsV0FBQSxDQUFPQyxzQkFOdEMsRUFNOEQsY0FOOUQsQ0FBTjtFQU9ELENBUkMsQ0FBRjtFQVVBUixFQUFFLENBQUMsaUNBQUQsRUFBb0Msa0JBQWtCO0lB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
@@ -1,110 +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 _lib = require("../../../../lib");
10
-
11
- describe('logging custom events', function () {
12
- it('should allow logging of events', async function () {
13
- const d = new _lib.BaseDriver();
14
-
15
- d._eventHistory.should.eql({
16
- commands: []
17
- });
18
-
19
- await d.logCustomEvent('myorg', 'myevent');
20
-
21
- _lodash.default.keys(d._eventHistory).should.eql(['commands', 'myorg:myevent']);
22
- });
23
- it('should get all events including custom ones', async function () {
24
- const d = new _lib.BaseDriver();
25
-
26
- d._eventHistory.should.eql({
27
- commands: []
28
- });
29
-
30
- d.logEvent('appiumEvent');
31
- await d.logCustomEvent('myorg', 'myevent');
32
- const events = await d.getLogEvents();
33
-
34
- _lodash.default.keys(events).should.eql(['commands', 'appiumEvent', 'myorg:myevent']);
35
- });
36
- });
37
- describe('#getLogEvents', function () {
38
- it('should allow to get all events', async function () {
39
- const d = new _lib.BaseDriver();
40
-
41
- d._eventHistory.should.eql({
42
- commands: []
43
- });
44
-
45
- d._eventHistory.testCommand = ['1', '2', '3'];
46
- (await d.getLogEvents()).should.eql({
47
- commands: [],
48
- testCommand: ['1', '2', '3']
49
- });
50
- });
51
- it('should filter with testCommand', async function () {
52
- const d = new _lib.BaseDriver();
53
-
54
- d._eventHistory.should.eql({
55
- commands: []
56
- });
57
-
58
- d._eventHistory.testCommand = ['1', '2', '3'];
59
- (await d.getLogEvents('testCommand')).should.eql({
60
- testCommand: ['1', '2', '3']
61
- });
62
- });
63
- it('should not filter with wrong but can be a part of the event name', async function () {
64
- const d = new _lib.BaseDriver();
65
-
66
- d._eventHistory.should.eql({
67
- commands: []
68
- });
69
-
70
- d._eventHistory.testCommand = ['1', '2', '3'];
71
- (await d.getLogEvents('testCommandDummy')).should.eql({});
72
- });
73
- it('should filter with multiple event keys', async function () {
74
- const d = new _lib.BaseDriver();
75
-
76
- d._eventHistory.should.eql({
77
- commands: []
78
- });
79
-
80
- d._eventHistory.testCommand = ['1', '2', '3'];
81
- d._eventHistory.testCommand2 = ['4', '5'];
82
- (await d.getLogEvents(['testCommand', 'testCommand2'])).should.eql({
83
- testCommand: ['1', '2', '3'],
84
- testCommand2: ['4', '5']
85
- });
86
- });
87
- it('should filter with custom events', async function () {
88
- const d = new _lib.BaseDriver();
89
-
90
- d._eventHistory.should.eql({
91
- commands: []
92
- });
93
-
94
- d._eventHistory['custom:appiumEvent'] = ['1', '2', '3'];
95
- (await d.getLogEvents(['custom:appiumEvent'])).should.eql({
96
- 'custom:appiumEvent': ['1', '2', '3']
97
- });
98
- });
99
- it('should not filter with no existed event name', async function () {
100
- const d = new _lib.BaseDriver();
101
-
102
- d._eventHistory.should.eql({
103
- commands: []
104
- });
105
-
106
- d._eventHistory.testCommand = ['1', '2', '3'];
107
- (await d.getLogEvents(['noEventName'])).should.eql({});
108
- });
109
- });
110
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0IiwiZCIsIkJhc2VEcml2ZXIiLCJfZXZlbnRIaXN0b3J5Iiwic2hvdWxkIiwiZXFsIiwiY29tbWFuZHMiLCJsb2dDdXN0b21FdmVudCIsIl8iLCJrZXlzIiwibG9nRXZlbnQiLCJldmVudHMiLCJnZXRMb2dFdmVudHMiLCJ0ZXN0Q29tbWFuZCIsInRlc3RDb21tYW5kMiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iYXNlZHJpdmVyL2NvbW1hbmRzL2V2ZW50LnNwZWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7QmFzZURyaXZlcn0gZnJvbSAnLi4vLi4vLi4vLi4vbGliJztcblxuZGVzY3JpYmUoJ2xvZ2dpbmcgY3VzdG9tIGV2ZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ3Nob3VsZCBhbGxvdyBsb2dnaW5nIG9mIGV2ZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBkLl9ldmVudEhpc3Rvcnkuc2hvdWxkLmVxbCh7Y29tbWFuZHM6IFtdfSk7XG4gICAgYXdhaXQgZC5sb2dDdXN0b21FdmVudCgnbXlvcmcnLCAnbXlldmVudCcpO1xuICAgIF8ua2V5cyhkLl9ldmVudEhpc3RvcnkpLnNob3VsZC5lcWwoWydjb21tYW5kcycsICdteW9yZzpteWV2ZW50J10pO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBnZXQgYWxsIGV2ZW50cyBpbmNsdWRpbmcgY3VzdG9tIG9uZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQubG9nRXZlbnQoJ2FwcGl1bUV2ZW50Jyk7XG4gICAgYXdhaXQgZC5sb2dDdXN0b21FdmVudCgnbXlvcmcnLCAnbXlldmVudCcpO1xuICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IGQuZ2V0TG9nRXZlbnRzKCk7XG4gICAgXy5rZXlzKGV2ZW50cykuc2hvdWxkLmVxbChbJ2NvbW1hbmRzJywgJ2FwcGl1bUV2ZW50JywgJ215b3JnOm15ZXZlbnQnXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCcjZ2V0TG9nRXZlbnRzJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGFsbG93IHRvIGdldCBhbGwgZXZlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGQgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgIGQuX2V2ZW50SGlzdG9yeS5zaG91bGQuZXFsKHtjb21tYW5kczogW119KTtcbiAgICBkLl9ldmVudEhpc3RvcnkudGVzdENvbW1hbmQgPSBbJzEnLCAnMicsICczJ107XG4gICAgKGF3YWl0IGQuZ2V0TG9nRXZlbnRzKCkpLnNob3VsZC5lcWwoe1xuICAgICAgY29tbWFuZHM6IFtdLFxuICAgICAgdGVzdENvbW1hbmQ6IFsnMScsICcyJywgJzMnXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmaWx0ZXIgd2l0aCB0ZXN0Q29tbWFuZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBkLl9ldmVudEhpc3Rvcnkuc2hvdWxkLmVxbCh7Y29tbWFuZHM6IFtdfSk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnRlc3RDb21tYW5kID0gWycxJywgJzInLCAnMyddO1xuICAgIChhd2FpdCBkLmdldExvZ0V2ZW50cygndGVzdENvbW1hbmQnKSkuc2hvdWxkLmVxbCh7XG4gICAgICB0ZXN0Q29tbWFuZDogWycxJywgJzInLCAnMyddLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBmaWx0ZXIgd2l0aCB3cm9uZyBidXQgY2FuIGJlIGEgcGFydCBvZiB0aGUgZXZlbnQgbmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBkLl9ldmVudEhpc3Rvcnkuc2hvdWxkLmVxbCh7Y29tbWFuZHM6IFtdfSk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnRlc3RDb21tYW5kID0gWycxJywgJzInLCAnMyddO1xuICAgIChhd2FpdCBkLmdldExvZ0V2ZW50cygndGVzdENvbW1hbmREdW1teScpKS5zaG91bGQuZXFsKHt9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmaWx0ZXIgd2l0aCBtdWx0aXBsZSBldmVudCBrZXlzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGQgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgIGQuX2V2ZW50SGlzdG9yeS5zaG91bGQuZXFsKHtjb21tYW5kczogW119KTtcbiAgICBkLl9ldmVudEhpc3RvcnkudGVzdENvbW1hbmQgPSBbJzEnLCAnMicsICczJ107XG4gICAgZC5fZXZlbnRIaXN0b3J5LnRlc3RDb21tYW5kMiA9IFsnNCcsICc1J107XG4gICAgKGF3YWl0IGQuZ2V0TG9nRXZlbnRzKFsndGVzdENvbW1hbmQnLCAndGVzdENvbW1hbmQyJ10pKS5zaG91bGQuZXFsKHtcbiAgICAgIHRlc3RDb21tYW5kOiBbJzEnLCAnMicsICczJ10sXG4gICAgICB0ZXN0Q29tbWFuZDI6IFsnNCcsICc1J10sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmlsdGVyIHdpdGggY3VzdG9tIGV2ZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBkLl9ldmVudEhpc3Rvcnkuc2hvdWxkLmVxbCh7Y29tbWFuZHM6IFtdfSk7XG4gICAgZC5fZXZlbnRIaXN0b3J5WydjdXN0b206YXBwaXVtRXZlbnQnXSA9IFsnMScsICcyJywgJzMnXTtcbiAgICAoYXdhaXQgZC5nZXRMb2dFdmVudHMoWydjdXN0b206YXBwaXVtRXZlbnQnXSkpLnNob3VsZC5lcWwoe1xuICAgICAgJ2N1c3RvbTphcHBpdW1FdmVudCc6IFsnMScsICcyJywgJzMnXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgZmlsdGVyIHdpdGggbm8gZXhpc3RlZCBldmVudCBuYW1lJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGQgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgIGQuX2V2ZW50SGlzdG9yeS5zaG91bGQuZXFsKHtjb21tYW5kczogW119KTtcbiAgICBkLl9ldmVudEhpc3RvcnkudGVzdENvbW1hbmQgPSBbJzEnLCAnMicsICczJ107XG4gICAgKGF3YWl0IGQuZ2V0TG9nRXZlbnRzKFsnbm9FdmVudE5hbWUnXSkpLnNob3VsZC5lcWwoe30pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFFQUEsUUFBUSxDQUFDLHVCQUFELEVBQTBCLFlBQVk7RUFDNUNDLEVBQUUsQ0FBQyxnQ0FBRCxFQUFtQyxrQkFBa0I7SUFDckQsTUFBTUMsQ0FBQyxHQUFHLElBQUlDLGVBQUosRUFBVjs7SUFDQUQsQ0FBQyxDQUFDRSxhQUFGLENBQWdCQyxNQUFoQixDQUF1QkMsR0FBdkIsQ0FBMkI7TUFBQ0MsUUFBUSxFQUFFO0lBQVgsQ0FBM0I7O0lBQ0EsTUFBTUwsQ0FBQyxDQUFDTSxjQUFGLENBQWlCLE9BQWpCLEVBQTBCLFNBQTFCLENBQU47O0lBQ0FDLGVBQUEsQ0FBRUMsSUFBRixDQUFPUixDQUFDLENBQUNFLGFBQVQsRUFBd0JDLE1BQXhCLENBQStCQyxHQUEvQixDQUFtQyxDQUFDLFVBQUQsRUFBYSxlQUFiLENBQW5DO0VBQ0QsQ0FMQyxDQUFGO0VBTUFMLEVBQUUsQ0FBQyw2Q0FBRCxFQUFnRCxrQkFBa0I7SUFDbEUsTUFBTUMsQ0FBQyxHQUFHLElBQUlDLGVBQUosRUFBVjs7SUFDQUQsQ0FBQyxDQUFDRSxhQUFGLENBQWdCQyxNQUFoQixDQUF1QkMsR0FBdkIsQ0FBMkI7TUFBQ0MsUUFBUSxFQUFFO0lBQVgsQ0FBM0I7O0lBQ0FMLENBQUMsQ0FB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
@@ -1,92 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _log = require("../../../../lib/basedriver/commands/log");
8
-
9
- var _sinon = require("sinon");
10
-
11
- var _lodash = _interopRequireDefault(require("lodash"));
12
-
13
- const expect = chai.expect;
14
- const FIRST_LOGS = ['first', 'logs'];
15
- const SECOND_LOGS = ['second', 'logs'];
16
- const SUPPORTED_LOG_TYPES = {
17
- one: {
18
- description: 'First logs',
19
- getter: () => _lodash.default.clone(FIRST_LOGS)
20
- },
21
- two: {
22
- description: 'Seconds logs',
23
- getter: () => _lodash.default.clone(SECOND_LOGS)
24
- }
25
- };
26
- describe('log commands -', function () {
27
- let sandbox;
28
- let LogCommands;
29
- let logCommands;
30
- beforeEach(function () {
31
- sandbox = (0, _sinon.createSandbox)();
32
- LogCommands = (0, _log.LogMixin)(class {
33
- get log() {
34
- return this._log;
35
- }
36
-
37
- });
38
- logCommands = new LogCommands();
39
- logCommands.supportedLogTypes = {};
40
- logCommands._log = {
41
- debug: _lodash.default.noop
42
- };
43
- });
44
- afterEach(function () {
45
- sandbox.restore();
46
- });
47
- describe('getLogTypes', function () {
48
- it('should return empty array when no supported log types', async function () {
49
- (await logCommands.getLogTypes()).should.eql([]);
50
- });
51
- it('should return keys to log type object', async function () {
52
- logCommands.supportedLogTypes = SUPPORTED_LOG_TYPES;
53
- (await logCommands.getLogTypes()).should.eql(['one', 'two']);
54
- });
55
- });
56
- describe('getLog', function () {
57
- let one;
58
- let two;
59
- beforeEach(function () {
60
- one = sandbox.spy(SUPPORTED_LOG_TYPES.one, 'getter');
61
- two = sandbox.spy(SUPPORTED_LOG_TYPES.two, 'getter');
62
- });
63
- it('should throw error if log type not supported', async function () {
64
- await logCommands.getLog('one').should.eventually.be.rejected;
65
- one.called.should.be.false;
66
- two.called.should.be.false;
67
- });
68
- it('should throw an error with available log types if log type not supported', async function () {
69
- logCommands.supportedLogTypes = SUPPORTED_LOG_TYPES;
70
- let err;
71
-
72
- try {
73
- await logCommands.getLog('three');
74
- } catch (_err) {
75
- err = _err;
76
- }
77
-
78
- expect(err).to.exist;
79
- err.message.should.eql(`Unsupported log type 'three'. Supported types: {"one":"First logs","two":"Seconds logs"}`);
80
- one.called.should.be.false;
81
- two.called.should.be.false;
82
- });
83
- it('should call getter on appropriate log when found', async function () {
84
- logCommands.supportedLogTypes = SUPPORTED_LOG_TYPES;
85
- let logs = await logCommands.getLog('one');
86
- logs.should.eql(FIRST_LOGS);
87
- one.called.should.be.true;
88
- two.called.should.be.false;
89
- });
90
- });
91
- });
92
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBlY3QiLCJjaGFpIiwiRklSU1RfTE9HUyIsIlNFQ09ORF9MT0dTIiwiU1VQUE9SVEVEX0xPR19UWVBFUyIsIm9uZSIsImRlc2NyaXB0aW9uIiwiZ2V0dGVyIiwiXyIsImNsb25lIiwidHdvIiwiZGVzY3JpYmUiLCJzYW5kYm94IiwiTG9nQ29tbWFuZHMiLCJsb2dDb21tYW5kcyIsImJlZm9yZUVhY2giLCJjcmVhdGVTYW5kYm94IiwiTG9nTWl4aW4iLCJsb2ciLCJfbG9nIiwic3VwcG9ydGVkTG9nVHlwZXMiLCJkZWJ1ZyIsIm5vb3AiLCJhZnRlckVhY2giLCJyZXN0b3JlIiwiaXQiLCJnZXRMb2dUeXBlcyIsInNob3VsZCIsImVxbCIsInNweSIsImdldExvZyIsImV2ZW50dWFsbHkiLCJiZSIsInJlamVjdGVkIiwiY2FsbGVkIiwiZmFsc2UiLCJlcnIiLCJfZXJyIiwidG8iLCJleGlzdCIsIm1lc3NhZ2UiLCJsb2dzIiwidHJ1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iYXNlZHJpdmVyL2NvbW1hbmRzL2xvZy5zcGVjLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuaW1wb3J0IHtMb2dNaXhpbn0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvY29tbWFuZHMvbG9nJztcbmltcG9ydCB7Y3JlYXRlU2FuZGJveH0gZnJvbSAnc2lub24nO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNvbnN0IEZJUlNUX0xPR1MgPSBbJ2ZpcnN0JywgJ2xvZ3MnXTtcbmNvbnN0IFNFQ09ORF9MT0dTID0gWydzZWNvbmQnLCAnbG9ncyddO1xuY29uc3QgU1VQUE9SVEVEX0xPR19UWVBFUyA9IHtcbiAgb25lOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaXJzdCBsb2dzJyxcbiAgICBnZXR0ZXI6ICgpID0+IF8uY2xvbmUoRklSU1RfTE9HUyksXG4gIH0sXG4gIHR3bzoge1xuICAgIGRlc2NyaXB0aW9uOiAnU2Vjb25kcyBsb2dzJyxcbiAgICBnZXR0ZXI6ICgpID0+IF8uY2xvbmUoU0VDT05EX0xPR1MpLFxuICB9LFxufTtcblxuZGVzY3JpYmUoJ2xvZyBjb21tYW5kcyAtJywgZnVuY3Rpb24gKCkge1xuICBsZXQgc2FuZGJveDtcbiAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBMb2dNaXhpbj59ICovXG4gIGxldCBMb2dDb21tYW5kcztcblxuICBsZXQgbG9nQ29tbWFuZHM7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goKTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgTG9nQ29tbWFuZHMgPSBMb2dNaXhpbihcbiAgICAgIGNsYXNzIHtcbiAgICAgICAgZ2V0IGxvZygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fbG9nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICBsb2dDb21tYW5kcyA9IG5ldyBMb2dDb21tYW5kcygpO1xuICAgIC8vIHJlc2V0IHRoZSBzdXBwb3J0ZWQgbG9nIHR5cGVzXG4gICAgbG9nQ29tbWFuZHMuc3VwcG9ydGVkTG9nVHlwZXMgPSB7fTtcbiAgICBsb2dDb21tYW5kcy5fbG9nID0gLyoqIEB0eXBlIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1Mb2dnZXJ9ICovICh7XG4gICAgICBkZWJ1ZzogXy5ub29wLFxuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0TG9nVHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgYXJyYXkgd2hlbiBubyBzdXBwb3J0ZWQgbG9nIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKGF3YWl0IGxvZ0NvbW1hbmRzLmdldExvZ1R5cGVzKCkpLnNob3VsZC5lcWwoW10pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGtleXMgdG8gbG9nIHR5cGUgb2JqZWN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbG9nQ29tbWFuZHMuc3VwcG9ydGVkTG9nVHlwZXMgPSBTVVBQT1JURURfTE9HX1RZUEVTO1xuICAgICAgKGF3YWl0IGxvZ0NvbW1hbmRzLmdldExvZ1R5cGVzKCkpLnNob3VsZC5lcWwoWydvbmUnLCAndHdvJ10pO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2dldExvZycsIGZ1bmN0aW9uICgpIHtcbiAgICAvKiogQHR5cGUge3Npbm9uLlNpbm9uU3BpZWRNZW1iZXI8dHlwZW9mIFNVUFBPUlRFRF9MT0dfVFlQRVMub25lLmdldHRlcj59ICovXG4gICAgbGV0IG9uZTtcbiAgICAvKiogQHR5cGUge3Npbm9uLlNpbm9uU3BpZWRNZW1iZXI8dHlwZW9mIFNVUFBPUlRFRF9MT0dfVFlQRVMudHdvLmdldHRlcj59ICovXG4gICAgbGV0IHR3bztcbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uZSA9IHNhbmRib3guc3B5KFNVUFBPUlRFRF9MT0dfVFlQRVMub25lLCAnZ2V0dGVyJyk7XG4gICAgICB0d28gPSBzYW5kYm94LnNweShTVVBQT1JURURfTE9HX1RZUEVTLnR3bywgJ2dldHRlcicpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgbG9nIHR5cGUgbm90IHN1cHBvcnRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGxvZ0NvbW1hbmRzLmdldExvZygnb25lJykuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICBvbmUuY2FsbGVkLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIHR3by5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2l0aCBhdmFpbGFibGUgbG9nIHR5cGVzIGlmIGxvZyB0eXBlIG5vdCBzdXBwb3J0ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2dDb21tYW5kcy5zdXBwb3J0ZWRMb2dUeXBlcyA9IFNVUFBPUlRFRF9MT0dfVFlQRVM7XG4gICAgICBsZXQgZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbG9nQ29tbWFuZHMuZ2V0TG9nKCd0aHJlZScpO1xuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICBlcnIgPSBfZXJyO1xuICAgICAgfVxuICAgICAgZXhwZWN0KGVycikudG8uZXhpc3Q7XG4gICAgICBlcnIubWVzc2FnZS5zaG91bGQuZXFsKFxuICAgICAgICBgVW5zdXBwb3J0ZWQgbG9nIHR5cGUgJ3RocmVlJy4gU3VwcG9ydGVkIHR5cGVzOiB7XCJvbmVcIjpcIkZpcnN0IGxvZ3NcIixcInR3b1wiOlwiU2Vjb25kcyBsb2dzXCJ9YFxuICAgICAgKTtcbiAgICAgIG9uZS5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgdHdvLmNhbGxlZC5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBjYWxsIGdldHRlciBvbiBhcHByb3ByaWF0ZSBsb2cgd2hlbiBmb3VuZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NvbW1hbmRzLnN1cHBvcnRlZExvZ1R5cGVzID0gU1VQUE9SVEVEX0xPR19UWVBFUztcbiAgICAgIGxldCBsb2dzID0gYXdhaXQgbG9nQ29tbWFuZHMuZ2V0TG9nKCdvbmUnKTtcbiAgICAgIGxvZ3Muc2hvdWxkLmVxbChGSVJTVF9MT0dTKTtcbiAgICAgIG9uZS5jYWxsZWQuc2hvdWxkLmJlLnRydWU7XG4gICAgICB0d28uY2FsbGVkLnNob3VsZC5iZS5mYWxzZTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsTUFBTSxHQUFHQyxJ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