spiegel-keyman/core/tests/unit/ldml/keyboards/meson.build
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

119 lines
3.2 KiB
Meson

# Copyright: © SIL International.
# Description: Cross platform build script to compile kmcoreldml API unit tests.
# Create Date: 5 Aug 2022
# Authors: Marc Durdin
#
# keyboards in resources/standards-data/ldml-keyboards/46/3.0/
# tests in resources/standards-data/ldml-keyboards/46/test/
tests_from_cldr = [
'ja-Latn',
'pt-t-k0-abnt2',
'fr-t-k0-test',
'pcm',
'bn',
]
# these have 'embedded' (@@) testdata instead of a separate file
tests_without_testdata = [
# disabling 000 until we have updates to core or to the keyboard so that it passes
# 'k_000_null_keyboard',
'k_002_tinyu32',
'k_003_transform',
'k_004_tinyshift',
'k_005_modbittest',
'k_010_mt',
'k_011_mt_iso',
'k_012_other',
'k_030_transform_plus',
'k_100_keytest',
'k_101_keytest',
'k_102_keytest',
'k_213_backspace_decomposition',
]
# These tests have a *-test.xml file as well.
tests_with_testdata = [
'ldml_test',
'k_001_tiny',
'k_006_backspace',
'k_007_transform_rgx',
'k_008_transform_norm',
'k_009_transform_nfc',
'k_020_fr', # TODO-LDML: move to cldr above (fix vkey)
'k_200_reorder_nod_Lana',
'k_201_reorder_esk',
'k_210_marker',
'k_211_marker_escape',
'k_212_marker_11057',
]
tests = tests_without_testdata
tests += tests_with_testdata
tests_needing_copy = tests # not including cldr
tests += tests_from_cldr
# Setup kmc
kmc_root = meson.global_source_root() / '../developer/src/kmc'
ldml_root = meson.global_source_root() / '../resources/standards-data/ldml-keyboards/46'
ldml_data = join_paths(ldml_root, '3.0')
ldml_testdata = join_paths(ldml_root, 'test')
kmc_cmd = [node, '--enable-source-maps', kmc_root]
# Build all keyboards in output folder
foreach kbd : tests_needing_copy
# This will output a (wrong) deprecation warning with meson < 1.5 - see #13250
configure_file(input: kbd + '.xml', output: kbd + '.xml', copy: true)
endforeach
foreach kbd : tests_with_testdata
configure_file(
command: kmc_cmd + ['build', 'ldml-test-data', '@INPUT@', '--out-file', '@OUTPUT@'],
input: kbd + '-test.xml',
output: kbd + '-test.json',
)
endforeach
foreach kbd : tests_from_cldr
# This will output a (wrong) deprecation warning with meson < 1.5 - see #13250
configure_file(input: ldml_data / kbd + '.xml', output: kbd + '.xml', copy: true)
configure_file(
command: kmc_cmd + ['build', 'ldml-test-data', '@INPUT@', '--out-file', '@OUTPUT@'],
input: join_paths(ldml_testdata, kbd + '-test.xml'),
output: kbd + '-test.json',
)
endforeach
# Build a single keyboards.kpj which lists all keyboard sources
test_ldml_kmx_targets = tests_needing_copy + tests_from_cldr
test_ldml_keyboards_kpj = ''
foreach kbd : test_ldml_kmx_targets
test_ldml_keyboards_kpj += '''
<File>
<ID>keyboard_'''+kbd+'''</ID>
<Filename>'''+kbd+'''.xml</Filename>
<Filepath>'''+kbd+'''.xml</Filepath>
</File>
'''
endforeach
cfg = configuration_data()
cfg.set('keyboards_kpj', test_ldml_keyboards_kpj)
ldml_keyboards_kpj = configure_file(
configuration: cfg,
input: 'keyboards.kpj.in',
output: 'keyboards.kpj'
)
configure_file(
input: ldml_keyboards_kpj,
output: tests_from_cldr[0]+'.kmx',
command: kmc_cmd + ['build', '@INPUT@']
)