spiegel-keyman/core/tests/unit/ldml
Marc Durdin e5c2525241 refactor(core): split context API from Core primary API
Relates to #9999.
Fixes #10384.

The context API endpoints should no longer be considered as part of the
standard Core API. The only consumers that have a need to access these
APIs are the IMX integration in Engine for Windows, and the Keyman
Developer Debugger.

These symbols are currently used by Developer:
* `km_core_context` struct
* `km_core_context_type` enum
* `km_core_context_item` struct
* `KM_CORE_CONTEXT_ITEM_END` macro
* `km_core_state_context()`
* `km_core_context_set()`
* `km_core_context_clear()`

These symbols are currently used by Windows IMX:
* `km_core_context` struct
* `km_core_context_type` enum
* `km_core_context_item` struct
* `KM_CORE_CONTEXT_ITEM_END` macro
* `km_core_context_items_dispose()`
* `km_core_context_item_list_size()`
* `km_core_state_get_intermediate_context()`

The following functions and symbols are moving to
keyman_core_api_context.h:
* `km_core_context` struct
* `km_core_context_type` enum
* `km_core_context_item` struct
* `KM_CORE_CONTEXT_ITEM_END` macro
* `km_core_state_context()` function
* `km_core_state_get_intermediate_context()` function
* `km_core_context_set()` function
* `km_core_context_clear()` function
* `km_core_context_get()` function
* `km_core_context_items_from_utf16()` function
* `km_core_context_items_from_utf8()` function
* `km_core_context_items_to_utf8()` function
* `km_core_context_items_to_utf16()` function
* `km_core_context_items_to_utf32()` function
* `km_core_context_items_dispose()` function
* `km_core_context_length()` function
* `km_core_context_append()` function
* `km_core_context_shrink()` function
* `km_core_context_item_list_size()` function
2024-01-16 12:04:41 +07:00
..
invalid-keyboards chore(resources): code changes for keyboard to keyboard3 🙀 2023-09-18 19:00:32 -05:00
keyboards feat(core): stacked markers 🙀 2024-01-06 11:33:51 -06:00
ldml.cpp refactor(core): split context API from Core primary API 2024-01-16 12:04:41 +07:00
ldml_test_source.cpp chore(core): split out some files 🙀 2024-01-06 11:56:11 -06:00
ldml_test_source.hpp feat(core): better reporting in ldml tests 🙀 2023-12-28 17:38:21 -06:00
ldml_test_utils.cpp chore(linux): Rename namespace kbp to core 2023-10-19 10:39:55 +02:00
ldml_test_utils.hpp refactor(core): split context API from Core primary API 2024-01-16 12:04:41 +07:00
meson.build chore(core): wasm linker flags 2024-01-15 13:23:29 +07:00
README.md feat(core): ldml unit tests and stub actions 2022-08-07 08:02:50 -05:00
test_context_normalization.cpp refactor(core): split context API from Core primary API 2024-01-16 12:04:41 +07:00
test_kmx_plus.cpp feat(core): ldml improve key-not-found 🙀 2023-11-28 18:07:46 -06:00
test_transforms.cpp Merge branch 'feat/core/10320-stack-markers-epic-ldml' into chore/core/10320-refactor-epic-ldml 2024-01-08 12:37:51 -06:00

LDML unit tests

This directory contains unit tests that test the LDML keyboard processing.

The driver (ldml.cpp) loads and executes the tests. Each test consist of a Keyman keyboard source file (*.xml) and the compiled KMXPlus keyboard. The source file contains rules and defines the setup, input and expected results.

Defining tests in the .xml file

Somewhere near the top of the file, an XML comment contains lines that define the setup, input and expected results.

Setup

  • description: this is just for commenting what we test here
@@description: Tests Caps Lock env set
  • capsLock: allows to set the caps lock state. The example below turns caps-lock on at the start of the test. [K_CAPS] in the keys comment allows toggling of caps lock.
@@capsLock: 1
  • context: allows to setup a string which serves as context
@@context:

Input

  • keys: defines one or more virtual keys that will be processed one after the other
@@keys: [K_1][K_CAPS][K_2][SHIFT K_3][K_4][K_CAPS][K_5][K_CAPS][K_6]

Expected Result

  • expected: the resulting string of processing the input keys. In the example below each key press is expected to output the string 'pass.'.
@@expected: pass.pass.pass.pass.pass.pass.

Running the tests

All tests can be run at once with ./build.sh --debug tests.

Alternatively it's possible to run a single test with:

cd core
build/arch/debug/tests/unit/ldml/ldml 'tests/unit/ldml/000_test_zero.xml' 'tests/unit/ldml/000_test_zero.kmx'