diff --git a/test/TestAssets/TestProjects/ConsoleAppDoesNothing/ConsoleAppDoesNothing.csproj b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/ConsoleAppDoesNothing.csproj new file mode 100644 index 000000000000..ab23dba54c44 --- /dev/null +++ b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/ConsoleAppDoesNothing.csproj @@ -0,0 +1,11 @@ + + + + + $(CurrentTargetFramework) + Exe + false + true + + + \ No newline at end of file diff --git a/test/TestAssets/TestProjects/ConsoleAppDoesNothing/Program.cs b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/Program.cs new file mode 100644 index 000000000000..1d284322c152 --- /dev/null +++ b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/Program.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace ConsoleAppDoesNothing; + +public class Program +{ + /// + /// A console application that does "nothing" - just exits without any handshake or testing platform interaction. + /// This is used to test dotnet test behavior with non-MTP console applications. + /// + public static void Main(string[] args) + { + // Intentionally does nothing - no handshake, no test framework, just exits + // This simulates a regular console app that doesn't implement MTP protocol + } +} \ No newline at end of file diff --git a/test/TestAssets/TestProjects/ConsoleAppDoesNothing/dotnet.config b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/dotnet.config new file mode 100644 index 000000000000..da0410e32d54 --- /dev/null +++ b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/dotnet.config @@ -0,0 +1,2 @@ +[dotnet.test.runner] +name = "Microsoft.Testing.Platform" diff --git a/test/dotnet.Tests/CommandTests/Test/GivenDotnetTestRunsConsoleAppWithoutHandshake.cs b/test/dotnet.Tests/CommandTests/Test/GivenDotnetTestRunsConsoleAppWithoutHandshake.cs new file mode 100644 index 000000000000..5361c097f0b7 --- /dev/null +++ b/test/dotnet.Tests/CommandTests/Test/GivenDotnetTestRunsConsoleAppWithoutHandshake.cs @@ -0,0 +1,33 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.DotNet.Cli.Commands.Test; +using CommandResult = Microsoft.DotNet.Cli.Utils.CommandResult; +using ExitCodes = Microsoft.NET.TestFramework.ExitCode; + +namespace Microsoft.DotNet.Cli.Test.Tests +{ + public class GivenDotnetTestRunsConsoleAppWithoutHandshake : SdkTest + { + public GivenDotnetTestRunsConsoleAppWithoutHandshake(ITestOutputHelper log) : base(log) + { + } + + [InlineData(TestingConstants.Debug)] + [InlineData(TestingConstants.Release)] + [Theory] + public void RunConsoleAppDoesNothing_ShouldReturnCorrectExitCode(string configuration) + { + // This test validates the behavior when running `dotnet test` against a console application + // that does "nothing" and doesn't handshake with us. + TestAsset testInstance = _testAssetsManager.CopyTestAsset("ConsoleAppDoesNothing", Guid.NewGuid().ToString()) + .WithSource(); + + CommandResult result = new DotnetTestCommand(Log, disableNewOutput: false) + .WithWorkingDirectory(testInstance.Path) + .Execute(TestingPlatformOptions.ConfigurationOption.Name, configuration); + + result.ExitCode.Should().Be(ExitCodes.GenericFailure, "dotnet test should fail with a meaningful error when run against console app without MTP handshake"); + } + } +} \ No newline at end of file