- See LanguageExt C# Functional Programming Language Extensions for more information about functional-programming 'base class library'.
- See FluentAssertions for more information about the extensive set of extension methods for unit tests.
Special thanks to @sparerd for the many new features.
Install-Package FluentAssertions.LanguageExt
BeSome()BeSome(expected)BeSome(action)BeNone()
using FluentAssertions;
using FluentAssertions.LanguageExt;
...
var option = Prelude.Some(123);
var optionnone = Option<int>.None;
option.Should().BeSome();
option.Should().BeSome(8);
option.Should().BeSome(s => s.Should().Be(8));
option.Should().BeSome().Which.Should().Be(8);
optionnone.Should().BeNone();Be(expected)BeLeft()BeLeft(action)BeRight()BeRight(action)BeBottom()
using FluentAssertions;
using FluentAssertions.LanguageExt;
...
Either<int, string> left = Prelude.Left(8);
Either<int, string> right = Prelude.Right("a");
left.Should().BeLeft();
left.Should().BeLeft(l => l.Should().Be(8));
left.Should().BeLeft().Which.Should().Be(8);
left.Should().Be(8);
right.Should().BeRight();
right.Should().BeRight(r => r.Should().Be("a"));
right.Should().BeRight().Which.Should().Be("a");
right.Should().Be("a");There's a breaking change when using BeFail() with the .Which extension.
When using the BeFail() assertion on a Validation<TFail, TSucc>, the .Which extension returns only a single failure instance even though the Validation type has a Seq<TFail>. This prevents proper assertions on the failures returned from a Validation using the .Which extension.
This has now been fixed.
The return signature for BeFail() has changed from AndWhichConstraint<LanguageExtValidationAssertions<TFail, TSuccess>, TFail> to AndWhichConstraint<LanguageExtValidationAssertions<TFail, TSuccess>, Seq<TFail>>
BeFail()BeSuccess()BeSuccess(action)Be(expected)
BeFail()BeSuccess()
BeFail()BeSome()BeSome(action)BeNone()BeNoneOrFail()Be(expected)
BeSuccess()BeSuccess(action)BeFail()BeBottom()Be(expected)
using FluentAssertions;
using FluentAssertions.LanguageExt;
...
Fin<int> successFin = Prelude.FinSucc(8);
Fin<int> failedFin = Prelude.FinFail<int>("Error message");
successFin.Should().BeSuccess();
successFin.Should().BeSuccess(v => v.Should().Be(8));
successFin.Should().BeSuccess().Which.Should().Be(8);
successFin.Should().Be(8);
failedFin.Should().BeFail();
failedFin.Should().BeFail().Which.Message.Should().Be("Error message");