using MaybeError; namespace MaybeErrorTests; public class MaybeTests { [Test] public void HasValue() { Maybe value = "Test"; if (value.HasValue) Assert.That(value.Value, Is.EqualTo("Test")); else Assert.Fail(); Assert.That(value.Error, Is.Null); } [Test] public void HasError() { Maybe value = new InvalidOperationException(); if (value.HasError) Assert.That(value.Error, Is.Not.Null); else Assert.Fail(); Assert.Throws(() => value.Value.ToLower()); } [Test] public void ImplicitValue() { Maybe value = "Test"; Assert.That(value == "Test", Is.True); } [Test] public void ImplicitError() { Maybe value = new InvalidOperationException(); Assert.Throws(() => value.Value.ToString()); } [Test] public void ExplicitError() { Maybe value = new ExceptionError(new InvalidOperationException()); Assert.Throws(() => value.Value.ToString()); } [Test] public void Error() { Maybe value = new Error("Test Error"); Assert.Throws(() => value.Value.ToLower()); Assert.That(value.HasError); Assert.That(value.Error?.Message, Is.EqualTo("Test Error")); } [Test] public void ValueOrDefault() { Maybe value = "Test"; Assert.That(value.ValueOrDefault(), Is.EqualTo("Test")); value = new InvalidOperationException(); Assert.That(value.ValueOrDefault(), Is.Null); } [Test] public void ValueOrDefaultWithDefault() { Maybe value = "Test"; Assert.That(value.ValueOrDefault("Err"), Is.EqualTo("Test")); value = new InvalidOperationException(); Assert.That(value.ValueOrDefault("Err"), Is.EqualTo("Err")); } [Test] public void As() { Maybe value = "Test"; Assert.That(value.As(v => v.Length), Is.EqualTo(4)); value = new InvalidOperationException(); Assert.Throws(() => value.As(v => v.Length)); } [Test] public void AsOrDefault() { Maybe value = "Test"; Assert.That(value.AsOrDefault(v => v.Length), Is.EqualTo(4)); value = new InvalidOperationException(); Assert.That(value.AsOrDefault(v => v.Length), Is.EqualTo(0)); } [Test] public void AsOrDefaultWithValue() { Maybe value = "Test"; Assert.That(value.AsOrDefault(v => v.Length, -4), Is.EqualTo(4)); value = new InvalidOperationException(); Assert.That(value.AsOrDefault(v => v.Length, -4), Is.EqualTo(-4)); } }