Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
using System.Text;
using System.Threading.Tasks;

using NuGetUpdater.Core.Discover;

using Xunit;
using Xunit.Sdk;

Expand Down Expand Up @@ -56,5 +58,47 @@ public void LogRaw_ShouldStreamLogsIndividually()
Assert.Contains(testMessage2, output);
}

[Fact]
public void ReportDiscovery_LogsWarningForProjectsWithNU1701()
{
var logger = new StringLogger();
var discoveryResult = new WorkspaceDiscoveryResult()
{
Path = "/src",
Projects = [
new()
{
FilePath = "zebra.csproj",
Dependencies = [],
ImportedFiles = [],
AdditionalFiles = [],
HasNoWarnNU1701 = true,
},
new()
{
FilePath = "middle.csproj",
Dependencies = [],
ImportedFiles = [],
AdditionalFiles = [],
HasNoWarnNU1701 = false,
},
new()
{
FilePath = "alpha.csproj",
Dependencies = [],
ImportedFiles = [],
AdditionalFiles = [],
HasNoWarnNU1701 = true,
},
]
};

logger.ReportDiscovery(discoveryResult);

var warnings = logger.Messages.Where(m => m.Contains("has NoWarn property containing NU1701; package compatibility checks may be inaccurate.")).ToList();
Assert.Equal(2, warnings.Count);
Assert.Contains("/src/alpha.csproj", warnings[0]);
Assert.Contains("/src/zebra.csproj", warnings[1]);
Assert.DoesNotContain(logger.Messages, m => m.Contains("Project [/src/middle.csproj] has NoWarn property containing NU1701; package compatibility checks may be inaccurate."));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ public record ProjectDiscoveryResult : IDiscoveryResultWithDependencies
public required ImmutableArray<string> ImportedFiles { get; init; }
public required ImmutableArray<string> AdditionalFiles { get; init; }
public required ImmutableArray<Dependency> Dependencies { get; init; }
public bool HasNoWarnNU1701 { get; init; } = false;
}
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,18 @@ PackageManagementKind.CentralPackageManagement or
packageManagementKind = PackageManagementKind.Default;
}

// check for NoWarn containing NU1701
var noWarnValue = GetStringPropertyFromProjectProperties(projectProperties, "NoWarn");
var hasNoWarnNU1701 = false;
if (noWarnValue is not null)
{
var noWarnCodes = noWarnValue.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
if (noWarnCodes.Contains("NU1701", StringComparer.OrdinalIgnoreCase))
{
hasNoWarnNU1701 = true;
}
}

var projectDiscoveryResult = new ProjectDiscoveryResult()
{
FilePath = projectRelativePath,
Expand All @@ -684,6 +696,7 @@ PackageManagementKind.CentralPackageManagement or
AdditionalFiles = additional,
PackageManagementKind = packageManagementKind,
PackageManagementSpecialFileRelativePath = packageManagementFile,
HasNoWarnNU1701 = hasNoWarnNU1701,
};
projectDiscoveryResults.Add(projectDiscoveryResult);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ public static void ReportAnalysis(this ILogger logger, AnalysisResult analysisRe

public static void ReportDiscovery(this ILogger logger, WorkspaceDiscoveryResult discoveryResult)
{
var nu1701Projects = discoveryResult.Projects
.Where(p => p.HasNoWarnNU1701)
.Select(p => PathHelper.JoinPath(discoveryResult.Path, p.FilePath).FullyNormalizedRootedPath())
.OrderBy(p => p, StringComparer.OrdinalIgnoreCase)
.ToList();
foreach (var projectPath in nu1701Projects)
{
logger.Warn($"Project [{projectPath}] has NoWarn property containing NU1701; package compatibility checks may be inaccurate.");
}

logger.Info("Discovery JSON content:");
logger.Info(JsonSerializer.Serialize(discoveryResult, DiscoveryWorker.SerializerOptions));
}
Expand Down
Loading