From c1056d5436f3a6db1635dbd58cb58c111479e79e Mon Sep 17 00:00:00 2001 From: Vladimir Chirikov Date: Tue, 25 Oct 2022 17:35:26 +0300 Subject: [PATCH] feat: exclude assemblies without executed tests from the summary --- src/dotnet/Logger/Logger.cs | 46 ++++++++++++----------- src/dotnet/Logger/TestRunSummaryWriter.cs | 7 ++++ 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/dotnet/Logger/Logger.cs b/src/dotnet/Logger/Logger.cs index 2fc3616..484e771 100644 --- a/src/dotnet/Logger/Logger.cs +++ b/src/dotnet/Logger/Logger.cs @@ -256,29 +256,33 @@ async Task OnTestRunCompleteInternalAsync(TestRunCompleteEventArgs results) try { await Task.WhenAll(_testResults.Values.ToArray()).ConfigureAwait(false); - if (!results.TestRunStatistics.Stats.TryGetValue(TestOutcome.Passed, out var passed)) - passed = 0; - if (!results.TestRunStatistics.Stats.TryGetValue(TestOutcome.Failed, out var failed)) - failed = 0; - if (!results.TestRunStatistics.Stats.TryGetValue(TestOutcome.Skipped, out var skipped)) - skipped = 0; + // write summary only if filter will get some tests for assembly + if (results.TestRunStatistics.ExecutedTests > 0) + { + if (!results.TestRunStatistics.Stats.TryGetValue(TestOutcome.Passed, out var passed)) + passed = 0; + if (!results.TestRunStatistics.Stats.TryGetValue(TestOutcome.Failed, out var failed)) + failed = 0; + if (!results.TestRunStatistics.Stats.TryGetValue(TestOutcome.Skipped, out var skipped)) + skipped = 0; - var summary = _summaryGenerator.Generate( - name: _params.name, - suite: _testRunName, - framework: _testRunFramework, - passed, - failed, - skipped, - total: results.TestRunStatistics.ExecutedTests, - elapsed: results.ElapsedTimeInRunningTests, - testResults: _testResults.Keys - ); + var summary = _summaryGenerator.Generate( + name: _params.name, + suite: _testRunName, + framework: _testRunFramework, + passed, + failed, + skipped, + total: results.TestRunStatistics.ExecutedTests, + elapsed: results.ElapsedTimeInRunningTests, + testResults: _testResults.Keys + ); - // we might have several msbuild processes (per testRun), - // so we can't just print summary into gh action output value (bc we will override the value) - // thus we must use a file to store results and work with contention between msbuilds - await _summaryWriter.WriteAsync(summary).ConfigureAwait(false); + // we might have several msbuild processes (per testRun), + // so we can't just print summary into gh action output value (bc we will override the value) + // thus we must use a file to store results and work with contention between msbuilds + await _summaryWriter.WriteAsync(summary).ConfigureAwait(false); + } } finally { diff --git a/src/dotnet/Logger/TestRunSummaryWriter.cs b/src/dotnet/Logger/TestRunSummaryWriter.cs index 7f4a00d..8268204 100644 --- a/src/dotnet/Logger/TestRunSummaryWriter.cs +++ b/src/dotnet/Logger/TestRunSummaryWriter.cs @@ -9,6 +9,13 @@ internal class TestRunSummaryWriter public async Task WriteAsync(string summary) { + try + { + var directory = Path.GetDirectoryName(_outputFilePath); + if (!Directory.Exists(directory)) + Directory.CreateDirectory(directory); + } + catch { } var bytes = Encoding.UTF8.GetBytes(summary); await FileOperationWithRetryAsync(async () => { var file = new FileStream(