let streamLines (reader : TextReader) =
reader |> Seq.unfold (fun r ->
| null -> r.Dispose(); None
let ``Read lines then dispose`` (expected : string []) =
let readLineCallNum = ref 0
member x.Dispose(disposing) =
readLineCallNum := !readLineCallNum + 1
match !readLineCallNum with
| n when n < expected.Length + 1 -> expected.[n - 1]
let actual = streamLines (textReader) |> Seq.toArray
Assert.Equal<string>(expected, actual)
``Read lines then dispose``(Fixture().Create<string []>())