diff --git a/src/stdlib/Builtins.fs b/src/stdlib/Builtins.fs index 194b275..ae0715f 100644 --- a/src/stdlib/Builtins.fs +++ b/src/stdlib/Builtins.fs @@ -12,13 +12,16 @@ type TextIOBase = abstract read: __size: int -> string abstract write: __s: string -> int abstract writelines: __lines: string seq -> unit + abstract readline: unit -> string abstract readline: __size: int -> string + abstract readlines: unit -> string list abstract readlines: __hint: int -> string list abstract tell: unit -> int type TextIOWrapper = inherit IDisposable inherit TextIOBase + inherit IEnumerable module OpenTextMode = [] diff --git a/test/TestBuiltins.fs b/test/TestBuiltins.fs index 5f2117f..7d6fcf9 100644 --- a/test/TestBuiltins.fs +++ b/test/TestBuiltins.fs @@ -20,6 +20,38 @@ let ``test write works`` () = result.Dispose() os.remove tempFile +[] +let ``test TextIOWrapper can be enumerated`` () = + let tempFile = os.path.join (os.path.expanduser "~", ".fable_test_iter.txt") + let writer = builtins.``open`` (tempFile, OpenTextMode.Write) + writer.write "a\nb\nc\n" |> ignore + writer.Dispose() + + let lines = ResizeArray() + let reader = builtins.``open`` (tempFile, OpenTextMode.Read) + + for line in reader do + lines.Add(line.Trim()) + + reader.Dispose() + os.remove tempFile + + lines |> List.ofSeq |> equal [ "a"; "b"; "c" ] + +[] +let ``test readline without argument works`` () = + let tempFile = os.path.join (os.path.expanduser "~", ".fable_test_readline.txt") + let writer = builtins.``open`` (tempFile, OpenTextMode.Write) + writer.write "first\nsecond\n" |> ignore + writer.Dispose() + + let reader = builtins.``open`` (tempFile, OpenTextMode.Read) + let line = reader.readline () + reader.Dispose() + os.remove tempFile + + line.Trim() |> equal "first" + [] let ``test max with two arguments works`` () = builtins.max (3, 5) |> equal 5