@appium/driver-test-support 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +112 -0
- package/build/lib/e2e-suite.d.ts +77 -0
- package/build/lib/e2e-suite.d.ts.map +1 -0
- package/build/lib/e2e-suite.js +389 -0
- package/build/lib/helpers.d.ts +19 -0
- package/build/lib/helpers.d.ts.map +1 -0
- package/build/lib/helpers.js +49 -0
- package/build/lib/index.d.ts +7 -0
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +47 -0
- package/build/lib/unit-suite.d.ts +12 -0
- package/build/lib/unit-suite.d.ts.map +1 -0
- package/build/lib/unit-suite.js +551 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/index.js +1 -0
- package/lib/e2e-suite.js +465 -0
- package/lib/helpers.js +68 -0
- package/lib/index.js +9 -0
- package/lib/unit-suite.js +632 -0
- package/package.json +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es6.d.ts","../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/@types/lodash/common/common.d.ts","../../../node_modules/@types/lodash/common/array.d.ts","../../../node_modules/@types/lodash/common/collection.d.ts","../../../node_modules/@types/lodash/common/date.d.ts","../../../node_modules/@types/lodash/common/function.d.ts","../../../node_modules/@types/lodash/common/lang.d.ts","../../../node_modules/@types/lodash/common/math.d.ts","../../../node_modules/@types/lodash/common/number.d.ts","../../../node_modules/@types/lodash/common/object.d.ts","../../../node_modules/@types/lodash/common/seq.d.ts","../../../node_modules/@types/lodash/common/string.d.ts","../../../node_modules/@types/lodash/common/util.d.ts","../../../node_modules/@types/lodash/index.d.ts","../../../node_modules/@types/async-lock/index.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/ws/index.d.ts","../../../node_modules/type-fest/source/primitive.d.ts","../../../node_modules/type-fest/source/typed-array.d.ts","../../../node_modules/type-fest/source/basic.d.ts","../../../node_modules/type-fest/source/observable-like.d.ts","../../../node_modules/type-fest/source/internal.d.ts","../../../node_modules/type-fest/source/except.d.ts","../../../node_modules/type-fest/source/simplify.d.ts","../../../node_modules/type-fest/source/writable.d.ts","../../../node_modules/type-fest/source/mutable.d.ts","../../../node_modules/type-fest/source/merge.d.ts","../../../node_modules/type-fest/source/merge-exclusive.d.ts","../../../node_modules/type-fest/source/require-at-least-one.d.ts","../../../node_modules/type-fest/source/require-exactly-one.d.ts","../../../node_modules/type-fest/source/require-all-or-none.d.ts","../../../node_modules/type-fest/source/remove-index-signature.d.ts","../../../node_modules/type-fest/source/partial-deep.d.ts","../../../node_modules/type-fest/source/partial-on-undefined-deep.d.ts","../../../node_modules/type-fest/source/readonly-deep.d.ts","../../../node_modules/type-fest/source/literal-union.d.ts","../../../node_modules/type-fest/source/promisable.d.ts","../../../node_modules/type-fest/source/opaque.d.ts","../../../node_modules/type-fest/source/invariant-of.d.ts","../../../node_modules/type-fest/source/set-optional.d.ts","../../../node_modules/type-fest/source/set-required.d.ts","../../../node_modules/type-fest/source/set-non-nullable.d.ts","../../../node_modules/type-fest/source/value-of.d.ts","../../../node_modules/type-fest/source/promise-value.d.ts","../../../node_modules/type-fest/source/async-return-type.d.ts","../../../node_modules/type-fest/source/conditional-keys.d.ts","../../../node_modules/type-fest/source/conditional-except.d.ts","../../../node_modules/type-fest/source/conditional-pick.d.ts","../../../node_modules/type-fest/source/union-to-intersection.d.ts","../../../node_modules/type-fest/source/stringified.d.ts","../../../node_modules/type-fest/source/fixed-length-array.d.ts","../../../node_modules/type-fest/source/multidimensional-array.d.ts","../../../node_modules/type-fest/source/multidimensional-readonly-array.d.ts","../../../node_modules/type-fest/source/iterable-element.d.ts","../../../node_modules/type-fest/source/entry.d.ts","../../../node_modules/type-fest/source/entries.d.ts","../../../node_modules/type-fest/source/set-return-type.d.ts","../../../node_modules/type-fest/source/asyncify.d.ts","../../../node_modules/type-fest/source/numeric.d.ts","../../../node_modules/type-fest/source/jsonify.d.ts","../../../node_modules/type-fest/source/schema.d.ts","../../../node_modules/type-fest/source/literal-to-primitive.d.ts","../../../node_modules/type-fest/source/string-key-of.d.ts","../../../node_modules/type-fest/source/exact.d.ts","../../../node_modules/type-fest/source/readonly-tuple.d.ts","../../../node_modules/type-fest/source/optional-keys-of.d.ts","../../../node_modules/type-fest/source/has-optional-keys.d.ts","../../../node_modules/type-fest/source/required-keys-of.d.ts","../../../node_modules/type-fest/source/has-required-keys.d.ts","../../../node_modules/type-fest/source/spread.d.ts","../../../node_modules/type-fest/source/split.d.ts","../../../node_modules/type-fest/source/camel-case.d.ts","../../../node_modules/type-fest/source/camel-cased-properties.d.ts","../../../node_modules/type-fest/source/camel-cased-properties-deep.d.ts","../../../node_modules/type-fest/source/delimiter-case.d.ts","../../../node_modules/type-fest/source/kebab-case.d.ts","../../../node_modules/type-fest/source/delimiter-cased-properties.d.ts","../../../node_modules/type-fest/source/kebab-cased-properties.d.ts","../../../node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts","../../../node_modules/type-fest/source/kebab-cased-properties-deep.d.ts","../../../node_modules/type-fest/source/pascal-case.d.ts","../../../node_modules/type-fest/source/pascal-cased-properties.d.ts","../../../node_modules/type-fest/source/pascal-cased-properties-deep.d.ts","../../../node_modules/type-fest/source/snake-case.d.ts","../../../node_modules/type-fest/source/snake-cased-properties.d.ts","../../../node_modules/type-fest/source/snake-cased-properties-deep.d.ts","../../../node_modules/type-fest/source/includes.d.ts","../../../node_modules/type-fest/source/screaming-snake-case.d.ts","../../../node_modules/type-fest/source/join.d.ts","../../../node_modules/type-fest/source/trim.d.ts","../../../node_modules/type-fest/source/replace.d.ts","../../../node_modules/type-fest/source/get.d.ts","../../../node_modules/type-fest/source/last-array-element.d.ts","../../../node_modules/type-fest/source/package-json.d.ts","../../../node_modules/type-fest/source/tsconfig-json.d.ts","../../../node_modules/type-fest/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../schema/build/appium-config-schema.d.ts","../../schema/build/index.d.ts","../../types/build/appium-config.d.ts","../../types/build/config.d.ts","../../../node_modules/typescript/lib/typescript.d.ts","../../../node_modules/@wdio/types/build/compiler.d.ts","../../../node_modules/@wdio/types/build/frameworks.d.ts","../../../node_modules/@wdio/types/build/services.d.ts","../../../node_modules/@wdio/types/build/reporters.d.ts","../../../node_modules/@wdio/types/build/options.d.ts","../../../node_modules/@wdio/types/build/capabilities.d.ts","../../../node_modules/@wdio/types/build/clients.d.ts","../../../node_modules/@wdio/types/build/workers.d.ts","../../../node_modules/@wdio/types/build/index.d.ts","../../types/build/capabilities.d.ts","../../../node_modules/@types/range-parser/index.d.ts","../../../node_modules/@types/qs/index.d.ts","../../../node_modules/@types/express-serve-static-core/index.d.ts","../../../node_modules/@types/mime/index.d.ts","../../../node_modules/@types/serve-static/index.d.ts","../../../node_modules/@types/connect/index.d.ts","../../../node_modules/@types/body-parser/index.d.ts","../../../node_modules/@types/express/index.d.ts","../../types/build/action.d.ts","../../types/build/driver.d.ts","../../../node_modules/@types/npmlog/index.d.ts","../../types/build/plugin.d.ts","../../types/build/index.d.ts","../../base-driver/build/lib/basedriver/device-settings.d.ts","../../base-driver/build/lib/basedriver/core.d.ts","../../base-driver/build/lib/express/server.d.ts","../../base-driver/build/lib/protocol/protocol.d.ts","../../../node_modules/es6-error/typings/index.d.ts","../../../node_modules/http-status-codes/build/cjs/utils-functions.d.ts","../../../node_modules/http-status-codes/build/cjs/status-codes.d.ts","../../../node_modules/http-status-codes/build/cjs/reason-phrases.d.ts","../../../node_modules/http-status-codes/build/cjs/legacy.d.ts","../../../node_modules/http-status-codes/build/cjs/index.d.ts","../../base-driver/build/lib/protocol/errors.d.ts","../../base-driver/build/lib/protocol/routes.d.ts","../../base-driver/build/lib/protocol/index.d.ts","../../base-driver/build/lib/express/static.d.ts","../../base-driver/build/lib/jsonwp-proxy/protocol-converter.d.ts","../../base-driver/build/lib/jsonwp-proxy/proxy.d.ts","../../base-driver/build/lib/express/websocket.d.ts","../../base-driver/build/lib/basedriver/driver.d.ts","../../base-driver/build/lib/constants.d.ts","../../base-driver/build/lib/jsonwp-status/status.d.ts","../../base-driver/build/lib/basedriver/capabilities.d.ts","../../base-driver/build/lib/index.d.ts","../../../node_modules/axios/index.d.ts","../../../node_modules/@types/bluebird/index.d.ts","../../../node_modules/get-port/index.d.ts","../lib/helpers.js","../../../node_modules/@types/chai/index.d.ts","../../../node_modules/@types/sinonjs__fake-timers/index.d.ts","../../../node_modules/@types/sinon/index.d.ts","../lib/e2e-suite.js","../lib/unit-suite.js","../lib/index.js","../../../node_modules/@types/mocha/index.d.ts","../../../node_modules/@types/chai-as-promised/index.d.ts"],"fileInfos":["721cec59c3fef87aaf480047d821fb758b3ec9482c4129a54631e6e25e432a31",{"version":"f5c28122bee592cfaf5c72ed7bcc47f453b79778ffa6e301f45d21a0970719d4","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3f149f903dd20dfeb7c80e228b659f0e436532de772469980dbd00702cc05cc1","affectsGlobalScope":true},{"version":"1272277fe7daa738e555eb6cc45ded42cc2d0f76c07294142283145d49e96186","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"181f1784c6c10b751631b24ce60c7f78b20665db4550b335be179217bacc0d5f","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"cd483c056da900716879771893a3c9772b66c3c88f8943b4205aec738a94b1d0","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"c37f8a49593a0030eecb51bbfa270e709bec9d79a6cc3bb851ef348d4e6b26f8","affectsGlobalScope":true},"675e702f2032766a91eeadee64f51014c64688525da99dccd8178f0c599f13a8","fe4a2042d087990ebfc7dc0142d5aaf5a152e4baea86b45f283f103ec1e871ea","d70c026dd2eeaa974f430ea229230a1897fdb897dc74659deebe2afd4feeb08f","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","6702a1cd8818cb22ee95c85dcf2c31c117bde892e1afd2bc254bd720f4c6263c","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","ae9930989ed57478eb03b9b80ad3efa7a3eacdfeff0f78ecf7894c4963a64f93","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","3cf0d343c2276842a5b617f22ba82af6322c7cfe8bb52238ffc0c491a3c21019","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9",{"version":"f2eff8704452659641164876c1ef0df4174659ce7311b0665798ea3f556fa9ad","affectsGlobalScope":true},"a53ba2a104ae0e58b2791f9cdf3ddafd747d1a0ccb5e6363c2b0ce2eb5e0e67c","0d5a2ee1fdfa82740e0103389b9efd6bfe145a20018a2da3c02b89666181f4d9","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"2f6c9750131d5d2fdaba85c164a930dc07d2d7e7e8970b89d32864aa6c72620c","affectsGlobalScope":true},"56d13f223ab40f71840795f5bef2552a397a70666ee60878222407f3893fb8d0",{"version":"aeeee3998c5a730f8689f04038d41cf4245c9edbf6ef29a698e45b36e399b8ed","affectsGlobalScope":true},"95843d5cfafced8f3f8a5ce57d2335f0bcd361b9483587d12a25e4bd403b8216","afc6e96061af46bcff47246158caee7e056f5288783f2d83d6858cd25be1c565",{"version":"34f5bcac12b36d70304b73de5f5aab3bb91bd9919f984be80579ebcad03a624e","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","3a0c45fe95e8f0e2c5247d48acf3a522d2ef29f1ab0effb3c59a9c4fdd5edbcd","f50c975ab7b50e25a69e3d8a3773894125b44e9698924105f23b812bf7488baf","c993aac3b6d4a4620ef9651497069eb84806a131420e4f158ea9396fb8eb9b8c","76650408392bf49a8fbf3e2b6b302712a92d76af77b06e2da1cc8077359c4409","0af3121e68297b2247dd331c0d24dba599e50736a7517a5622d5591aae4a3122","06ccebc2c2db57d6bdbca63b71c4ae5e6ddc42d972fd8f122d4c1a28aa111b25",{"version":"81e8508d1e82278f5d3fee936f267e00c308af36219bfcee2631f9513c9c4017","affectsGlobalScope":true},"413a4be7f94f631235bbc83dad36c4d15e5a2ff02bca1efdbd03636d6454631b","20c468256fd68d3ef1fa53526e76d51d6aa91711e84d72c0343589b99238287e","0fac2b483246d890f74e4050c8651f43b4569519c386082d4c3838cd42f39a7c","8d4c16a26d59e3ce49741a7d4a6e8206b884e226cf308667c7778a0b2c0fee7f","4b9a003b5c556c96784132945bb41c655ea11273b1917f5c8d0c154dd5fd20dd","d61c7c41eb1960b1285e242fd102c162b65c0522985b839fadda59874308a170",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"11c8be5993cd30dbb5310d95ba6c54dbb8724221eed0c4b2e4a7d6a4f9a032dd","abc1c425b2ad6720433f40f1877abfa4223f0f3dd486c9c28c492179ca183cb6","0e1b73efb8ce3afd418f04f59e26134f46418d2033dff332446fe0ee762b884a","a4210a84a82b3e7a8cec5b2f3616e46d523f4f10cc1576d8f2fb89d0987b341e",{"version":"8207e7e6db9aa5fc7e61c8f17ba74cf9c115d26f51f91ee93f790815a7ea9dfb","affectsGlobalScope":true},"9f1069b9e2c051737b1f9b4f1baf50e4a63385a6a89c32235549ae87fc3d5492","ee18f2da7a037c6ceeb112a084e485aead9ea166980bf433474559eac1b46553","29c2706fa0cc49a2bd90c83234da33d08bb9554ecec675e91c1f85087f5a5324","0acbf26bf958f9e80c1ffa587b74749d2697b75b484062d36e103c137c562bc3","02b3239cf1b1ff8737e383ed5557f0247499d15f5bd21ab849b1a24687b6100c","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"33eee034727baf564056b4ea719075c23d3b4767d0b5f9c6933b81f3d77774d2","c33a6ea7147af60d8e98f1ac127047f4b0d4e2ce28b8f08ff3de07ca7cc00637","a4471d2bdba495b2a6a30b8765d5e0282fa7009d88345a9528f73c37869d3b93",{"version":"aee7013623e7632fba449d4df1da92925b27d9b816cb05546044dbfe54c88ef4","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","c9d70d3d7191a66a81cb554557f8ed1cf736ea8397c44a864fe52689de18865a","998a3de5237518c0b3ac00a11b3b4417affb008aa20aedee52f3fdae3cb86151","ad41008ffe077206e1811fc873f4d9005b5fd7f6ab52bb6118fef600815a5cb4",{"version":"1aad825534c73852a1f3275e527d729a2c0640f539198fdfdfeb83b839851910","affectsGlobalScope":true},"badae0df9a8016ac36994b0a0e7b82ba6aaa3528e175a8c3cb161e4683eec03e","c3db860bcaaaeb3bbc23f353bbda1f8ab82756c8d5e973bebb3953cb09ea68f2","235a53595bd20b0b0eeb1a29cb2887c67c48375e92f03749b2488fbd46d0b1a0","bc09393cd4cd13f69cf1366d4236fbae5359bb550f0de4e15767e9a91d63dfb1","9c266243b01545e11d2733a55ad02b4c00ecdbda99c561cd1674f96e89cdc958","c71155c05fc76ff948a4759abc1cb9feec036509f500174bc18dad4c7827a60c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"3a4c859c27b2aaedcd27173220d66590fa7da27ee45d84e365fb0fe7f2c2f72c","b4358a89fcd9c579f84a6c68e2ce44ca91b07e4db3f8f403c2b7a72c1a1e04b6","cd51ceafea7762ad639afb3ca5b68e1e4ffeaacaa402d7ef2cae17016e29e098","1b8357b3fef5be61b5de6d6a4805a534d68fe3e040c11f1944e27d4aec85936a","4a15fc59b27b65b9894952048be2afc561865ec37606cd0f5e929ee4a102233b",{"version":"744e7c636288493667d553c8f8ebd666ccbc0e715df445a4a7c4a48812f20544","affectsGlobalScope":true},"c05dcfbd5bd0abcefa3ad7d2931424d4d8090bc55bbe4f5c8acb8d2ca5886b2e","326da4aebf555d54b995854ff8f3432f63ba067be354fa16c6e1f50daa0667de","90748076a143bbeb455f8d5e8ad1cc451424c4856d41410e491268a496165256","76e3f3a30c533bf20840d4185ce2d143dc18ca955b64400ac09670a89d388198","144dfcee38ebc38aae93a85bc47211c9268d529b099127b74d61242ec5c17f35","2cf38989b23031694f04308b6797877534a49818b2f5257f4a5d824e7ea82a5a","f981ffdbd651f67db134479a5352dac96648ca195f981284e79dc0a1dbc53fd5","e4ace1cf5316aa7720e58c8dd511ba86bab1c981336996fb694fa64b8231d5f0","a1c85a61ff2b66291676ab84ae03c1b1ff7139ffde1942173f6aee8dc4ee357b","f35a727758da36dd885a70dd13a74d9167691aaff662d50eaaf66ed591957702","116205156fb819f2afe33f9c6378ea11b6123fa3090f858211c23f667fff75da","8fe68442c15f8952b8816fa4e7e6bd8d5c45542832206bd7bcf3ebdc77d1c3f3","3add9402f56a60e9b379593f69729831ac0fc9eae604b6fafde5fa86d2f8a4b9","cc28c8b188905e790de427f3cd00b96734c9c662fb849d68ff9d5f0327165c0d","da2aa652d2bf03cc042e2ff31e4194f4f18f042b8344dcb2568f761daaf7869f","03ed68319c97cd4ce8f1c4ded110d9b40b8a283c3242b9fe934ccfa834e45572","de2b56099545de410af72a7e430ead88894e43e4f959de29663d4d0ba464944d","eec9e706eef30b4f1c6ff674738d3fca572829b7fa1715f37742863dabb3d2f2","cec67731fce8577b0a90aa67ef0522ddb9f1fd681bece50cdcb80a833b4ed06f","a14679c24962a81ef24b6f4e95bbc31601551f150d91af2dc0bce51f7961f223","3f4d43bb3f61d173a4646c19557e090a06e9a2ec9415313a6d84af388df64923","18b86125c67d99150f54225df07349ddd07acde086b55f3eeac1c34c81e424d8","d5a5025f04e7a3264ecfa3030ca9a3cb0353450f1915a26d5b84f596240a11cd","03f4449c691dd9c51e42efd51155b63c8b89a5f56b5cf3015062e2f818be8959","23b213ec3af677b3d33ec17d9526a88d5f226506e1b50e28ce4090fb7e4050a8","f0abf96437a6e57b9751a792ba2ebb765729a40d0d573f7f6800b305691b1afb","7d30aee3d35e64b4f49c235d17a09e7a7ce2961bebb3996ee1db5aa192f3feba","eb1625bab70cfed00931a1e09ecb7834b61a666b0011913b0ec24a8e219023ef","1a923815c127b27f7f375c143bb0d9313ccf3c66478d5d2965375eeb7da72a4c","4f92df9d64e5413d4b34020ae6b382edda84347daec97099e7c008a9d5c0910b","fcc438e50c00c9e865d9c1777627d3fdc1e13a4078c996fb4b04e67e462648c8","d0f07efa072420758194c452edb3f04f8eabc01cd4b3884a23e7274d4e2a7b69","7086cca41a87b3bf52c6abfc37cda0a0ec86bb7e8e5ef166b07976abec73fa5e","4571a6886b4414403eacdd1b4cdbd854453626900ece196a173e15fb2b795155","c122227064c2ebf6a5bd2800383181395b56bb71fd6683d5e92add550302e45f","60f476f1c4de44a08d6a566c6f1e1b7de6cbe53d9153c9cc2284ca0022e21fba","84315d5153613eeb4b34990fb3bc3a1261879a06812ee7ae481141e30876d8dc","4f0781ec008bb24dc1923285d25d648ea48fb5a3c36d0786e2ee82eb00eff426","8fefaef4be2d484cdfc35a1b514ee7e7bb51680ef998fb9f651f532c0b169e6b","8be5c5be3dbf0003a628f99ad870e31bebc2364c28ea3b96231089a94e09f7a6","6626bbc69c25a92f6d32e6d2f25038f156b4c2380cbf29a420f7084fb1d2f7d7","f351eaa598ba2046e3078e5480a7533be7051e4db9212bb40f4eeb84279aa24d","5126032fe6e999f333827ee8e67f7ca1d5f3d6418025878aa5ebf13b499c2024","4ce53edb8fb1d2f8b2f6814084b773cdf5846f49bf5a426fbe4029327bda95bf","1edc9192dfc277c60b92525cdfa1980e1bfd161ae77286c96777d10db36be73c","1573cae51ae8a5b889ec55ecb58e88978fe251fd3962efa5c4fdb69ce00b23ba","75a7db3b7ddf0ca49651629bb665e0294fda8d19ba04fddc8a14d32bb35eb248","f2d1ac34b05bb6ce326ea1702befb0216363f1d5eccdd1b4b0b2f5a7e953ed8a","789665f0cd78bc675a31140d8f133ec6a482d753a514012fe1bb7f86d0a21040","bb30fb0534dceb2e41a884c1e4e2bb7a0c668dadd148092bba9ff15aafb94790","6ef829366514e4a8f75ce55fa390ebe080810b347e6f4a87bbeecb41e612c079","8f313aa8055158f08bd75e3a57161fa473a50884c20142f3318f89f19bfc0373","e789eb929b46299187312a01ff71905222f67907e546e491952c384b6f956a63","a0147b607f8c88a5433a5313cdc10443c6a45ed430e1b0a335a413dc2b099fd5","a86492d82baf906c071536e8de073e601eaa5deed138c2d9c42d471d72395d7e","6b1071c06abcbe1c9f60638d570fdbfe944b6768f95d9f28ebc06c7eec9b4087","92eb8a98444729aa61be5e6e489602363d763da27d1bcfdf89356c1d360484da","1285ddb279c6d0bc5fe46162a893855078ae5b708d804cd93bfc4a23d1e903d9","d729b8b400507b9b51ff40d11e012379dbf0acd6e2f66bf596a3bc59444d9bf1","fc3ee92b81a6188a545cba5c15dc7c5d38ee0aaca3d8adc29af419d9bdb1fdb9","a14371dc39f95c27264f8eb02ce2f80fd84ac693a2750983ac422877f0ae586d","755bcc456b4dd032244b51a8b4fe68ee3b2d2e463cf795f3fde970bb3f269fb1","c00b402135ef36fb09d59519e34d03445fd6541c09e68b189abb64151f211b12","e08e58ac493a27b29ceee80da90bb31ec64341b520907d480df6244cdbec01f8","c0fe2b1135ca803efa203408c953e1e12645b8065e1a4c1336ad8bb11ea1101b","f3dedc92d06e0fdc43e76c2e1acca21759dd63d2572c9ec78a5188249965d944","25b1108faedaf2043a97a76218240b1b537459bbca5ae9e2207c236c40dcfdef","a1d1e49ccd2ac07ed8a49a3f98dfd2f7357cf03649b9e348b58b97bb75116f18","7ad042f7d744ccfbcf6398216203c7712f01359d6fd4348c8bd8df8164e98096","0e0b8353d6d7f7cc3344adbabf3866e64f2f2813b23477254ba51f69e8fdf0eb","8e7653c13989dca094412bc4de20d5c449457fc92735546331d5e9cdd79ac16e","189dedb255e41c8556d0d61d7f1c18506501896354d0925cbd47060bcddccab1","48f0819c2e14214770232f1ab0058125bafdde1d04c4be84339d5533098bf60a","2641aff32336e35a5b702aa2d870a0891da29dc1c19ae48602678e2050614041","e133066d15e9e860ca96220a548dee28640039a8ac33a9130d0f83c814a78605","f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","7d9161ec720909c6abf2957b3f62d1ab27f2623e380a39d147715d43d8abd414","6101949945c252c5706da566e06b7be2a4cc48e73f25165add3c081d0dd37578","a983207132524290a38f8c5e3e1799c4b3372c66835ee1a9c207f42fc5220d88","8f55068da250ce5c00ce636f4c33b7e50fb15a75a84bf6092595e419e678dc2a","3fa86a2c33804b6a4221dda3714a6a2f8a2f26983ea6c63d2bf6f2839fbb778a","a47b38aac630271c68667d717c865e4c98200bd90b4a8859d3f07460da09adec","46ab84953b0abb33ae9a42af24c97883e68f1080f084ffb9436181b3f147776c","d97f055b516d74e0c0bace388e6bbe3bc386a9599a1d1862ba8a669e892a1d2a","2e97e912e078f6cea483fb096d9c49eb2b7285f9e4748e2f7723c7b55817b90b","5f9e9eee4568d2fbef66f0118381003c07c43193dd18bc86f3141726a23a386e","4d18894e559ba0ddde5d544c718dc71683f770f70b881dc697afeb0ea37ca292","db412fc192357cd4bff3e93e79030ea404b7d2cf8c089d2fe9d53ba010f1a916","7bc97e823dd70d66e9640998837ca0aad3480b415035dbd2074e3a450166e221",{"version":"1153175167a3c48f04cea09400723d11107af1c13e2f0fc858347ef085417519","affectsGlobalScope":true},"10487580175f86d0789473002b4b6e6606f9a4d7d3965f91066361aa8629297a","16d51f964ec125ad2024cf03f0af444b3bc3ec3614d9345cc54d09bab45c9a4c","ba601641fac98c229ccd4a303f747de376d761babb33229bb7153bed9356c9cc",{"version":"101eb8b4e972b9326f39591e2e40e967e3331e8d960f81248daeb266ea1affec","affectsGlobalScope":true},"84e3bbd6f80983d468260fdbfeeb431cc81f7ea98d284d836e4d168e36875e86","0b85cb069d0e427ba946e5eb2d86ef65ffd19867042810516d16919f6c1a5aec","6d829824ead8999f87b6df21200df3c6150391b894b4e80662caa462bd48d073","afc559c1b93df37c25aef6b3dfa2d64325b0e112e887ee18bf7e6f4ec383fc90","15c88bfd1b8dc7231ff828ae8df5d955bae5ebca4cf2bcb417af5821e52299ae","b7e64651c85c710d82161ad78be0ff7c95e9ecc82b23ea21244b62753d549ea3","f7648bb46cef0cfd5dfad2050b96699d604e45639c95448814a1342bf3369853","df38da6685578ac3d0e4ce2d20f3d59462ee53959b8263d2532ec9cec48ae098","6f36e68c339aea454afcdd2387ed71411d727a612f1412d84530e05f74d3e963","bc26951c777570d6480caae896eb50339d87f24c5f6b267c1dc1751a5507cbb2","d0c3f69853b08d50e442522622c52e1c80fd1150eb22b96e78290f0faf8ab346","2f4094ef7d7d55ddedd0758a3d46f2c8c653e91161217bea1b772cb8350b2632","4cbe65178b3e292e082c6baafff84e98552b67b43321c2fe42ed47cbf342e6b0","1f1a1d0609e7514b711768295528b3b9b0fd67d7f2ba3f1730d2f135e6f58069","87dc4aa712e5fc14d93d1a91919b0105aac5dc6c04259fcb28a5d57a1347fba3","1bc146fb8f5cf8f67d0bb651c2237196ab42d7bae6eff9c079f254c3a4b2dc9f","fcb175cbc3a5f91152314cabe52625d495da9a3c4e9b4578dfcb1018b10b5bd1","66b458867662fd10111e8241abfd372570816317b456b712979826b0d784df37","de743c53fbbaa917b418cff186394602074f211fdeeedc27c3a2ddd83993c043","bf028cb4dfbaa3e027a2d8935a48d323ba5c98c68f8197f38bf341b64c8c467f","3516415029e294ca20490e6795dabfa219dea3fdcb3d1907a1526025f457e1ab","db0305dce175dd75214f12f534fd4fe9805a320530a08f080323c24fd490f5a6","3dcfe6b1a091adfef5bf2e3eec522083f4ff042ddb83416953c06fa1ce50e359","4947905cda1cd79956a972a2eb6844e364d5204396732bf3831a1176e08742be","d7da4a1744d9516461b0301a70f5ff5a4d9372e5dfbcb95cbb55c45ca316efa0","c8a667992ef6ad695e4ca8e2831786deb95875a49f495e1bdba4a38341fe9935","3cf55b882e251da3fac1c15ab2f02bf981c633733080b39ce7d9490f9d2a6066","55e3fa6a6c5dd25e7f255fb107026b517f8adfd616f2da3cb96f20f33f6c4bfe","7ca56e4c578c8688979ac94aaed8ee4815c9406db9b5970de232f9a99e550366","c8865994df8b62fcd7a50c958ecc8dc949240bdb5b8a9e6b99e633df587da94f","ce09862a18df8c6bccaf65ef790abe8ba1769e45b4bf0871f066cd15ef632cb0","f4488f48b65ff16aac6bfa4cff45cfdf192e78d19db661fd296dddf14ded72c8","d88dc05fd345b7a4e1816bbfd2dd087eefa9b9e36096818c2348f5b246971125","338bd7c3518b05b4c473971be0e5f8f854aca7cdb00d1b97192c14860f4ebf2f","58ca66ecec099ab769ce4fef62f4cc93718d93c9d0d4b67dfa7ba20c9a7c50ed",{"version":"6d48e64d6615ea7ad8f672c6ef1463ce1d475173b7c63bb8e5e934fb7889ce37","signature":"40faa61a9ab5e9e4259f5ebfd69c513ea0b3cee192f682fbdc52dbd02681bf64"},{"version":"127bf414ca8ced28c9738b91a935121009d03bbc136668db980bd1ba18976b2b","affectsGlobalScope":true},"f83b320cceccfc48457a818d18fc9a006ab18d0bdd727aa2c2e73dc1b4a45e98","354abbae08f72ea982b1a767a8908f1b3efe8bbe53955c64f9c0c249c8832d5d",{"version":"5143ee76bffb5a63def6280a7439f3630d80adc41cf8fae5f38b4fc4e5f53f8c","signature":"45324f5f085ccbd357d14f7ba508f191d08385e5108cf869cdf4f6a4af24933a"},{"version":"507f969ae42855ccd1be0ad8ae1209440756a4e6184af21f53a5914055babee6","signature":"ac3503070a3dc0abeec16ef16a183aac6f2babdcd61b85514a4fdd3bc2100d56"},{"version":"232bfa73de17aa6835b764e3b1838562f0de391f4bd089622039f116e06d9f94","signature":"4ac72a0d2f0b6f6c03b5be34270bad256d39bd1975f6d34e7bda4e8bb49f98ad"},{"version":"3f6d6465811321abc30a1e5f667feed63e5b3917b3d6c8d6645daf96c75f97ba","affectsGlobalScope":true},{"version":"63e2182615c513e89bb8a3e749d08f7c379e86490fcdbf6d35f2c14b3507a6e8","affectsGlobalScope":true}],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"module":5,"outDir":"./","removeComments":false,"rootDir":"..","strictNullChecks":true,"target":2},"fileIdsList":[[104],[78,104,111,213],[104,247],[78,104,111],[75,78,104,111,208,209],[104,209,210,212,214],[46,48,49,50,51,52,53,54,55,56,57,58,104],[46,47,49,50,51,52,53,54,55,56,57,58,104],[47,48,49,50,51,52,53,54,55,56,57,58,104],[46,47,48,50,51,52,53,54,55,56,57,58,104],[46,47,48,49,51,52,53,54,55,56,57,58,104],[46,47,48,49,50,52,53,54,55,56,57,58,104],[46,47,48,49,50,51,53,54,55,56,57,58,104],[46,47,48,49,50,51,52,54,55,56,57,58,104],[46,47,48,49,50,51,52,53,55,56,57,58,104],[46,47,48,49,50,51,52,53,54,56,57,58,104],[46,47,48,49,50,51,52,53,54,55,57,58,104],[46,47,48,49,50,51,52,53,54,55,56,58,104],[46,47,48,49,50,51,52,53,54,55,56,57,104],[60,104],[63,104],[64,69,104],[65,75,76,83,92,103,104],[65,66,75,83,104],[67,104],[68,69,76,84,104],[69,92,100,104],[70,72,75,83,104],[71,104],[72,73,104],[74,75,104],[75,104],[75,76,77,92,103,104],[75,76,77,92,104],[78,83,92,103,104],[75,76,78,79,83,92,100,103,104],[78,80,92,100,103,104],[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110],[75,81,104],[82,103,104],[72,75,83,92,104],[84,104],[85,104],[63,86,104],[87,102,104,108],[88,104],[89,104],[75,90,104],[90,91,104,106],[75,92,93,94,104],[92,94,104],[92,93,104],[95,104],[96,104],[75,98,99,104],[98,99,104],[69,83,100,104],[101,104],[83,102,104],[64,78,89,103,104],[69,104],[92,104,105],[104,106],[104,107],[64,69,75,77,86,92,103,104,106,108],[92,104,109],[78,104,111,211],[104,248],[75,78,80,92,100,103,104,109,111],[104,202],[104,203],[104,197],[104,199,200,201,202,203,204,205],[78,80,103,104,111,198,200,201,203],[75,76,104,111],[104,111,199,202,203],[75,104,111,202,203],[83,104,111],[104,226,227,228,229],[104,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190],[104,139],[104,139,152],[104,117,166],[104,167],[104,118,141],[104,141],[104,117],[104,170],[104,150],[104,117,158,166],[104,161],[104,163],[104,113],[104,133],[104,114,115,154],[104,174],[104,172],[104,118,119],[104,120],[104,131],[104,117,122],[104,176],[104,118],[104,170,179,182],[104,118,119,163],[104,203,220],[59,75,104,220,221],[104,220],[104,191,203,215,220,222],[78,104,215,220],[104,112,220],[104,221,222,223,233,234,236,237,238,239,240,241],[78,80,104,111,191,220,230,235],[104,225,230],[104,224,231,232],[104,220,223],[58,104,191,220,242,243,244,246,247,249],[58,104,245],[104,220,246,250,251],[58,104,220,244,247,249],[104,192],[104,193],[104,206],[104,194,195],[75,104,111,196,207,216,220],[78,83,104,111,112,191,195,196,207,215,216,217,218,219],[104,217,220],[191,203,220,243],[58],[220],[203,220]],"referencedMap":[[59,1],[244,1],[214,2],[254,3],[247,1],[213,4],[210,5],[215,6],[192,1],[47,7],[48,8],[46,9],[49,10],[50,11],[51,12],[52,13],[53,14],[54,15],[55,16],[56,17],[57,18],[58,19],[211,1],[253,1],[60,20],[61,20],[63,21],[64,22],[65,23],[66,24],[67,25],[68,26],[69,27],[70,28],[71,29],[72,30],[73,30],[74,31],[75,32],[76,33],[77,34],[62,1],[110,1],[78,35],[79,36],[80,37],[111,38],[81,39],[82,40],[83,41],[84,42],[85,43],[86,44],[87,45],[88,46],[89,47],[90,48],[91,49],[92,50],[94,51],[93,52],[95,53],[96,54],[97,1],[98,55],[99,56],[100,57],[101,58],[102,59],[103,60],[104,61],[105,62],[106,63],[107,64],[108,65],[109,66],[218,32],[209,1],[208,1],[212,67],[249,68],[248,1],[112,69],[203,70],[204,71],[198,72],[199,1],[206,73],[202,74],[201,75],[200,76],[205,77],[243,1],[225,1],[245,78],[230,79],[229,1],[228,1],[227,1],[226,1],[191,80],[140,81],[153,82],[115,1],[167,83],[169,84],[168,84],[142,85],[141,1],[143,86],[170,87],[174,88],[172,88],[151,89],[150,1],[159,87],[118,87],[146,1],[187,90],[162,91],[164,92],[182,87],[117,93],[134,94],[149,1],[184,1],[155,95],[171,88],[175,96],[173,97],[188,1],[157,1],[131,93],[123,1],[122,98],[147,87],[148,87],[121,99],[154,1],[116,1],[133,1],[161,1],[189,100],[128,87],[129,101],[176,84],[178,102],[177,102],[113,1],[132,1],[139,1],[130,87],[160,1],[127,1],[186,1],[126,1],[124,103],[125,1],[163,1],[156,1],[183,104],[137,98],[135,98],[136,98],[152,1],[119,1],[179,88],[181,96],[180,97],[166,1],[165,105],[158,1],[145,1],[185,1],[190,1],[114,1],[144,1],[138,1],[120,98],[9,1],[10,1],[14,1],[13,1],[3,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[4,1],[5,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[6,1],[30,1],[31,1],[32,1],[33,1],[7,1],[34,1],[35,1],[36,1],[37,1],[8,1],[38,1],[43,1],[44,1],[39,1],[40,1],[41,1],[42,1],[2,1],[1,1],[45,1],[12,1],[11,1],[197,1],[241,106],[222,107],[221,108],[238,109],[239,1],[223,110],[234,1],[237,111],[242,112],[235,1],[236,113],[240,1],[231,114],[233,115],[224,116],[232,108],[250,117],[246,118],[252,119],[251,120],[193,121],[194,122],[216,1],[195,1],[207,123],[196,124],[217,125],[220,126],[219,127]],"exportedModulesMap":[[59,1],[244,1],[214,2],[254,3],[247,1],[213,4],[210,5],[215,6],[192,1],[47,7],[48,8],[46,9],[49,10],[50,11],[51,12],[52,13],[53,14],[54,15],[55,16],[56,17],[57,18],[58,19],[211,1],[253,1],[60,20],[61,20],[63,21],[64,22],[65,23],[66,24],[67,25],[68,26],[69,27],[70,28],[71,29],[72,30],[73,30],[74,31],[75,32],[76,33],[77,34],[62,1],[110,1],[78,35],[79,36],[80,37],[111,38],[81,39],[82,40],[83,41],[84,42],[85,43],[86,44],[87,45],[88,46],[89,47],[90,48],[91,49],[92,50],[94,51],[93,52],[95,53],[96,54],[97,1],[98,55],[99,56],[100,57],[101,58],[102,59],[103,60],[104,61],[105,62],[106,63],[107,64],[108,65],[109,66],[218,32],[209,1],[208,1],[212,67],[249,68],[248,1],[112,69],[203,70],[204,71],[198,72],[199,1],[206,73],[202,74],[201,75],[200,76],[205,77],[243,1],[225,1],[245,78],[230,79],[229,1],[228,1],[227,1],[226,1],[191,80],[140,81],[153,82],[115,1],[167,83],[169,84],[168,84],[142,85],[141,1],[143,86],[170,87],[174,88],[172,88],[151,89],[150,1],[159,87],[118,87],[146,1],[187,90],[162,91],[164,92],[182,87],[117,93],[134,94],[149,1],[184,1],[155,95],[171,88],[175,96],[173,97],[188,1],[157,1],[131,93],[123,1],[122,98],[147,87],[148,87],[121,99],[154,1],[116,1],[133,1],[161,1],[189,100],[128,87],[129,101],[176,84],[178,102],[177,102],[113,1],[132,1],[139,1],[130,87],[160,1],[127,1],[186,1],[126,1],[124,103],[125,1],[163,1],[156,1],[183,104],[137,98],[135,98],[136,98],[152,1],[119,1],[179,88],[181,96],[180,97],[166,1],[165,105],[158,1],[145,1],[185,1],[190,1],[114,1],[144,1],[138,1],[120,98],[9,1],[10,1],[14,1],[13,1],[3,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[4,1],[5,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[6,1],[30,1],[31,1],[32,1],[33,1],[7,1],[34,1],[35,1],[36,1],[37,1],[8,1],[38,1],[43,1],[44,1],[39,1],[40,1],[41,1],[42,1],[2,1],[1,1],[45,1],[12,1],[11,1],[197,1],[241,106],[222,107],[221,108],[238,109],[239,1],[223,110],[234,1],[237,111],[242,112],[235,1],[236,113],[240,1],[231,114],[233,115],[224,116],[232,108],[250,128],[246,129],[252,130],[251,131],[193,121],[194,122],[216,1],[195,1],[207,123],[196,124],[217,125],[220,126],[219,127]],"semanticDiagnosticsPerFile":[59,244,214,254,247,213,210,215,192,47,48,46,49,50,51,52,53,54,55,56,57,58,211,253,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,62,110,78,79,80,111,81,82,83,84,85,86,87,88,89,90,91,92,94,93,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,218,209,208,212,249,248,112,203,204,198,199,206,202,201,200,205,243,225,245,230,229,228,227,226,191,140,153,115,167,169,168,142,141,143,170,174,172,151,150,159,118,146,187,162,164,182,117,134,149,184,155,171,175,173,188,157,131,123,122,147,148,121,154,116,133,161,189,128,129,176,178,177,113,132,139,130,160,127,186,126,124,125,163,156,183,137,135,136,152,119,179,181,180,166,165,158,145,185,190,114,144,138,120,9,10,14,13,3,15,16,17,18,19,20,21,22,4,5,26,23,24,25,27,28,29,6,30,31,32,33,7,34,35,36,37,8,38,43,44,39,40,41,42,2,1,45,12,11,197,241,222,221,238,239,223,234,237,242,235,236,240,231,233,224,232,250,246,252,251,193,194,216,195,207,196,217,220,219]},"version":"4.7.4"}
|
package/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./build/lib');
|
package/lib/e2e-suite.js
ADDED
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import {server, routeConfiguringFunction, DeviceSettings} from 'appium/driver';
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
import B from 'bluebird';
|
|
5
|
+
import {TEST_HOST, getTestPort, createAppiumURL} from './helpers';
|
|
6
|
+
import chai from 'chai';
|
|
7
|
+
import sinon from 'sinon';
|
|
8
|
+
|
|
9
|
+
const should = chai.should();
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates some helper functions for E2E tests to manage sessions.
|
|
13
|
+
* @template [CommandData=unknown]
|
|
14
|
+
* @template [ResponseData=any]
|
|
15
|
+
* @param {number} port - Port on which the server is running. Typically this will be retrieved via `get-port` beforehand
|
|
16
|
+
* @param {string} [address] - Address/host on which the server is running. Defaults to {@linkcode TEST_HOST}
|
|
17
|
+
* @returns {SessionHelpers<CommandData, ResponseData>}
|
|
18
|
+
*/
|
|
19
|
+
export function createSessionHelpers(port, address = TEST_HOST) {
|
|
20
|
+
const createAppiumTestURL =
|
|
21
|
+
/** @type {import('lodash').CurriedFunction2<string,string,string>} */ (
|
|
22
|
+
createAppiumURL(address, port)
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
const createSessionURL = createAppiumTestURL(_, '');
|
|
26
|
+
const newSessionURL = createAppiumTestURL('', 'session');
|
|
27
|
+
return /** @type {SessionHelpers<CommandData, ResponseData>} */ ({
|
|
28
|
+
newSessionURL,
|
|
29
|
+
createAppiumTestURL,
|
|
30
|
+
/**
|
|
31
|
+
*
|
|
32
|
+
* @param {string} sessionId
|
|
33
|
+
* @param {string} cmdName
|
|
34
|
+
* @param {any} [data]
|
|
35
|
+
* @param {AxiosRequestConfig} [config]
|
|
36
|
+
* @returns {Promise<any>}
|
|
37
|
+
*/
|
|
38
|
+
postCommand: async (sessionId, cmdName, data = {}, config = {}) => {
|
|
39
|
+
const url = createAppiumTestURL(sessionId, cmdName);
|
|
40
|
+
const response = await axios.post(url, data, config);
|
|
41
|
+
return response.data?.value;
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
*
|
|
45
|
+
* @param {string} sessionIdOrCmdName
|
|
46
|
+
* @param {string|AxiosRequestConfig} cmdNameOrConfig
|
|
47
|
+
* @param {AxiosRequestConfig} [config]
|
|
48
|
+
* @returns {Promise<any>}
|
|
49
|
+
*/
|
|
50
|
+
getCommand: async (sessionIdOrCmdName, cmdNameOrConfig, config = {}) => {
|
|
51
|
+
if (!_.isString(cmdNameOrConfig)) {
|
|
52
|
+
config = cmdNameOrConfig;
|
|
53
|
+
cmdNameOrConfig = sessionIdOrCmdName;
|
|
54
|
+
sessionIdOrCmdName = '';
|
|
55
|
+
}
|
|
56
|
+
const response = await axios({
|
|
57
|
+
url: createAppiumTestURL(sessionIdOrCmdName, cmdNameOrConfig),
|
|
58
|
+
validateStatus: null,
|
|
59
|
+
...config,
|
|
60
|
+
});
|
|
61
|
+
return response.data?.value;
|
|
62
|
+
},
|
|
63
|
+
/**
|
|
64
|
+
*
|
|
65
|
+
* @param {NewSessionData} data
|
|
66
|
+
* @param {AxiosRequestConfig} [config]
|
|
67
|
+
*/
|
|
68
|
+
startSession: async (data, config = {}) => {
|
|
69
|
+
data = _.defaultsDeep(data, {
|
|
70
|
+
capabilities: {
|
|
71
|
+
alwaysMatch: {},
|
|
72
|
+
firstMatch: [{}],
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
const response = await axios.post(newSessionURL, data, config);
|
|
76
|
+
return response.data?.value;
|
|
77
|
+
},
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
* @param {string} sessionId
|
|
81
|
+
*/
|
|
82
|
+
endSession: async (sessionId) =>
|
|
83
|
+
await axios.delete(createSessionURL(sessionId), {
|
|
84
|
+
validateStatus: null,
|
|
85
|
+
}),
|
|
86
|
+
/**
|
|
87
|
+
* @param {string} sessionId
|
|
88
|
+
* @returns {Promise<any>}
|
|
89
|
+
*/
|
|
90
|
+
getSession: async (sessionId) => {
|
|
91
|
+
const response = await axios({
|
|
92
|
+
url: createSessionURL(sessionId),
|
|
93
|
+
validateStatus: null,
|
|
94
|
+
});
|
|
95
|
+
return response.data?.value;
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Creates E2E test suites for a driver.
|
|
102
|
+
* @template {Driver} P
|
|
103
|
+
* @param {DriverClass<P>} DriverClass
|
|
104
|
+
* @param {AppiumW3CCapabilities} [defaultCaps]
|
|
105
|
+
*/
|
|
106
|
+
export function driverE2ETestSuite(DriverClass, defaultCaps = {}) {
|
|
107
|
+
let address = defaultCaps['appium:address'] ?? TEST_HOST;
|
|
108
|
+
let port = defaultCaps['appium:port'];
|
|
109
|
+
const className = DriverClass.name || '(unknown driver)';
|
|
110
|
+
|
|
111
|
+
describe(`BaseDriver E2E (as ${className})`, function () {
|
|
112
|
+
let baseServer;
|
|
113
|
+
/** @type {P} */
|
|
114
|
+
let d;
|
|
115
|
+
/**
|
|
116
|
+
* This URL creates a new session
|
|
117
|
+
* @type {string}
|
|
118
|
+
**/
|
|
119
|
+
let newSessionURL;
|
|
120
|
+
|
|
121
|
+
/** @type {SessionHelpers['startSession']} */
|
|
122
|
+
let startSession;
|
|
123
|
+
/** @type {SessionHelpers['getSession']} */
|
|
124
|
+
let getSession;
|
|
125
|
+
/** @type {SessionHelpers['endSession']} */
|
|
126
|
+
let endSession;
|
|
127
|
+
/** @type {SessionHelpers['getCommand']} */
|
|
128
|
+
let getCommand;
|
|
129
|
+
/** @type {SessionHelpers['postCommand']} */
|
|
130
|
+
let postCommand;
|
|
131
|
+
before(async function () {
|
|
132
|
+
port = port ?? (await getTestPort());
|
|
133
|
+
defaultCaps = {...defaultCaps, 'appium:port': port};
|
|
134
|
+
d = new DriverClass({port, address});
|
|
135
|
+
baseServer = await server({
|
|
136
|
+
routeConfiguringFunction: routeConfiguringFunction(d),
|
|
137
|
+
port,
|
|
138
|
+
hostname: address,
|
|
139
|
+
// @ts-expect-error
|
|
140
|
+
cliArgs: {},
|
|
141
|
+
});
|
|
142
|
+
({startSession, getSession, endSession, newSessionURL, getCommand, postCommand} =
|
|
143
|
+
createSessionHelpers(port, address));
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
after(async function () {
|
|
147
|
+
await baseServer.close();
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
describe('session handling', function () {
|
|
151
|
+
it('should handle idempotency while creating sessions', async function () {
|
|
152
|
+
const sessionIds = [];
|
|
153
|
+
let times = 0;
|
|
154
|
+
do {
|
|
155
|
+
const {sessionId} = await startSession(
|
|
156
|
+
{
|
|
157
|
+
capabilities: {alwaysMatch: defaultCaps},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
headers: {
|
|
161
|
+
'X-Idempotency-Key': '123456',
|
|
162
|
+
},
|
|
163
|
+
// XXX: I'm not sure what these are, as they are not documented axios options,
|
|
164
|
+
// nor are they mentioned in our source
|
|
165
|
+
// @ts-expect-error
|
|
166
|
+
simple: false,
|
|
167
|
+
resolveWithFullResponse: true,
|
|
168
|
+
}
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
sessionIds.push(sessionId);
|
|
172
|
+
times++;
|
|
173
|
+
} while (times < 2);
|
|
174
|
+
_.uniq(sessionIds).length.should.equal(1);
|
|
175
|
+
|
|
176
|
+
const {status, data} = await endSession(sessionIds[0]);
|
|
177
|
+
status.should.equal(200);
|
|
178
|
+
should.equal(data.value, null);
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it('should handle idempotency while creating parallel sessions', async function () {
|
|
182
|
+
const reqs = [];
|
|
183
|
+
let times = 0;
|
|
184
|
+
do {
|
|
185
|
+
reqs.push(
|
|
186
|
+
startSession(
|
|
187
|
+
{
|
|
188
|
+
capabilities: {
|
|
189
|
+
alwaysMatch: defaultCaps,
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
headers: {
|
|
194
|
+
'X-Idempotency-Key': '12345',
|
|
195
|
+
},
|
|
196
|
+
}
|
|
197
|
+
)
|
|
198
|
+
);
|
|
199
|
+
times++;
|
|
200
|
+
} while (times < 2);
|
|
201
|
+
const sessionIds = _.map(await B.all(reqs), 'sessionId');
|
|
202
|
+
_.uniq(sessionIds).length.should.equal(1);
|
|
203
|
+
|
|
204
|
+
const {status, data} = await endSession(sessionIds[0]);
|
|
205
|
+
status.should.equal(200);
|
|
206
|
+
should.equal(data.value, null);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('should create session and retrieve a session id, then delete it', async function () {
|
|
210
|
+
let {status, data} = await axios.post(newSessionURL, {
|
|
211
|
+
capabilities: {
|
|
212
|
+
alwaysMatch: defaultCaps,
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
status.should.equal(200);
|
|
217
|
+
should.exist(data.value.sessionId);
|
|
218
|
+
data.value.capabilities.platformName.should.equal(defaultCaps.platformName);
|
|
219
|
+
data.value.capabilities.deviceName.should.equal(defaultCaps['appium:deviceName']);
|
|
220
|
+
|
|
221
|
+
({status, data} = await endSession(/** @type {string} */ (d.sessionId)));
|
|
222
|
+
|
|
223
|
+
status.should.equal(200);
|
|
224
|
+
should.equal(data.value, null);
|
|
225
|
+
should.equal(d.sessionId, null);
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it.skip('should throw NYI for commands not implemented', async function () {});
|
|
230
|
+
|
|
231
|
+
describe('command timeouts', function () {
|
|
232
|
+
let originalFindElement, originalFindElements;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* @param {number} [timeout]
|
|
236
|
+
*/
|
|
237
|
+
async function startTimeoutSession(timeout) {
|
|
238
|
+
const caps = _.cloneDeep(defaultCaps);
|
|
239
|
+
caps['appium:newCommandTimeout'] = timeout;
|
|
240
|
+
return await startSession({capabilities: {alwaysMatch: caps}});
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
before(function () {
|
|
244
|
+
originalFindElement = d.findElement;
|
|
245
|
+
d.findElement = function () {
|
|
246
|
+
return 'foo';
|
|
247
|
+
}.bind(d);
|
|
248
|
+
|
|
249
|
+
originalFindElements = d.findElements;
|
|
250
|
+
d.findElements = async function () {
|
|
251
|
+
await B.delay(200);
|
|
252
|
+
return ['foo'];
|
|
253
|
+
}.bind(d);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
after(function () {
|
|
257
|
+
d.findElement = originalFindElement;
|
|
258
|
+
d.findElements = originalFindElements;
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
it('should set a default commandTimeout', async function () {
|
|
262
|
+
let newSession = await startTimeoutSession();
|
|
263
|
+
d.newCommandTimeoutMs.should.be.above(0);
|
|
264
|
+
await endSession(newSession.sessionId);
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
it('should timeout on commands using commandTimeout cap', async function () {
|
|
268
|
+
let newSession = await startTimeoutSession(0.25);
|
|
269
|
+
const sessionId = /** @type {string} */ (d.sessionId);
|
|
270
|
+
await postCommand(sessionId, 'element', {
|
|
271
|
+
using: 'name',
|
|
272
|
+
value: 'foo',
|
|
273
|
+
});
|
|
274
|
+
await B.delay(400);
|
|
275
|
+
const value = await getSession(sessionId);
|
|
276
|
+
should.equal(value.error, 'invalid session id');
|
|
277
|
+
should.equal(d.sessionId, null);
|
|
278
|
+
const resp = (await endSession(newSession.sessionId)).data.value;
|
|
279
|
+
should.equal(resp?.error, 'invalid session id');
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
it('should not timeout with commandTimeout of false', async function () {
|
|
283
|
+
let newSession = await startTimeoutSession(0.1);
|
|
284
|
+
let start = Date.now();
|
|
285
|
+
const value = await postCommand(/** @type {string} */ (d.sessionId), 'elements', {
|
|
286
|
+
using: 'name',
|
|
287
|
+
value: 'foo',
|
|
288
|
+
});
|
|
289
|
+
(Date.now() - start).should.be.above(150);
|
|
290
|
+
value.should.eql(['foo']);
|
|
291
|
+
await endSession(newSession.sessionId);
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
it('should not timeout with commandTimeout of 0', async function () {
|
|
295
|
+
d.newCommandTimeoutMs = 2;
|
|
296
|
+
let newSession = await startTimeoutSession(0);
|
|
297
|
+
|
|
298
|
+
await postCommand(/** @type {string} */ (d.sessionId), 'element', {
|
|
299
|
+
using: 'name',
|
|
300
|
+
value: 'foo',
|
|
301
|
+
});
|
|
302
|
+
await B.delay(400);
|
|
303
|
+
const value = await getSession(/** @type {string} */ (d.sessionId));
|
|
304
|
+
value.platformName?.should.equal(defaultCaps.platformName);
|
|
305
|
+
const resp = (await endSession(newSession.sessionId)).data.value;
|
|
306
|
+
should.equal(resp, null);
|
|
307
|
+
|
|
308
|
+
d.newCommandTimeoutMs = 60 * 1000;
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
it('should not timeout if its just the command taking awhile', async function () {
|
|
312
|
+
let newSession = await startTimeoutSession(0.25);
|
|
313
|
+
// XXX: race condition: we must build this URL before ...something happens...
|
|
314
|
+
// which causes `d.sessionId` to be missing
|
|
315
|
+
const {sessionId} = d;
|
|
316
|
+
|
|
317
|
+
await postCommand(/** @type {string} */ (d.sessionId), 'element', {
|
|
318
|
+
using: 'name',
|
|
319
|
+
value: 'foo',
|
|
320
|
+
});
|
|
321
|
+
await B.delay(400);
|
|
322
|
+
const value = await getSession(/** @type {string} */ (sessionId));
|
|
323
|
+
value.error.should.equal('invalid session id');
|
|
324
|
+
should.equal(d.sessionId, null);
|
|
325
|
+
const resp = (await endSession(newSession.sessionId)).data.value;
|
|
326
|
+
/** @type {string} */ (/** @type { {error: string} } */ (resp).error).should.equal(
|
|
327
|
+
'invalid session id'
|
|
328
|
+
);
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
it('should not have a timer running before or after a session', async function () {
|
|
332
|
+
// @ts-expect-error
|
|
333
|
+
should.not.exist(d.noCommandTimer);
|
|
334
|
+
let newSession = await startTimeoutSession(0.25);
|
|
335
|
+
newSession.sessionId.should.equal(d.sessionId);
|
|
336
|
+
// @ts-expect-error
|
|
337
|
+
should.exist(d.noCommandTimer);
|
|
338
|
+
await endSession(newSession.sessionId);
|
|
339
|
+
// @ts-expect-error
|
|
340
|
+
should.not.exist(d.noCommandTimer);
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
describe('settings api', function () {
|
|
345
|
+
before(function () {
|
|
346
|
+
d.settings = new DeviceSettings({ignoreUnimportantViews: false});
|
|
347
|
+
});
|
|
348
|
+
it('should be able to get settings object', function () {
|
|
349
|
+
d.settings.getSettings().ignoreUnimportantViews.should.be.false;
|
|
350
|
+
});
|
|
351
|
+
it('should not reject when `updateSettings` method is not provided', async function () {
|
|
352
|
+
await d.settings.update({ignoreUnimportantViews: true}).should.not.be.rejected;
|
|
353
|
+
});
|
|
354
|
+
it('should reject for invalid update object', async function () {
|
|
355
|
+
await d.settings
|
|
356
|
+
// @ts-expect-error
|
|
357
|
+
.update('invalid json')
|
|
358
|
+
.should.be.rejectedWith('JSON');
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
describe('unexpected exits', function () {
|
|
363
|
+
/** @type {import('sinon').SinonSandbox} */
|
|
364
|
+
let sandbox;
|
|
365
|
+
beforeEach(function () {
|
|
366
|
+
sandbox = sinon.createSandbox();
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
afterEach(function () {
|
|
370
|
+
sandbox.restore();
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
it('should reject a current command when the driver crashes', async function () {
|
|
374
|
+
sandbox.stub(d, 'getStatus').callsFake(async function () {
|
|
375
|
+
await B.delay(5000);
|
|
376
|
+
});
|
|
377
|
+
const reqPromise = getCommand('status', {validateStatus: null});
|
|
378
|
+
// make sure that the request gets to the server before our shutdown
|
|
379
|
+
await B.delay(100);
|
|
380
|
+
const shutdownEventPromise = new B((resolve, reject) => {
|
|
381
|
+
setTimeout(
|
|
382
|
+
() =>
|
|
383
|
+
reject(
|
|
384
|
+
new Error(
|
|
385
|
+
'onUnexpectedShutdown event is expected to be fired within 5 seconds timeout'
|
|
386
|
+
)
|
|
387
|
+
),
|
|
388
|
+
5000
|
|
389
|
+
);
|
|
390
|
+
d.onUnexpectedShutdown(resolve);
|
|
391
|
+
});
|
|
392
|
+
d.startUnexpectedShutdown(new Error('Crashytimes'));
|
|
393
|
+
const value = await reqPromise;
|
|
394
|
+
value.message.should.contain('Crashytimes');
|
|
395
|
+
await shutdownEventPromise;
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
describe('event timings', function () {
|
|
400
|
+
it('should not add timings if not using opt-in cap', async function () {
|
|
401
|
+
const session = await startSession({capabilities: {alwaysMatch: defaultCaps}});
|
|
402
|
+
const res = await getSession(session.sessionId);
|
|
403
|
+
should.not.exist(res.events);
|
|
404
|
+
await endSession(session.sessionId);
|
|
405
|
+
});
|
|
406
|
+
it('should add start session timings', async function () {
|
|
407
|
+
const caps = {...defaultCaps, 'appium:eventTimings': true};
|
|
408
|
+
const session = await startSession({capabilities: {alwaysMatch: caps}});
|
|
409
|
+
const res = await getSession(session.sessionId);
|
|
410
|
+
should.exist(res.events);
|
|
411
|
+
should.exist(res.events?.newSessionRequested);
|
|
412
|
+
should.exist(res.events?.newSessionStarted);
|
|
413
|
+
res.events?.newSessionRequested[0].should.be.a('number');
|
|
414
|
+
res.events?.newSessionStarted[0].should.be.a('number');
|
|
415
|
+
await endSession(session.sessionId);
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* A {@linkcode DriverClass}, except using the base {@linkcode Driver} type instead of `ExternalDriver`.
|
|
423
|
+
* This allows the suite to work for `BaseDriver`.
|
|
424
|
+
* @template {Driver} P
|
|
425
|
+
* @typedef {import('@appium/types').DriverClass<P>} DriverClass
|
|
426
|
+
*/
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* @typedef {import('@appium/types').Capabilities} Capabilities
|
|
430
|
+
* @typedef {import('@appium/types').Driver} Driver
|
|
431
|
+
* @typedef {import('@appium/types').DriverStatic} DriverStatic
|
|
432
|
+
* @typedef {import('@appium/types').AppiumW3CCapabilities} AppiumW3CCapabilities
|
|
433
|
+
* @typedef {import('axios').AxiosRequestConfig} AxiosRequestConfig
|
|
434
|
+
* @typedef {import('@appium/types').SingularSessionData} SingularSessionData
|
|
435
|
+
*/
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* @template T,D
|
|
439
|
+
* @typedef {import('axios').AxiosResponse<T, D>} AxiosResponse
|
|
440
|
+
*/
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* @typedef NewSessionData
|
|
444
|
+
* @property {import('type-fest').RequireAtLeastOne<import('@appium/types').W3CCapabilities, 'firstMatch'|'alwaysMatch'>} capabilities
|
|
445
|
+
*/
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* @typedef NewSessionResponse
|
|
449
|
+
* @property {string} sessionId,
|
|
450
|
+
* @property {import('@appium/types').Capabilities} capabilities
|
|
451
|
+
*/
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Some E2E helpers for making requests and managing sessions
|
|
455
|
+
* See {@linkcode createSessionHelpers}
|
|
456
|
+
* @template [CommandData=unknown]
|
|
457
|
+
* @template [ResponseData=any]
|
|
458
|
+
* @typedef SessionHelpers
|
|
459
|
+
* @property {string} newSessionURL - URL to create a new session. Can be used with raw `axios` requests to fully inspect raw response. Mostly, this will not be used.
|
|
460
|
+
* @property {(data: NewSessionData, config?: AxiosRequestConfig) => Promise<NewSessionResponse>} startSession - Begin a session
|
|
461
|
+
* @property {(sessionId: string) => Promise<AxiosResponse<{value: {error?: string}?}, {validateStatus: null}>>} endSession - End a session. _Note: resolves with raw response object_
|
|
462
|
+
* @property {(sessionId: string) => Promise<SingularSessionData>} getSession - Get info about a session
|
|
463
|
+
* @property {(sessionId: string, cmdName: string, data?: CommandData, config?: AxiosRequestConfig) => Promise<ResponseData>} postCommand - Send an arbitrary command via `POST`.
|
|
464
|
+
* @property {(sessionIdOrCmdName: string, cmdNameOrConfig: string|AxiosRequestConfig, config?: AxiosRequestConfig) => Promise<ResponseData>} getCommand - Send an arbitrary command via `GET`. Optional `sessionId`.
|
|
465
|
+
*/
|
package/lib/helpers.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import getPort from 'get-port';
|
|
2
|
+
import {curry} from 'lodash';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Default test host
|
|
6
|
+
*/
|
|
7
|
+
const TEST_HOST = '127.0.0.1';
|
|
8
|
+
|
|
9
|
+
let testPort;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Returns a free port; one per process
|
|
13
|
+
* @param {boolean} [force] - If true, do not reuse the port (if it already exists)
|
|
14
|
+
* @returns {Promise<number>} a free port
|
|
15
|
+
*/
|
|
16
|
+
async function getTestPort(force = false) {
|
|
17
|
+
if (force || !testPort) {
|
|
18
|
+
let port = await getPort();
|
|
19
|
+
if (!testPort) {
|
|
20
|
+
testPort = port;
|
|
21
|
+
}
|
|
22
|
+
return port;
|
|
23
|
+
}
|
|
24
|
+
return testPort;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Build an Appium URL from components.
|
|
29
|
+
*
|
|
30
|
+
* **All** parameters are required. Provide an empty string (`''`) if you don't need one.
|
|
31
|
+
* To rearrange arguments (if needed), use the placeholder from Lodash (`_`).
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
const createAppiumURL = curry(
|
|
35
|
+
/**
|
|
36
|
+
* @param {string} address - Base address (w/ optional protocol)
|
|
37
|
+
* @param {string|number} port - Port number
|
|
38
|
+
* @param {string?} session - Session ID
|
|
39
|
+
* @param {string} pathname - Extra path
|
|
40
|
+
* @returns {string} New URL
|
|
41
|
+
* @example
|
|
42
|
+
*
|
|
43
|
+
* import _ from 'lodash';
|
|
44
|
+
*
|
|
45
|
+
* // http://127.0.0.1:31337/session
|
|
46
|
+
* createAppiumURL('127.0.0.1', 31337, '', 'session')
|
|
47
|
+
*
|
|
48
|
+
* // http://127.0.0.1:31337/session/asdfgjkl
|
|
49
|
+
* const createSessionURL = createAppiumURL('127.0.0.1', 31337, _, 'session')
|
|
50
|
+
* createSessionURL('asdfgjkl')
|
|
51
|
+
*
|
|
52
|
+
* // http://127.0.0.1:31337/session/asdfgjkl/appium/execute
|
|
53
|
+
* const createURLWithPath = createAppiumURL('127.0.0.1', 31337, 'asdfgjkl');
|
|
54
|
+
* createURLWithPath('appium/execute')
|
|
55
|
+
*/
|
|
56
|
+
(address, port, session, pathname) => {
|
|
57
|
+
if (!/^https?:\/\//.test(address)) {
|
|
58
|
+
address = `http://${address}`;
|
|
59
|
+
}
|
|
60
|
+
let path = session ? `session/${session}` : '';
|
|
61
|
+
if (pathname) {
|
|
62
|
+
path = `${path}/${pathname}`;
|
|
63
|
+
}
|
|
64
|
+
return new URL(path, `${address}:${port}`).href;
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
export {TEST_HOST, getTestPort, createAppiumURL};
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './e2e-suite';
|
|
2
|
+
export * from './unit-suite';
|
|
3
|
+
export * from './helpers';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import('@appium/types').DriverClass} DriverClass
|
|
7
|
+
* @typedef {import('@appium/types').W3CCapabilities} W3CCapabilities
|
|
8
|
+
* @typedef {import('@appium/types').AppiumW3CCapabilities} AppiumW3CCapabilities
|
|
9
|
+
*/
|