Skip to content

Commit

Permalink
update tests to match assay.xlsx reader changes
Browse files Browse the repository at this point in the history
  • Loading branch information
HLWeil committed Sep 1, 2021
1 parent d65a86b commit 700bf6d
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 37 deletions.
18 changes: 10 additions & 8 deletions src/ISADotNet.XLSX/AssayFile/AnnotationColumn.fs
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,22 @@ module AnnotationColumn =
let tryParseTermSourceReferenceHeader (termHeader:ColumnHeader) (header:string) =
match ColumnHeader.fromStringHeader header with
| h when h.Kind = "Term Source REF" && h.Number = termHeader.Number ->
match h.Term,termHeader.Term with
| None, None -> Some h
| Some t1, Some t2 when t1.Name = t2.Name -> Some h
| _ -> None
//match h.Term,termHeader.Term with
//| None, None -> Some h
//| Some t1, Some t2 when t1.Name = t2.Name -> Some h
//| _ -> None
Some h
| _ -> None

/// Parses to ColumnHeader, if the given header describes a Term Accession Number
let tryParseTermAccessionNumberHeader (termHeader:ColumnHeader) (header:string) =
match ColumnHeader.fromStringHeader header with
| h when h.Kind = "Term Accession Number" && h.Number = termHeader.Number ->
match h.Term,termHeader.Term with
| None, None -> Some h
| Some t1, Some t2 when t1.Name = t2.Name -> Some h
| _ -> None
//match h.Term,termHeader.Term with
//| None, None -> Some h
//| Some t1, Some t2 when t1.Name = t2.Name -> Some h
//| _ -> None
Some h
| _ -> None

/// Parses to ColumnHeader, if the given header describes a Parameter Value
Expand Down
25 changes: 14 additions & 11 deletions src/ISADotNet.XLSX/AssayFile/AnnotationNode.fs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ module AnnotationNode =
)

/// If the headers of a node depict a value header (parameter,factor,characteristic), returns the category and a function for parsing the values of the matrix to the values
let tryGetValueGetter (valueHeader : ColumnHeader) (headers:string seq) =
let tryGetValueGetter hasUnit (valueHeader : ColumnHeader) (headers:string seq) =
let category1, termAccessionGetter =
match Seq.tryPick (tryParseTermAccessionNumberHeader valueHeader) headers with
| Some h ->
Expand Down Expand Up @@ -100,13 +100,16 @@ module AnnotationNode =
// Set termAcession and termSource of the value to None if they are the same as the header.
// This is done as Swate fills empty with the header but these values should not be transferred to the isa model
let termAccession,termSource =
match termAccessionGetter matrix i,termSourceGetter matrix i,category with
| Some a, Some s,Some c ->
match c.TermAccessionNumber,c.TermSourceREF with
| Some ca, Some cs when a.Contains ca && s.Contains cs ->
None,None
| _ -> Some a, Some s
| (a,s,c) -> a,s
if hasUnit then
None, None
else
match termAccessionGetter matrix i,termSourceGetter matrix i,category with
| Some a, Some s,Some c ->
match c.TermAccessionNumber,c.TermSourceREF with
| Some ca, Some cs when a.Contains ca && s.Contains cs ->
None,None
| _ -> Some a, Some s
| (a,s,c) -> a,s
Value.fromOptions
value
termAccession
Expand All @@ -119,7 +122,7 @@ module AnnotationNode =
|> Option.map (fun h ->
let unitGetter = tryGetUnitGetterFunction headers

let category,valueGetter = tryGetValueGetter h headers
let category,valueGetter = tryGetValueGetter unitGetter.IsSome h headers

let parameter = category |> Option.map (Some >> ProtocolParameter.create None)

Expand All @@ -137,7 +140,7 @@ module AnnotationNode =
|> Option.map (fun h ->
let unitGetter = tryGetUnitGetterFunction headers

let category,valueGetter = tryGetValueGetter h headers
let category,valueGetter = tryGetValueGetter unitGetter.IsSome h headers

let factor =
category
Expand All @@ -158,7 +161,7 @@ module AnnotationNode =
|> Option.map (fun h ->
let unitGetter = tryGetUnitGetterFunction headers

let category,valueGetter = tryGetValueGetter h headers
let category,valueGetter = tryGetValueGetter unitGetter.IsSome h headers

let characteristic = category |> Option.map (Some >> MaterialAttribute.create None)

Expand Down
58 changes: 40 additions & 18 deletions tests/ISADotNet.Tests/ISADotNet.XLSX/AssayFileTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ let testColumnHeaderFunctions =

Expect.equal header testHeader "Number was not parsed correctly"
)
testCase "NameWithNoOntology" (fun () ->
testCase "Name" (fun () ->

let headerString = "NamedHeader [Name]"

Expand All @@ -45,15 +45,29 @@ let testColumnHeaderFunctions =

Expect.equal header testHeader "Dit not parse Name correctly"
)
testCase "NumberedWithOntology" (fun () ->
testCase "NameWithNumber" (fun () ->

let headerString = "NamedHeader [Term] (#3; #tSource:Accession)"
let headerString = "NamedHeader [Name#5]"

let header = AnnotationColumn.ColumnHeader.fromStringHeader headerString

let testComment = Comment.fromString "Number" "3"
let testOntology = OntologyAnnotation.create None (Some (AnnotationValue.Text "Term")) (Some (URI.fromString "Accession")) (Some "Source") (Some [testComment])
let testHeader = AnnotationColumn.ColumnHeader.create headerString "NamedHeader" (Some testOntology) (Some 3)
let testComment = Comment.fromString "Number" "5"
let testOntology = OntologyAnnotation.create None (Some (AnnotationValue.Text "Name")) None None (Some [testComment])


let testHeader = AnnotationColumn.ColumnHeader.create headerString "NamedHeader" (Some testOntology) (Some 5)

Expect.equal header testHeader "Dit not parse Name correctly"
)
testCase "AccessionWithNumber" (fun () ->

let headerString = "Term Accession Number (MS:1000031#2)"

let header = AnnotationColumn.ColumnHeader.fromStringHeader headerString

let testComment = Comment.fromString "Number" "2"
let testOntology = OntologyAnnotation.create None None (Some (URI.fromString "1000031")) (Some "MS") (Some [testComment])
let testHeader = AnnotationColumn.ColumnHeader.create headerString "Term Accession Number" (Some testOntology) (Some 2)

Expect.equal header testHeader "Dit not parse Name correctly"
)
Expand Down Expand Up @@ -166,7 +180,7 @@ let testNodeGetterFunctions =
if b then Some v
else None

let v = tryGetValue ("Unit [square centimeter] (#h; #tUO:0000081; #u)",0) m
let v = tryGetValue ("Unit",0) m

Expect.isSome v "Value could not be retrieved from matrix"

Expand All @@ -178,7 +192,7 @@ let testNodeGetterFunctions =

testCase "GetUnitGetter" (fun () ->

let headers = ["Unit [square centimeter] (#h; #tUO:0000081; #u)";"Term Source REF [square centimeter] (#h; #tUO:0000081; #u)";"Term Accession Number [square centimeter] (#h; #tUO:0000081; #u)"]
let headers = ["Unit";"Term Source REF (TO:0002637)";"Term Accession Number (TO:0002637)"]

let unitGetterOption = AnnotationNode.tryGetUnitGetterFunction headers

Expand All @@ -194,15 +208,15 @@ let testNodeGetterFunctions =
)
testCase "GetUnitGetterWrongHeaders" (fun () ->

let headers = ["Parameter [square centimeter] (#h; #tUO:0000081; #u)";"Term Source REF [square centimeter] (#h; #tUO:0000081; #u)";"Term Accession Number [square centimeter] (#h; #tUO:0000081; #u)"]
let headers = ["Parameter [square centimeter]";"Term Source REF (UO:0000081)";"Term Accession Number (UO:0000081)"]

let unitGetterOption = AnnotationNode.tryGetUnitGetterFunction headers

Expect.isNone unitGetterOption "Unit Getter was returned even though headers should not have matched"
)
testCase "GetCharacteristicsGetter" (fun () ->

let headers = ["Characteristics [leaf size]";"Term Source REF [leaf size] (#h; #tTO:0002637)";"Term Accession Number [leaf size] (#h; #tTO:0002637)";"Unit [square centimeter] (#h; #tUO:0000081; #u)";"Term Source REF [square centimeter] (#h; #tUO:0000081; #u)";"Term Accession Number [square centimeter] (#h; #tUO:0000081; #u)"]
let headers = ["Characteristics [leaf size]";"Unit";"Term Source REF (TO:0002637)";"Term Accession Number (TO:0002637)"]

let characteristicGetterOption = AnnotationNode.tryGetCharacteristicGetter headers

Expand Down Expand Up @@ -236,7 +250,7 @@ let testNodeGetterFunctions =
)
testCase "GetFactorGetter" (fun () ->

let headers = ["Factor [time]";"Term Source REF [time] (#h; #tPATO:0000165)";"Term Accession Number [time] (#h; #tPATO:0000165)";"Unit [hour] (#h; #tUO:0000032; #u)";"Term Source REF [hour] (#h; #tUO:0000032; #u)";"Term Accession Number [hour] (#h; #tUO:0000032; #u)"]
let headers = ["Factor [time#2]";"Unit (#2)";"Term Source REF (PATO:0000165#2)";"Term Accession Number (PATO:0000165#2)"]

let factorGetterOption = AnnotationNode.tryGetFactorGetter headers

Expand All @@ -246,7 +260,11 @@ let testNodeGetterFunctions =

Expect.isSome factor "FactorGetter was returned but no factor was returned"

let expectedFactor = Factor.fromString "time" "time" "0000165" "PATO"
let testComment = Comment.fromString "Number" "2"

let testOntology = OntologyAnnotation.create None (Some (AnnotationValue.Text "time")) (Some "0000165") (Some "PATO") (Some [testComment])

let expectedFactor = Factor.create None (Some "time") (Some testOntology) None

Expect.equal factor.Value expectedFactor "Retrieved Factor is wrong"

Expand All @@ -270,7 +288,7 @@ let testNodeGetterFunctions =
)
testCase "GetParameterGetter" (fun () ->

let headers = ["Parameter [temperature unit]";"Term Source REF [temperature unit] (#h; #tUO:0000005)";"Term Accession Number [temperature unit] (#h; #tUO:0000005)";"Unit [degree Celsius] (#h; #tUO:0000027; #u)";"Term Source REF [degree Celsius] (#h; #tUO:0000027; #u)";"Term Accession Number [degree Celsius] (#h; #tUO:0000027; #u)"]
let headers = ["Parameter [temperature unit#3]";"Unit (#3)";"Term Source REF (UO:0000005#3)";"Term Accession Number (UO:0000005#3)"]

let parameterGetterOption = AnnotationNode.tryGetParameterGetter headers

Expand All @@ -280,7 +298,11 @@ let testNodeGetterFunctions =

Expect.isSome parameter "ParameterGetter was returned but no parameter was returned"

let expectedParameter = ProtocolParameter.fromString "temperature unit" "0000005" "UO"
let testComment = Comment.fromString "Number" "3"

let testOntology = OntologyAnnotation.create None (Some (AnnotationValue.Text "temperature unit")) (Some "0000005") (Some "UO") (Some [testComment])

let expectedParameter = ProtocolParameter.create None (Some testOntology)

Expect.equal parameter.Value expectedParameter "Retrieved Parameter is wrong"

Expand All @@ -296,7 +318,7 @@ let testNodeGetterFunctions =
)
testCase "GetParameterGetterNoUnit" (fun () ->

let headers = ["Parameter [measurement device]";"Term Source REF [measurement device] (#h; #tOBI:0000832)";"Term Accession Number [measurement device] (#h; #tOBI:0000832)"]
let headers = ["Parameter [measurement device]";"Term Source REF (OBI:0000832)";"Term Accession Number (OBI:0000832)"]

let parameterGetterOption = AnnotationNode.tryGetParameterGetter headers

Expand All @@ -306,7 +328,7 @@ let testNodeGetterFunctions =

Expect.isSome parameter "ParameterGetter was returned but no parameter was returned"

Expect.isSome parameter.Value.ParameterName.Value.TermSourceREF "dawdawdawd"
Expect.isSome parameter.Value.ParameterName.Value.TermSourceREF "Parameter has no TermSourceRef"

let expectedParameter = ProtocolParameter.fromString "measurement device" "0000832" "OBI"

Expand All @@ -322,7 +344,7 @@ let testNodeGetterFunctions =
)
testCase "GetParameterGetterUserSpecific" (fun () ->

let headers = ["Parameter [heating block]";"Term Source REF [heating block] (#h; #tOBI:0400108)";"Term Accession Number [heating block] (#h; #tOBI:0400108)"]
let headers = ["Parameter [heating block]";"Term Source REF (OBI:0400108)";"Term Accession Number (OBI:0400108)"]

let parameterGetterOption = AnnotationNode.tryGetParameterGetter headers

Expand All @@ -346,7 +368,7 @@ let testNodeGetterFunctions =
)
testCase "GetParameterGetterWrongHeaders" (fun () ->

let headers = ["Factor [square centimeter] (#h; #tUO:0000081; #u)";"Term Source REF [square centimeter] (#h; #tUO:0000081; #u)";"Term Accession Number [square centimeter] (#h; #tUO:0000081; #u)"]
let headers = ["Factor [square centimeter]";"Term Source REF (UO:0000081)";"Term Accession Number (UO:0000081)"]

let unitGetterOption = AnnotationNode.tryGetParameterGetter headers

Expand Down
Binary file not shown.

0 comments on commit 700bf6d

Please sign in to comment.