@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,97 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _support = require("@appium/support");
8
-
9
- var _sinon = _interopRequireDefault(require("sinon"));
10
-
11
- var _deviceSettings = require("../../../lib/basedriver/device-settings");
12
-
13
- var _errors = require("../../../lib/protocol/errors");
14
-
15
- const {
16
- expect
17
- } = chai;
18
- describe('DeviceSettings', function () {
19
- let sandbox;
20
- beforeEach(function () {
21
- sandbox = _sinon.default.createSandbox();
22
- });
23
- afterEach(function () {
24
- sandbox.restore();
25
- });
26
- describe('constructor', function () {
27
- describe('when no parameteres are provided to the constructor', function () {
28
- it('should not throw', function () {
29
- expect(() => new _deviceSettings.DeviceSettings()).not.to.throw();
30
- });
31
- });
32
- });
33
- describe('instance method', function () {
34
- describe('getSettings()', function () {
35
- it('should return a clone of the internal settings object', function () {
36
- const settings = {
37
- foo: 'bar',
38
- bar: 'foo'
39
- };
40
- const deviceSettings = new _deviceSettings.DeviceSettings(settings);
41
- expect(deviceSettings.getSettings()).to.eql(settings);
42
- });
43
- });
44
- describe('update()', function () {
45
- describe('when no parameters are provided', function () {
46
- it('should reject with an InvalidArgumentError', async function () {
47
- const deviceSettings = new _deviceSettings.DeviceSettings();
48
- await expect(deviceSettings.update()).to.be.rejectedWith(_errors.InvalidArgumentError, /with valid JSON/i);
49
- });
50
- });
51
- describe('when a non-plain-object `newSettings` param is provided', function () {
52
- it('should reject with an InvalidArgumentError', async function () {
53
- const deviceSettings = new _deviceSettings.DeviceSettings();
54
- await expect(deviceSettings.update(null)).to.be.rejectedWith(_errors.InvalidArgumentError, /with valid JSON/i);
55
- });
56
- });
57
- describe('when the size of the `newSettings` param exceeds `MAX_SETTINGS_SIZE`', function () {
58
- beforeEach(function () {
59
- sandbox.stub(_support.node, 'getObjectSize').returns(_deviceSettings.MAX_SETTINGS_SIZE + 1);
60
- });
61
- it('should reject with an InvalidArgumentError', async function () {
62
- const deviceSettings = new _deviceSettings.DeviceSettings();
63
- await expect(deviceSettings.update({
64
- stuff: 'things'
65
- })).to.be.rejectedWith(_errors.InvalidArgumentError, /object size exceeds/i);
66
- });
67
- });
68
- describe('when the `newSettings` param is valid', function () {
69
- let onSettingsUpdate;
70
- beforeEach(function () {
71
- onSettingsUpdate = sandbox.stub();
72
- });
73
- describe('when the new settings do not differ', function () {
74
- it('should not call the `_onSettingsUpdate` listener', async function () {
75
- const deviceSettings = new _deviceSettings.DeviceSettings({
76
- stuff: 'things'
77
- }, onSettingsUpdate);
78
- await deviceSettings.update({
79
- stuff: 'things'
80
- });
81
- expect(onSettingsUpdate).not.to.have.been.called;
82
- });
83
- });
84
- describe('when the new settings differ', function () {
85
- it('should call the `_onSettingsUpdate` listener', async function () {
86
- const deviceSettings = new _deviceSettings.DeviceSettings({}, onSettingsUpdate);
87
- await deviceSettings.update({
88
- stuff: 'things'
89
- });
90
- expect(onSettingsUpdate).to.have.been.calledOnceWithExactly('stuff', 'things', undefined);
91
- });
92
- });
93
- });
94
- });
95
- });
96
- });
97
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBlY3QiLCJjaGFpIiwiZGVzY3JpYmUiLCJzYW5kYm94IiwiYmVmb3JlRWFjaCIsInNpbm9uIiwiY3JlYXRlU2FuZGJveCIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJpdCIsIkRldmljZVNldHRpbmdzIiwibm90IiwidG8iLCJ0aHJvdyIsInNldHRpbmdzIiwiZm9vIiwiYmFyIiwiZGV2aWNlU2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsImVxbCIsInVwZGF0ZSIsImJlIiwicmVqZWN0ZWRXaXRoIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJzdHViIiwibm9kZSIsInJldHVybnMiLCJNQVhfU0VUVElOR1NfU0laRSIsInN0dWZmIiwib25TZXR0aW5nc1VwZGF0ZSIsImhhdmUiLCJiZWVuIiwiY2FsbGVkIiwiY2FsbGVkT25jZVdpdGhFeGFjdGx5IiwidW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2Jhc2Vkcml2ZXIvZGV2aWNlLXNldHRpbmdzLnNwZWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtub2RlfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7RGV2aWNlU2V0dGluZ3MsIE1BWF9TRVRUSU5HU19TSVpFfSBmcm9tICcuLi8uLi8uLi9saWIvYmFzZWRyaXZlci9kZXZpY2Utc2V0dGluZ3MnO1xuaW1wb3J0IHtJbnZhbGlkQXJndW1lbnRFcnJvcn0gZnJvbSAnLi4vLi4vLi4vbGliL3Byb3RvY29sL2Vycm9ycyc7XG5cbmNvbnN0IHtleHBlY3R9ID0gY2hhaTtcblxuZGVzY3JpYmUoJ0RldmljZVNldHRpbmdzJywgZnVuY3Rpb24gKCkge1xuICBsZXQgc2FuZGJveDtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gbm8gcGFyYW1ldGVyZXMgYXJlIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbm90IHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gbmV3IERldmljZVNldHRpbmdzKCkpLm5vdC50by50aHJvdygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpbnN0YW5jZSBtZXRob2QnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ2dldFNldHRpbmdzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhIGNsb25lIG9mIHRoZSBpbnRlcm5hbCBzZXR0aW5ncyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICAgIGZvbzogJ2JhcicsXG4gICAgICAgICAgYmFyOiAnZm9vJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGV2aWNlU2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgICAgICBleHBlY3QoZGV2aWNlU2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkudG8uZXFsKHNldHRpbmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3VwZGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgZGVzY3JpYmUoJ3doZW4gbm8gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IHdpdGggYW4gSW52YWxpZEFyZ3VtZW50RXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgZGV2aWNlU2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoKTtcbiAgICAgICAgICBhd2FpdCBleHBlY3QoZGV2aWNlU2V0dGluZ3MudXBkYXRlKCkpLnRvLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLFxuICAgICAgICAgICAgL3dpdGggdmFsaWQgSlNPTi9pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gYSBub24tcGxhaW4tb2JqZWN0IGBuZXdTZXR0aW5nc2AgcGFyYW0gaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IHdpdGggYW4gSW52YWxpZEFyZ3VtZW50RXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgZGV2aWNlU2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoKTtcbiAgICAgICAgICBhd2FpdCBleHBlY3QoZGV2aWNlU2V0dGluZ3MudXBkYXRlKG51bGwpKS50by5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgICAgICAgICAgIC93aXRoIHZhbGlkIEpTT04vaVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBzaXplIG9mIHRoZSBgbmV3U2V0dGluZ3NgIHBhcmFtIGV4Y2VlZHMgYE1BWF9TRVRUSU5HU19TSVpFYCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBlYXNpZXIgdGhhbiBzZW5kaW5nIGEgMjFNQiBvYmplY3RcbiAgICAgICAgICBzYW5kYm94LnN0dWIobm9kZSwgJ2dldE9iamVjdFNpemUnKS5yZXR1cm5zKE1BWF9TRVRUSU5HU19TSVpFICsgMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IHdpdGggYW4gSW52YWxpZEFyZ3VtZW50RXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgZGV2aWNlU2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoKTtcbiAgICAgICAgICBhd2FpdCBleHBlY3QoZGV2aWNlU2V0dGluZ3MudXBkYXRlKHtzdHVmZjogJ3RoaW5ncyd9KSkudG8uYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gICAgICAgICAgICAvb2JqZWN0IHNpemUgZXhjZWVkcy9pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIGBuZXdTZXR0aW5nc2AgcGFyYW0gaXMgdmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBvblNldHRpbmdzVXBkYXRlO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG9uU2V0dGluZ3NVcGRhdGUgPSBzYW5kYm94LnN0dWIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIG5ldyBzZXR0aW5ncyBkbyBub3QgZGlmZmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgbm90IGNhbGwgdGhlIGBfb25TZXR0aW5nc1VwZGF0ZWAgbGlzdGVuZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2VTZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7c3R1ZmY6ICd0aGluZ3MnfSwgb25TZXR0aW5nc1VwZGF0ZSk7XG4gICAgICAgICAgICBhd2FpdCBkZXZpY2VTZXR0aW5ncy51cGRhdGUoe3N0dWZmOiAndGhpbmdzJ30pO1xuICAgICAgICAgICAgZXhwZWN0KG9uU2V0dGluZ3NVcGRhdGUpLm5vdC50by5oYXZlLmJlZW4uY2FsbGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiB0aGUgbmV3IHNldHRpbmdzIGRpZmZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIGNhbGwgdGhlIGBfb25TZXR0aW5nc1VwZGF0ZWAgbGlzdGVuZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2VTZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgb25TZXR0aW5nc1VwZGF0ZSk7XG4gICAgICAgICAgICBhd2FpdCBkZXZpY2VTZXR0aW5ncy51cGRhdGUoe3N0dWZmOiAndGhpbmdzJ30pO1xuICAgICAgICAgICAgZXhwZWN0KG9uU2V0dGluZ3NVcGRhdGUpLnRvLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoXG4gICAgICAgICAgICAgICdzdHVmZicsXG4gICAgICAgICAgICAgICd0aGluZ3MnLFxuICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU07RUFBQ0E7QUFBRCxJQUFXQyxJQUFqQjtBQUVBQyxRQUFRLENBQUMsZ0JBQUQsRUFBbUIsWUFBWTtFQUNyQyxJQUFJQyxPQUFKO0VBRUFDLFVBQVUsQ0FBQyxZQUFZO0lBQ3JCRCxPQUFPLEdBQUdFLGNBQUEsQ0FBTUMsYUFBTixFQUFWO0VBQ0QsQ0FGUyxDQUFWO0VBSUFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3BCSixPQUFPLENBQUNLLE9BQVI7RUFDRCxDQUZRLENBQVQ7RUFJQU4sUUFBUSxDQUFDLGFBQUQsRUFBZ0IsWUFBWTtJQUNsQ0EsUUFBUSxDQUFDLHFEQUFELEVBQXdELFlBQVk7TUFDMUVPLEVBQUUsQ0FBQyxrQkFB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
@@ -1,15 +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 = _interopRequireDefault(require("../../../lib"));
8
-
9
- var _basedriver = require("../../basedriver");
10
-
11
- (0, _basedriver.baseDriverUnitTests)(_lib.default, {
12
- platformName: 'iOS',
13
- 'appium:deviceName': 'Delorean'
14
- });
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYXNlRHJpdmVyVW5pdFRlc3RzIiwiQmFzZURyaXZlciIsInBsYXRmb3JtTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iYXNlZHJpdmVyL2RyaXZlci5zcGVjLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgQmFzZURyaXZlciBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0IHtiYXNlRHJpdmVyVW5pdFRlc3RzfSBmcm9tICcuLi8uLi9iYXNlZHJpdmVyJztcblxuYmFzZURyaXZlclVuaXRUZXN0cyhCYXNlRHJpdmVyLCB7XG4gIHBsYXRmb3JtTmFtZTogJ2lPUycsXG4gICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdEZWxvcmVhbicsXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBRUEsSUFBQUEsK0JBQUEsRUFBb0JDLFlBQXBCLEVBQWdDO0VBQzlCQyxZQUFZLEVBQUUsS0FEZ0I7RUFFOUIscUJBQXFCO0FBRlMsQ0FBaEMifQ==
@@ -1,151 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _support = require("@appium/support");
8
-
9
- var _helpers = require("../../../lib/basedriver/helpers");
10
-
11
- var _sinon = _interopRequireDefault(require("sinon"));
12
-
13
- describe('helpers', function () {
14
- describe('#isPackageOrBundle', function () {
15
- it('should accept packages and bundles', function () {
16
- (0, _helpers.isPackageOrBundle)('io.appium.testapp').should.be.true;
17
- });
18
- it('should not accept non-packages or non-bundles', function () {
19
- (0, _helpers.isPackageOrBundle)('foo').should.be.false;
20
- (0, _helpers.isPackageOrBundle)('/path/to/an.app').should.be.false;
21
- (0, _helpers.isPackageOrBundle)('/path/to/an.apk').should.be.false;
22
- });
23
- });
24
- describe('#duplicateKeys', function () {
25
- it('should translate key in an object', function () {
26
- (0, _helpers.duplicateKeys)({
27
- foo: 'hello world'
28
- }, 'foo', 'bar').should.eql({
29
- foo: 'hello world',
30
- bar: 'hello world'
31
- });
32
- });
33
- it('should translate key in an object within an object', function () {
34
- (0, _helpers.duplicateKeys)({
35
- key: {
36
- foo: 'hello world'
37
- }
38
- }, 'foo', 'bar').should.eql({
39
- key: {
40
- foo: 'hello world',
41
- bar: 'hello world'
42
- }
43
- });
44
- });
45
- it('should translate key in an object with an array', function () {
46
- (0, _helpers.duplicateKeys)([{
47
- key: {
48
- foo: 'hello world'
49
- }
50
- }, {
51
- foo: 'HELLO WORLD'
52
- }], 'foo', 'bar').should.eql([{
53
- key: {
54
- foo: 'hello world',
55
- bar: 'hello world'
56
- }
57
- }, {
58
- foo: 'HELLO WORLD',
59
- bar: 'HELLO WORLD'
60
- }]);
61
- });
62
- it('should duplicate both keys', function () {
63
- (0, _helpers.duplicateKeys)({
64
- keyOne: {
65
- foo: 'hello world'
66
- },
67
- keyTwo: {
68
- bar: 'HELLO WORLD'
69
- }
70
- }, 'foo', 'bar').should.eql({
71
- keyOne: {
72
- foo: 'hello world',
73
- bar: 'hello world'
74
- },
75
- keyTwo: {
76
- bar: 'HELLO WORLD',
77
- foo: 'HELLO WORLD'
78
- }
79
- });
80
- });
81
- it('should not do anything to primitives', function () {
82
- [0, 1, -1, true, false, null, undefined, '', 'Hello World'].forEach(item => {
83
- should.equal((0, _helpers.duplicateKeys)(item), item);
84
- });
85
- });
86
- it('should rename keys on big complex objects', function () {
87
- const input = [{
88
- foo: 'bar'
89
- }, {
90
- hello: {
91
- world: {
92
- foo: 'BAR'
93
- }
94
- },
95
- foo: 'bahr'
96
- }, 'foo', null, 0];
97
- const expectedOutput = [{
98
- foo: 'bar',
99
- FOO: 'bar'
100
- }, {
101
- hello: {
102
- world: {
103
- foo: 'BAR',
104
- FOO: 'BAR'
105
- }
106
- },
107
- foo: 'bahr',
108
- FOO: 'bahr'
109
- }, 'foo', null, 0];
110
- (0, _helpers.duplicateKeys)(input, 'foo', 'FOO').should.deep.equal(expectedOutput);
111
- });
112
- });
113
- describe('#configureApp', function () {
114
- let sandbox;
115
- beforeEach(function () {
116
- sandbox = _sinon.default.createSandbox();
117
- sandbox.stub(_support.zip, 'extractAllTo').resolves();
118
- sandbox.stub(_support.zip, 'assertValidZip').resolves();
119
- sandbox.stub(_support.fs, 'mv').resolves();
120
- sandbox.stub(_support.fs, 'stat').resolves({
121
- isFile: () => true,
122
- isDirectory: () => false
123
- });
124
- sandbox.stub(_support.fs, 'exists').resolves(true);
125
- sandbox.stub(_support.fs, 'hash').resolves('0xDEADBEEF');
126
- sandbox.stub(_support.fs, 'glob').resolves(['/path/to/an.apk']);
127
- sandbox.stub(_support.fs, 'rimraf').resolves();
128
- sandbox.stub(_support.tempDir, 'openDir').resolves('/some/dir');
129
- });
130
- afterEach(function () {
131
- sandbox.restore();
132
- });
133
- it('should pass "useSystemUnzip" flag through to @appium/support', async function () {
134
- await (0, _helpers.configureApp)('/path/to/an.apk.zip', '.apk');
135
- _support.zip.extractAllTo.getCall(0).lastArg.useSystemUnzip.should.be.true;
136
- });
137
- });
138
- });
139
- describe('parseCapsArray', function () {
140
- it('should parse string into array', function () {
141
- (0, _helpers.parseCapsArray)('/tmp/my/app.zip').should.eql(['/tmp/my/app.zip']);
142
- });
143
- it('should parse array as string into array', function () {
144
- (0, _helpers.parseCapsArray)('["/tmp/my/app.zip"]').should.eql(['/tmp/my/app.zip']);
145
- (0, _helpers.parseCapsArray)('["/tmp/my/app.zip","/tmp/my/app2.zip"]').should.eql(['/tmp/my/app.zip', '/tmp/my/app2.zip']);
146
- });
147
- it('should return an array without change', function () {
148
- (0, _helpers.parseCapsArray)(['a', 'b']).should.eql(['a', 'b']);
149
- });
150
- });
151
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0IiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJzaG91bGQiLCJiZSIsInRydWUiLCJmYWxzZSIsImR1cGxpY2F0ZUtleXMiLCJmb28iLCJlcWwiLCJiYXIiLCJrZXkiLCJrZXlPbmUiLCJrZXlUd28iLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwiaXRlbSIsImVxdWFsIiwiaW5wdXQiLCJoZWxsbyIsIndvcmxkIiwiZXhwZWN0ZWRPdXRwdXQiLCJGT08iLCJkZWVwIiwic2FuZGJveCIsImJlZm9yZUVhY2giLCJzaW5vbiIsImNyZWF0ZVNhbmRib3giLCJzdHViIiwiemlwIiwicmVzb2x2ZXMiLCJmcyIsImlzRmlsZSIsImlzRGlyZWN0b3J5IiwidGVtcERpciIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJjb25maWd1cmVBcHAiLCJleHRyYWN0QWxsVG8iLCJnZXRDYWxsIiwibGFzdEFyZyIsInVzZVN5c3RlbVVuemlwIiwicGFyc2VDYXBzQXJyYXkiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvYmFzZWRyaXZlci9oZWxwZXJzLnNwZWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt6aXAsIGZzLCB0ZW1wRGlyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHtcbiAgY29uZmlndXJlQXBwLFxuICBpc1BhY2thZ2VPckJ1bmRsZSxcbiAgZHVwbGljYXRlS2V5cyxcbiAgcGFyc2VDYXBzQXJyYXksXG59IGZyb20gJy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2hlbHBlcnMnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcblxuZGVzY3JpYmUoJ2hlbHBlcnMnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCcjaXNQYWNrYWdlT3JCdW5kbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgcGFja2FnZXMgYW5kIGJ1bmRsZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1BhY2thZ2VPckJ1bmRsZSgnaW8uYXBwaXVtLnRlc3RhcHAnKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBhY2NlcHQgbm9uLXBhY2thZ2VzIG9yIG5vbi1idW5kbGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNQYWNrYWdlT3JCdW5kbGUoJ2ZvbycpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIGlzUGFja2FnZU9yQnVuZGxlKCcvcGF0aC90by9hbi5hcHAnKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBpc1BhY2thZ2VPckJ1bmRsZSgnL3BhdGgvdG8vYW4uYXBrJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnI2R1cGxpY2F0ZUtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0cmFuc2xhdGUga2V5IGluIGFuIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGR1cGxpY2F0ZUtleXMoe2ZvbzogJ2hlbGxvIHdvcmxkJ30sICdmb28nLCAnYmFyJykuc2hvdWxkLmVxbCh7XG4gICAgICAgIGZvbzogJ2hlbGxvIHdvcmxkJyxcbiAgICAgICAgYmFyOiAnaGVsbG8gd29ybGQnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0cmFuc2xhdGUga2V5IGluIGFuIG9iamVjdCB3aXRoaW4gYW4gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZHVwbGljYXRlS2V5cyh7a2V5OiB7Zm9vOiAnaGVsbG8gd29ybGQnfX0sICdmb28nLCAnYmFyJykuc2hvdWxkLmVxbCh7XG4gICAgICAgIGtleToge2ZvbzogJ2hlbGxvIHdvcmxkJywgYmFyOiAnaGVsbG8gd29ybGQnfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdHJhbnNsYXRlIGtleSBpbiBhbiBvYmplY3Qgd2l0aCBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGR1cGxpY2F0ZUtleXMoW3trZXk6IHtmb286ICdoZWxsbyB3b3JsZCd9fSwge2ZvbzogJ0hFTExPIFdPUkxEJ31dLCAnZm9vJywgJ2JhcicpLnNob3VsZC5lcWwoW1xuICAgICAgICB7a2V5OiB7Zm9vOiAnaGVsbG8gd29ybGQnLCBiYXI6ICdoZWxsbyB3b3JsZCd9fSxcbiAgICAgICAge2ZvbzogJ0hFTExPIFdPUkxEJywgYmFyOiAnSEVMTE8gV09STEQnfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZHVwbGljYXRlIGJvdGgga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGR1cGxpY2F0ZUtleXMoXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlPbmU6IHtcbiAgICAgICAgICAgIGZvbzogJ2hlbGxvIHdvcmxkJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtleVR3bzoge1xuICAgICAgICAgICAgYmFyOiAnSEVMTE8gV09STEQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdmb28nLFxuICAgICAgICAnYmFyJ1xuICAgICAgKS5zaG91bGQuZXFsKHtcbiAgICAgICAga2V5T25lOiB7XG4gICAgICAgICAgZm9vOiAnaGVsbG8gd29ybGQnLFxuICAgICAgICAgIGJhcjogJ2hlbGxvIHdvcmxkJyxcbiAgICAgICAgfSxcbiAgICAgICAga2V5VHdvOiB7XG4gICAgICAgICAgYmFyOiAnSEVMTE8gV09STEQnLFxuICAgICAgICAgIGZvbzogJ0hFTExPIFdPUkxEJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IGRvIGFueXRoaW5nIHRvIHByaW1pdGl2ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBbMCwgMSwgLTEsIHRydWUsIGZhbHNlLCBudWxsLCB1bmRlZmluZWQsICcnLCAnSGVsbG8gV29ybGQnXS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIHNob3VsZC5lcXVhbChkdXBsaWNhdGVLZXlzKGl0ZW0pLCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmVuYW1lIGtleXMgb24gYmlnIGNvbXBsZXggb2JqZWN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW1xuICAgICAgICB7Zm9vOiAnYmFyJ30sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWxsbzoge1xuICAgICAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgICAgZm9vOiAnQkFSJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb286ICdiYWhyJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2ZvbycsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDAsXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSBbXG4gICAgICAgIHtmb286ICdiYXInLCBGT086ICdiYXInfSxcbiAgICAgICAge1xuICAgICAgICAgIGhlbGxvOiB7XG4gICAgICAgICAgICB3b3JsZDoge1xuICAgICAgICAgICAgICBmb286ICdCQVInLFxuICAgICAgICAgICAgICBGT086ICdCQVInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvbzogJ2JhaHInLFxuICAgICAgICAgIEZPTzogJ2JhaHInLFxuICAgICAgICB9LFxuICAgICAgICAnZm9vJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMCxcbiAgICAgIF07XG4gICAgICBkdXBsaWNhdGVLZXlzKGlucHV0LCAnZm9vJywgJ0ZPTycpLnNob3VsZC5kZWVwLmVxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJyNjb25maWd1cmVBcHAnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHNhbmRib3g7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgICBzYW5kYm94LnN0dWIoemlwLCAnZXh0cmFjdEFsbFRvJykucmVzb2x2ZXMoKTtcbiAgICAgIHNhbmRib3guc3R1Yih6aXAsICdhc3NlcnRWYWxpZFppcCcpLnJlc29sdmVzKCk7XG4gICAgICBzYW5kYm94LnN0dWIoZnMsICdtdicpLnJlc29sdmVzKCk7XG4gICAgICBzYW5kYm94LnN0dWIoZnMsICdzdGF0JykucmVzb2x2ZXMoe1xuICAgICAgICBpc0ZpbGU6ICgpID0+IHRydWUsXG4gICAgICAgIGlzRGlyZWN0b3J5OiAoKSA9PiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgc2FuZGJveC5zdHViKGZzLCAnZXhpc3RzJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICBzYW5kYm94LnN0dWIoZnMsICdoYXNoJykucmVzb2x2ZXMoJzB4REVBREJFRUYnKTtcbiAgICAgIHNhbmRib3guc3R1YihmcywgJ2dsb2InKS5yZXNvbHZlcyhbJy9wYXRoL3RvL2FuLmFwayddKTtcbiAgICAgIHNhbmRib3guc3R1YihmcywgJ3JpbXJhZicpLnJlc29sdmVzKCk7XG4gICAgICBzYW5kYm94LnN0dWIodGVtcERpciwgJ29wZW5EaXInKS5yZXNvbHZlcygnL3NvbWUvZGlyJyk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgXCJ1c2VTeXN0ZW1VbnppcFwiIGZsYWcgdGhyb3VnaCB0byBAYXBwaXVtL3N1cHBvcnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBjb25maWd1cmVBcHAoJy9wYXRoL3RvL2FuLmFway56aXAnLCAnLmFwaycpO1xuICAgICAgemlwLmV4dHJhY3RBbGxUby5nZXRDYWxsKDApLmxhc3RBcmcudXNlU3lzdGVtVW56aXAuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdwYXJzZUNhcHNBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ3Nob3VsZCBwYXJzZSBzdHJpbmcgaW50byBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICBwYXJzZUNhcHNBcnJheSgnL3RtcC9teS9hcHAuemlwJykuc2hvdWxkLmVxbChbJy90bXAvbXkvYXBwLnppcCddKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgcGFyc2UgYXJyYXkgYXMgc3RyaW5nIGludG8gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgcGFyc2VDYXBzQXJyYXkoJ1tcIi90bXAvbXkvYXBwLnppcFwiXScpLnNob3VsZC5lcWwoWycvdG1wL215L2FwcC56aXAnXSk7XG4gICAgcGFyc2VDYXBzQXJyYXkoJ1tcIi90bXAvbXkvYXBwLnppcFwiLFwiL3RtcC9teS9hcHAyLnppcFwiXScpLnNob3VsZC5lcWwoW1xuICAgICAgJy90bXAvbXkvYXBwLnppcCcsXG4gICAgICAnL3RtcC9teS9hcHAyLnppcCcsXG4gICAgXSk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRob3V0IGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICBwYXJzZUNhcHNBcnJheShbJ2EnLCAnYiddKS5zaG91bGQuZXFsKFsnYScsICdiJ10pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFNQTs7QUFFQUEsUUFBUSxDQUFDLFNBQUQsRUFBWSxZQUFZO0VBQzlCQSxRQUFRLENBQUMsb0JBQUQsRUFBdUIsWUFBWTtJQUN6Q0MsRUFBRSxDQUFDLG9DQUFELEVBQXVDLFlBQVk7TUFDbkQsSUFBQUMsMEJBQUEsRUFBa0IsbUJBQWxCLEVBQXVDQyxNQUF2QyxDQUE4Q0MsRUFBOUMsQ0FBaURDLElBQWpEO0lBQ0QsQ0FGQyxDQUFGO0lBR0FKLEVBQUUsQ0FBQywrQ0FBRCxFQUFrRCxZQUFZO01BQzlELElBQUFDLDBCQUFBLEVBQWtCLEtBQWxCLEVBQXlCQyxNQUF6QixDQUFnQ0MsRUFBaEMsQ0FBbUNFLEtBQW5DO01BQ0EsSUFBQUosMEJBQUEsRUFBa0IsaUJBQWxCLEVBQXFDQyxNQUFy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
@@ -1,135 +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 = _interopRequireDefault(require("../../../lib"));
8
-
9
- var _sinon = require("sinon");
10
-
11
- describe('timeout', function () {
12
- let driver = new _lib.default();
13
- let implicitWaitSpy;
14
- let sandbox;
15
- beforeEach(function () {
16
- sandbox = (0, _sinon.createSandbox)();
17
- driver.implicitWaitMs = 0;
18
- implicitWaitSpy = sandbox.spy(driver, 'setImplicitWait');
19
- });
20
- afterEach(function () {
21
- sandbox.restore();
22
- });
23
- describe('timeouts', function () {
24
- describe('errors', function () {
25
- it('should throw an error if something random is sent', async function () {
26
- await driver.timeouts('random timeout', 'howdy').should.eventually.be.rejected;
27
- });
28
- it('should throw an error if timeout is negative', async function () {
29
- await driver.timeouts('random timeout', -42).should.eventually.be.rejected;
30
- });
31
- it('should throw an errors if timeout type is unknown', async function () {
32
- await driver.timeouts('random timeout', 42).should.eventually.be.rejected;
33
- });
34
- it('should throw an error if something random is sent to scriptDuration', async function () {
35
- await driver.timeouts(undefined, undefined, 123, undefined, undefined).should.eventually.be.rejected;
36
- });
37
- it('should throw an error if something random is sent to pageLoadDuration', async function () {
38
- await driver.timeouts(undefined, undefined, undefined, 123, undefined).should.eventually.be.rejected;
39
- });
40
- });
41
- describe('implicit wait', function () {
42
- it('should call setImplicitWait when given an integer', async function () {
43
- await driver.timeouts('implicit', 42);
44
- implicitWaitSpy.calledOnce.should.be.true;
45
- implicitWaitSpy.firstCall.args[0].should.equal(42);
46
- driver.implicitWaitMs.should.eql(42);
47
- });
48
- it('should call setImplicitWait when given a string', async function () {
49
- await driver.timeouts('implicit', '42');
50
- implicitWaitSpy.calledOnce.should.be.true;
51
- implicitWaitSpy.firstCall.args[0].should.equal(42);
52
- driver.implicitWaitMs.should.eql(42);
53
- });
54
- it('should call setImplicitWait when given an integer to implicitDuration', async function () {
55
- await driver.timeouts(undefined, undefined, undefined, undefined, 42);
56
- implicitWaitSpy.calledOnce.should.be.true;
57
- implicitWaitSpy.firstCall.args[0].should.equal(42);
58
- driver.implicitWaitMs.should.eql(42);
59
- });
60
- it('should call setImplicitWait when given a string to implicitDuration', async function () {
61
- await driver.timeouts(undefined, undefined, undefined, undefined, '42');
62
- implicitWaitSpy.calledOnce.should.be.true;
63
- implicitWaitSpy.firstCall.args[0].should.equal(42);
64
- driver.implicitWaitMs.should.eql(42);
65
- });
66
- });
67
- });
68
- describe('implicitWait', function () {
69
- it('should call setImplicitWait when given an integer', async function () {
70
- await driver.implicitWait(42);
71
- implicitWaitSpy.calledOnce.should.be.true;
72
- implicitWaitSpy.firstCall.args[0].should.equal(42);
73
- driver.implicitWaitMs.should.eql(42);
74
- });
75
- it('should call setImplicitWait when given a string', async function () {
76
- await driver.implicitWait('42');
77
- implicitWaitSpy.calledOnce.should.be.true;
78
- implicitWaitSpy.firstCall.args[0].should.equal(42);
79
- driver.implicitWaitMs.should.eql(42);
80
- });
81
- it('should throw an error if something random is sent', async function () {
82
- await driver.implicitWait('howdy').should.eventually.be.rejected;
83
- });
84
- it('should throw an error if timeout is negative', async function () {
85
- await driver.implicitWait(-42).should.eventually.be.rejected;
86
- });
87
- });
88
- describe('set implicit wait', function () {
89
- it('should set the implicit wait with an integer', function () {
90
- driver.setImplicitWait(42);
91
- driver.implicitWaitMs.should.eql(42);
92
- });
93
- describe('with managed driver', function () {
94
- let managedDriver1 = new _lib.default();
95
- let managedDriver2 = new _lib.default();
96
- before(function () {
97
- driver.addManagedDriver(managedDriver1);
98
- driver.addManagedDriver(managedDriver2);
99
- });
100
- after(function () {
101
- driver.managedDrivers = [];
102
- });
103
- it('should set the implicit wait on managed drivers', function () {
104
- driver.setImplicitWait(42);
105
- driver.implicitWaitMs.should.eql(42);
106
- managedDriver1.implicitWaitMs.should.eql(42);
107
- managedDriver2.implicitWaitMs.should.eql(42);
108
- });
109
- });
110
- });
111
- describe('set new command timeout', function () {
112
- it('should set the new command timeout with an integer', function () {
113
- driver.setNewCommandTimeout(42);
114
- driver.newCommandTimeoutMs.should.eql(42);
115
- });
116
- describe('with managed driver', function () {
117
- let managedDriver1 = new _lib.default();
118
- let managedDriver2 = new _lib.default();
119
- before(function () {
120
- driver.addManagedDriver(managedDriver1);
121
- driver.addManagedDriver(managedDriver2);
122
- });
123
- after(function () {
124
- driver.managedDrivers = [];
125
- });
126
- it('should set the new command timeout on managed drivers', function () {
127
- driver.setNewCommandTimeout(42);
128
- driver.newCommandTimeoutMs.should.eql(42);
129
- managedDriver1.newCommandTimeoutMs.should.eql(42);
130
- managedDriver2.newCommandTimeoutMs.should.eql(42);
131
- });
132
- });
133
- });
134
- });
135
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsImRyaXZlciIsIkJhc2VEcml2ZXIiLCJpbXBsaWNpdFdhaXRTcHkiLCJzYW5kYm94IiwiYmVmb3JlRWFjaCIsImNyZWF0ZVNhbmRib3giLCJpbXBsaWNpdFdhaXRNcyIsInNweSIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJpdCIsInRpbWVvdXRzIiwic2hvdWxkIiwiZXZlbnR1YWxseSIsImJlIiwicmVqZWN0ZWQiLCJ1bmRlZmluZWQiLCJjYWxsZWRPbmNlIiwidHJ1ZSIsImZpcnN0Q2FsbCIsImFyZ3MiLCJlcXVhbCIsImVxbCIsImltcGxpY2l0V2FpdCIsInNldEltcGxpY2l0V2FpdCIsIm1hbmFnZWREcml2ZXIxIiwibWFuYWdlZERyaXZlcjIiLCJiZWZvcmUiLCJhZGRNYW5hZ2VkRHJpdmVyIiwiYWZ0ZXIiLCJtYW5hZ2VkRHJpdmVycyIsInNldE5ld0NvbW1hbmRUaW1lb3V0IiwibmV3Q29tbWFuZFRpbWVvdXRNcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iYXNlZHJpdmVyL3RpbWVvdXQuc3BlYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VEcml2ZXIgZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7Y3JlYXRlU2FuZGJveH0gZnJvbSAnc2lub24nO1xuXG5kZXNjcmliZSgndGltZW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGRyaXZlciA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gIGxldCBpbXBsaWNpdFdhaXRTcHk7XG4gIGxldCBzYW5kYm94O1xuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94ID0gY3JlYXRlU2FuZGJveCgpO1xuICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcyA9IDA7XG4gICAgaW1wbGljaXRXYWl0U3B5ID0gc2FuZGJveC5zcHkoZHJpdmVyLCAnc2V0SW1wbGljaXRXYWl0Jyk7XG4gIH0pO1xuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICB9KTtcbiAgLy8gZXhwZWN0ZWQgZXJyb3JzIGFyZSBmb3IgY2hlY2tzIGFnYWluc3QgcnVudGltZSB0eXBlIGZhaWx1cmVzLiB0aGUgdHlwZXMgd2UncmUgZ2l2aW5nIHRoZSBmdW5jdGlvbiBhcmUgbm90IGFsbG93ZWRcbiAgZGVzY3JpYmUoJ3RpbWVvdXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHNvbWV0aGluZyByYW5kb20gaXMgc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKCdyYW5kb20gdGltZW91dCcsICdob3dkeScpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHRpbWVvdXQgaXMgbmVnYXRpdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cygncmFuZG9tIHRpbWVvdXQnLCAtNDIpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9ycyBpZiB0aW1lb3V0IHR5cGUgaXMgdW5rbm93bicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKCdyYW5kb20gdGltZW91dCcsIDQyKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiBzb21ldGhpbmcgcmFuZG9tIGlzIHNlbnQgdG8gc2NyaXB0RHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgMTIzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkuc2hvdWxkLmV2ZW50dWFsbHkuYmVcbiAgICAgICAgICAucmVqZWN0ZWQ7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIHJhbmRvbSBpcyBzZW50IHRvIHBhZ2VMb2FkRHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAxMjMsIHVuZGVmaW5lZCkuc2hvdWxkLmV2ZW50dWFsbHkuYmVcbiAgICAgICAgICAucmVqZWN0ZWQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnaW1wbGljaXQgd2FpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhbiBpbnRlZ2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHMoJ2ltcGxpY2l0JywgNDIpO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgaW1wbGljaXRXYWl0U3B5LmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCg0Mik7XG4gICAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHNldEltcGxpY2l0V2FpdCB3aGVuIGdpdmVuIGEgc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHMoJ2ltcGxpY2l0JywgJzQyJyk7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgc2V0SW1wbGljaXRXYWl0IHdoZW4gZ2l2ZW4gYW4gaW50ZWdlciB0byBpbXBsaWNpdER1cmF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHModW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCA0Mik7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgc2V0SW1wbGljaXRXYWl0IHdoZW4gZ2l2ZW4gYSBzdHJpbmcgdG8gaW1wbGljaXREdXJhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJzQyJyk7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnaW1wbGljaXRXYWl0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhbiBpbnRlZ2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZHJpdmVyLmltcGxpY2l0V2FpdCg0Mik7XG4gICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGRyaXZlci5pbXBsaWNpdFdhaXQoJzQyJyk7XG4gICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIHJhbmRvbSBpcyBzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZHJpdmVyLmltcGxpY2l0V2FpdCgnaG93ZHknKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHRpbWVvdXQgaXMgbmVnYXRpdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkcml2ZXIuaW1wbGljaXRXYWl0KC00Mikuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXQgaW1wbGljaXQgd2FpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCB0aGUgaW1wbGljaXQgd2FpdCB3aXRoIGFuIGludGVnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkcml2ZXIuc2V0SW1wbGljaXRXYWl0KDQyKTtcbiAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnd2l0aCBtYW5hZ2VkIGRyaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBtYW5hZ2VkRHJpdmVyMSA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgICBsZXQgbWFuYWdlZERyaXZlcjIgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLmFkZE1hbmFnZWREcml2ZXIobWFuYWdlZERyaXZlcjEpO1xuICAgICAgICBkcml2ZXIuYWRkTWFuYWdlZERyaXZlcihtYW5hZ2VkRHJpdmVyMik7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLm1hbmFnZWREcml2ZXJzID0gW107XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgc2V0IHRoZSBpbXBsaWNpdCB3YWl0IG9uIG1hbmFnZWQgZHJpdmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLnNldEltcGxpY2l0V2FpdCg0Mik7XG4gICAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjEuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgICAgIG1hbmFnZWREcml2ZXIyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnc2V0IG5ldyBjb21tYW5kIHRpbWVvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdGhlIG5ldyBjb21tYW5kIHRpbWVvdXQgd2l0aCBhbiBpbnRlZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgZHJpdmVyLnNldE5ld0NvbW1hbmRUaW1lb3V0KDQyKTtcbiAgICAgIGRyaXZlci5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCd3aXRoIG1hbmFnZWQgZHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG1hbmFnZWREcml2ZXIxID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICAgIGxldCBtYW5hZ2VkRHJpdmVyMiA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIuYWRkTWFuYWdlZERyaXZlcihtYW5hZ2VkRHJpdmVyMSk7XG4gICAgICAgIGRyaXZlci5hZGRNYW5hZ2VkRHJpdmVyKG1hbmFnZWREcml2ZXIyKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIubWFuYWdlZERyaXZlcnMgPSBbXTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIG5ldyBjb21tYW5kIHRpbWVvdXQgb24gbWFuYWdlZCBkcml2ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQoNDIpO1xuICAgICAgICBkcml2ZXIubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjEubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjIubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQTs7QUFDQTs7QUFFQUEsUUFBUSxDQUFDLFNBQUQsRUFBWSxZQUFZ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
@@ -1,155 +0,0 @@
1
- "use strict";
2
-
3
- require("source-map-support/register");
4
-
5
- var _lib = require("../../../lib");
6
-
7
- var _server2 = require("../../../lib/express/server");
8
-
9
- var _sinon = require("sinon");
10
-
11
- var _helpers = require("../../helpers");
12
-
13
- const newMethodMap = {
14
- '/session/:sessionId/fake': {
15
- GET: {
16
- command: 'fakeGet'
17
- },
18
- POST: {
19
- command: 'fakePost',
20
- payloadParams: {
21
- required: ['fakeParam']
22
- }
23
- }
24
- }
25
- };
26
-
27
- const updateServer = (app, httpServer) => {
28
- app.updated = true;
29
- httpServer.updated = true;
30
- };
31
-
32
- function fakeDriver() {
33
- return {
34
- sessionExists: () => {},
35
- executeCommand: () => {}
36
- };
37
- }
38
-
39
- describe('server configuration', function () {
40
- let port;
41
- let sandbox;
42
-
43
- function fakeApp() {
44
- const app = {
45
- use: sandbox.spy(),
46
- all: sandbox.spy(),
47
- get: sandbox.spy(),
48
- post: sandbox.spy(),
49
- delete: sandbox.spy(),
50
- totalCount: () => app.use.callCount + app.all.callCount + app.get.callCount + app.post.callCount + app.delete.callCount
51
- };
52
- return app;
53
- }
54
-
55
- before(async function () {
56
- port = await (0, _helpers.getTestPort)(true);
57
- });
58
- beforeEach(function () {
59
- sandbox = (0, _sinon.createSandbox)();
60
- });
61
- afterEach(function () {
62
- sandbox.restore();
63
- });
64
- it('should actually use the middleware', function () {
65
- const app = fakeApp();
66
-
67
- const configureRoutes = () => {};
68
-
69
- (0, _server2.configureServer)({
70
- app,
71
- addRoutes: configureRoutes
72
- });
73
- app.use.callCount.should.equal(14);
74
- app.all.callCount.should.equal(4);
75
- });
76
- it('should apply new methods in plugins to the standard method map', function () {
77
- const app1 = fakeApp();
78
- const app2 = fakeApp();
79
- const driver = fakeDriver();
80
- const addRoutes = (0, _lib.routeConfiguringFunction)(driver);
81
- (0, _server2.configureServer)({
82
- app: app1,
83
- addRoutes
84
- });
85
- (0, _server2.configureServer)({
86
- app: app2,
87
- addRoutes,
88
- extraMethodMap: newMethodMap
89
- });
90
- app2.totalCount().should.eql(app1.totalCount() + 2);
91
- });
92
- it('should silently reject new methods in plugins if not plain objects', function () {
93
- const app1 = fakeApp();
94
- const app2 = fakeApp();
95
- const driver = fakeDriver();
96
- const addRoutes = (0, _lib.routeConfiguringFunction)(driver);
97
- (0, _server2.configureServer)({
98
- app: app1,
99
- addRoutes
100
- });
101
- (0, _server2.configureServer)({
102
- app: app2,
103
- addRoutes,
104
- extraMethodMap: []
105
- });
106
- app2.totalCount().should.eql(app1.totalCount());
107
- });
108
- it('should allow plugins to update the server', async function () {
109
- const driver = fakeDriver();
110
-
111
- const _server = await (0, _lib.server)({
112
- routeConfiguringFunction: (0, _lib.routeConfiguringFunction)(driver),
113
- port,
114
- extraMethodMap: newMethodMap,
115
- serverUpdaters: [updateServer]
116
- });
117
-
118
- try {
119
- _server.updated.should.be.true;
120
- } finally {
121
- await _server.close();
122
- }
123
- });
124
- it('should reject if error thrown in configureRoutes parameter', async function () {
125
- const configureRoutes = () => {
126
- throw new Error('I am Mr. MeeSeeks look at me!');
127
- };
128
-
129
- await (0, _lib.server)({
130
- routeConfiguringFunction: configureRoutes,
131
- port
132
- }).should.be.rejectedWith('MeeSeeks');
133
- });
134
- describe('#normalizeBasePath', function () {
135
- it('should throw an error for paths of the wrong type', function () {
136
- should.throw(() => {
137
- (0, _server2.normalizeBasePath)(null);
138
- });
139
- should.throw(() => {
140
- (0, _server2.normalizeBasePath)(1);
141
- });
142
- });
143
- it('should remove trailing slashes', function () {
144
- (0, _server2.normalizeBasePath)('/wd/hub/').should.eql('/wd/hub');
145
- (0, _server2.normalizeBasePath)('/foo/').should.eql('/foo');
146
- (0, _server2.normalizeBasePath)('/').should.eql('');
147
- });
148
- it('should ensure a leading slash is present', function () {
149
- (0, _server2.normalizeBasePath)('foo').should.eql('/foo');
150
- (0, _server2.normalizeBasePath)('wd/hub').should.eql('/wd/hub');
151
- (0, _server2.normalizeBasePath)('wd/hub/').should.eql('/wd/hub');
152
- });
153
- });
154
- });
155
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJuZXdNZXRob2RNYXAiLCJHRVQiLCJjb21tYW5kIiwiUE9TVCIsInBheWxvYWRQYXJhbXMiLCJyZXF1aXJlZCIsInVwZGF0ZVNlcnZlciIsImFwcCIsImh0dHBTZXJ2ZXIiLCJ1cGRhdGVkIiwiZmFrZURyaXZlciIsInNlc3Npb25FeGlzdHMiLCJleGVjdXRlQ29tbWFuZCIsImRlc2NyaWJlIiwicG9ydCIsInNhbmRib3giLCJmYWtlQXBwIiwidXNlIiwic3B5IiwiYWxsIiwiZ2V0IiwicG9zdCIsImRlbGV0ZSIsInRvdGFsQ291bnQiLCJjYWxsQ291bnQiLCJiZWZvcmUiLCJnZXRUZXN0UG9ydCIsImJlZm9yZUVhY2giLCJjcmVhdGVTYW5kYm94IiwiYWZ0ZXJFYWNoIiwicmVzdG9yZSIsIml0IiwiY29uZmlndXJlUm91dGVzIiwiY29uZmlndXJlU2VydmVyIiwiYWRkUm91dGVzIiwic2hvdWxkIiwiZXF1YWwiLCJhcHAxIiwiYXBwMiIsImRyaXZlciIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsImV4dHJhTWV0aG9kTWFwIiwiZXFsIiwiX3NlcnZlciIsInNlcnZlciIsInNlcnZlclVwZGF0ZXJzIiwiYmUiLCJ0cnVlIiwiY2xvc2UiLCJFcnJvciIsInJlamVjdGVkV2l0aCIsInRocm93Iiwibm9ybWFsaXplQmFzZVBhdGgiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvZXhwcmVzcy9zZXJ2ZXIuc3BlYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bW9jaGFcblxuaW1wb3J0IHtzZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbn0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7Y29uZmlndXJlU2VydmVyLCBub3JtYWxpemVCYXNlUGF0aH0gZnJvbSAnLi4vLi4vLi4vbGliL2V4cHJlc3Mvc2VydmVyJztcbmltcG9ydCB7Y3JlYXRlU2FuZGJveH0gZnJvbSAnc2lub24nO1xuaW1wb3J0IHtnZXRUZXN0UG9ydH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5cbmNvbnN0IG5ld01ldGhvZE1hcCA9IHtcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvZmFrZSc6IHtcbiAgICBHRVQ6IHtjb21tYW5kOiAnZmFrZUdldCd9LFxuICAgIFBPU1Q6IHtjb21tYW5kOiAnZmFrZVBvc3QnLCBwYXlsb2FkUGFyYW1zOiB7cmVxdWlyZWQ6IFsnZmFrZVBhcmFtJ119fSxcbiAgfSxcbn07XG5cbmNvbnN0IHVwZGF0ZVNlcnZlciA9IChhcHAsIGh0dHBTZXJ2ZXIpID0+IHtcbiAgYXBwLnVwZGF0ZWQgPSB0cnVlO1xuICBodHRwU2VydmVyLnVwZGF0ZWQgPSB0cnVlO1xufTtcblxuZnVuY3Rpb24gZmFrZURyaXZlcigpIHtcbiAgcmV0dXJuIHtzZXNzaW9uRXhpc3RzOiAoKSA9PiB7fSwgZXhlY3V0ZUNvbW1hbmQ6ICgpID0+IHt9fTtcbn1cblxuZGVzY3JpYmUoJ3NlcnZlciBjb25maWd1cmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgcG9ydDtcblxuICBsZXQgc2FuZGJveDtcblxuICBmdW5jdGlvbiBmYWtlQXBwKCkge1xuICAgIGNvbnN0IGFwcCA9IHtcbiAgICAgIHVzZTogc2FuZGJveC5zcHkoKSxcbiAgICAgIGFsbDogc2FuZGJveC5zcHkoKSxcbiAgICAgIGdldDogc2FuZGJveC5zcHkoKSxcbiAgICAgIHBvc3Q6IHNhbmRib3guc3B5KCksXG4gICAgICBkZWxldGU6IHNhbmRib3guc3B5KCksXG4gICAgICB0b3RhbENvdW50OiAoKSA9PlxuICAgICAgICBhcHAudXNlLmNhbGxDb3VudCArXG4gICAgICAgIGFwcC5hbGwuY2FsbENvdW50ICtcbiAgICAgICAgYXBwLmdldC5jYWxsQ291bnQgK1xuICAgICAgICBhcHAucG9zdC5jYWxsQ291bnQgK1xuICAgICAgICBhcHAuZGVsZXRlLmNhbGxDb3VudCxcbiAgICB9O1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHBvcnQgPSBhd2FpdCBnZXRUZXN0UG9ydCh0cnVlKTtcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhY3R1YWxseSB1c2UgdGhlIG1pZGRsZXdhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYXBwID0gZmFrZUFwcCgpO1xuICAgIGNvbnN0IGNvbmZpZ3VyZVJvdXRlcyA9ICgpID0+IHt9O1xuICAgIGNvbmZpZ3VyZVNlcnZlcih7YXBwLCBhZGRSb3V0ZXM6IGNvbmZpZ3VyZVJvdXRlc30pO1xuICAgIGFwcC51c2UuY2FsbENvdW50LnNob3VsZC5lcXVhbCgxNCk7XG4gICAgYXBwLmFsbC5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFwcGx5IG5ldyBtZXRob2RzIGluIHBsdWdpbnMgdG8gdGhlIHN0YW5kYXJkIG1ldGhvZCBtYXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYXBwMSA9IGZha2VBcHAoKTtcbiAgICBjb25zdCBhcHAyID0gZmFrZUFwcCgpO1xuICAgIGNvbnN0IGRyaXZlciA9IGZha2VEcml2ZXIoKTtcbiAgICBjb25zdCBhZGRSb3V0ZXMgPSByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24oZHJpdmVyKTtcbiAgICBjb25maWd1cmVTZXJ2ZXIoe2FwcDogYXBwMSwgYWRkUm91dGVzfSk7XG4gICAgY29uZmlndXJlU2VydmVyKHthcHA6IGFwcDIsIGFkZFJvdXRlcywgZXh0cmFNZXRob2RNYXA6IG5ld01ldGhvZE1hcH0pO1xuICAgIGFwcDIudG90YWxDb3VudCgpLnNob3VsZC5lcWwoYXBwMS50b3RhbENvdW50KCkgKyAyKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWxlbnRseSByZWplY3QgbmV3IG1ldGhvZHMgaW4gcGx1Z2lucyBpZiBub3QgcGxhaW4gb2JqZWN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcHAxID0gZmFrZUFwcCgpO1xuICAgIGNvbnN0IGFwcDIgPSBmYWtlQXBwKCk7XG4gICAgY29uc3QgZHJpdmVyID0gZmFrZURyaXZlcigpO1xuICAgIGNvbnN0IGFkZFJvdXRlcyA9IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbihkcml2ZXIpO1xuICAgIGNvbmZpZ3VyZVNlcnZlcih7YXBwOiBhcHAxLCBhZGRSb3V0ZXN9KTtcbiAgICBjb25maWd1cmVTZXJ2ZXIoe2FwcDogYXBwMiwgYWRkUm91dGVzLCBleHRyYU1ldGhvZE1hcDogW119KTtcbiAgICBhcHAyLnRvdGFsQ291bnQoKS5zaG91bGQuZXFsKGFwcDEudG90YWxDb3VudCgpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBwbHVnaW5zIHRvIHVwZGF0ZSB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRyaXZlciA9IGZha2VEcml2ZXIoKTtcbiAgICBjb25zdCBfc2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKGRyaXZlciksXG4gICAgICBwb3J0LFxuICAgICAgZXh0cmFNZXRob2RNYXA6IG5ld01ldGhvZE1hcCxcbiAgICAgIHNlcnZlclVwZGF0ZXJzOiBbdXBkYXRlU2VydmVyXSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgX3NlcnZlci51cGRhdGVkLnNob3VsZC5iZS50cnVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBfc2VydmVyLmNsb3NlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCBpZiBlcnJvciB0aHJvd24gaW4gY29uZmlndXJlUm91dGVzIHBhcmFtZXRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb25maWd1cmVSb3V0ZXMgPSAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0kgYW0gTXIuIE1lZVNlZWtzIGxvb2sgYXQgbWUhJyk7XG4gICAgfTtcbiAgICBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiBjb25maWd1cmVSb3V0ZXMsXG4gICAgICBwb3J0LFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ01lZVNlZWtzJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcjbm9ybWFsaXplQmFzZVBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgcGF0aHMgb2YgdGhlIHdyb25nIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3coKCkgPT4ge1xuICAgICAgICBub3JtYWxpemVCYXNlUGF0aChudWxsKTtcbiAgICAgIH0pO1xuICAgICAgc2hvdWxkLnRocm93KCgpID0+IHtcbiAgICAgICAgbm9ybWFsaXplQmFzZVBhdGgoMSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbm9ybWFsaXplQmFzZVBhdGgoJy93ZC9odWIvJykuc2hvdWxkLmVxbCgnL3dkL2h1YicpO1xuICAgICAgbm9ybWFsaXplQmFzZVBhdGgoJy9mb28vJykuc2hvdWxkLmVxbCgnL2ZvbycpO1xuICAgICAgbm9ybWFsaXplQmFzZVBhdGgoJy8nKS5zaG91bGQuZXFsKCcnKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGVuc3VyZSBhIGxlYWRpbmcgc2xhc2ggaXMgcHJlc2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCdmb28nKS5zaG91bGQuZXFsKCcvZm9vJyk7XG4gICAgICBub3JtYWxpemVCYXNlUGF0aCgnd2QvaHViJykuc2hvdWxkLmVxbCgnL3dkL2h1YicpO1xuICAgICAgbm9ybWFsaXplQmFzZVBhdGgoJ3dkL2h1Yi8nKS5zaG91bGQuZXFsKCcvd2QvaHViJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxZQUFZLEdBQUc7RUFDbkIsNEJBQTRCO0lBQzFCQyxHQUFHLEVBQUU7TUFBQ0MsT0FBTyxFQUFFO0lBQVYsQ0FEcUI7SUFFMUJDLElBQUksRUFBRTtNQUFDRCxPQUFPLEVBQUUsVUFBVjtNQUFzQkUsYUFBYSxFQUFFO1FBQUNDLFFBQVEsRUFBRSxDQUFDLFdBQUQ7TUFBWDtJQUFyQztFQUZvQjtBQURULENBQXJCOztBQU9BLE1BQU1DLFlBQVksR0FBRyxDQUFDQyxHQUFELEVBQU1DLFVBQU4sS0FBcUI7RUFDeENELEdBQUcsQ0FBQ0UsT0FBSixHQUFjLElBQWQ7RUFDQUQsVUFBVSxDQUFDQyxPQUFYLEdBQXFCLElBQXJCO0FBQ0QsQ0FIRDs7QUFLQSxTQUFTQyxVQUFULEdBQXNCO0VBQ3BCLE9BQU87SUFBQ0MsYUFBYSxFQUFFLE1BQU0sQ0FBRSxDQUF4QjtJQUEwQkMsY0FBYyxFQUFFLE1BQU0sQ0FBRTtFQUFsRCxDQUFQO0FBQ0Q7O0FBRURDLFFBQVEsQ0FBQyxzQkFBRCxFQUF5QixZQUFZO0VBQzNDLElBQUlDLElBQUo7RUFFQSxJQUFJQyxPQUFKOztFQUVBLFNBQVNDLE9BQVQsR0FBbUI7SUFDakIsTUFBTVQsR0FBRyxHQUFHO01BQ1ZVLEdBQUcsRUFBRUYsT0FBTyxDQUFDRyxHQUFSLEVBREs7TUFFVkMsR0FBRyxFQUFFSixPQUFPLENBQUNHLEdBQVIsRUFGSztNQUdWRSxHQUFHLEVBQUVMLE9BQU8sQ0FBQ0csR0FBUixFQUhLO01BSVZHLElBQUksRUFBRU4sT0FBTyxDQUFDRyxHQUFSLEVBSkk7TUFLVkksTUFBTSxFQUFFUCxPQUFPLENBQUNHLEdBQVIsRUFMRTtNQU1WSyxVQUFVLEVBQUUsTUFDVmhCLEdBQUcsQ0FBQ1UsR0FBSixD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