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 @@ -84,9 +84,10 @@ internal async Task DiscoverTestsAsync(IEnumerable<string> sources, IDiscoveryCo

try
{
if (MSTestDiscovererHelpers.InitializeDiscovery(sources, discoveryContext, logger, configuration, _testSourceHandler))
IAdapterMessageLogger adapterLogger = logger.ToAdapterMessageLogger();
if (MSTestDiscovererHelpers.InitializeDiscovery(sources, discoveryContext, adapterLogger, configuration, _testSourceHandler))
{
new UnitTestDiscoverer(_testSourceHandler).DiscoverTests(sources, logger, discoverySink, discoveryContext, isMTP);
new UnitTestDiscoverer(_testSourceHandler).DiscoverTests(sources, adapterLogger, discoverySink, discoveryContext, isMTP);
}
}
finally
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ internal async Task RunTestsAsync(IEnumerable<TestCase>? tests, IRunContext? run

try
{
if (!MSTestDiscovererHelpers.InitializeDiscovery(from test in tests select test.Source, runContext, frameworkHandle, configuration, new TestSourceHandler()))
if (!MSTestDiscovererHelpers.InitializeDiscovery(from test in tests select test.Source, runContext, frameworkHandle.ToAdapterMessageLogger(), configuration, new TestSourceHandler()))
{
return;
}
Expand Down Expand Up @@ -183,7 +183,7 @@ internal async Task RunTestsAsync(IEnumerable<string>? sources, IRunContext? run
try
{
TestSourceHandler testSourceHandler = new();
if (!MSTestDiscovererHelpers.InitializeDiscovery(sources, runContext, frameworkHandle, configuration, testSourceHandler))
if (!MSTestDiscovererHelpers.InitializeDiscovery(sources, runContext, frameworkHandle.ToAdapterMessageLogger(), configuration, testSourceHandler))
{
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
Expand All @@ -31,7 +30,7 @@ internal UnitTestDiscoverer(ITestSourceHandler testSourceHandler)
/// <param name="isMTP">Flag set to true when the platform running discovery is MTP.</param>
internal void DiscoverTests(
IEnumerable<string> sources,
IMessageLogger logger,
IAdapterMessageLogger logger,
ITestCaseDiscoverySink discoverySink,
IDiscoveryContext discoveryContext,
bool isMTP)
Expand All @@ -52,7 +51,7 @@ internal void DiscoverTests(
/// <param name="isMTP">Flag set to true when the platform running discovery is MTP.</param>
internal virtual void DiscoverTestsInSource(
string source,
IMessageLogger logger,
IAdapterMessageLogger logger,
ITestCaseDiscoverySink discoverySink,
IDiscoveryContext? discoveryContext,
bool isMTP)
Expand Down Expand Up @@ -86,7 +85,7 @@ internal virtual void DiscoverTestsInSource(
}

string message = string.Format(CultureInfo.CurrentCulture, Resource.DiscoveryWarning, source, warning);
logger.SendMessage(TestMessageLevel.Warning, message);
logger.SendMessage(MessageLevel.Warning, message);
}
}

Expand All @@ -109,7 +108,7 @@ internal virtual void DiscoverTestsInSource(

private readonly ITestSourceHandler _testSource;

internal void SendTestCases(IEnumerable<UnitTestElement> testElements, ITestCaseDiscoverySink discoverySink, IDiscoveryContext? discoveryContext, IMessageLogger logger)
internal void SendTestCases(IEnumerable<UnitTestElement> testElements, ITestCaseDiscoverySink discoverySink, IDiscoveryContext? discoveryContext, IAdapterMessageLogger logger)
{
// Get filter expression and skip discovery in case filter expression has parsing error.
ITestCaseFilterExpression? filterExpression = _testMethodFilter.GetFilterExpression(discoveryContext, logger, out bool filterHasError);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

using ExecutionScope = Microsoft.VisualStudio.TestTools.UnitTesting.ExecutionScope;
Expand Down Expand Up @@ -63,6 +62,8 @@ private async Task ExecuteTestsInSourceAsync(IEnumerable<TestCase> tests, IRunCo
}
#endif

IAdapterMessageLogger adapterMessageLogger = frameworkHandle.ToAdapterMessageLogger();

using ITestSourceHost isolationHost = PlatformServiceProvider.Instance.CreateTestSourceHost(source, runContext?.RunSettings);
bool usesAppDomains = isolationHost is TestSourceHost { UsesAppDomain: true };

Expand All @@ -72,7 +73,7 @@ private async Task ExecuteTestsInSourceAsync(IEnumerable<TestCase> tests, IRunCo
}

// Default test set is filtered tests based on user provided filter criteria
ITestCaseFilterExpression? filterExpression = _testMethodFilter.GetFilterExpression(runContext, frameworkHandle, out bool filterHasError);
ITestCaseFilterExpression? filterExpression = _testMethodFilter.GetFilterExpression(runContext, adapterMessageLogger, out bool filterHasError);
if (filterHasError)
Comment thread
Evangelink marked this conversation as resolved.
{
// Bail out without processing everything else below.
Expand Down Expand Up @@ -142,8 +143,8 @@ private async Task ExecuteTestsInSourceAsync(IEnumerable<TestCase> tests, IRunCo
if (!MSTestSettings.CurrentSettings.DisableParallelization && sourceSettings.CanParallelizeAssembly && parallelWorkers > 0)
{
// Parallelization is enabled. Let's do further classification for sets.
frameworkHandle.SendMessage(
TestMessageLevel.Informational,
adapterMessageLogger.SendMessage(
MessageLevel.Informational,
string.Format(CultureInfo.CurrentCulture, Resource.TestParallelizationBanner, source, parallelWorkers, parallelScope));

// Create test sets for execution, we can execute them in parallel based on parallel settings
Expand Down Expand Up @@ -248,7 +249,7 @@ .. parallelizableTestSet
PlatformServiceProvider.Instance.AdapterTraceLogger.Error("Error occurred while executing tests in parallel{0}{1}", Environment.NewLine, exceptionToString);
}

frameworkHandle.SendMessage(TestMessageLevel.Error, exceptionToString);
adapterMessageLogger.SendMessage(MessageLevel.Error, exceptionToString);
throw;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Helpers;
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution;
Expand Down Expand Up @@ -124,13 +124,13 @@ internal async Task RunTestsAsync(IEnumerable<string> sources, IRunContext? runC

var tests = new List<TestCase>();

IAdapterMessageLogger logger = frameworkHandle.ToAdapterMessageLogger();

// deploy everything first.
foreach (string source in sources)
{
_testRunCancellationToken?.ThrowIfCancellationRequested();

var logger = (IMessageLogger)frameworkHandle;

// discover the tests
GetUnitTestDiscoverer(testSourceHandler).DiscoverTestsInSource(source, logger, discoverySink, runContext, isMTP);
tests.AddRange(discoverySink.Tests);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;

Expand All @@ -20,7 +20,7 @@ internal static class MSTestDiscovererHelpers
internal static bool AreValidSources(IEnumerable<string> sources, ITestSourceHandler testSourceHandler)
=> sources.Any(source => testSourceHandler.ValidSourceExtensions.Any(extension => string.Equals(Path.GetExtension(source), extension, StringComparison.OrdinalIgnoreCase)));

internal static bool InitializeDiscovery(IEnumerable<string> sources, IDiscoveryContext? discoveryContext, IMessageLogger messageLogger, IConfiguration? configuration, ITestSourceHandler testSourceHandler)
internal static bool InitializeDiscovery(IEnumerable<string> sources, IDiscoveryContext? discoveryContext, IAdapterMessageLogger messageLogger, IConfiguration? configuration, ITestSourceHandler testSourceHandler)
{
if (!AreValidSources(sources, testSourceHandler))
{
Expand All @@ -35,7 +35,7 @@ internal static bool InitializeDiscovery(IEnumerable<string> sources, IDiscovery
}
catch (AdapterSettingsException ex)
{
messageLogger.SendMessage(TestMessageLevel.Error, ex.Message);
messageLogger.SendMessage(MessageLevel.Error, ex.Message);
return false;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;

/// <summary>
/// Platform-agnostic sink for diagnostic messages (informational / warning / error) that the adapter
/// surfaces to whichever test host is running the tests.
/// </summary>
/// <remarks>
/// This abstraction lets the platform services layer report messages without taking a dependency on a
/// specific test platform's object model. The mapping to a concrete host logger (for example the VSTest
/// <c>IMessageLogger</c>) is provided by the adapter layer.
/// </remarks>
internal interface IAdapterMessageLogger
{
/// <summary>
/// Reports a diagnostic message to the running test host.
/// </summary>
/// <param name="level">The severity of the message.</param>
/// <param name="message">The message text.</param>
void SendMessage(MessageLevel level, string message);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;

using MessageLevel = Microsoft.VisualStudio.TestTools.UnitTesting.MessageLevel;
using StringEx = Microsoft.VisualStudio.TestTools.UnitTesting.StringEx;

namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
Expand All @@ -25,7 +25,7 @@ internal sealed partial class MSTestSettings
/// <param name="context">The discovery context.</param>
/// <param name="logger"> The logger for messages. </param>
/// <param name="configuration">The configuration.</param>
internal static void PopulateSettings(IDiscoveryContext? context, IMessageLogger? logger, IConfiguration? configuration)
internal static void PopulateSettings(IDiscoveryContext? context, IAdapterMessageLogger? logger, IConfiguration? configuration)
{
#if !WINDOWS_UWP
if (configuration?["mstest"] is not null
Expand Down Expand Up @@ -62,7 +62,7 @@ internal static void PopulateSettings(IDiscoveryContext? context, IMessageLogger

if (settings.RandomizeTestOrder && settings.OrderTestsByNameInClass)
{
logger?.SendMessage(TestMessageLevel.Warning, Resource.RandomTestOrderAndOrderTestsByNameInClassConflict);
logger?.SendMessage(MessageLevel.Warning, Resource.RandomTestOrderAndOrderTestsByNameInClassConflict);
}

// Track configuration source for telemetry.
Expand All @@ -78,7 +78,7 @@ internal static void PopulateSettings(IDiscoveryContext? context, IMessageLogger
#endif
}

private static void SetGlobalSettings(string runsettingsXml, MSTestSettings settings, IMessageLogger? logger)
private static void SetGlobalSettings(string runsettingsXml, MSTestSettings settings, IAdapterMessageLogger? logger)
{
XElement? runConfigElement = XDocument.Parse(runsettingsXml).Element("RunSettings")?.Element("RunConfiguration");
if (runConfigElement == null)
Expand All @@ -93,12 +93,12 @@ private static void SetGlobalSettings(string runsettingsXml, MSTestSettings sett
}
else if (disableParallelizationString is not null)
{
logger?.SendMessage(TestMessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidValue, disableParallelizationString, "DisableParallelization"));
logger?.SendMessage(MessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidValue, disableParallelizationString, "DisableParallelization"));
}
}

#if !WINDOWS_UWP
private static void ParseBooleanSetting(IConfiguration configuration, string key, IMessageLogger? logger, Action<bool> setSetting)
private static void ParseBooleanSetting(IConfiguration configuration, string key, IAdapterMessageLogger? logger, Action<bool> setSetting)
{
if (configuration[$"mstest:{key}"] is not string value)
{
Expand All @@ -111,11 +111,11 @@ private static void ParseBooleanSetting(IConfiguration configuration, string key
}
else
{
logger?.SendMessage(TestMessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidValue, value, key));
logger?.SendMessage(MessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidValue, value, key));
}
}

private static void ParseDebuggerLaunchModeSetting(IConfiguration configuration, string key, IMessageLogger? logger, Action<DebuggerLaunchMode> setSetting)
private static void ParseDebuggerLaunchModeSetting(IConfiguration configuration, string key, IAdapterMessageLogger? logger, Action<DebuggerLaunchMode> setSetting)
{
if (configuration[$"mstest:{key}"] is not string value)
{
Expand All @@ -128,11 +128,11 @@ private static void ParseDebuggerLaunchModeSetting(IConfiguration configuration,
}
else
{
logger?.SendMessage(TestMessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidValue, value, key));
logger?.SendMessage(MessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidValue, value, key));
}
}

private static void ParseTimeoutSetting(IConfiguration configuration, string key, IMessageLogger? logger, Action<int> setSetting)
private static void ParseTimeoutSetting(IConfiguration configuration, string key, IAdapterMessageLogger? logger, Action<int> setSetting)
{
if (configuration[$"mstest:{key}"] is not string value)
{
Expand All @@ -149,11 +149,11 @@ private static void ParseTimeoutSetting(IConfiguration configuration, string key
}
else
{
logger?.SendMessage(TestMessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidTimeoutValue, value, key));
logger?.SendMessage(MessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidTimeoutValue, value, key));
}
}

private static void ParseSignedIntegerSetting(IConfiguration configuration, string key, IMessageLogger? logger, Action<int> setSetting)
private static void ParseSignedIntegerSetting(IConfiguration configuration, string key, IAdapterMessageLogger? logger, Action<int> setSetting)
{
if (configuration[$"mstest:{key}"] is not string value)
{
Expand All @@ -166,7 +166,7 @@ private static void ParseSignedIntegerSetting(IConfiguration configuration, stri
}
else
{
logger?.SendMessage(TestMessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidValue, value, key));
logger?.SendMessage(MessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, Resource.InvalidValue, value, key));
}
}

Expand All @@ -176,7 +176,7 @@ private static void ParseSignedIntegerSetting(IConfiguration configuration, stri
/// <param name="configuration">Configuration to load the settings from.</param>
/// <param name="logger"> The logger for messages. </param>
/// <param name="settings">The MSTest settings.</param>
internal static void SetSettingsFromConfig(IConfiguration configuration, IMessageLogger? logger, MSTestSettings settings)
internal static void SetSettingsFromConfig(IConfiguration configuration, IAdapterMessageLogger? logger, MSTestSettings settings)
{
// 'orderTestsByNameInClass' has moved under 'execution:' for consistency with the other execution settings.
// Prefer the new 'mstest:execution:orderTestsByNameInClass' key. Only fall back to the deprecated flat
Expand All @@ -188,7 +188,7 @@ internal static void SetSettingsFromConfig(IConfiguration configuration, IMessag
}
else if (configuration["mstest:orderTestsByNameInClass"] is not null)
{
logger?.SendMessage(TestMessageLevel.Warning, Resource.DeprecatedFlatOrderTestsByNameInClassKey);
logger?.SendMessage(MessageLevel.Warning, Resource.DeprecatedFlatOrderTestsByNameInClassKey);
ParseBooleanSetting(configuration, "orderTestsByNameInClass", logger, value => settings.OrderTestsByNameInClass = value);
}

Expand Down
Loading
Loading