Commit graph

581 commits

Author SHA1 Message Date
Marc Durdin
3d65485ebd chore: Merge branch 'epic/web-core' into auto/A19S29-merge-master-into-web-core
Note: rewrote state_api.tests.cpp change to match new unit test pattern.
2026-05-22 11:32:24 +02:00
rc-swag
3b6e0a8da1 fix(windows): add comment to capture issue in test code
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
2026-05-18 21:18:25 +10:00
rc-swag
29b12ba42e fix(core): fix memory leak in state_api test
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
2026-05-18 14:10:22 +10:00
rc-swag
c0a29a32f7 fix(core): remove white space and comments
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-05-14 16:28:59 +10:00
rc-swag
3c0e7a72c1 fix(core): update unit tests 2026-05-14 15:58:12 +10:00
rc-swag
33cddff16e fix(windows): deep copy for state object
This commit update the state object to have a deep copy for the
action_struct member. The tests have been modified but have
a few issues however this branch is out of date with the refacted
master branch for unit tests. This commit gets the main change in
a future commit will update the tests.
2026-05-12 18:03:46 +10:00
Marc Durdin
f4e94fb3ef chore(core): Merge branch 'chore/core/15913-unit-test-follow-on' 2026-05-07 15:20:19 +02:00
Marc Durdin
e0fd08ca0f chore(core): cleanup leaks in tests and skipped tests 2026-05-07 15:19:27 +02:00
Marc Durdin
6ec106f827
Merge branch 'refactor/core/api-documentation' into chore/core/15913-unit-test-follow-on 2026-05-07 23:19:00 +10:00
Marc Durdin
82f4c954a5 chore(core): merge actions test data for unit tests
Merge actions test data struct and some of the data for the actions API
unit tests. actions_update_app_context_nfu.tests.cpp data has not been
merged because the expected results are different, as it does not do
normalization, unlike actions_get_api and actions_normalize.

Merging of that data could be done, but would require adding extra
fields to each test result, which would make the data considerably
harder to read! Thus I have left it alone for now, just merged the
struct, which is still a win.

Fixes: #15913
2026-05-07 12:31:19 +02:00
Marc Durdin
a3de441eda chore(core): add test for NFD context deleting one combining mark
Relates-to: #15913
2026-05-06 15:11:59 +02:00
Marc Durdin
40d36f8e2c chore(core): add cross-reference between ldml_test_source and kmx_test_source
Relates-to: #15913
2026-05-06 15:09:25 +02:00
Marc Durdin
f7e210beb0 chore(core): cleanup state_context_api.tests.cpp
* Rename citems and eliminate shadowed class member
* Cleanup is_identical_context and related helper functions and make
  consistent name and signature, to assert_identical_context.
* Use clearer variable names for expected and actual values.

Relates-to: #15913
2026-05-06 14:47:15 +02:00
Marc Durdin
86571de22f chore(core): cleanup compare_debug_items unit test helper
Relates-to: #15913
2026-05-06 14:27:51 +02:00
Marc Durdin
5da3b4effc chore(core): cleanup transforms.tests.cpp
1. Rename various shorthand variables
2. Split simple tests into separate Google Test cases (have not tackled
   the more complex tests which have loops and/or setup)
3. Remove redundant logging from simple tests

Relates-to: #15913
2026-05-06 14:19:05 +02:00
Marc Durdin
410a4824bc chore(core): use ASSERT_FALSE and ASSERT_TRUE where possible
Relates-to: #15913
Test-bot: skip
2026-05-06 14:01:18 +02:00
Marc Durdin
08891bb3a2 chore(core): address review comments on unit tests
Test-bot: skip
Co-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>
2026-05-06 12:09:19 +02:00
Marc Durdin
63c2ed823f chore(core): avoid emitting control chars into junit.xml 2026-04-28 15:48:49 +02:00
Marc Durdin
9853f29046 chore(core): address memory leak for embedded_test_source 2026-04-28 14:47:33 +02:00
Marc Durdin
d61e5bbb18 refactor(core): clean up unit tests
Consolidate test frameworks and cleanup, including:
* all tests use Google Test
* reorganize folders, esp. kmnkbd -> api
* move all api tests into api folder
* replace references to test_assert or test_color with gtest equivalents
* leverage gtest patterns to remove boilerplate code
* dramatically simplify meson.build files and localize variables
* move shared helper code into helpers/ folder
* make test names unique and add gtest protocol for reporting back to
  teamcity

Fixes:
* CLDR test keyboards had invalid unicodeset escapes (needs to be raised
  upstream also) - was not failing tests because files were not loading
  but returning success

Test-bot: skip
2026-04-28 12:17:44 +02:00
Marc Durdin
0fb2cd2dc6 chore: Merge branch 'epic/web-core' into epic/embed-osk-in-kmx 2026-04-17 19:01:15 +02:00
Marc Durdin
0f57b8a77c chore(core): Merge branch 'epic/embed-osk-in-kmx' into chore/core/remove-jsonpp
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-04-17 09:12:37 +02:00
Marc Durdin
fef4236cbd
Merge pull request #15833 from keymanapp/chore/core/embed-osk/move-test-helpers
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
chore(core): move test helpers into helpers/ folder 🔱
2026-04-17 06:17:38 +10:00
Marc Durdin
8461ec4330 chore(core): address review comments
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
Co-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>
2026-04-16 10:06:15 +02:00
Marc Durdin
35e09caf64 chore(core): remove jsonpp
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
jsonpp was being used only in a single unit test, and so this was a lot
of overhead and complexity for very little benefit. We may want to add
some more unit tests in the future for state_api.tests.cpp to do a
deep comparison of the state?

Test-bot: skip
2026-04-11 07:39:56 +02:00
Marc Durdin
596aae6e40 chore(core): move keyboard_api and options_api tests to gtest 2026-04-10 11:39:01 +02:00
Marc Durdin
b40012de23 chore(core): move test helpers into helpers/ folder
Test-bot: skip
2026-04-09 12:16:15 +02:00
Marc Durdin
a5c09f40a1 chore(core): fixup test keyboard paths 2026-03-27 10:52:34 +01:00
Marc Durdin
fb160b3955 chore(core): adjust paths for ldml test keyboards 2026-03-27 10:31:58 +01:00
Marc Durdin
8311c65077
Merge branch 'epic/web-core' into auto/A19S25-merge-master-into-web-core 2026-03-27 16:30:55 +11:00
Marc Durdin
ab23c12558
Merge branch 'epic/embed-osk-in-kmx' into auto/A19S25-merge-master-into-embed-osk-in-kmx 2026-03-27 16:27:19 +11:00
Marc Durdin
70c54b0b40 chore: Merge branch 'epic/web-core' into auto/A19S24-merge-master-into-web-core
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
2026-03-16 04:49:38 +01:00
Marc Durdin
b6b10d1a09 chore: Merge branch 'epic/embed-osk-in-kmx' into auto/A19S24-merge-master-into-embed-osk-in-kmx 2026-03-15 07:42:03 +01:00
Eberhard Beilharz
67468c4dce
fix(core): address code review comments
Co-authored-by: Marc Durdin <marc@durdin.net>
2026-03-02 17:28:19 +01:00
Eberhard Beilharz
382b5d45e3
fix(core): fix keydown/up handling for LDML keyboards
For LDML keyboards this change fixes the `emit_key` flag so that it has
the same value for the KeyDown and the KeyUp event. This fixes some
problems with stuck keys. Previously we would set `emit_key=TRUE` on
KeyDown but `emit_key=FALSE` on KeyUp for frame keys. This caused Linux
to never see the KeyUp event, resulting in a stuck key.

Also add unit tests that verifies that the actions that we get after
calling `km_core_process_event` are what we expect.

Fixes: #15569
Fixes: #15550
2026-03-02 17:27:36 +01:00
Eberhard Beilharz
d8a5f694da
refactor(core): fix whitespace
Build-bot: skip
Test-bot: skip
2026-03-02 17:26:14 +01:00
Eberhard Beilharz
3c525cc244
chore: Merge branch 'epic/web-core' into auto/A19S23-merge-master-into-web-core 2026-02-27 10:19:18 +01:00
Keyman Server
7b9864810f
Merge branch 'epic/embed-osk-in-kmx' into auto/A19S23-merge-master-into-embed-osk-in-kmx 2026-02-27 08:25:14 +01:00
Eberhard Beilharz
2237db95f6
test(core): add LDML baseline test with minimal keyboard
This replaces and enables the commented `k_000_null_keyboard` test which
didn't work because keys that are not on any layer don't produce output.
This instead defines a minimal keyboard with just two keys and then tests
typing a key that is on the keyboard followed by a key not on the keyboard.

Test-bot: skip
2026-02-20 12:09:08 +01:00
Eberhard Beilharz
df2b675202
fix(core): changed ldml tests to use context list instead of vector
Production code uses a list of context items, so this change modifies
the tests to also use a list instead of a vector to more closely match
production code.

Addresses code review comment.

Test-bot: skip
2026-02-18 16:08:59 +01:00
Eberhard Beilharz
32bb1c8502
fix(core): fix iterator in backspace handling
This change replaces the reverse iterator loop that holds a stale iterator
across `pop_back()` calls with a pattern that directly accesses
`context.back()` on each iteration. This avoids undefined behavior from
iterator invalidation when mutating the list or vector.

While so far the previous code didn't show problems, it might still access
released memory depending on the implementation. The documentation for
`pop_back()` says "References and iterators to the erased element are
invalidated", so the previous implementation was clearly wrong.

Test-bot: skip
2026-02-18 15:58:45 +01:00
Marc Durdin
ed63b70bb4
Merge branch 'epic/web-core' into auto/A19S22-merge-master-into-web-core 2026-02-13 11:08:05 +07:00
Keyman Server
7bdd4b5254
Merge branch 'epic/embed-osk-in-kmx' into auto/A19S22-merge-master-into-embed-osk-in-kmx 2026-02-13 04:58:57 +01:00
Marc Durdin
74d1bc8fc2 chore(core): address review comments
Co-authored-by: Darcy Wong <darcy_wong@sil.org>
Co-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>
2026-02-01 06:47:49 +11:00
Marc Durdin
766c6992ed fix(core): normalization segment should end on NFC boundary, not NFD
When normalizing, we need to stop processing on an NFC boundary, not an
NFD boundary, to support normalizations such as in Bengali, where
appending `U+09D7` to a context of `U+0995 U+09C7` should result in
`U+0995 U+09CC`.

The specification is unclear on this; see https://unicode-org.atlassian.net/browse/CLDR-19218

This also updates the ldml keyboard unit test suite to support running
in full NFC mode (used in all Engine implementations) as well retaining
the NFD mode (now only used by the debugger).

Side note: the Bengali normalization failure case was picked up by the
improvements to the unit test suite, proving once again that good tests
are so valuable.

Fixes: #15491
Fixes: #15505
Follows: #15488
Relates-to: CLDR-19218
2026-01-28 14:32:25 +11:00
Marc Durdin
f7cd0c41ba fix(core): handle backspace decomposition
Ensure that when a single backspace decomposes the last NFC character in
the app context, the remainder of the 'cluster' is preserved, matching
the implication of the CLDR keyboard specification.

This addresses the behavior in #15487 where the cached context became
out of sync with the app context after deleting an entire NFC cluster
such as ê, which caused a loop ending up with the entire context being
deleted, at which point the loop exited with a fail-safe.

Note that the LDML keyboard tests (ldml.cpp) do not currently exercise
the normalization code; this is a gap that should be addressed to ensure
that we are testing final application behavior.

Fixes: #15487
2026-01-25 07:24:15 +11:00
Eberhard Beilharz
a329ef967d
Update core/tests/unit/kmx/README.md
Co-authored-by: Marc Durdin <marc@durdin.net>
2026-01-15 12:05:25 +01:00
Eberhard Beilharz
b339a9772c
docs(common): improve documentation for .kmn test files
Build-bot: skip
Test-bot: skip
2026-01-14 18:16:57 +01:00
Eberhard Beilharz
afe6f467e3
Merge branch 'epic/web-core' into test/web/problem 2026-01-07 11:37:49 +01:00
Eberhard Beilharz
f65a752b47
test(web): address code review comments 2026-01-06 18:19:07 +01:00