// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.IO; using FluentAssertions; using Microsoft.DotNet.Tools.Test.Utilities; using Xunit; namespace Microsoft.DotNet.Cli.Utils.Tests { public class GivenAppThrowingException : TestBase { [RequiresSpecificFrameworkFact("netcoreapp1.1")] public void ItShowsStackTraceWhenRun() { var root = TestAssets.Get("NonRestoredTestProjects", "AppThrowingException") .CreateInstance() .WithSourceFiles() .Root; var appRoot = Path.Combine(root.FullName, "App"); new RestoreCommand() .WithWorkingDirectory(appRoot) .Execute() .Should().Pass(); string msg1 = "Unhandled Exception: AppThrowing.MyException: " + "Exception of type 'AppThrowing.MyException' was thrown."; string msg2 = "at AppThrowing.MyException.Main(String[] args)"; new DotnetCommand(DotnetUnderTest.WithBackwardsCompatibleRuntimes) .WithWorkingDirectory(appRoot) .ExecuteWithCapturedOutput("run") .Should().Fail() .And.HaveStdErrContaining(msg1) .And.HaveStdErrContaining(msg2); } [RequiresSpecificFrameworkFact("netcoreapp1.1")] public void ItShowsStackTraceWhenRunAsTool() { var root = TestAssets.Get("NonRestoredTestProjects", "AppThrowingException") .CreateInstance() .WithSourceFiles() .Root; var appRoot = Path.Combine(root.FullName, "App"); new RestoreCommand() .WithWorkingDirectory(appRoot) .Execute() .Should().Pass(); new PackCommand() .WithWorkingDirectory(appRoot) .Execute("-o ../pkgs") .Should() .Pass(); var appWithToolDepRoot = Path.Combine(root.FullName, "AppDependingOnOtherAsTool"); new RestoreCommand() .WithWorkingDirectory(appWithToolDepRoot) .Execute() .Should().Pass(); string msg1 = "Unhandled Exception: AppThrowing.MyException: " + "Exception of type 'AppThrowing.MyException' was thrown."; string msg2 = "at AppThrowing.MyException.Main(String[] args)"; new DotnetCommand(DotnetUnderTest.WithBackwardsCompatibleRuntimes) .WithWorkingDirectory(appWithToolDepRoot) .ExecuteWithCapturedOutput("throwingtool") .Should().Fail() .And.HaveStdErrContaining(msg1) .And.HaveStdErrContaining(msg2); } } }