db41258d16
Ersetzt das Geruest (counter/notebook) durch ein echtes Beispiel und teilt es in zwei eigenstaendige Projekte, wie P1204R0 es fuer Bibliothek plus Programm verlangt. libpda: textfile (C, Datei-I/O und Feld-Escaping), calculator (Recursive-Descent-Parser mit std::expected), contact, editor, explorer. Exportiert pda::pda ueber install(EXPORT) und ist per find_package(pda) benutzbar. pda: Shell ohne Ein-/Ausgabe (execute() gibt Text zurueck, deshalb ohne Terminal testbar), REPL und Stapelbetrieb in main.cpp. examples/consumer und tools/check-install.sh pruefen die Export-Kette Ende-zu-Ende: installieren, dann ein fremdes Projekt dagegen bauen. docs/CMAKE.md erklaert das Target-Modell, PUBLIC/PRIVATE/INTERFACE, Generator-Ausdruecke, install/export und Symbolsichtbarkeit an diesem Projekt. 71 Tests gruen unter Homebrew-clang 22, Apple clang und GCC 16, statisch und shared, mit und ohne ASan/UBSan. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 lines
1.2 KiB
CMake
30 lines
1.2 KiB
CMake
# ---------------------------------------------------------------------------
|
|
# Integrationstests der Bibliothek (P1204R0 Regel 7.2).
|
|
#
|
|
# Unterschied zu den Unit-Tests neben den Modulen: diese benutzen
|
|
# ausschliesslich die OEFFENTLICHE API -- <libpda/...> und sonst nichts. Kein
|
|
# doctest, kein Unity, kein Blick in details/.
|
|
#
|
|
# Der Grund fuer das eigene Verzeichnis steht in P1204R0: solche Tests sollen
|
|
# auch gegen eine INSTALLIERTE Bibliothek laufen koennen. Was hier gruen ist,
|
|
# ist gruen fuer einen Benutzer.
|
|
# ---------------------------------------------------------------------------
|
|
|
|
function(libpda_add_integration_test name)
|
|
set(target "integration_${name}")
|
|
|
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${name}/driver.c")
|
|
add_executable(${target} "${name}/driver.c")
|
|
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${name}/driver.cpp")
|
|
add_executable(${target} "${name}/driver.cpp")
|
|
else()
|
|
message(WARNING "tests/${name}: keine driver.c/.cpp gefunden")
|
|
return()
|
|
endif()
|
|
|
|
target_link_libraries(${target} PRIVATE pda::pda pda_warnings)
|
|
add_test(NAME "integration.${name}" COMMAND ${target})
|
|
endfunction()
|
|
|
|
libpda_add_integration_test(basics)
|