namespace Geekeey.Common.Results.Tests; [TestFixture] internal sealed class PreludeTests { [Test] public void Try_ReturnsSuccess_WithoutThrowing() { var result = Try(() => 2); Assert.Multiple(() => { Assert.That(result.IsSuccess, Is.True); Assert.That(result.Value, Is.EqualTo(2)); }); } [Test] public void Try_ReturnsFailure_WithThrowing() { var result = Try(() => throw new CustomTestException()); Assert.Multiple(() => { Assert.That(result.IsSuccess, Is.False); Assert.That(result.Error, Is.InstanceOf()); var instance = result.Error as ExceptionError; Assert.That(instance?.Exception, Is.InstanceOf()); }); } [Test] public async Task TryAsync_ReturnsSuccess_WithoutThrowing_Task() { var result = await TryAsync(() => Task.FromResult(2)); Assert.Multiple(() => { Assert.That(result.IsSuccess, Is.True); Assert.That(result.Value, Is.EqualTo(2)); }); } [Test] public async Task TryAsync_ReturnsFailure_WithThrowing_Task() { var result = await TryAsync(Task () => throw new CustomTestException()); Assert.Multiple(() => { Assert.That(result.IsSuccess, Is.False); Assert.That(result.Error, Is.InstanceOf()); var instance = result.Error as ExceptionError; Assert.That(instance?.Exception, Is.InstanceOf()); }); } [Test] public async Task TryAsync_ReturnsFailure_WithAwaitThrowing_Task() { var result = await TryAsync(async Task () => { await Task.CompletedTask; throw new CustomTestException(); }); Assert.Multiple(() => { Assert.That(result.IsSuccess, Is.False); Assert.That(result.Error, Is.InstanceOf()); var instance = result.Error as ExceptionError; Assert.That(instance?.Exception, Is.InstanceOf()); }); } [Test] public async Task TryAsync_ReturnsSuccess_WithoutThrowing_ValueTask() { var result = await TryAsync(() => ValueTask.FromResult(2)); Assert.Multiple(() => { Assert.That(result.IsSuccess, Is.True); Assert.That(result.Value, Is.EqualTo(2)); }); } [Test] public async Task TryAsync_ReturnsFailure_WithThrowing_ValueTask() { var result = await TryAsync(ValueTask () => throw new CustomTestException()); Assert.Multiple(() => { Assert.That(result.IsSuccess, Is.False); Assert.That(result.Error, Is.InstanceOf()); var instance = result.Error as ExceptionError; Assert.That(instance?.Exception, Is.InstanceOf()); }); } [Test] public async Task TryAsync_ReturnsFailure_WithAwaitThrowing_ValueTask() { var result = await TryAsync(async ValueTask () => { await Task.CompletedTask; throw new CustomTestException(); }); Assert.Multiple(() => { Assert.That(result.IsSuccess, Is.False); Assert.That(result.Error, Is.InstanceOf()); var instance = result.Error as ExceptionError; Assert.That(instance?.Exception, Is.InstanceOf()); }); } }