using MaybeError; using MaybeError.Errors; namespace MaybeErrorTests; public class ValueMaybeTests { [Test] public void HasValue() { ValueMaybe value = 1; if(value.HasValue) Assert.That(value.Value, Is.EqualTo(1)); else Assert.Fail(); Assert.That(value.Error, Is.Null); } [Test] public void HasError() { ValueMaybe value = new InvalidOperationException(); if (value.HasError) Assert.That(value.Error, Is.Not.Null); else Assert.Fail(); Assert.Throws(() => value.Value.ToString()); } [Test] public void ImplicitValue() { ValueMaybe value = 1; Assert.IsTrue(value.HasValue); Assert.That(value == 1, Is.True); } [Test] public void ImplicitError() { ValueMaybe value = new InvalidOperationException(); Assert.IsTrue(value.HasError); Assert.Throws(() => value.Value.ToString()); } [Test] public void ExplicitError() { ValueMaybe value = new ExceptionError(new InvalidOperationException()); Assert.IsTrue(value.HasError); Assert.Throws(() => value.Value.ToString()); } [Test] public void Error() { ValueMaybe value = new Error("Test Error"); Assert.Throws(() => value.Value.ToString()); Assert.That(value.HasError); Assert.That(value.Error?.Message, Is.EqualTo("Test Error")); } [Test] public void ValueOrDefault() { ValueMaybe value = 1; Assert.That(value.ValueOrDefault(), Is.EqualTo(1)); value = new InvalidOperationException(); Assert.That(value.ValueOrDefault(), Is.Null); } [Test] public void ValueOrDefaultWithDefault() { ValueMaybe value = 1; Assert.That(value.ValueOrDefault(3), Is.EqualTo(1)); value = new InvalidOperationException(); Assert.That(value.ValueOrDefault(3), Is.EqualTo(3)); } [Test] public void As() { ValueMaybe value = 1; Assert.That(value.As(v => v.ToString()), Is.EqualTo("1")); value = new InvalidOperationException(); Assert.Throws(() => value.As(v => v.ToString())); } [Test] public void AsOrDefault() { ValueMaybe value = 1; Assert.That(value.AsOrDefault(v => v.ToString()), Is.EqualTo("1")); value = new InvalidOperationException(); Assert.That(value.AsOrDefault(v => v.ToString()), Is.Null); } [Test] public void AsOrDefaultWithValue() { ValueMaybe value = 1; Assert.That(value.AsOrDefault(v => v.ToString(), "err"), Is.EqualTo("1")); value = new InvalidOperationException(); Assert.That(value.AsOrDefault(v => v.ToString(), "err"), Is.EqualTo("err")); } }