tpierrain/NFluent

Add support for FSharpList

johanhaleby opened this issue · 4 comments

It would be great if NFluent would add support for asserting elements in an FSharpList the same way you can do on a Seq or List. I.e. allow this:

let myList : int list = [1;2;3]
Check.That(events).Contains(1, 2, 3)

Thanks for opening the first F# issue we ever had.
This gives me the opportunity to start having a F# test projects.

Thanks for opening the first F# issue we ever had.

@dupdob Oh wow :) I just started playing around with F# two days ago (as my first CLR language). I'm from a JVM background and I've been using assertj heavily for many years and I was glad to find this lib.

Hello!
Although I love NFluent and would very highly recommend its usage on C# projects, I'm not certain this is the best fit for F# projects. The reason I'm saying this is because NFluent heavily relies on extension methods, type inference et implicit casts, in the way they work in C#.
In F#, you code will work if you do the following:

let myList: int list = [1;2;3]
Check.That(events :> System.Collections.IEnumerable).Contains(1, 2, 3)

It's not the lack of support in NFluent here, it's that F# will not implicitely cast from FSharpList to IEnumerable.
The same test, written in C#, even when testing the content of an FSharpList, would work out of the box.

@pirrmann Interesting point.

But for me at least, I think that it would be ok to add a small wrapper for F#. For example in the case of FSharpList I think it would be almost enough for NFluent provide a function that transforms the FSharpList into an IEnumerable or "sequence" (sorry for not being fluent in dotnet parlance yet).

I.e. the problem I have today is that this doesn't work:

let myList : int list = [1;2;3]
Check.That(events).Contains(1, 2, 3)

But if I simply change the code to this it works (or if I cast it to IEnumerable that you imply) :

let myList : int seq = [1;2;3] |> Seq.ofList
Check.That(events).Contains(1, 2, 3)

If NFluent would provide a Contains method that does this simple transformation it would be (almost) enough for me. The reason I say "almost" is that the HasSize method is unavailable for sequences.

WDYT?