- inline consts so that we don't have to export them for unit testing
- create `getKeymanRoot` and `getWebTestResourcesPath` helper functions
to DRY out the code
- run `languageProcessortests.js` without coverage to prevent a failure
creating the coverage report.
Simplify usage of `TestCompilerCallbacks` by making it responsible for
the `beforeEach` and `afterEach` incantations itself. There are a couple
of more complex usages of `TestCompilerCallbacks` which have been
excluded from this change on purpose.
Renamed `testCallbacks` to `callbacks` in the one place where it was
different.
Hoist @types/node and @types/mocha because inconsistent versions of
@types/mocha were causing compiler errors with this change.
Also added a cast to `fs.readFileSync` to `Uint8Array` to eliminate
compiler warnings/errors in test files.
Fixes: #15654
Test-bot: skip
The command shortcuts that were used by Web
scripts to create bundles via `esbuild` were not
properly handling the $KEYMAN_ROOT path when it
contained a space. These changes will rectify
this behavior and permit builds for such cases.
Build-bot: skip build:web
Test-bot: skip
This change stubs out `KMXKeyboard.isRTL` and adds a unit test for RTL
with .js and .kmx (currently skipped) keyboards. Also change some code
to use `Keyboard` instead of `JSKeyboard` and stub out additional methods.
The RTL functionality will have to be completed when the necessary
extensions to the Core API are implemented (#15482).
Fixes: #15288
Test-bot: skip
PR #15093 merged multiple engine modules into one. However, in doing so
we lost the .js tests and ran only the .ts ones. This change re-adds the
.js tests and fixes them where the code diverged since then.
Other changes:
- rename `queryEngine.ts` to `cloudQueryEngine.ts` to match the class name
- remove unused `keyboard-storage/cloud/index.ts`
- expose `CLOUD_TIMEOUT_ERR` and `CLOUD_STUB_REGISTRATION_ERR` as
`unitTestEndpoints`
- add `test/resources` to exports in `web/package.json`. This was necessary
because the compiled .ts test files are under `web/build` whereas the
.js test files are under `web/src` and so the relative paths in imports
no longer work. Also fix the imports in test files.
- apply fix from #15477 if KEYMAN_ROOT is not set
I'm not happy to put the compiled files under
`web/src/test/auto/resources/build`, but that's the only way I got it
to work. If I put the compiled files in `web/build/test/resources` it
couldn't find the types for `promise-status-async`.
Also, running the .js tests succeeded but then creating the coverage
report failed. I was not able to find the reason or a fix for that. As a
hack to work around this problem we check the number of failed tests
instead of relying on the exit code of the test.
Follows: #15093
Test-bot: skip
fix(web): fix problem with tests if KEYMAN_ROOT is not set 🎼
When running mocha without starting it through `build.sh`/`test.sh` the tests failed if the `KEYMAN_ROOT` environment variable was not set. Things were almost correct, but the undefined `KEYMAN_ROOT` variable added an extra `undefined` subdirectory. This change fixes this problem by setting `KEYMAN_ROOT` relative to the current file. This gets removed by `pathToFileURL` which also adds the absolute path to the current directory since we pass a relative path as argument.
refactor(web): refactor `ProcessorInitOptions` 📏🎼
This addresses a web-core TODO comment.
This change makes the `options` parameter in the `JSKeyboardProcessor` constructor no longer optional. Also `baseLayout` and `defaultOutputRules` are now required in `ProcessorInitOptions`. For testing purposes we export `DEFAULT_OPTIONS` in a testing endpoint.
The `options` parameter in the `InputProcessor` constructor is no longer optional. Also removes the `DEFAULT_OPTIONS` from
`InputProcessor`.
This change also moves the `ProcessorInitOptions` interface to a separate file and makes `keyboardInterface` a required field.
An alternative approach would have been to get rid of `ProcessorInitOptions` and instead set the `JSKeyboardProcessor` fields after creating the instance. Doing it the implemented way seemed cleaner.
When running mocha without starting it through `build.sh`/`test.sh`
the tests failed if the `KEYMAN_ROOT` environment variable was not set.
Things were almost correct, but the undefined `KEYMAN_ROOT` variable
added an extra `undefined` subdirectory. This change fixes this problem
by setting `KEYMAN_ROOT` to the current directory (`.`). This gets
removed by `pathToFileURL` which also adds the absolute path to the
current directory since we pass a relative path as argument.
Build-bot: skip
Test-bot: skip
refactor(web): rename ruleBehavior variables → processorAction 🎼
The changes in PR #12291 renamed the `RuleBehavior` class to `ProcessorAction`. This change now renames the local variables in `InputProcessor` accordingly.
Follow-up-of: #12291
refactor(web): remove web-utils exports from keyboard 🎼
Types defined in keyman/common/web-utils were re-exported in keyman/engine/keyboard. This change removes the re-export.
Part-of: #15292
This addresses code review comments in #15437 and removes some
unnecessary definitions related to variable stores. It keeps the
`VariableStoreSerializer` interface although currently
`VariableStoreCookieSerializer` is the only implementation. Conceptually
IMO it makes sense to use a more abstract interface so that in the future
for example we could easily use a different store for a node
implementation.
Details of this change:
- remove `VariableStoreDictionary` interface and replace with
`VariableStore` type
- remove `VarStoreSerializer` class and replace with
` CookieSerializer<VariableStore>`
Follow-up-of: #15437
Test-bot: skip
Previously the cookies for the baseline tests were set to a fixed time
which might be in the past. This change now calculates the expiration
time and sets them to expire in 60s.
Test-bot: skip
feat(web): add `findStores` functions 🍪
This change adds a static `findStores` function to `VarStoreSerializer` and `VariableStoreCookieSerializer` as well as to the `VariableStoreSerializer` interface.
Also add unit tests for `VariableStoreCookieSerializer`.
Part-of: #13426
This makes the `options` parameter in the `InputProcessor` constructor
no longer optional. Also removes the `DEFAULT_OPTIONS` from
`InputProcessor`.
Test-bot: skip
This makes the `options` parameter in the `JSKeyboardProcessor`
constructor no longer optional.
Also `baseLayout` and `defaultOutputRules` are now required in
`ProcessorInitOptions`.
For testing purposes we export `DEFAULT_OPTIONS` in a testing endpoint.
Test-bot: skip