Add devshell and initial bats tests
This commit is contained in:
parent
af8fae68fe
commit
d3b3862040
4 changed files with 102 additions and 4 deletions
|
|
@ -10,6 +10,9 @@ trim_trailing_whitespace = true
|
||||||
[*.py]
|
[*.py]
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.bats]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
[*.nix]
|
[*.nix]
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
|
|
|
||||||
40
default.nix
40
default.nix
|
|
@ -1,28 +1,60 @@
|
||||||
{
|
{
|
||||||
stdenv,
|
stdenv,
|
||||||
|
lib,
|
||||||
|
bats,
|
||||||
python3,
|
python3,
|
||||||
python3Packages,
|
python3Packages,
|
||||||
|
shellcheck-minimal,
|
||||||
|
shfmt,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
fs = lib.fileset;
|
||||||
|
in
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
pname = "mechanicaldiff";
|
pname = "mechanicaldiff";
|
||||||
version = "0.0.1";
|
version = "0.0.1";
|
||||||
|
|
||||||
src = ./bin;
|
src = fs.toSource {
|
||||||
|
root = ./.;
|
||||||
|
fileset = fs.unions [
|
||||||
|
./.editorconfig
|
||||||
|
./bin
|
||||||
|
./test
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
buildInputs = [ python3 ];
|
buildInputs = [ python3 ];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
patchShebangs .
|
||||||
|
'';
|
||||||
|
|
||||||
doCheck = true;
|
doCheck = true;
|
||||||
|
|
||||||
nativeCheckInputs = [ python3Packages.flake8 ];
|
nativeCheckInputs = [
|
||||||
|
(bats.withLibraries (p: [
|
||||||
|
p.bats-assert
|
||||||
|
p.bats-support
|
||||||
|
p.bats-file
|
||||||
|
]))
|
||||||
|
python3Packages.flake8
|
||||||
|
shellcheck-minimal
|
||||||
|
shfmt
|
||||||
|
];
|
||||||
|
|
||||||
checkPhase = ''
|
checkPhase = ''
|
||||||
flake8 mechanicaldiff.py
|
runHook preCheck
|
||||||
|
flake8 bin/mechanicaldiff.py
|
||||||
|
shellcheck test/mechanicaldiff.bats
|
||||||
|
shfmt -d test/mechanicaldiff.bats
|
||||||
|
bats test
|
||||||
|
runHook postCheck
|
||||||
'';
|
'';
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
cp mechanicaldiff.py $out/bin/mechanicaldiff
|
cp $src/bin/mechanicaldiff.py $out/bin/mechanicaldiff
|
||||||
chmod +x $out/bin/mechanicaldiff
|
chmod +x $out/bin/mechanicaldiff
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
13
flake.nix
13
flake.nix
|
|
@ -15,6 +15,19 @@
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
packages.default = pkgs.callPackage ./default.nix { };
|
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
50
test/mechanicaldiff.bats
Executable 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 ""
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue