@@ -76,7 +76,7 @@ let testHeaderSplittingFunctions =
7676 let resultHeaders = AnnotationTable.splitBySamples headers
7777
7878 Expect.hasLength resultHeaders 1 " Shouldn't have split headers, as only one sample column was set"
79- Expect.sequenceEqual headers ( resultHeaders |> Seq.head) " Shouldn't have split headers, as only one sample column was set "
79+ Expect.sequenceEqual ( resultHeaders |> Seq.head) [ " Paramer [MyDude] " ; " Characteristic [MyGuy] " ; " Sample Name " ] " Should have moved sample to the end "
8080 )
8181 testCase " SplitBySamplesOnlySourceAndSample" ( fun () ->
8282
@@ -85,7 +85,7 @@ let testHeaderSplittingFunctions =
8585 let resultHeaders = AnnotationTable.splitBySamples headers
8686
8787 Expect.hasLength resultHeaders 1 " Shouldn't have split headers, as only one source column and sample column was set"
88- Expect.sequenceEqual headers ( resultHeaders |> Seq.head) " Shouldn't have split headers, as only one source column and sample column was set "
88+ Expect.sequenceEqual ( resultHeaders |> Seq.head) [ " Source Name " ; " Paramer [MyDude] " ; " Characteristic [MyGuy] " ; " Sample Name " ] " Should have put source at front and sample at end "
8989 )
9090 testCase " SplitBySamplesManySamples" ( fun () ->
9191
@@ -352,6 +352,90 @@ let testNodeGetterFunctions =
352352 )
353353 ]
354354
355+ [<Tests>]
356+ let testProcessGetter =
357+
358+ let sourceDirectory = __ SOURCE_ DIRECTORY__ + @" /TestFiles/"
359+
360+ let assayFilePath = System.IO.Path.Combine( sourceDirectory, " AssayTableTestFile.xlsx" )
361+
362+ let doc = Spreadsheet.fromFile assayFilePath false
363+ let sst = Spreadsheet.tryGetSharedStringTable doc
364+ let wsp = Spreadsheet.tryGetWorksheetPartBySheetIndex 0 u doc |> Option.get
365+ let table = Table.tryGetByNameBy ( fun s -> s.Contains " annotationTable" ) wsp |> Option.get
366+
367+ let m = Table.toSparseValueMatrix sst ( Worksheet.getSheetData wsp.Worksheet) table
368+
369+ let characteristicHeaders = [ " 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)" ]
370+ let expectedCharacteristic = MaterialAttribute.fromString " leaf size" " 0002637" " TO"
371+ let expectedCharacteristicUnit = OntologyAnnotation.fromString " square centimeter" " http://purl.obolibrary.org/obo/UO_0000081" " UO" |> Some
372+ let expectedCharacteristicValue = MaterialAttributeValue.create None ( Some expectedCharacteristic) ( Value.fromOptions ( Some " 10" ) None None) expectedCharacteristicUnit
373+
374+ let factorHeaders = [ " 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)" ]
375+ let expectedFactor = Factor.fromString " time" " time" " 0000165" " PATO"
376+ let expectedFactorUnit = OntologyAnnotation.fromString " hour" " http://purl.obolibrary.org/obo/UO_0000032" " UO" |> Some
377+ let expectedFactorValue = FactorValue.create None ( Some expectedFactor) ( Value.fromOptions ( Some " 5" ) None None) expectedFactorUnit
378+
379+ let parameterHeaders = [ " 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)" ]
380+ let expectedParameter = ProtocolParameter.fromString " temperature unit" " 0000005" " UO"
381+ let expectedParameterUnit = OntologyAnnotation.fromString " degree Celsius" " http://purl.obolibrary.org/obo/UO_0000027" " UO" |> Some
382+ let expectedParameterValue = ProcessParameterValue.create ( Some expectedParameter) ( Value.fromOptions ( Some " 27" ) None None) expectedParameterUnit
383+
384+ let sourceHeader = [ " Source Name" ]
385+ let expectedSourceName = " Source1"
386+
387+ let sampleHeader = [ " Sample Name" ]
388+ let expectedSampleName = " Sample1"
389+
390+ testList " ProcessGetterTests" [
391+ testCase " ProcessGetterSourceParamsSample" ( fun () ->
392+
393+ let headers = sourceHeader @ characteristicHeaders @ factorHeaders @ parameterHeaders @ sampleHeader
394+
395+ let expectedSource = Source.create None ( Some expectedSourceName) ( Some [ expectedCharacteristicValue])
396+ let expectedInput = ProcessInput.Source expectedSource
397+ let expectedOutput = ProcessOutput.Sample ( Sample.create None ( Some expectedSampleName) ( Some [ expectedCharacteristicValue]) ( Some [ expectedFactorValue]) ( Some [ expectedSource]) )
398+
399+ let expectedProtocol = Protocol.create None None None None None None ( Some [ expectedParameter]) None None
400+
401+ let expectedProcess = Process.create None None ( Some expectedProtocol) ( Some [ expectedParameterValue]) None None None None ( Some [ expectedInput]) ( Some [ expectedOutput]) None
402+
403+ let characteristics , factors , protocol , processGetter = AnnotationTable.getProcessGetter Protocol.empty ( headers |> AnnotationNode.splitIntoNodes)
404+
405+ Expect.sequenceEqual characteristics [ expectedCharacteristic] " Characteristics were parsed incorrectly"
406+ Expect.sequenceEqual factors [ expectedFactor] " Factors were parsed incorrectly"
407+ Expect.equal protocol expectedProtocol " Protocol was parsed incorrectly"
408+
409+ let processV = processGetter m 0
410+
411+ Expect.equal processV expectedProcess " Process was retrieved incorrectly"
412+
413+ )
414+ testCase " ProcessGetterSampleParams" ( fun () ->
415+
416+ let headers =
417+ sampleHeader @ characteristicHeaders @ factorHeaders @ parameterHeaders
418+ |> AnnotationTable.splitBySamples
419+ |> Seq.head
420+
421+ let expectedOutput = ProcessOutput.Sample ( Sample.create None ( Some expectedSampleName) ( Some [ expectedCharacteristicValue]) ( Some [ expectedFactorValue]) None )
422+
423+ let expectedProtocol = Protocol.create None None None None None None ( Some [ expectedParameter]) None None
424+
425+ let expectedProcess = Process.create None None ( Some expectedProtocol) ( Some [ expectedParameterValue]) None None None None None ( Some [ expectedOutput]) None
426+
427+ let characteristics , factors , protocol , processGetter = AnnotationTable.getProcessGetter Protocol.empty ( headers |> AnnotationNode.splitIntoNodes)
428+
429+ Expect.sequenceEqual characteristics [ expectedCharacteristic] " Characteristics were parsed incorrectly"
430+ Expect.sequenceEqual factors [ expectedFactor] " Factors were parsed incorrectly"
431+ Expect.equal protocol expectedProtocol " Protocol was parsed incorrectly"
432+
433+ let processV = processGetter m 0
434+
435+ Expect.equal processV expectedProcess " Process was retrieved incorrectly"
436+
437+ )
438+ ]
355439
356440[<Tests>]
357441let testProcessComparisonFunctions =
0 commit comments