diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..bc8587b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.14) +project(arc-core) + +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +add_subdirectory(src) + +enable_testing() +add_subdirectory(test) diff --git a/ci/occt.Dockerfile b/ci/occt.Dockerfile index 7289395..745ddf0 100644 --- a/ci/occt.Dockerfile +++ b/ci/occt.Dockerfile @@ -1,4 +1,5 @@ -FROM ubuntu:24.04 +# Base builder +FROM ubuntu:24.04 AS base ENV DEBIAN_FRONTEND=noninteractive @@ -32,6 +33,33 @@ RUN make install WORKDIR /app COPY src/occt/ ./src -COPY unit-test/occt/ ./unit-test +COPY test/occt/ ./test RUN cmake -S src -B build -DCMAKE_PREFIX_PATH=/usr/local && cmake --build build + +COPY test/occt/ ./test + +# Unit test runner +FROM ubuntu:24.04 AS unit-testing + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y \ + build-essential \ + cmake \ + git \ + catch2 \ + xvfb \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=base /usr/local /usr/local +COPY --from=base /app/build /app/build +COPY --from=base /app/src /app/src +COPY --from=base /app/test /app/test + +WORKDIR /app + +RUN cmake -S test -B build/tests -DCMAKE_PREFIX_PATH=/usr/local +RUN cmake --build build/tests + +CMD ["ctest", "--test-dir", "build/tests", "-V"] diff --git a/ci/scripts/occt.sh b/ci/scripts/occt.sh index 415ba71..b0b5aa7 100644 --- a/ci/scripts/occt.sh +++ b/ci/scripts/occt.sh @@ -6,6 +6,12 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_PATH="$(cd "$SCRIPT_DIR/../../" && pwd)" DOCKERFILE_PATH="$SCRIPT_DIR/../occt.Dockerfile" +# Check for --unit-testing argument +RUN_UNIT_TESTS=false +if [[ "${1-}" == "--unit-testing" ]]; then + RUN_UNIT_TESTS=true +fi + echo "Building image..." if ! docker build -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" "$PROJECT_PATH"; then echo "Image build failed." >&2 @@ -17,3 +23,11 @@ if ! docker run --rm "$IMAGE_NAME" ls /usr/local/bin; then echo "Listing /usr/local/bin failed." >&2 exit 1 fi + +if [ "$RUN_UNIT_TESTS" = true ]; then + echo "Running unit tests..." + if ! docker run --rm "$IMAGE_NAME" ctest --test-dir /app/build/unit-tests -V; then + echo "Unit tests failed." >&2 + exit 1 + fi +fi diff --git a/src/occt/CMakeLists.txt b/src/occt/CMakeLists.txt new file mode 100644 index 0000000..8044b60 --- /dev/null +++ b/src/occt/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.14) + +set(project_name "arc-core-occt") +project(${project_name}) + +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(OpenCASCADE REQUIRED) + +add_library(occt SHARED + ./point.cpp +) + +target_include_directories(occt PUBLIC ${OpenCASCADE_INCLUDE_DIR}) +target_link_libraries(occt PUBLIC ${OpenCASCADE_LIBRARIES}) diff --git a/test/occt/CMakeLists.txt b/test/occt/CMakeLists.txt new file mode 100644 index 0000000..87fb91c --- /dev/null +++ b/test/occt/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.14) +project(arc-core-test) + +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(Catch2 3 REQUIRED) + +add_executable(tests + /app/test/point-test.cpp + /app/src/point.cpp +) + +target_include_directories(tests PRIVATE + /app/src/include + /usr/local/include/opencascade +) + +target_link_libraries(tests PRIVATE + Catch2::Catch2WithMain + /usr/local/lib/libocct.so +) + +include(CTest) +include(Catch) + +catch_discover_tests(tests)