Add devshell and initial bats tests

This commit is contained in:
Sven van Heugten 2026-03-05 19:29:32 +01:00
parent af8fae68fe
commit d3b3862040
No known key found for this signature in database
GPG key ID: D612F88666F4F660
4 changed files with 102 additions and 4 deletions

View file

@ -10,6 +10,9 @@ trim_trailing_whitespace = true
[*.py]
indent_size = 4
[*.bats]
indent_size = 2
[*.nix]
indent_size = 2

View file

@ -1,28 +1,60 @@
{
stdenv,
lib,
bats,
python3,
python3Packages,
shellcheck-minimal,
shfmt,
}:
let
fs = lib.fileset;
in
stdenv.mkDerivation {
pname = "mechanicaldiff";
version = "0.0.1";
src = ./bin;
src = fs.toSource {
root = ./.;
fileset = fs.unions [
./.editorconfig
./bin
./test
];
};
buildInputs = [ python3 ];
postPatch = ''
patchShebangs .
'';
doCheck = true;
nativeCheckInputs = [ python3Packages.flake8 ];
nativeCheckInputs = [
(bats.withLibraries (p: [
p.bats-assert
p.bats-support
p.bats-file
]))
python3Packages.flake8
shellcheck-minimal
shfmt
];
checkPhase = ''
flake8 mechanicaldiff.py
runHook preCheck
flake8 bin/mechanicaldiff.py
shellcheck test/mechanicaldiff.bats
shfmt -d test/mechanicaldiff.bats
bats test
runHook postCheck
'';
installPhase = ''
mkdir -p $out/bin
cp mechanicaldiff.py $out/bin/mechanicaldiff
cp $src/bin/mechanicaldiff.py $out/bin/mechanicaldiff
chmod +x $out/bin/mechanicaldiff
'';
}

View file

@ -15,6 +15,19 @@
in
{
packages.default = pkgs.callPackage ./default.nix { };
devShells.default = pkgs.mkShell {
packages = [
(pkgs.bats.withLibraries (p: [
p.bats-assert
p.bats-support
p.bats-file
]))
pkgs.python3
pkgs.python3Packages.flake8
pkgs.shellcheck
pkgs.shfmt
];
};
}
);
}

50
test/mechanicaldiff.bats Executable file
View file

@ -0,0 +1,50 @@
#!/usr/bin/env bats
setup() {
set -euo pipefail
bats_load_library bats-support
bats_load_library bats-assert
DIR="$(cd "$(dirname "$BATS_TEST_FILENAME")" >/dev/null 2>&1 && pwd)"
PATH="$DIR/../bin:$PATH"
}
@test "keeps hunk when replacement matches" {
run bash -c 'cat <<"EOF" | mechanicaldiff.py foo bar
diff --git a/file.txt b/file.txt
index 1111111..2222222 100644
--- a/file.txt
+++ b/file.txt
@@ -1,1 +1,1 @@
-foo
+bar
EOF'
assert_success
expected="$(
cat <<'EOF'
diff --git a/file.txt b/file.txt
index 1111111..2222222 100644
--- a/file.txt
+++ b/file.txt
@@ -1,1 +1,1 @@
-foo
+bar
EOF
)"
assert_output "$expected"
}
@test "drops diff when replacement does not match" {
run bash -c 'cat <<"EOF" | mechanicaldiff.py foo bar
diff --git a/file.txt b/file.txt
index 1111111..2222222 100644
--- a/file.txt
+++ b/file.txt
@@ -1,1 +1,1 @@
-foo
+baz
EOF'
assert_success
assert_output ""
}