Skip to content

Instantly share code, notes, and snippets.

@vbfox
Created December 17, 2014 10:54
Show Gist options
  • Save vbfox/aa4dd3b9ae0d1e92a612 to your computer and use it in GitHub Desktop.
Save vbfox/aa4dd3b9ae0d1e92a612 to your computer and use it in GitHub Desktop.
F# Option type support for NFluent
using Microsoft.FSharp.Core;
using NFluent;
using NFluent.Extensibility;
namespace UnitTests
{
public static class FSharOptionCheckExtensions
{
public static void IsNone<T>(this ICheck<FSharpOption<T>> check)
{
var checker = ExtensibilityHelper.ExtractChecker(check);
var entity = string.Format("{0} option", typeof(T).Name);
var notMessage = FluentMessage.BuildMessage("The {0} is None but should be Some.").For(entity);
checker.ExecuteCheck(
() =>
{
if (!FSharpOption<T>.get_IsNone(checker.Value))
{
var message = FluentMessage.BuildMessage("The {0} is Some but should be None.")
.For(entity).On(checker.Value);
throw new FluentCheckException(message.ToString());
}
},
notMessage.ToString());
}
public static IFSharpOptionCheckLink<T> IsSome<T>(this ICheck<FSharpOption<T>> check)
{
var checker = ExtensibilityHelper.ExtractChecker(check);
var entity = string.Format("{0} option", typeof(T).Name);
var notMessage = FluentMessage.BuildMessage("The {0} is Some but should be None.")
.For(entity).On(checker.Value);
checker.ExecuteCheck(
() =>
{
if (!FSharpOption<T>.get_IsSome(checker.Value))
{
var message = FluentMessage.BuildMessage("The {0} is None but should be Some.")
.For(entity);
throw new FluentCheckException(message.ToString());
}
},
notMessage.ToString());
return new FSharpOptionCheckLink<T>(check);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment