mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-06 17:05:34 +00:00
161 lines
5.5 KiB
Meson
161 lines
5.5 KiB
Meson
# Copyright: © SIL International.
|
|
# Description: Cross platform build script to compile kmcoreldml API unit tests.
|
|
# Create Date: 5 Aug 2022
|
|
# Authors: Marc Durdin
|
|
#
|
|
|
|
# Build all keyboards in output folder; these are defined here and used in the
|
|
# keyboards subdir
|
|
|
|
tests = []
|
|
invalid_tests = []
|
|
|
|
# Setup copying of source files, used in child subdir calls
|
|
|
|
if node.found()
|
|
# Note: if node is not available, we cannot build the keyboards; build.sh
|
|
# emits a warning that the ldml keyboard tests will be skipped
|
|
subdir('keyboards')
|
|
subdir('invalid-keyboards')
|
|
endif
|
|
|
|
gtest = subproject('gtest')
|
|
gtest_dep = gtest.get_variable('gtest_dep')
|
|
gmock_dep = gtest.get_variable('gmock_dep')
|
|
|
|
# Build ldml test executable
|
|
|
|
keyboard_build_path = meson.current_build_dir() / 'keyboards'
|
|
|
|
if cpp_compiler.get_id() == 'emscripten'
|
|
tests_flags = ['--embed-file', meson.current_build_dir() / 'keyboards' / '@']
|
|
tests_flags += ['--embed-file', meson.current_build_dir() / 'invalid-keyboards' / '@']
|
|
tests_flags += ['--embed-file', meson.current_build_dir() / 'nodeversions.json' + '@nodeversions.json']
|
|
tests_flags += ['--embed-file', meson.current_build_dir() / 'package.json' + '@package.json']
|
|
tests_flags += ['--embed-file', meson.current_build_dir() / 'Blocks.txt' + '@Blocks.txt']
|
|
test_path = '/'
|
|
test_unicode_path = '/'
|
|
invalid_test_path = '/'
|
|
tests_flags += ['-lnodefs.js',
|
|
'-sNO_DISABLE_EXCEPTION_CATCHING', # for test exceptions
|
|
wasm_exported_runtime_methods]
|
|
else
|
|
tests_flags = []
|
|
test_path = meson.current_build_dir() / 'keyboards'
|
|
test_unicode_path = meson.current_build_dir()
|
|
invalid_test_path = meson.current_build_dir() / 'invalid-keyboards'
|
|
endif
|
|
|
|
# copy package.json into build dir for test use
|
|
fs.copyfile('../../../../package.json', 'package.json')
|
|
fs.copyfile('../../../../resources/standards-data/unicode-character-database/Blocks.txt', 'Blocks.txt')
|
|
|
|
configure_file(
|
|
command: [node, meson.current_source_dir() / 'write_node_versions.js','@OUTPUT@'],
|
|
output: 'nodeversions.json',
|
|
)
|
|
|
|
ldml = executable('ldml',
|
|
['ldml.cpp',
|
|
'ldml_test_source.cpp',
|
|
'ldml_test_utils.cpp',
|
|
common_test_files],
|
|
cpp_args: defns + warns,
|
|
include_directories: [inc, libsrc, '../../../../developer/src/ext/json'],
|
|
link_args: links + tests_flags,
|
|
dependencies: [icu_uc, icu_i18n],
|
|
# link_with: [lib],
|
|
objects: lib.extract_all_objects(recursive: false),
|
|
)
|
|
|
|
core_ldml_min = executable('core_ldml_min_tests',
|
|
[
|
|
'core_ldml_min.tests.cpp',
|
|
common_test_files,
|
|
],
|
|
cpp_args: defns + warns,
|
|
include_directories: [inc, libsrc],
|
|
link_args: links,
|
|
dependencies: [],
|
|
link_with: [lib],
|
|
# objects: lib.extract_all_objects(recursive: false),
|
|
)
|
|
test('core_ldml_min_tests', core_ldml_min, suite: 'ldml', should_fail: true)
|
|
|
|
|
|
# Build and run additional test_kmx_plus test
|
|
|
|
e = executable('kmx_plus_tests', 'kmx_plus.tests.cpp',
|
|
'ldml_test_utils.cpp',
|
|
common_test_files,
|
|
cpp_args: defns + warns,
|
|
include_directories: [inc, libsrc, '../../../../developer/src/ext/json'],
|
|
link_args: links + tests_flags,
|
|
dependencies: [icu_uc, icu_i18n, gtest_dep, gmock_dep],
|
|
objects: lib.extract_all_objects(recursive: false))
|
|
test('kmx_plus_tests', e, suite: 'ldml')
|
|
|
|
# run transforms / ldml utilities unit test
|
|
|
|
t = executable('transforms_tests', 'transforms.tests.cpp',
|
|
common_test_files,
|
|
cpp_args: defns + warns,
|
|
include_directories: [inc, libsrc, '../../../../developer/src/ext/json'],
|
|
link_args: links + tests_flags,
|
|
dependencies: [icu_uc, icu_i18n],
|
|
objects: lib.extract_all_objects(recursive: false))
|
|
test('transforms_tests', t, suite: 'ldml')
|
|
|
|
# run test_context_normalization ldml unit test
|
|
|
|
normalization_tests_flags = tests_flags
|
|
|
|
if cpp_compiler.get_id() == 'emscripten'
|
|
normalization_tests_flags += ['-lnodefs.js', wasm_exported_runtime_methods]
|
|
endif
|
|
|
|
test_context_normalization = executable('context_normalization_tests',
|
|
['context_normalization.tests.cpp', common_test_files],
|
|
cpp_args: defns + warns,
|
|
include_directories: [inc, libsrc, '../../../../developer/src/ext/json'],
|
|
link_args: links + normalization_tests_flags,
|
|
dependencies: [icu_uc, icu_i18n],
|
|
objects: lib.extract_all_objects(recursive: false))
|
|
test('context_normalization_tests', test_context_normalization, suite: 'ldml')
|
|
|
|
# Build and run additional test_unicode test
|
|
|
|
test_unicode = executable('unicode_tests', 'unicode.tests.cpp',
|
|
['unicode.tests.cpp', common_test_files, generated_headers],
|
|
cpp_args: defns + warns,
|
|
include_directories: [inc, libsrc, '../../../../developer/src/ext/json'],
|
|
link_args: links + tests_flags,
|
|
dependencies: [icu_uc, icu_i18n],
|
|
objects: lib.extract_all_objects(recursive: false),
|
|
|
|
)
|
|
|
|
test('unicode_tests', test_unicode, suite: 'ldml',
|
|
args: [
|
|
test_unicode_path / 'nodeversions.json',
|
|
test_unicode_path / 'package.json',
|
|
test_unicode_path / 'Blocks.txt',
|
|
],
|
|
)
|
|
|
|
# Run tests on all keyboards (`tests` defined in keyboards/meson.build)
|
|
|
|
foreach kbd : tests
|
|
kbd_src = test_path / kbd + '.xml'
|
|
kbd_obj = test_path / kbd + '.kmx'
|
|
test(kbd, ldml, args: [kbd_src, kbd_obj], suite: 'ldml-keyboards')
|
|
endforeach
|
|
|
|
# Run tests on all invalid keyboards (`invalid_tests` defined in invalid-keyboards/meson.build)
|
|
|
|
foreach kbd : invalid_tests
|
|
kbd_src = invalid_test_path / kbd + '.xml'
|
|
kbd_obj = invalid_test_path / kbd + '.kmx'
|
|
test(kbd, ldml, args: [kbd_src, kbd_obj], suite: 'ldml-invalid-keyboards')
|
|
# todo: consider if we should use `should_fail: true`?
|
|
endforeach
|