Idris2/nix/test.nix
2022-10-28 19:29:30 +01:00

43 lines
1.3 KiB
Nix

{ nixpkgs, idris, flake-utils, system, stdenv, runCommand, lib }:
let
withTests = tests: drv:
let
testDrvs = lib.mapAttrs (name: testScript:
runCommand "${drv.name}-test-${name}" { } ''
${testScript}
touch "$out"
'') tests;
in testDrvs;
createTemplate = flake: inputs: type:
let
self = import flake;
template =
self.outputs ({ inherit self nixpkgs idris flake-utils; } // inputs);
templateBuild = template.packages.${system}.${type};
in templateBuild;
templateBuildDefault = createTemplate ./templates/pkg/flake.nix { } "build";
templateBuildDefaultLibrary =
createTemplate ./templates/pkg/flake.nix { } "installLibrary";
templateBuildWithDeps = createTemplate ./templates/pkgWithDeps/flake.nix {
pkg = templateBuildDefaultLibrary;
} "build";
testsTemplate = {
checkFoo = ''
${templateBuildDefault}/bin/runMyPkg \
| grep "Foo"
'';
};
testsTemplateWithDeps = {
checkBar = ''
${templateBuildWithDeps}/bin/runMyPkg2 \
| grep "Bar"
'';
};
in withTests testsTemplate templateBuildDefault
// withTests testsTemplateWithDeps templateBuildWithDeps // {
idris2Tests =
idris.defaultPackage.${system}.overrideAttrs (a: { doCheck = true; });
}