61 lines
2.1 KiB
Nix
61 lines
2.1 KiB
Nix
|
{ lib
|
||
|
, dotnet-sdk
|
||
|
, buildPackages # buildDotnetModule, dotnet-runtime
|
||
|
, testers
|
||
|
, runCommand
|
||
|
, removeReferencesTo
|
||
|
}:
|
||
|
let
|
||
|
inherit (buildPackages) buildDotnetModule dotnet-runtime;
|
||
|
|
||
|
app = buildDotnetModule {
|
||
|
name = "use-dotnet-from-env-test-application";
|
||
|
src = ./src;
|
||
|
nugetDeps = ./nuget-deps.nix;
|
||
|
useDotnetFromEnv = true;
|
||
|
env.TargetFramework = "net${lib.versions.majorMinor (lib.getVersion dotnet-sdk)}";
|
||
|
};
|
||
|
|
||
|
appWithoutFallback = app.overrideAttrs (oldAttrs: {
|
||
|
nativeBuildInputs = (oldAttrs.nativeBuildInputs or [ ]) ++ [
|
||
|
removeReferencesTo
|
||
|
];
|
||
|
postFixup = (oldAttrs.postFixup or "") + ''
|
||
|
remove-references-to -t ${dotnet-runtime} "$out/bin/Application"
|
||
|
'';
|
||
|
});
|
||
|
|
||
|
runtimeVersion = lib.getVersion dotnet-runtime;
|
||
|
runtimeVersionFile = builtins.toFile "dotnet-version.txt" runtimeVersion;
|
||
|
in
|
||
|
{
|
||
|
fallback = testers.testEqualContents {
|
||
|
assertion = "buildDotnetModule sets fallback DOTNET_ROOT in wrapper";
|
||
|
expected = runtimeVersionFile;
|
||
|
actual = runCommand "use-dotnet-from-env-fallback-test" { } ''
|
||
|
${app}/bin/Application >"$out"
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
# Check that appWithoutFallback does not use fallback .NET runtime.
|
||
|
without-fallback = testers.testBuildFailure (runCommand "use-dotnet-from-env-without-fallback-test" { } ''
|
||
|
${appWithoutFallback}/bin/Application >"$out"
|
||
|
'');
|
||
|
|
||
|
# NB assumes that without-fallback above to passes.
|
||
|
use-dotnet-root-env = testers.testEqualContents {
|
||
|
assertion = "buildDotnetModule uses DOTNET_ROOT from environment in wrapper";
|
||
|
expected = runtimeVersionFile;
|
||
|
actual = runCommand "use-dotnet-from-env-root-test" { env.DOTNET_ROOT = dotnet-runtime; } ''
|
||
|
${appWithoutFallback}/bin/Application >"$out"
|
||
|
'';
|
||
|
};
|
||
|
use-dotnet-path-env = testers.testEqualContents {
|
||
|
assertion = "buildDotnetModule uses DOTNET_ROOT from dotnet in PATH in wrapper";
|
||
|
expected = runtimeVersionFile;
|
||
|
actual = runCommand "use-dotnet-from-env-path-test" { dotnetRuntime = dotnet-runtime; } ''
|
||
|
PATH=$dotnetRuntime''${PATH+:}$PATH ${appWithoutFallback}/bin/Application >"$out"
|
||
|
'';
|
||
|
};
|
||
|
}
|