From 671542c4db6242900d44fe367da102d8b031cc6a Mon Sep 17 00:00:00 2001 From: Brad Wilson Date: Fri, 30 Jun 2023 17:30:42 -0700 Subject: [PATCH] #331: DisableAppDomain switch is not fully respected for Discovery --- src/xunit.runner.visualstudio/VsTestRunner.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/xunit.runner.visualstudio/VsTestRunner.cs b/src/xunit.runner.visualstudio/VsTestRunner.cs index 9a77c961..3d5e1cf1 100644 --- a/src/xunit.runner.visualstudio/VsTestRunner.cs +++ b/src/xunit.runner.visualstudio/VsTestRunner.cs @@ -15,7 +15,6 @@ #if NETCOREAPP using System.Text; using Internal.Microsoft.Extensions.DependencyModel; -using InternalRuntimeEnvironment = Internal.Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment; #endif namespace Xunit.Runner.VisualStudio @@ -251,9 +250,13 @@ void DiscoverTests( var fileName = Path.GetFileNameWithoutExtension(assemblyFileName); var shadowCopy = configuration.ShadowCopyOrDefault; var diagnosticSink = DiagnosticMessageSink.ForDiagnostics(logger, fileName, configuration.DiagnosticMessagesOrDefault); + var appDomain = configuration.AppDomain ?? AppDomainDefaultBehavior; - using var framework = new XunitFrontController(AppDomainDefaultBehavior, assemblyFileName, shadowCopy: shadowCopy, diagnosticMessageSink: MessageSinkAdapter.Wrap(diagnosticSink)); - if (!DiscoverTestsInSource(framework, logger, testPlatformContext, runSettings, visitorFactory, visitComplete, assemblyFileName, shadowCopy, configuration)) + if (runSettings.DisableAppDomain) + appDomain = AppDomainSupport.Denied; + + using var framework = new XunitFrontController(appDomain, assemblyFileName, shadowCopy: shadowCopy, diagnosticMessageSink: MessageSinkAdapter.Wrap(diagnosticSink)); + if (!DiscoverTestsInSource(framework, logger, testPlatformContext, runSettings, visitorFactory, visitComplete, assemblyFileName, shadowCopy, configuration, appDomain)) break; } } @@ -272,7 +275,8 @@ bool DiscoverTestsInSource( Action? visitComplete, string assemblyFileName, bool shadowCopy, - TestAssemblyConfiguration configuration) + TestAssemblyConfiguration configuration, + AppDomainSupport appDomain) where TVisitor : IVsDiscoverySink, IDisposable { if (cancelled) @@ -297,7 +301,7 @@ bool DiscoverTestsInSource( using var visitor = visitorFactory(assemblyFileName, framework, discoveryOptions); var totalTests = 0; - var usingAppDomains = framework.CanUseAppDomains && AppDomainDefaultBehavior != AppDomainSupport.Denied; + var usingAppDomains = framework.CanUseAppDomains && appDomain != AppDomainSupport.Denied; reporterMessageHandler.OnMessage(new TestAssemblyDiscoveryStarting(assembly, usingAppDomains, shadowCopy, discoveryOptions)); try @@ -469,7 +473,8 @@ void RunTestsInAssembly( }, assemblyFileName, shadowCopy, - configuration + configuration, + appDomain ); if (assemblyDiscoveredInfo == null || assemblyDiscoveredInfo.DiscoveredTestCases == null || !assemblyDiscoveredInfo.DiscoveredTestCases.Any())