Skip to content

Commit 239457a

Browse files
committed
add datamap spreadsheet parser tests
1 parent a55279a commit 239457a

7 files changed

Lines changed: 370 additions & 3 deletions

File tree

src/Core/Table/ArcTableAux.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,15 @@ module SanityChecks =
113113
while isValid && en.MoveNext() do
114114
let (ci,_),cell = en.Current.Key,en.Current.Value
115115
let header = headers.[ci]
116-
let headerIsFreetext = not header.IsTermColumn
117116
let headerIsData = header.IsDataColumn
117+
let headerIsFreetext = (not header.IsTermColumn) && (not header.IsDataColumn)
118118
let cellIsNotFreetext = not cell.isFreeText
119119
let cellIsNotData = not cell.isData
120120
if headerIsData && (cellIsNotData && cellIsNotFreetext) then
121121
(if raiseException then failwith else printfn "%s") $"Invalid combination of header `{header}` and cell `{cell}`. Data header should contain either Data or Freetext cells."
122122
isValid <- false
123123
if headerIsFreetext && cellIsNotFreetext then
124-
(if raiseException then failwith else printfn "%s") $"Invalid combination of header `{header}` and cell `{cell}`."
124+
(if raiseException then failwith else printfn "%s") $"Invalid combination of header `{header}` and cell `{cell}`. Freetext header should not contain non-freetext cells."
125125
isValid <- false
126126
isValid
127127

src/Core/Table/DataMap.fs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ type DataMap(headers: ResizeArray<CompositeHeader>, values: System.Collections.G
7272

7373
static member init() = DataMap(ResizeArray(),Dictionary())
7474

75-
member this.AddColumns(columns : CompositeColumn [], ?skipFillMissing : bool) =
75+
member this.AddColumns(columns : CompositeColumn [], ?skipFillMissing : bool) =
76+
columns |> Array.iter (fun c -> c.Validate(true) |> ignore)
7677
table.AddColumns(columns, ?skipFillMissing = skipFillMissing)
7778
DataMapAux.validate table.Headers table.Values true |> ignore
7879

@@ -110,6 +111,12 @@ type DataMap(headers: ResizeArray<CompositeHeader>, values: System.Collections.G
110111
member this.AddDescriptionColumn(cells : CompositeCell []) =
111112
table.AddColumn(DataMapAux.descriptionHeader, cells)
112113

114+
115+
member this.GetRow(row: int, ?SkipValidation) = table.GetRow(row,?SkipValidation = SkipValidation)
116+
117+
static member getRow(row: int, ?SkipValidation) =
118+
fun (dm : DataMap) -> dm.GetRow(row,?SkipValidation = SkipValidation)
119+
113120
member this.Copy() =
114121
DataMap(
115122
ResizeArray(this.Headers),

tests/Spreadsheet/ARCtrl.Spreadsheet.Tests.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<Compile Include="CompositeCellTests.fs" />
1414
<Compile Include="CompositeColumnTests.fs" />
1515
<Compile Include="ArcTableTests.fs" />
16+
<Compile Include="DataMapTests.fs" />
1617
<Compile Include="Identifier.Tests.fs" />
1718
<Compile Include="StudyFileTests.fs" />
1819
<Compile Include="AssayFileTests.fs" />

tests/Spreadsheet/DataMapTests.fs

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
module DataMapTests
2+
3+
4+
open ARCtrl
5+
open ARCtrl.Spreadsheet
6+
open FsSpreadsheet
7+
8+
open TestingUtils
9+
open TestObjects.Spreadsheet.DataMap
10+
11+
let private simpleTable =
12+
testList "simpleTable" [
13+
let wsName = "isa_datamap"
14+
let ws =
15+
initWorksheet wsName
16+
[
17+
Data.appendDataColumn 1
18+
Explication.appendMeanColumn 1
19+
Unit.appendPPMColumn 1
20+
ObjectType.appendFloatColumn 1
21+
Description.appendDescriptionColumn 1
22+
GeneratedBy.appendGeneratedByColumn 1
23+
24+
]
25+
testCase "Read" (fun () ->
26+
27+
let table = DataMapTable.tryFromFsWorksheet ws
28+
29+
Expect.isSome table "Table was not created"
30+
let table = table.Value
31+
32+
Expect.equal table.Table.ColumnCount 6 "Wrong number of columns"
33+
Expect.equal table.Table.RowCount 1 "Wrong number of rows"
34+
35+
let expectedHeaders =
36+
[
37+
DataMapAux.dataHeader
38+
DataMapAux.explicationHeader
39+
DataMapAux.unitHeader
40+
DataMapAux.objectTypeHeader
41+
DataMapAux.descriptionHeader
42+
DataMapAux.generatedByHeader
43+
]
44+
Expect.sequenceEqual table.Headers expectedHeaders "Headers did not match"
45+
46+
let expectedCells =
47+
[
48+
Data.dataValue
49+
Explication.meanValue
50+
Unit.ppmValue
51+
ObjectType.floatValue
52+
Description.descriptionValue
53+
GeneratedBy.generatedByValue
54+
]
55+
Expect.sequenceEqual (table.GetRow(0)) expectedCells "Cells did not match"
56+
)
57+
testCase "Write" (fun () ->
58+
59+
let table = DataMapTable.tryFromFsWorksheet ws
60+
Expect.isSome table "Table was not created"
61+
let out = DataMapTable.toFsWorksheet table.Value
62+
Expect.workSheetEqual out ws "Worksheet was not correctly written"
63+
64+
)
65+
]
66+
67+
let private valuelessTable =
68+
testList "valuelessTable" [
69+
let wsName = "isa_datamap"
70+
let ws =
71+
initWorksheet wsName
72+
[
73+
Data.appendDataColumn 0
74+
Explication.appendMeanColumn 0
75+
Unit.appendPPMColumn 0
76+
ObjectType.appendFloatColumn 0
77+
Description.appendDescriptionColumn 0
78+
GeneratedBy.appendGeneratedByColumn 0
79+
]
80+
testCase "Read" (fun () ->
81+
82+
let table = DataMapTable.tryFromFsWorksheet ws
83+
84+
Expect.isSome table "Table was not created"
85+
let table = table.Value
86+
87+
Expect.equal table.Table.ColumnCount 6 "Wrong number of columns"
88+
Expect.equal table.Table.RowCount 0 "Wrong number of rows"
89+
90+
let expectedHeaders =
91+
[
92+
DataMapAux.dataHeader
93+
DataMapAux.explicationHeader
94+
DataMapAux.unitHeader
95+
DataMapAux.objectTypeHeader
96+
DataMapAux.descriptionHeader
97+
DataMapAux.generatedByHeader
98+
]
99+
Expect.sequenceEqual table.Headers expectedHeaders "Headers did not match"
100+
)
101+
// TODO: What should we do with units of empty columns?
102+
//testCase "Write" (fun () ->
103+
104+
// let table = ArcTable.tryFromFsWorksheet ws
105+
// Expect.isSome table "Table was not created"
106+
// let out = ArcTable.toFsWorksheet table.Value
107+
// Expect.workSheetEqual out ws "Worksheet was not correctly written"
108+
109+
//)
110+
]
111+
112+
let private emptyTable =
113+
testList "emptyTable" [
114+
let t = DataMap.init()
115+
testCase "Write" (fun () ->
116+
let sheet = DataMapTable.toFsWorksheet t
117+
Expect.equal "isa_datamap" sheet.Name "Worksheet name did not match"
118+
Expect.equal 0 sheet.Rows.Count "Row count should be 0"
119+
)
120+
testCase "Read" (fun () ->
121+
let sheet = DataMapTable.toFsWorksheet t
122+
Expect.isNone (DataMapTable.tryFromFsWorksheet sheet) "Table was not created"
123+
)
124+
]
125+
126+
let private simpleFile =
127+
testList "simpleFile" [
128+
let wb = new FsWorkbook()
129+
let wsName = "isa_datamap"
130+
let ws =
131+
initWorksheet wsName
132+
[
133+
Data.appendDataColumn 1
134+
Explication.appendMeanColumn 1
135+
Unit.appendPPMColumn 1
136+
ObjectType.appendFloatColumn 1
137+
Description.appendDescriptionColumn 1
138+
GeneratedBy.appendGeneratedByColumn 1
139+
140+
]
141+
wb.AddWorksheet ws
142+
testCase "Read" (fun () ->
143+
144+
let table = DataMap.fromFsWorkbook wb
145+
146+
Expect.equal table.Table.ColumnCount 6 "Wrong number of columns"
147+
Expect.equal table.Table.RowCount 1 "Wrong number of rows"
148+
149+
let expectedHeaders =
150+
[
151+
DataMapAux.dataHeader
152+
DataMapAux.explicationHeader
153+
DataMapAux.unitHeader
154+
DataMapAux.objectTypeHeader
155+
DataMapAux.descriptionHeader
156+
DataMapAux.generatedByHeader
157+
]
158+
Expect.sequenceEqual table.Headers expectedHeaders "Headers did not match"
159+
160+
let expectedCells =
161+
[
162+
Data.dataValue
163+
Explication.meanValue
164+
Unit.ppmValue
165+
ObjectType.floatValue
166+
Description.descriptionValue
167+
GeneratedBy.generatedByValue
168+
]
169+
Expect.sequenceEqual (table.GetRow(0)) expectedCells "Cells did not match"
170+
)
171+
testCase "Write" (fun () ->
172+
173+
let table = DataMap.fromFsWorkbook wb
174+
175+
let out = DataMap.toFsWorkbook table
176+
177+
Expect.equal (out.GetWorksheets().Count) 1 "Wrong number of worksheets"
178+
179+
let wsOut = out.GetWorksheets().[0]
180+
181+
Expect.workSheetEqual wsOut ws "Worksheet was not correctly written"
182+
183+
)
184+
]
185+
186+
let main =
187+
testList "DataMapTableTests" [
188+
simpleTable
189+
valuelessTable
190+
emptyTable
191+
simpleFile
192+
]

tests/Spreadsheet/Main.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ let all = testSequenced <| testList "ISA.Spreadsheet" [
99
CompositeColumnTests.main
1010
CompositeHeaderTests.main
1111
ArcTableTests.main
12+
DataMapTests.main
1213
ArcAssayTests.main
1314
ArcStudyTests.main
1415
SparseTableTests.main

0 commit comments

Comments
 (0)