44 lines
2.4 KiB
CMake
44 lines
2.4 KiB
CMake
# SPDX-License-Identifier: GPL-3.0-or-later
|
||
# SPDX-FileCopyrightText: 2025 ai-ad4 and the FreePDFEditor contributors
|
||
# test/CMakeLists.txt
|
||
#
|
||
# Unit and gate tests. The M0 scaffold ships a single smoke test that proves
|
||
# the build produces a runnable artefact and the spike runner emits the
|
||
# contract JSON the CI pipeline parses. As the layers land (L1–L6), each gets
|
||
# its own test executable under here, all registered with CTest.
|
||
|
||
# We do not pull GoogleTest yet — the first tests are plain freestanding mains
|
||
# returning non-zero on failure, which keeps the M0 scaffold dependency-free
|
||
# and lets CI on all three platforms run ctest without a vcpkg build of gtest.
|
||
# A later milestone swaps in GTest once there is real C++ logic to assert on.
|
||
|
||
add_executable(test_spike_runner_contract test_spike_runner_contract.cpp
|
||
../spike/common/SpikeRunner.cpp)
|
||
target_include_directories(test_spike_runner_contract PRIVATE
|
||
${CMAKE_SOURCE_DIR}/spike)
|
||
target_compile_features(test_spike_runner_contract PRIVATE cxx_std_20)
|
||
freepdfeditor_apply_warnings(test_spike_runner_contract)
|
||
freepdfeditor_apply_hardening(test_spike_runner_contract)
|
||
add_test(NAME spike_runner_contract COMMAND test_spike_runner_contract)
|
||
|
||
# --- M1 IPC end-to-end test (§2.1, ADR-0004) --------------------------------
|
||
# Launches the sandboxed document process, opens a real PDF via the RPC client,
|
||
# and verifies the page count + ping round-trip. Proves the process split, the
|
||
# Cap'n Proto RPC over a socketpair, the seccomp sandbox, the SCM_RIGHTS fd
|
||
# handoff, and the QPDF read-from-handed-fd path all work together.
|
||
if(TARGET freepdfeditor_ipc)
|
||
add_executable(test_ipc test_ipc.cpp)
|
||
target_link_libraries(test_ipc PRIVATE freepdfeditor_ipc)
|
||
target_compile_features(test_ipc PRIVATE cxx_std_20)
|
||
freepdfeditor_apply_warnings(test_ipc)
|
||
freepdfeditor_apply_hardening(test_ipc)
|
||
add_test(NAME ipc_end_to_end COMMAND test_ipc)
|
||
endif()
|
||
|
||
# Pixel-diff harness scaffolding (§8.2 gate: render vs Ghostscript+PDFium
|
||
# reference). The actual comparison runs against a corpus that lives in the
|
||
# separate freepdfeditor-corpus repo (§13.2 rule 5); this scaffold is a
|
||
# self-contained Python script that CI invokes with paths to the corpus and
|
||
# the reference binaries.
|
||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../ci/pixel-diff/run_pixel_diff.py"
|
||
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/freepdfeditor/ci") |