{ lib, dotnet-sdk, buildPackages, # buildDotnetModule testers, runCommand, }: let # Note: without structured attributes, we can’t use derivation arguments that # contain spaces unambiguously because arguments are passed as space-separated # environment variables. copyrightString = "Public domain 🅮"; inherit (buildPackages) buildDotnetModule; app = buildDotnetModule { name = "structured-attrs-test-application"; src = ./src; nugetDeps = ./nuget-deps.nix; dotnetFlags = [ "--property:Copyright=${copyrightString}" ]; env.TargetFramework = "net${lib.versions.majorMinor (lib.getVersion dotnet-sdk)}"; __structuredAttrs = true; }; in { no-structured-attrs = testers.testBuildFailure ( app.overrideAttrs { __structuredAttrs = false; } ); check-output = testers.testEqualContents { assertion = "buildDotnetModule sets AssemblyCopyrightAttribute with structured attributes"; expected = builtins.toFile "expected-copyright.txt" copyrightString; actual = runCommand "dotnet-structured-attrs-test" { } '' ${app}/bin/Application >"$out" ''; }; }