From 70a0703a0e7e0c078a58c9d99d034c10ef48b794 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Sun, 22 Dec 2024 21:58:19 +0100 Subject: [PATCH] Add initial version of test suite --- flake.nix | 6 +++++ test/ros2nix | 5 +++++ test/test.bats | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100755 test/ros2nix create mode 100644 test/test.bats diff --git a/flake.nix b/flake.nix index f4b079a..df50985 100644 --- a/flake.nix +++ b/flake.nix @@ -97,9 +97,15 @@ ]; packages = [ pkgs.bashInteractive + (pkgs.bats.withLibraries (p: [ + p.bats-support + p.bats-assert + p.bats-file + ])) pkgs.python3Packages.flake8 pkgs.python3Packages.flake8-bugbear pkgs.python3Packages.isort + pkgs.python3Packages.distutils # needed for running ros2nix via python -m ]; ROSDEP_SOURCE_PATH = "${rosdistro}/rosdep/sources.list.d"; ROSDISTRO_INDEX_URL = "file://${rosdistro}/index-v4.yaml"; diff --git a/test/ros2nix b/test/ros2nix new file mode 100755 index 0000000..2490838 --- /dev/null +++ b/test/ros2nix @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." &> /dev/null && pwd) +export PYTHONPATH="$DIR:$PYTHONPATH" +exec python3 -m ros2nix "$@" diff --git a/test/test.bats b/test/test.bats new file mode 100644 index 0000000..6d2a18f --- /dev/null +++ b/test/test.bats @@ -0,0 +1,61 @@ +# -*- bats-mode -*- + +# shellcheck disable=SC2046 + +bats_require_minimum_version 1.5.0 +bats_load_library bats-support +bats_load_library bats-assert +bats_load_library bats-file + +setup_file() { + # get the containing directory of this file + # use $BATS_TEST_FILENAME instead of ${BASH_SOURCE[0]} or $0, + # as those will point to the bats executable's location or the preprocessed file respectively + DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )" + export DIR + # make executables in this directory visible to PATH + PATH="$DIR:$PATH" +} + +setup() { + cd "$BATS_TEST_TMPDIR" + cp -a "$DIR/ws" . +} + +@test "ros2nix --help" { + ros2nix --help +} + +@test "fail on non-existent package.xml" { + run ! ros2nix ./non-existent.xml +} + +@test "nixify local workspace" { + ros2nix $(find ws/src -name package.xml) + nix-build -A rosPackages.humble.ros-node -A rosPackages.jazzy.ros-node -A rosPackages.rolling.ros-node +} + +@test "--output-as-nix-pkg-name" { + ros2nix --output-as-nix-pkg-name $(find ws/src -name package.xml) + assert [ -f ros-node.nix ] + assert [ -f library.nix ] + nix-build -A rosPackages.jazzy.ros-node +} + +@test "--output-as-ros-pkg-name" { + ros2nix --output-as-ros-pkg-name $(find ws/src -name package.xml) + assert [ -f ros_node.nix ] + assert [ -f library.nix ] + nix-build -A rosPackages.jazzy.ros-node +} + +@test "--flake" { + ros2nix --flake $(find ws/src -name package.xml) + nix flake check path:"${PWD}" + nix build path:"${PWD}#ros-node" +} + +@test "--compare" { + ros2nix $(find ws/src -name package.xml) + ros2nix --compare $(find ws/src -name package.xml) +}