Skip to content

Commit 8ef35c2

Browse files
committed
add comment column json and spreadsheet parser
1 parent ead29a5 commit 8ef35c2

5 files changed

Lines changed: 108 additions & 3 deletions

File tree

src/Json/Table/CompositeHeader.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ module CompositeHeader =
3838
let headerType = get.Required.Field HeaderType Decode.string
3939
let oa() = get.Required.Field HeaderValues (Decode.index 0 OntologyAnnotation.decoder)
4040
let io() = get.Required.Field HeaderValues (Decode.index 0 IOType.decoder)
41-
let c() = get.Required.Field HeaderValues Decode.string
41+
let c() = get.Required.Field HeaderValues (Decode.index 0 Decode.string)
4242
match headerType with
4343
| "Characteristic" -> oa() |> CompositeHeader.Characteristic
4444
| "Parameter" -> oa() |> CompositeHeader.Parameter

src/Spreadsheet/AnnotationTable/ArcTable.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ let classifyHeaderOrder (header : CompositeHeader) =
5050
| CompositeHeader.Characteristic _
5151
| CompositeHeader.Factor _
5252
| CompositeHeader.Parameter _
53+
| CompositeHeader.Comment _
5354
| CompositeHeader.FreeText _ -> ColumnOrder.ParamsClass
5455

5556
| CompositeHeader.Output _ -> ColumnOrder.OutputClass

tests/Json/ArcTable.Tests.fs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ let private tests = testList "extended" [
9393

9494
let private tests_dataColumns =
9595
testList "dataColumns" [
96-
testCase "dataColumns" <| fun _ ->
96+
testCase "basic WriteRead" <| fun _ ->
9797
let testTable = ArcTable.init("Test")
9898
testTable.AddColumn (CompositeHeader.Input IOType.Data, [|CompositeCell.Data (Data(name="MyInputDataFile.csv"))|])
9999
testTable.AddColumn (CompositeHeader.Output IOType.Data, [|CompositeCell.Data (Data(name="MyData.csv#row=1",format="text/csv",selectorFormat = "MySelector"))|])
@@ -102,7 +102,27 @@ let private tests_dataColumns =
102102
let decoded = ArcTable.fromJsonString encoded
103103
Expect.arcTableEqual decoded testTable "decompressed table should be equal to original table"
104104
]
105-
105+
106+
let private tests_commentColumns =
107+
testList "commentColumns" [
108+
testCase "basic WriteRead" <| fun _ ->
109+
let testTable = ArcTable.init("Test")
110+
testTable.AddColumn (CompositeHeader.Input IOType.Source, [|CompositeCell.FreeText "Source"|])
111+
testTable.AddColumn (CompositeHeader.Comment "CommentKey", [|CompositeCell.FreeText "CommentValue"|])
112+
testTable.AddColumn (CompositeHeader.Output IOType.Sample, [|CompositeCell.FreeText "Sample"|])
113+
let encoded = testTable.ToJsonString()
114+
let decoded = ArcTable.fromJsonString encoded
115+
Expect.arcTableEqual decoded testTable "decoded table should be equal to original table"
116+
testCase "compressed WriteRead" <| fun _ ->
117+
let testTable = ArcTable.init("Test")
118+
testTable.AddColumn (CompositeHeader.Input IOType.Source, [|CompositeCell.FreeText "Source"|])
119+
testTable.AddColumn (CompositeHeader.Comment "CommentKey", [|CompositeCell.FreeText "CommentValue"|])
120+
testTable.AddColumn (CompositeHeader.Output IOType.Sample, [|CompositeCell.FreeText "Sample"|])
121+
let encoded = testTable.ToCompressedJsonString()
122+
let decoded = ArcTable.fromCompressedJsonString encoded
123+
Expect.arcTableEqual decoded testTable "decoded table should be equal to original table"
124+
]
125+
106126

107127
let main = testList "ArcTable" [
108128
tests
@@ -111,4 +131,5 @@ let main = testList "ArcTable" [
111131
tests_compressedEmpty
112132
tests_compressedFilled
113133
tests_dataColumns
134+
tests_commentColumns
114135
]

tests/Spreadsheet/ArcTableTests.fs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,54 @@ let private fullDataTable =
329329
)
330330
]
331331

332+
let private commentTable =
333+
testList "commentTable" [
334+
let wsName = "MyWorksheet"
335+
let ws =
336+
initWorksheet wsName
337+
[
338+
Factor.appendTimeColumn 1
339+
Comment.appendSimpleCommentColumn 1
340+
Comment.appendNiceCommentColumn 1
341+
342+
]
343+
testCase "Read" (fun () ->
344+
345+
let table = ArcTable.tryFromFsWorksheet ws
346+
347+
Expect.isSome table "Table was not created"
348+
let table = table.Value
349+
350+
Expect.equal table.Name wsName "Name did not match"
351+
Expect.equal table.ColumnCount 3 "Wrong number of columns"
352+
Expect.equal table.RowCount 1 "Wrong number of rows"
353+
354+
let expectedHeaders =
355+
[
356+
Factor.timeHeader
357+
Comment.simpleCommentHeader
358+
Comment.niceCommentHeader
359+
]
360+
Expect.sequenceEqual table.Headers expectedHeaders "Headers did not match"
361+
362+
let expectedCells =
363+
[
364+
Factor.timeValue
365+
Comment.simpleCommentValue
366+
Comment.niceCommentValue
367+
]
368+
Expect.sequenceEqual (table.GetRow(0)) expectedCells "Cells did not match"
369+
)
370+
testCase "Write" (fun () ->
371+
372+
let table = ArcTable.tryFromFsWorksheet ws
373+
Expect.isSome table "Table was not created"
374+
let out = ArcTable.toFsWorksheet table.Value
375+
Expect.workSheetEqual out ws "Worksheet was not correctly written"
376+
377+
)
378+
]
379+
332380
let private deprecatedColumnTable =
333381
testList "deprecatedIOColumnTable" [
334382
let wsName = "MyWorksheet"
@@ -434,6 +482,7 @@ let main =
434482
ioTable
435483
valuelessTable
436484
fullDataTable
485+
commentTable
437486
deprecatedColumnTable
438487
writeOrder
439488
emptyTable

tests/TestingUtils/TestObjects.Spreadsheet/Spreadsheet.ArcTable.fs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,40 @@ module Output =
287287
for i = 2 to l + 1 do
288288
t.Cell(FsAddress(i, colCount + 1),c).SetValueAs sampleValueV1
289289

290+
module Comment =
291+
292+
let simpleCommentHeader =
293+
CompositeHeader.Comment "CommentKey"
294+
295+
let simpleCommentValue =
296+
CompositeCell.FreeText "CommentValue"
297+
298+
let simpleDataHeaderV1 = "Comment [CommentKey]"
299+
300+
let simpleDataValueV1 = "CommentValue"
301+
302+
let appendSimpleCommentColumn l (c : FsCellsCollection) (t : FsTable) =
303+
let colCount = if t.IsEmpty(c) then 0 else t.ColumnCount()
304+
t.Cell(FsAddress(1, colCount + 1),c).SetValueAs simpleDataHeaderV1
305+
for i = 2 to l + 1 do
306+
t.Cell(FsAddress(i, colCount + 1),c).SetValueAs simpleDataValueV1
307+
308+
let niceCommentHeader =
309+
CompositeHeader.Comment "NiceComment"
310+
311+
let niceCommentValue =
312+
CompositeCell.FreeText "NiceCommentValue"
313+
314+
let niceCommentHeaderV1 = "Comment [NiceComment]"
315+
316+
let niceCommentValueV1 = "NiceCommentValue"
317+
318+
let appendNiceCommentColumn l (c : FsCellsCollection) (t : FsTable) =
319+
let colCount = if t.IsEmpty(c) then 0 else t.ColumnCount()
320+
t.Cell(FsAddress(1, colCount + 1),c).SetValueAs niceCommentHeaderV1
321+
for i = 2 to l + 1 do
322+
t.Cell(FsAddress(i, colCount + 1),c).SetValueAs niceCommentValueV1
323+
290324
module Protocol =
291325
module REF =
292326

0 commit comments

Comments
 (0)