Commit Graph
144 Commits
Author SHA1 Message Date
Jonathan Lipps 8b7906f757 Publish
- appium@2.0.0-beta.31
 - @appium/base-driver@8.5.0
 - @appium/base-plugin@1.8.2
 - @appium/doctor@1.16.15
 - @appium/docutils@0.0.1
 - @appium/execute-driver-plugin@1.0.2
 - @appium/fake-driver@3.2.10
 - @appium/fake-plugin@1.2.1
 - @appium/gulp-plugins@6.0.6
 - @appium/images-plugin@1.1.7
 - @appium/opencv@1.0.5
 - @appium/relaxed-caps-plugin@1.0.0-beta.3
 - @appium/schema@0.0.3
 - @appium/support@2.57.2
 - @appium/test-support@1.3.16
 - @appium/types@0.2.0
 - @appium/universal-xml-plugin@1.0.0-beta.5
2022-04-20 13:23:24 -07:00
Christopher Hiller ab6dfb3158 fix(base-driver): supportedLogTypes does not get overwritten
Closes #16738

There's a difference between assigning things to a prototype and public class fields, evidently.

To test this would be best done via interaction between drivers and `base-driver`, but affected drivers do not necessarily run the reusable test suite.  Fundamentally, a unit test for this would be testing Babel.  Unsure of best way to add an E2E test

- Also fiddled with some types, which still aren't quite right, but better.
- Simplified a `_.reduce()` call
2022-04-20 11:50:21 -07:00
Christopher Hiller 237529c1ac chore(types,base-driver): rename DriverOpts => ServerArgs
- these are first and foremost _server_ args, so go with that, except they _also_ get provided to drivers, so we can use the `DriverOpts` alias there.
- simplify `tsconfig.json` in `@appium/types`
2022-04-14 14:30:00 -07:00
Christopher Hiller 2d76923e72 fix(base-driver): do not throw if updateSettings aren't provided
BREAKING CHANGES

Some plugin tests were calling code which called the `update()` method of `DeviceSettings`, but there's apparently no code that actually sets the `onUpdateSettings` listener anywhere (maybe drivers can opt-in to this behavior?), which was causing exceptions to get thrown.

The E2E tests expected this code to reject, but the plugin tests expected it to _not_ reject, so I'm not sure what's right.

- adds unit tests for `DeviceSettings`

_Note: after further investigation, I think this was throwing simply due to `base-plugin` using an old version of `appium-fake-driver` which used an old `appium-base-driver`.  @jlipps says this change is OK._
2022-04-14 14:30:00 -07:00
Christopher Hiller 882a5f4d5e chore: unify test setup fixture
Moved the stuff in `test/setup-babel` into `test/setup` and then removed some cruft in the `test:*` scripts of each package referencing `test/setup-babel`
2022-04-14 14:30:00 -07:00
Christopher Hiller 5b54017054 chore: relocated plugins
- left some necessary config in packages/plugins-temp which will get removed after full integration

# Conflicts:
#	packages/appium-plugins/.github/workflows/main.yml
#	packages/appium-plugins/packages/base/package-lock.json
#	packages/appium-plugins/packages/base/package.json
#	packages/appium-plugins/packages/fake/package-lock.json
#	packages/appium-plugins/packages/images/package-lock.json
#	packages/appium-plugins/packages/images/package.json
#	packages/appium-plugins/packages/relaxed-caps/package-lock.json
#	packages/appium-plugins/packages/relaxed-caps/package.json
#	packages/appium-plugins/packages/universal-xml/package-lock.json
#	packages/fake-plugin/lib/logger.js
#	packages/fake-plugin/lib/scripts/fake-error.js
#	packages/fake-plugin/lib/scripts/fake-success.js
#	packages/fake-plugin/package.json
#	packages/universal-xml-plugin/package.json
2022-04-14 14:30:00 -07:00
Mykola Mokhnach cad6272f6b chore(base-driver): Update the deprecated 'del' method name (#16765) 2022-04-13 21:30:54 +02:00
Mykola Mokhnach 78a46375ae feat(base-driver): Add a route for new window creation (#16748)
* feat(base-driver): Add a route for new window creation

* Update param name

* Update types
2022-04-12 14:51:16 -07:00
Jonathan Lipps 319f7289e7 Publish
- appium@2.0.0-beta.30
 - @appium/base-driver@8.4.2
 - @appium/doctor@1.16.14
 - @appium/eslint-config-appium@5.0.4
 - @appium/fake-driver@3.2.9
 - @appium/gulp-plugins@6.0.5
 - @appium/opencv@1.0.4
 - @appium/schema@0.0.2
 - @appium/support@2.57.1
 - @appium/test-support@1.3.15
 - @appium/types@0.1.1
2022-04-12 09:11:41 -07:00
Jonathan Lipps 0f32dad275 Publish
- appium@2.0.0-beta.29
 - @appium/base-driver@8.4.1
 - @appium/doctor@1.16.13
 - @appium/fake-driver@3.2.8
 - @appium/gulp-plugins@6.0.4
2022-04-12 08:49:03 -07:00
Mykola Mokhnach 46b7df3f77 chore(base-driver): Only parse session id when necessary 2022-04-11 08:24:55 +02:00
Mykola Mokhnach ad3b4b2c96 fix(base-driver): isErrorType import 2022-04-11 08:16:42 +02:00
Mykola Mokhnach 5d2156a06b fix(base-driver): Make sure proxyReqRes helper never throws any exceptions (#16742) 2022-04-11 07:59:30 +02:00
Renovate Bot 20daee6a24 chore(base-driver): update dependency lru-cache to v7.8.1 2022-04-10 10:46:22 +00:00
Mykola Mokhnach ff3b290c77 chore(base-driver): Update ws dependency (#16739) 2022-04-09 22:56:01 +02:00
Renovate Bot ed89b590e1 chore(base-driver): update dependency lru-cache to v7.8.0 2022-04-09 01:42:50 +00:00
Jonathan Lipps 3ec3a0efa5 Publish
- appium@2.0.0-beta.28
 - @appium/base-driver@8.4.0
 - @appium/doctor@1.16.12
 - @appium/eslint-config-appium@5.0.3
 - @appium/fake-driver@3.2.7
 - @appium/gulp-plugins@6.0.3
 - @appium/opencv@1.0.3
 - @appium/schema@0.0.1
 - @appium/support@2.57.0
 - @appium/test-support@1.3.14
 - @appium/types@0.1.0
2022-04-07 16:12:21 -07:00
Christopher Hiller 3adf4d4283 chore: fix dev scripts 2022-04-07 14:24:10 -07:00
Renovate Bot 02706de19d chore(gulp-plugins): update babel monorepo to v7.17.9 2022-04-07 14:51:07 +00:00
Renovate Bot dd38c6f42c chore(base-driver): update dependency body-parser to v1.20.0 2022-04-04 15:13:29 +00:00
Mykola Mokhnach a9651d3c59 fix(base-driver): Update/simplify the logic for logger prefix (#16683) 2022-04-01 22:34:57 +02:00
Mykola Mokhnach d8a9b4da36 feat(base-driver): Add more shadow root-related W3C routes (#16700) 2022-03-31 17:46:44 +02:00
Renovate Bot 4f41ec3c7a chore(base-driver): update dependency lru-cache to v7.7.3 2022-03-31 13:25:29 +00:00
Christopher Hiller 06f75a281c chore(base-driver): remove ts-expect-error directive from elementShadowRoot route 2022-03-30 14:42:56 -07:00
Renovate Bot 6fbff601b6 chore(base-driver): update dependency lru-cache to v7.7.2 2022-03-30 10:23:14 +00:00
Mykola Mokhnach 6973f54e06 chore: Fix indentation (#16678) 2022-03-29 08:00:54 +02:00
Mykola Mokhnach c63e9bf8e0 fix(base-driver): Make sure we never mutate incoming args (#16670) 2022-03-28 20:35:37 +02:00
Christopher Hiller 164bedb2f1 feat(base-driver): generate declaration files
This was not as easy as the other two.  The main issue involves the `BaseDriver` class and is threefold:

1. `BaseDriver` and a valid external subclass thereof (a `Driver`) are not the same, because the former is essentially _abstract_. There is no notion of an abstract class in JS nor in TS for JS.
2. Splitting `BaseDriver` into several modules and "mixing in" some modules is just not well-understood by TS.
3. `AppiumDriver` inherits _most_ of `BaseDriver`, but overrides some functions with differing signatures. This is unsupported by TS.

To work around these problems, I had to:

1. Move the `Driver` interface into `@appium/types`, since other packages may depend on it.  We do not want circular dependencies, which is likely to occur otherwise.  Further, there is no way to tell TS for JS that a class _implements_ an interface or type.
2. Refactor the mixins (in `basedriver/commands/`) into "mixin classes", as understood by typescript. These are dynamic classes returned by functions which accept a class parameter, and _extend_ that class. The result is marginally better, but the implementation is ... well, see for yourself.  It is not possible to use declaration merging to just "trick" TS into thinking that `BaseDriver` has all of these extra methods; classes cannot be merged, and even if you could, you can't use declaration merging to "add" methods afaict.
3. `BaseDriver` is now an empty class which inherits from all mixins applied to `DriverCore`.  Due to syntactic restrictions, it must be a `class` statement in order to use the `@implements` tag, which causes TS to check that the result fully implements `Driver`.  `AppiumDriver` _also_ inherits from `DriverCore`, since it does not override `BaseDriver` "properly".  `BaseDriverCore` itself is pretty small, containing only those functions which `AppiumDriver` defines as differing.

Otherwise:

- `BaseDriver` does not inherit from `Protocol`, which is just an empty class. `Protocol` was removed.
- All of the error classes are exported from `protocol/errors`, because TS cannot see them otherwise.
- Exported missing `GET_STATUS_COMMAND` from `protocol/index`
- Re-exported `normalizeBasePath` from `server` instead of `protocol`, since that's where it's defined
- Removed `index.d.ts`
- Mixins use `@implements` as well. Note that `@implements` does not support `import('..')` syntax.

chore(base-driver): attempted to make types for mixins less awful

fixed a couple issues in the types in `driver.js`

core(base-driver): add capabilities types

- also move the bluebird config into the index
- fix references to `DriverOpts`
- add `assignServer()` to `BaseDriverCore`, used by `AppiumDriver`

chore(base-driver): fix more types

add missing reference to `@appium/types` in `tsconfig.json`

fix(base-driver): ensure getLogEvents is async

fix(base-driver): add some more type checks and fix logCustomEvent to be async

chore(base-driver): reformat
2022-03-25 14:54:45 -07:00
Jonathan Lipps 6d35def9ed Publish
- appium@2.0.0-beta.27
 - @appium/base-driver@8.3.1
 - @appium/doctor@1.16.11
 - @appium/fake-driver@3.2.6
 - @appium/support@2.56.1
 - @appium/test-support@1.3.13
2022-03-23 11:50:58 -07:00
Mykola Mokhnach bbfc7ef51d fix(base-driver): Use WeakRef to reference the driver instance in the log prefix generator (#16636) 2022-03-23 18:48:33 +01:00
Christopher Hiller 35d9dc7ebc chore(base-driver): ungulpify
This PR removes Gulp from `@appium/base-driver` and reorganizes the test files.

The build needs to be a little different since other modules depend on its `build/test/basedriver` module.  IMO this should probably get moved elsewhere, but this does not break compatibility.
2022-03-22 18:12:02 -07:00
Jonathan Lipps f5cce0f29d Publish
- appium@2.0.0-beta.26
 - @appium/base-driver@8.3.0
 - @appium/doctor@1.16.10
 - @appium/eslint-config-appium@5.0.2
 - @appium/fake-driver@3.2.5
 - @appium/gulp-plugins@6.0.2
 - @appium/opencv@1.0.2
 - @appium/support@2.56.0
 - @appium/test-support@1.3.12
2022-03-22 13:41:57 -07:00
Renovate Bot 56f5c87d91 chore(support): update dependency axios to v0.26.1 2022-03-22 16:27:35 +00:00
Kazuaki Matsuo 3ee93ba5bd fix: revert 15809 (#16621)
* fix: revert 15809

* change comment
2022-03-21 10:10:35 -07:00
Renovate Bot f947828e9b chore(base-driver): update dependency lru-cache to v7.7.1 2022-03-20 14:51:43 +00:00
Renovate Bot 0ebdd0ed78 chore(base-driver): update dependency http-status-codes to v2.2.0 2022-03-20 13:08:38 +00:00
Renovate Bot 799fb87be3 chore(gulp-plugins): update babel monorepo to v7.17.8 2022-03-19 11:13:48 +00:00
Renovate Bot 297a307725 chore(gulp-plugins): update babel monorepo to v7.17.7 2022-03-16 10:55:01 +00:00
Renovate Bot 1cc5a9e2cc chore(base-driver): update dependency ws to v7.5.7 2022-03-15 16:56:39 +00:00
Renovate Bot 7b6159cf2f chore(base-driver): update dependency express to v4.17.3 2022-03-15 14:12:16 +00:00
Renovate Bot 28a14da729 chore(base-driver): update dependency body-parser to v1.19.2 2022-03-15 11:44:51 +00:00
Renovate Bot 54b1f5276a chore(base-driver): update dependency async-lock to v1.3.1 2022-03-14 20:26:14 +00:00
Renovate Bot 94fe0f2ef8 chore(): update babel monorepo 2022-03-12 14:36:43 +00:00
Kazuaki Matsuo 2de0e383cc chore(base-driver): address zip/unzip in the docstring of configureApp (#16548)
* fix(base): do not skip unzip even onPostProcess is function

* address unzip/zip
2022-03-10 11:22:54 -08:00
Christopher Hiller 4b9bfb35aa chore: add directory prop to repository prop of package.json
I think npm uses this to link to the correct path of the package in a monorepo.
2022-03-10 11:10:35 -08:00
Christopher Hiller d9fd258eee chore: make typedefs less verbose
`@typedef {Object} Foo` is the same as `@typedef Foo`, and one of those is shorter.
2022-03-09 14:50:45 -08:00
Christopher Hiller 5be33381fd test(base-driver): rewrite some assertions in capability-specs
simplified some stuff that was giving me problems.

instead of doing a try..await..catch and calling `fail()` if the catch block wasn't called, just use `sinon-chai`'s `.should.eventually.be.rejectedWith(ErrorClass, /message/)`

depending on the order in which this test file is run versus others, it's possible that some will fail because of global logging weirdness.  but normally this doesn't happen... keep an eye on it!
2022-03-09 14:50:45 -08:00
Christopher Hiller 2781805c05 chore: ban direct usage of sinon (#16485)
* chore: ban direct usage of sinon

Calling `sinon.stub()`, `sinon.mock()` etc., directly is error-prone. Care must be taken to explicitly restore any stub created.

Using a sandbox (via `sinon.createSandbox()`), you don't need to remember to restore everything you fiddled with.

To that end, I've converted all direct `sinon` calls into sandbox calls and **BANNED** direct usage of `sinon` via ESLint.

# Conflicts:
#	.eslintrc

* test(base-driver): replace restricted sinon.spy() usage in server-specs.js

* test(support): formatting
2022-03-09 14:50:45 -08:00
Christopher Hiller 868517b6f4 chore: remove gulp from appium package (#16459)
This change removes `gulp` and replaces it with plain ol' `babel` and `mocha`.

## `appium`

- No gulp.
- `test/` has been re-organized.  All test files now end in the extension `.spec.js`, which is a recognized convention and understood by editors/IDEs.  The tests are further split into `unit` and `e2e` subdirs.  This makes working with both `babel` and `mocha` easier.
- The tests are _not_ run against the transpiled code; code is now transpiled on-the-fly via `@babel/register`. This only affects `appium`.
- `commands-yml/validator.js` moved to `scripts/parse-yml-commands.js`. It has been rewritten as a CJS module.  `commands-yml/` should not contain `.js` files.
- `test/setup.js` is a new test harness specific to Appium, which loads & configures `@babel/register`.  Eventually, the contents of this file can be moved into the root monorepo's `test/setup.js`, but the rest of the packages do not need `@babel/register`, so we avoid the overhead.

## `@appium/gulp-plugins`

- Unfortunately, due to the new `npm test` strategy (see below), we cannot use the `nyan` reporter.  Or rather, we _can_, but will not see the animation.  So the reporter is now set to default to `spec`.
- Modified tests so they didn't overwrite the actual `build` dir with transpiled fixtures, which is what was happening. This was causing failures depending on the transpile/test order.

## All Packages

- All packages now have their own `build`, `test`, `test:e2e` and `dev` (just build + watch mode) npm scripts. This makes running a complete build easier, since each package can now provide its own appropriate command.  This is _mostly_ just `gulp once` (where `gulp` was used before), except for `appium`, where `@babel/cli` is used directly.
- This is what happens when `npm test` is run from the monorepo (in order):
    1. All packages are built (in parallel) by running `npm run build` in each folder (via `lerna`). See `pretest`
    2. All code is linted directly via `eslint`.
    3. All _unit tests_ are run w/ `npm test` in each folder, having assumed transpilation already occurred (if necessary).
- `npm run e2e-test` runs the `npm run test:e2e` in each folder. No transpilation occurs! Careful.
- All scripts are expected to live in `packages/*/scripts`, and this directory enforces CJS via ESLint.  `postinstall.js` moved, as well as `check-npm-pack-files.js`. `generate-schema-declarations.mjs` moved from the root `scripts/` dir into `packages/appium/scripts/`; it's now CJS instead of ESM.
- I had profiled running various things with `lerna run --parallel`, but it turns out this is not faster.  I'm not sure why, but I think it may have something to do with streaming STDOUT/STDERR, or potentially the overhead of running child processes outweighs the time it takes to actually run tests and builds.
- The behavior of `lerna run` now mimicks `lerna exec`, which was "run stuff in serial, streaming the output". The default behavior of `lerna run` is "run stuff in parallel, buffering the output".  Buffered output sucks, and streaming the output from all tasks at once creates chaos.  To override this behavior, you'll see `--parallel --concurrency=8 --prefix` for tasks that can truly be parallelized, like transpilation.  The number 8 is the "maximum", and CI usually won't have more than 2 cores available anyway.
- When run in CI, Mocha runs with `--forbid-only`, which will fail if there's an `.only()` somewhere in the tests. Further, it forces color output.

## Etc.

- Updated Wallaby config, `.gitignore`, `.eslintignore`.
- Sorted `package.json` files
- Removed `watch` and `coverage` scripts which were broken anyway.

chore(appium): fix schema json path issues

- the path to the JSON schema is now correct: `lib/appium-config-schema.json`
- add `log-symbols` to devdeps for niceness. this is already a transitive dep
2022-03-09 14:50:45 -08:00
Mykola Mokhnach 493c48d190 feat: Add a missing route for element shadow root (#16538) 2022-03-09 18:51:41 +01:00