lix/tests/unit/meson.build
jade c97e17144e packaging: rename nixexpr -> lixexpr and so on
This breaks downstreams linking to us on purpose to make sure that if
someone is linking to Lix they're doing it on purpose and crucially not
mixing up Nix and Lix versions in compatibility code.

We still need to fix the internal includes to follow the same schema so
we can drop the single-level include system entirely. However, this
requires a little more effort.

This adds pkg-config for libfetchers and config.h.

Migration path:
expr.hh      -> lix/libexpr/expr.hh
nix/config.h -> lix/config.h

To apply this migration automatically, remove all `<nix/>` from
includes, so: `#include <nix/expr.hh>` -> `#include <expr.hh>`. Then,
the correct paths will be resolved from the tangled mess, and the
clang-tidy automated fix will work.

Then run the following for out of tree projects:

```
lix_root=$HOME/lix
(cd $lix_root/clang-tidy && nix develop -c 'meson setup build && ninja -C build')
run-clang-tidy -checks='-*,lix-fixincludes' -load=$lix_root/clang-tidy/build/liblix-clang-tidy.so -p build/ -fix src
```

Related: lix-project/nix-eval-jobs#5
Fixes: lix-project/lix#279
Change-Id: I7498e903afa6850a731ef8ce77a70da6b2b46966
2024-05-23 16:45:23 -06:00

215 lines
5.3 KiB
Meson

# NOTE(Qyriad): This file is one big slab of boilerplate.
# Lix's current unit test organization is scattered and entagled.
# Each of the test-support libraries could theoretically be a somewhat self-contained
# subdir(), but literally nothing else can. Each of the tests have dependencies on other
# test support libraries, and so do their support libraries.
# Each of the tests have dependencies on their own andother test support libraries,
# and so do their support libraries, and they have entangled dependencies on Lix's mainline
# lib* targets as well.
# The only boilerplate reduction I really could do here is throw everything in big nested dictionaries
# and dynamically generate and refer to targets based on abstracted specs, but without user-defined
# functions, the result would be way less readable than just a bit of copypasta.
# It's only ~200 lines; better to just refactor the tests themselves which we'll want to do anyway.
libutil_test_support_sources = files(
'libutil-support/tests/cli-literate-parser.cc',
'libutil-support/tests/hash.cc',
'libutil-support/tests/terminal-code-eater.cc',
)
libutil_test_support = library(
'lixutil-test-support',
libutil_test_support_sources,
dependencies : [
liblixutil,
# TODO(Qyriad): libutil tests really should not depend on libexpr...
liblixexpr,
rapidcheck,
boehm,
],
include_directories : include_directories('libutil-support', '../../src'),
)
liblixutil_test_support = declare_dependency(
include_directories : include_directories('libutil-support'),
link_with : libutil_test_support,
)
libutil_tests_sources = files(
'libutil/canon-path.cc',
'libutil/chunked-vector.cc',
'libutil/closure.cc',
'libutil/compression.cc',
'libutil/config.cc',
'libutil/escape-string.cc',
'libutil/git.cc',
'libutil/hash.cc',
'libutil/hilite.cc',
'libutil/json-utils.cc',
'libutil/logging.cc',
'libutil/lru-cache.cc',
'libutil/paths-setting.cc',
'libutil/pool.cc',
'libutil/references.cc',
'libutil/suggestions.cc',
'libutil/tests.cc',
'libutil/url.cc',
'libutil/url-name.cc',
'libutil/xml-writer.cc',
)
libutil_tester = executable(
'liblixutil-tests',
libutil_tests_sources,
dependencies : [
rapidcheck,
gtest,
boehm,
liblixutil,
liblixexpr,
liblixutil_test_support,
nlohmann_json,
],
)
test(
'libutil-unit-tests',
libutil_tester,
args : tests_args,
env : {
'_NIX_TEST_UNIT_DATA': meson.project_source_root() / 'tests/unit/libutil/data',
},
suite : 'check',
protocol : 'gtest',
verbose : true,
)
libstore_test_support_sources = files(
'libstore-support/tests/derived-path.cc',
'libstore-support/tests/outputs-spec.cc',
'libstore-support/tests/path.cc',
'libstore-support/tests/test-data.hh',
)
libstore_test_support = library(
'lixstore-test-support',
libstore_test_support_sources,
dependencies : [
liblixutil_test_support,
liblixutil,
liblixstore,
rapidcheck,
boehm,
],
include_directories : include_directories(
'libstore-support',
),
)
liblixstore_test_support = declare_dependency(
include_directories : include_directories('libstore-support'),
link_with : libstore_test_support,
)
libstore_tests_sources = files(
'libstore/common-protocol.cc',
'libstore/derivation.cc',
'libstore/derived-path.cc',
'libstore/downstream-placeholder.cc',
'libstore/filetransfer.cc',
'libstore/machines.cc',
'libstore/nar-info-disk-cache.cc',
'libstore/outputs-spec.cc',
'libstore/path.cc',
'libstore/references.cc',
'libstore/serve-protocol.cc',
'libstore/worker-protocol.cc',
)
libstore_tester = executable(
'liblixstore-tests',
libstore_tests_sources,
dependencies : [
liblixstore_test_support,
liblixutil_test_support,
liblixstore,
liblixutil,
rapidcheck,
gtest,
nlohmann_json,
],
)
test(
'libstore-unit-tests',
libstore_tester,
args : tests_args,
env : {
'_NIX_TEST_UNIT_DATA': meson.project_source_root() / 'tests/unit/libstore/data',
},
suite : 'check',
protocol : 'gtest',
verbose : true,
)
libexpr_test_support_sources = files(
'libexpr-support/tests/value/context.cc',
)
libexpr_test_support = library(
'lixexpr-test-support',
libexpr_test_support_sources,
dependencies : [
liblixstore_test_support,
liblixstore,
liblixutil,
liblixexpr,
rapidcheck,
],
include_directories : include_directories(
'libexpr-support',
),
)
liblixexpr_test_support = declare_dependency(
include_directories : include_directories('libexpr-support'),
link_with : libexpr_test_support,
)
libexpr_tests_sources = files(
'libexpr/derived-path.cc',
'libexpr/error_traces.cc',
'libexpr/flakeref.cc',
'libexpr/json.cc',
'libexpr/primops.cc',
'libexpr/search-path.cc',
'libexpr/trivial.cc',
'libexpr/value/context.cc',
'libexpr/value/print.cc',
)
libexpr_tester = executable(
'liblixexpr-tests',
libexpr_tests_sources,
dependencies : [
liblixexpr_test_support,
liblixstore_test_support,
liblixstore,
liblixutil,
liblixexpr,
liblixfetchers,
rapidcheck,
boehm,
gtest,
nlohmann_json,
],
)
test(
'libexpr-unit-tests',
libexpr_tester,
args : tests_args,
env : {
'_NIX_TEST_UNIT_DATA': meson.project_source_root() / 'tests/unit/libexpr/data',
},
suite : 'check',
protocol : 'gtest',
verbose : true,
)