Skip to content

Commit eccb4f8

Browse files
committed
fix ro_crate writig duplicating data file paths #513
1 parent 44911c5 commit eccb4f8

4 files changed

Lines changed: 84 additions & 4 deletions

File tree

src/Core/Data.fs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,19 @@ type Data(?id,?name : string,?dataType,?format,?selectorFormat,?comments) =
9090
|> Option.defaultValue ""
9191

9292
member this.GetAbsolutePathBy(f : string -> string, ?checkExistenceFromRoot : string -> bool) =
93+
let trimStart (subString : string) (s : string) =
94+
if s.StartsWith(subString) then
95+
s.Substring(subString.Length)
96+
else
97+
s
9398
let checkExistenceFromRoot = Option.defaultValue (fun _ -> false) checkExistenceFromRoot
9499
let isPartOfSubFolder (p : string) =
95100
p.StartsWith("assays/") || p.StartsWith("studies/") || p.StartsWith("workflows/") || p.StartsWith("runs/")
96101
let isOnlineRessource (p : string) =
97102
p.StartsWith("http:") || p.StartsWith("https:")
98103
match this.FilePath with
99-
| Some p ->
104+
| Some p ->
105+
let p = p.TrimStart('/') |> trimStart "./"
100106
if checkExistenceFromRoot p || isPartOfSubFolder p || isOnlineRessource p then
101107
p
102108
else

tests/Core/Data.Tests.fs

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module Data.Tests
1+
module Data.Tests
22

33
open ARCtrl
44

@@ -21,8 +21,68 @@ let private tests_GetHashCode = testList "GetHashCode" [
2121
Expect.notEqual hash1 hash2 "HashCode should not be equal"
2222
]
2323

24+
let private tests_AbsoluteFilePath = testList "AbsoluteFilePath" [
25+
testCase "Study_Relative" <| fun _ ->
26+
let fileName = "MyFile"
27+
let studyName = "MyStudy"
28+
let d = Data(name = fileName)
29+
let absolute = d.GetAbsolutePathForStudy(studyName)
30+
let expected = $"studies/{studyName}/resources/{fileName}"
31+
Expect.equal absolute expected "Absolute path should match expected path"
32+
testCase "Study_Absolute" <| fun _ ->
33+
let fileName = "studies/MyStudy/resources/MyFile"
34+
let studyName = "MyStudy"
35+
let d = Data(name = fileName)
36+
let absolute = d.GetAbsolutePathForStudy(studyName)
37+
let expected = $"studies/{studyName}/resources/MyFile"
38+
Expect.equal absolute expected "Absolute path should match expected path"
39+
testCase "Study_Absolute_/" <| fun _ ->
40+
let fileName = "/studies/MyStudy/resources/MyFile"
41+
let studyName = "MyStudy"
42+
let d = Data(name = fileName)
43+
let absolute = d.GetAbsolutePathForStudy(studyName)
44+
let expected = $"studies/{studyName}/resources/MyFile"
45+
Expect.equal absolute expected "Absolute path should match expected path"
46+
testCase "Study_Absolute_./" <| fun _ ->
47+
let fileName = "./studies/MyStudy/resources/MyFile"
48+
let studyName = "MyStudy"
49+
let d = Data(name = fileName)
50+
let absolute = d.GetAbsolutePathForStudy(studyName)
51+
let expected = $"studies/{studyName}/resources/MyFile"
52+
Expect.equal absolute expected "Absolute path should match expected path"
53+
testCase "Assay_Relative" <| fun _ ->
54+
let fileName = "MyFile"
55+
let assayName = "MyAssay"
56+
let d = Data(name = fileName)
57+
let absolute = d.GetAbsolutePathForAssay(assayName)
58+
let expected = $"assays/{assayName}/dataset/{fileName}"
59+
Expect.equal absolute expected "Absolute path should match expected path"
60+
testCase "Assay_Absolute" <| fun _ ->
61+
let fileName = "assays/MyAssay/dataset/MyFile"
62+
let assayName = "MyAssay"
63+
let d = Data(name = fileName)
64+
let absolute = d.GetAbsolutePathForAssay(assayName)
65+
let expected = $"assays/{assayName}/dataset/MyFile"
66+
Expect.equal absolute expected "Absolute path should match expected path"
67+
testCase "Assay_Absolute_/" <| fun _ ->
68+
let fileName = "/assays/MyAssay/dataset/MyFile"
69+
let assayName = "MyAssay"
70+
let d = Data(name = fileName)
71+
let absolute = d.GetAbsolutePathForAssay(assayName)
72+
let expected = $"assays/{assayName}/dataset/MyFile"
73+
Expect.equal absolute expected "Absolute path should match expected path"
74+
testCase "Assay_Absolute_./" <| fun _ ->
75+
let fileName = "./assays/MyAssay/dataset/MyFile"
76+
let assayName = "MyAssay"
77+
let d = Data(name = fileName)
78+
let absolute = d.GetAbsolutePathForAssay(assayName)
79+
let expected = $"assays/{assayName}/dataset/MyFile"
80+
Expect.equal absolute expected "Absolute path should match expected path"
81+
]
82+
2483

2584
let main =
2685
testList "Data" [
27-
tests_GetHashCode
86+
tests_GetHashCode
87+
tests_AbsoluteFilePath
2888
]
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1-
module CompositeCellTests
1+
module CompositeCellTests
22

33
open TestingUtils
4+
open ARCtrl
5+
open ARCtrl.Spreadsheet
46

57
let main =
68
testList "CompositeCell" [
9+
testList "Data" [
10+
testCase "ReadFullPathWith./" <| fun () ->
11+
let s = "./assays/MassHunter_targets/dataset/QuantResults/22-0005_exp001.batch_a.bin.batch.bin"
12+
let c = CompositeCell.dataFromStringCells None None [|s|]
13+
Expect.isTrue c.isData "Cell should be a data cell"
14+
let d = c.AsData
15+
let name = Expect.wantSome d.Name "Data cell should have a name"
16+
Expect.equal name s "FullPath should match the input string"
17+
Expect.isNone d.Format "Data cell should not have a format"
18+
Expect.isNone d.Selector "Data cell should not have a selector"
19+
]
720
]

tests/Spreadsheet/Main.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ let all = testSequenced <| testList "Spreadsheet" [
77
RegexTests.main
88
ArcInvestigationTests.main
99
CompositeColumnTests.main
10+
CompositeCellTests.main
1011
CompositeHeaderTests.main
1112
ArcTableTests.main
1213
DataMapTests.main

0 commit comments

Comments
 (0)