Skip to content

Commit

Permalink
Update to latest runner utility to try to cut down on warning noise
Browse files Browse the repository at this point in the history
  • Loading branch information
bradwilson committed Jun 15, 2024
1 parent 882681e commit 545df75
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 44 deletions.
2 changes: 1 addition & 1 deletion Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<TunnelVisionLabsReferenceAssemblyAnnotatorVersion>1.0.0-alpha.160</TunnelVisionLabsReferenceAssemblyAnnotatorVersion>
<XunitAnalyzersVersion>1.15.0-pre.10</XunitAnalyzersVersion>
<XunitV2Version>2.8.2-pre.12</XunitV2Version>
<XunitV3Version>0.1.1-pre.475</XunitV3Version>
<XunitV3Version>0.1.1-pre.480</XunitV3Version>
</PropertyGroup>

</Project>
24 changes: 17 additions & 7 deletions src/xunit.runner.visualstudio/Utility/AssemblyRunInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,14 @@ namespace Xunit.Runner.VisualStudio;

public class AssemblyRunInfo
{
public AssemblyRunInfo(
AssemblyRunInfo(
XunitProject project,
RunSettings runSettings,
string assemblyFileName,
IList<TestCase>? testCases = null)
AssemblyMetadata assemblyMetadata,
IList<TestCase>? testCases)
{
Assembly = new XunitProjectAssembly(project)
{
AssemblyFileName = assemblyFileName,
AssemblyMetadata = AssemblyUtility.GetAssemblyMetadata(assemblyFileName),
};
Assembly = new XunitProjectAssembly(project, assemblyFileName, assemblyMetadata);
TestCases = testCases;

runSettings.CopyTo(Assembly.Configuration);
Expand All @@ -25,4 +22,17 @@ public AssemblyRunInfo(
public XunitProjectAssembly Assembly { get; }

public IList<TestCase>? TestCases { get; }

public static AssemblyRunInfo? Create(
XunitProject project,
RunSettings runSettings,
string assemblyFileName,
IList<TestCase>? testCases = null)
{
var metadata = AssemblyUtility.GetAssemblyMetadata(assemblyFileName);
if (metadata is null || metadata.XunitVersion == 0)
return null;

return new(project, runSettings, assemblyFileName, metadata, testCases);
}
}
78 changes: 42 additions & 36 deletions src/xunit.runner.visualstudio/VsTestRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -182,11 +182,15 @@ async Task DiscoverTests<TVisitor>(
foreach (var assemblyFileNameCanBeWithoutAbsolutePath in sources)
{
var assemblyFileName = Path.GetFullPath(assemblyFileNameCanBeWithoutAbsolutePath);
var assembly = new XunitProjectAssembly(project)
{
AssemblyFileName = assemblyFileName,
AssemblyMetadata = AssemblyUtility.GetAssemblyMetadata(assemblyFileName),
};
var metadata = AssemblyUtility.GetAssemblyMetadata(assemblyFileName);
// Silently ignore anything which doesn't look like a test project, because reporting it just throws
// lots of warnings into the test output window as Test Explorer asks you to enumerate tests for every
// assembly you build in your solution, not just the ones with references to this runner.
if (metadata is null || metadata.XunitVersion == 0)
return;

var assembly = new XunitProjectAssembly(project, assemblyFileName, metadata);

var configWarnings = new List<string>();
ConfigReader.Load(assembly.Configuration, assembly.AssemblyFileName, assembly.ConfigFileName, configWarnings);
runSettings.CopyTo(assembly.Configuration);
Expand All @@ -203,6 +207,9 @@ async Task DiscoverTests<TVisitor>(

await using var sourceInformationProvider = new VisualStudioSourceInformationProvider(assembly.AssemblyFileName, diagnosticMessageSink);
await using var controller = XunitFrontController.ForDiscoveryAndExecution(assembly, sourceInformationProvider, diagnosticMessageSink);
if (controller is null)
return;

var discoveryOptions = _TestFrameworkOptions.ForDiscovery(assembly.Configuration);
discoveryOptions.SetIncludeSourceInformation(true);
if (!await DiscoverTestsInAssembly(controller, logger, testPlatformContext, runSettings, visitorFactory, visitComplete, assembly, discoveryOptions))
Expand Down Expand Up @@ -239,40 +246,35 @@ async Task<bool> DiscoverTestsInAssembly<TVisitor>(
var reporterMessageHandler = await GetRunnerReporter(logger, runSettings, [assembly.AssemblyFileName]).CreateMessageHandler(new VisualStudioRunnerLogger(logger), diagnosticMessageSink);
fileName = Path.GetFileNameWithoutExtension(assembly.AssemblyFileName);

if (assembly.AssemblyMetadata.XunitVersion == 0)
diagnosticMessageSink.OnMessage(new _DiagnosticMessage("Skipping: {0} (no reference to xUnit.net)", fileName));
else
using var visitor = visitorFactory(assembly.AssemblyFileName, controller, discoveryOptions);
var totalTests = 0;
var appDomain = assembly.Configuration.AppDomain ?? AppDomainDefaultBehavior;
var usingAppDomains = controller.CanUseAppDomains && appDomain != AppDomainSupport.Denied;
reporterMessageHandler.OnMessage(new TestAssemblyDiscoveryStarting
{
using var visitor = visitorFactory(assembly.AssemblyFileName, controller, discoveryOptions);
var totalTests = 0;
var appDomain = assembly.Configuration.AppDomain ?? AppDomainDefaultBehavior;
var usingAppDomains = controller.CanUseAppDomains && appDomain != AppDomainSupport.Denied;
reporterMessageHandler.OnMessage(new TestAssemblyDiscoveryStarting
{
AppDomain = usingAppDomains ? AppDomainOption.Enabled : AppDomainOption.Disabled,
Assembly = assembly,
DiscoveryOptions = discoveryOptions,
ShadowCopy = assembly.Configuration.ShadowCopyOrDefault,
});
AppDomain = usingAppDomains ? AppDomainOption.Enabled : AppDomainOption.Disabled,
Assembly = assembly,
DiscoveryOptions = discoveryOptions,
ShadowCopy = assembly.Configuration.ShadowCopyOrDefault,
});

try
{
var findSettings = new FrontControllerFindSettings(discoveryOptions);
controller.Find(visitor, findSettings);
try
{
var findSettings = new FrontControllerFindSettings(discoveryOptions);
controller.Find(visitor, findSettings);

totalTests = visitor.Finish();
totalTests = visitor.Finish();

visitComplete?.Invoke(assembly.AssemblyFileName, controller, discoveryOptions, visitor);
}
finally
visitComplete?.Invoke(assembly.AssemblyFileName, controller, discoveryOptions, visitor);
}
finally
{
reporterMessageHandler.OnMessage(new TestAssemblyDiscoveryFinished
{
reporterMessageHandler.OnMessage(new TestAssemblyDiscoveryFinished
{
Assembly = assembly,
DiscoveryOptions = discoveryOptions,
TestCasesToRun = totalTests,
});
}
Assembly = assembly,
DiscoveryOptions = discoveryOptions,
TestCasesToRun = totalTests,
});
}
}
catch (Exception e)
Expand Down Expand Up @@ -394,7 +396,8 @@ public void RunTests(
() =>
tests
.GroupBy(testCase => testCase.Source)
.Select(group => new AssemblyRunInfo(project, runSettings, group.Key, group.ToList()))
.Select(group => AssemblyRunInfo.Create(project, runSettings, group.Key, group.ToList()))
.WhereNotNull()
.ToList()
).GetAwaiter().GetResult();
}
Expand Down Expand Up @@ -425,7 +428,7 @@ public void RunTests(
// before returning from this function.
RunTests(
runContext, frameworkHandle, logger, testPlatformContext, runSettings,
() => sources.Select(source => new AssemblyRunInfo(project, runSettings, Path.GetFullPath(source))).ToList()
() => sources.Select(source => AssemblyRunInfo.Create(project, runSettings, Path.GetFullPath(source))).WhereNotNull().ToList()
).GetAwaiter().GetResult();
}

Expand Down Expand Up @@ -499,6 +502,9 @@ async Task RunTestsInAssembly(

await using var sourceInformationProvider = new VisualStudioSourceInformationProvider(assemblyFileName, diagnosticSink);
await using var controller = XunitFrontController.ForDiscoveryAndExecution(runInfo.Assembly, sourceInformationProvider, diagnosticSink);
if (controller is null)
return;

var testCasesMap = new Dictionary<string, TestCase>();
var testCaseSerializations = new List<string>();
if (runInfo.TestCases is null || !runInfo.TestCases.Any())
Expand Down

0 comments on commit 545df75

Please sign in to comment.