-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTestCsvParser.fs
64 lines (54 loc) · 1.64 KB
/
TestCsvParser.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
namespace ShapeSifter.Test
open System
open System.IO
open System.Reflection
open NUnit.Framework
open FsUnitTyped
open CsvParser
[<NoComparison>]
type MyRecord =
{
Id : int
Name : string
DateOfBirth : DateTime
NewUser : bool
Balance : float
}
[<TestFixture>]
module TestCsvParser =
let getTestData () : string seq =
let assembly = Assembly.GetExecutingAssembly ()
seq {
use stream =
assembly.GetManifestResourceNames ()
|> Seq.filter (fun name -> name.EndsWith ("TestData.csv", StringComparison.Ordinal))
|> Seq.exactlyOne
|> assembly.GetManifestResourceStream
use reader = new StreamReader (stream)
let mutable isDone = false
while not isDone do
let line = reader.ReadLine ()
if isNull line then isDone <- true else yield line
}
[<Test>]
let ``Example parse`` () =
let actual =
getTestData () |> CsvParser.tryParse<MyRecord> |> Option.get |> Seq.toList
let expected =
[
{
Id = 1
Name = "Derry Williamson"
DateOfBirth = DateTime (1974, 03, 12)
NewUser = true
Balance = 12.34
}
{
Id = 2
Name = "Madelyn Milne"
DateOfBirth = DateTime (1988, 11, 23)
NewUser = false
Balance = 56.78
}
]
actual |> shouldEqual expected