using DodoSSH.Client.App.Platform;
using DodoSSH.Client.Session;
namespace DodoSSH.Client.App.Tests;
///
/// That the application leaves a record of why it died.
///
///
/// An exception nothing caught used to close the window and leave nothing at all behind. Installing the hooks
/// here also installs them in the test process, which is harmless: they only write to this test's own
/// directory, and only when something reaches the top.
///
public sealed class CrashLogTests : IDisposable
{
private readonly string directory =
Path.Combine(Path.GetTempPath(), $"dodossh-crash-{Guid.CreateVersion7():N}");
public void Dispose()
{
if (Directory.Exists(directory))
{
Directory.Delete(directory, recursive: true);
}
}
[Fact]
public void AnExceptionThatReachesTheTop_IsWrittenToTheProfile()
{
var paths = new ClientPaths(directory);
CrashLog.Install(paths);
CrashLog.Write("UI thread", new InvalidOperationException("the thing nobody caught"));
var written = File.ReadAllText(paths.CrashLogFile);
written.ShouldContain("UI thread");
written.ShouldContain("the thing nobody caught");
written.ShouldContain(nameof(InvalidOperationException));
}
}