1+ module Tests.CWLObjectMetadata
2+
3+ open ARCtrl.CWL
4+ open ARCtrl.CWL .CWLTypes
5+ open ARCtrl.CWL .Requirements
6+ open ARCtrl.CWL .Inputs
7+ open ARCtrl.CWL .Outputs
8+ open DynamicObj
9+ open YAMLicious
10+ open TestingUtils
11+
12+ let decodeCWLToolDescription =
13+ TestObjects.CWL.CommandLineToolMetadata.cwl
14+ |> Decode.decodeCommandLineTool
15+
16+ let testCWLToolDescriptionMetadata =
17+ testList " CWLToolDescription" [
18+ testCase " Class" <| fun _ ->
19+ let expected = Class.CommandLineTool
20+ let actual = decodeCWLToolDescription.Class
21+ Expect.isTrue
22+ ( expected = actual)
23+ $" Expected: {expected}\n Actual: {actual}"
24+ testCase " CWLVersion" <| fun _ ->
25+ let expected = " v1.2"
26+ let actual = decodeCWLToolDescription.CWLVersion
27+ Expect.isTrue
28+ ( expected = actual)
29+ $" Expected: {expected}\n Actual: {actual}"
30+ testCase " baseCommand" <| fun _ ->
31+ let expected = Some [| " dotnet" ; " fsi" ; " script.fsx" |]
32+ let actual = decodeCWLToolDescription.BaseCommand
33+ Expect.isTrue
34+ ( expected = actual)
35+ $" Expected: {expected}\n Actual: {actual}"
36+ testList " Hints" [
37+ let hintsItem = decodeCWLToolDescription.Hints
38+ testCase " DockerRequirement" <| fun _ ->
39+ let expected = DockerRequirement { DockerPull = Some " mcr.microsoft.com/dotnet/sdk:6.0" ; DockerFile = None; DockerImageId = None}
40+ let actual = hintsItem.Value.[ 0 ]
41+ Expect.isTrue
42+ ( expected = actual)
43+ $" Expected: {expected}\n Actual: {actual}"
44+ ]
45+ testList " Requirements" [
46+ let requirementsItem = decodeCWLToolDescription.Requirements
47+ testCase " InitialWorkDirRequirement" <| fun _ ->
48+ let expected = InitialWorkDirRequirement [| Dirent { Entry = " $include: script.fsx" ; Entryname = Some " script.fsx" ; Writable = None }|]
49+ let actual = requirementsItem.Value.[ 0 ]
50+ Expect.isTrue
51+ ( expected = actual)
52+ $" Expected: {expected}\n Actual: {actual}"
53+ testCase " EnvVarRequirement" <| fun _ ->
54+ let expected = EnvVarRequirement [|{ EnvName = " DOTNET_NOLOGO" ; EnvValue = " true" }|]
55+ let actual = requirementsItem.Value.[ 1 ]
56+ Expect.isTrue
57+ ( expected = actual)
58+ $" Expected: {expected}\n Actual: {actual}"
59+ testCase " NetworkAccessRequirement" <| fun _ ->
60+ let expected = NetworkAccessRequirement
61+ let actual = requirementsItem.Value.[ 2 ]
62+ Expect.isTrue
63+ ( expected = actual)
64+ $" Expected: {expected}\n Actual: {actual}"
65+ ]
66+ testList " Inputs" [
67+ let inputsItem = decodeCWLToolDescription.Inputs.Value
68+ testCase " Length" <| fun _ ->
69+ let expected = 2
70+ let actual = inputsItem.Length
71+ Expect.isTrue
72+ ( expected = actual)
73+ $" Expected: {expected}\n Actual: {actual}"
74+ testList " File" [
75+ let fileItem = inputsItem.[ 0 ]
76+ testCase " Name" <| fun _ ->
77+ let expected = " firstArg"
78+ let actual = fileItem.Name
79+ Expect.isTrue
80+ ( " firstArg" = fileItem.Name)
81+ " Name of input is not 'firstArg'"
82+ testCase " Type" <| fun _ ->
83+ let expected = File ( FileInstance())
84+ let actual = fileItem.Type.Value
85+ Expect.isTrue
86+ ( expected = actual)
87+ $" Expected: {expected}\n Actual: {actual}"
88+ testCase " InputBinding" <| fun _ ->
89+ let expected = Some { Position = Some 1 ; Prefix = None; ItemSeparator = None; Separate = None}
90+ let actual = fileItem.InputBinding
91+ Expect.isTrue
92+ ( expected = actual)
93+ $" Expected: {expected}\n Actual: {actual}"
94+ ]
95+ testList " String" [
96+ let stringItem = inputsItem.[ 1 ]
97+ testCase " Name" <| fun _ ->
98+ let expected = " secondArg"
99+ let actual = stringItem.Name
100+ Expect.isTrue
101+ ( expected = actual)
102+ $" Expected: {expected}\n Actual: {actual}"
103+ testCase " Type" <| fun _ ->
104+ let expected = String
105+ let actual = stringItem.Type.Value
106+ Expect.isTrue
107+ ( expected = actual)
108+ $" Expected: {expected}\n Actual: {actual}"
109+ testCase " InputBinding" <| fun _ ->
110+ let expected = Some { Position = Some 2 ; Prefix = None; ItemSeparator = None; Separate = None}
111+ let actual = stringItem.InputBinding
112+ Expect.isTrue
113+ ( expected = actual)
114+ $" Expected: {expected}\n Actual: {actual}"
115+ ]
116+ ]
117+ testList " Outputs" [
118+ let outputsItem = decodeCWLToolDescription.Outputs
119+ testCase " Length" <| fun _ ->
120+ let expected = 2
121+ let actual = outputsItem.Length
122+ Expect.isTrue
123+ ( expected = actual)
124+ $" Expected: {expected}\n Actual: {actual}"
125+ testList " Directory" [
126+ let directoryItem = outputsItem.[ 0 ]
127+ testCase " Name" <| fun _ ->
128+ let expected = " output"
129+ let actual = directoryItem.Name
130+ Expect.isTrue
131+ ( expected = actual)
132+ $" Expected: {expected}\n Actual: {actual}"
133+ testCase " Type" <| fun _ ->
134+ let expected = Directory ( DirectoryInstance())
135+ let actual = directoryItem.Type.Value
136+ Expect.isTrue
137+ ( expected = actual)
138+ $" Expected: {expected}\n Actual: {actual}"
139+ testCase " OutputBinding" <| fun _ ->
140+ let expected = Some { Glob = Some " $(runtime.outdir)/.nuget" }
141+ let actual = directoryItem.OutputBinding
142+ Expect.isTrue
143+ ( expected = actual)
144+ $" Expected: {expected}\n Actual: {actual}"
145+ ]
146+ testList " File" [
147+ let fileItem = outputsItem.[ 1 ]
148+ testCase " Name" <| fun _ ->
149+ let expected = " output2"
150+ let actual = fileItem.Name
151+ Expect.isTrue
152+ ( expected = actual)
153+ $" Expected: {expected}\n Actual: {actual}"
154+ testCase " Type" <| fun _ ->
155+ let expected = File ( FileInstance())
156+ let actual = fileItem.Type.Value
157+ Expect.isTrue
158+ ( expected = actual)
159+ $" Expected: {expected}\n Actual: {actual}"
160+ testCase " OutputBinding" <| fun _ ->
161+ let expected = Some { Glob = Some " $(runtime.outdir)/*.csv" }
162+ let actual = fileItem.OutputBinding
163+ Expect.isTrue
164+ ( expected = actual)
165+ $" Expected: {expected}\n Actual: {actual}"
166+ ]
167+ ]
168+ testCase " Metadata" <| fun _ ->
169+ let expected = TestObjects.CWL.CommandLineToolMetadata.expectedMetadataString
170+ let actual = decodeCWLToolDescription.Metadata.Value |> DynObj.format
171+ Expect.isTrue
172+ ( expected = actual)
173+ $" Expected: {expected}\n Actual: {actual}"
174+ ]
0 commit comments