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.Multiple(() => { Assert.That(value.HasValue); Assert.That(value == 1, Is.True); }); } [Test] public void ImplicitError() { ValueMaybe value = new InvalidOperationException(); Assert.That(value.HasError); Assert.Throws(() => value.Value.ToString()); } [Test] public void ExplicitError() { ValueMaybe value = new ExceptionError(new InvalidOperationException()); Assert.That(value.HasError); Assert.Throws(() => value.Value.ToString()); } [Test] public void Error() { ValueMaybe value = new Error("Test Error"); Assert.Throws(() => value.Value.ToString()); Assert.Multiple(() => { 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")); } [Test] public void MapTest() { ValueMaybe value = 1; var valueMapped = value.Map(v => v + 1); Assert.That(valueMapped.HasValue, Is.True); Assert.That(valueMapped.Value, Is.EqualTo(2)); } [Test] public void MapTestError() { ValueMaybe value = new Error("Err"); var valueMapped = value.Map(v => v + 1); Assert.That(valueMapped.HasError, Is.True); } [Test] public void MapErrorTest() { Maybe value = 1; var valueMapped = value.MapError(v => new Error($"A{v}")); Assert.That(valueMapped.HasValue, Is.True); Assert.That(valueMapped.Value, Is.EqualTo(1)); } [Test] public void MapErrorTestError() { ValueMaybe value = new Error("Err"); var valueMapped = value.MapError(v => new Error($"A{v.Message}")); Assert.That(valueMapped.HasError, Is.True); Assert.That(valueMapped.Error!.Message, Is.EqualTo("AErr")); } }