Skip to content

Commit ef68f07

Browse files
authored
Added new loop test (#2188)
1 parent f166143 commit ef68f07

File tree

6 files changed

+286
-0
lines changed

6 files changed

+286
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env cwl-runner
2+
cwlVersion: v1.2
3+
class: Workflow
4+
5+
$namespaces:
6+
cwltool: "http://commonwl.org/cwltool#"
7+
8+
requirements:
9+
InlineJavascriptRequirement: {}
10+
StepInputExpressionRequirement: {}
11+
12+
inputs:
13+
limit:
14+
type: int
15+
default: 5
16+
17+
outputs:
18+
- id: result
19+
type: string[]
20+
outputSource: step1/result
21+
22+
steps:
23+
step1:
24+
run:
25+
class: CommandLineTool
26+
inputs:
27+
lfile:
28+
type: File
29+
inputBinding:
30+
position: 1
31+
stdout: "out.txt"
32+
outputs:
33+
result:
34+
type: string
35+
outputBinding:
36+
glob: "out.txt"
37+
loadContents: true
38+
outputEval: $(self[0].contents)-$(self[0].checksum)
39+
baseCommand: ["cat"]
40+
in:
41+
counter:
42+
default: 0
43+
limit: limit
44+
lfile:
45+
valueFrom: "${return {'class': 'File', 'basename': 'init-value-from.' + inputs.counter, 'contents': 'first,' + inputs.counter }}"
46+
out:
47+
- id: result
48+
requirements:
49+
cwltool:Loop:
50+
loopWhen: $(inputs.counter < inputs.limit)
51+
loop:
52+
counter:
53+
valueFrom: $(inputs.counter + 1)
54+
lfile:
55+
valueFrom: "${return {'class': 'File', 'basename': 'iter-value-from.' + (inputs.counter + 1), 'contents': 'first,' + (inputs.counter + 1)}}"
56+
outputMethod: all
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env cwl-runner
2+
cwlVersion: v1.2
3+
class: Workflow
4+
5+
$namespaces:
6+
cwltool: "http://commonwl.org/cwltool#"
7+
8+
requirements:
9+
InlineJavascriptRequirement: {}
10+
StepInputExpressionRequirement: {}
11+
12+
inputs:
13+
limit:
14+
type: int
15+
default: 5
16+
17+
outputs:
18+
- id: result
19+
type: string[]
20+
outputSource: step1/result
21+
22+
steps:
23+
step1:
24+
run:
25+
class: CommandLineTool
26+
inputs:
27+
lfile:
28+
type: File
29+
inputBinding:
30+
position: 1
31+
stdout: "out.txt"
32+
outputs:
33+
result:
34+
type: string
35+
outputBinding:
36+
glob: "out.txt"
37+
loadContents: true
38+
outputEval: $(self[0].contents)-$(self[0].checksum)
39+
baseCommand: ["cat"]
40+
in:
41+
counter:
42+
default: 0
43+
limit: limit
44+
lfile:
45+
valueFrom: "${return {'class': 'File', 'basename': 'init-value-from.' + inputs.counter, 'contents': 'first,' + inputs.counter }}"
46+
out:
47+
- id: result
48+
requirements:
49+
cwltool:Loop:
50+
loopWhen: $(inputs.counter < inputs.limit)
51+
loop:
52+
counter:
53+
valueFrom: $(inputs.counter + 1)
54+
outputMethod: all

tests/loop/value-from-loop-2.cwl

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/usr/bin/env cwl-runner
2+
cwlVersion: v1.3.0-dev1
3+
class: Workflow
4+
requirements:
5+
InlineJavascriptRequirement: {}
6+
StepInputExpressionRequirement: {}
7+
inputs:
8+
limit:
9+
type: int
10+
default: 5
11+
12+
outputs:
13+
- id: result
14+
type: string[]
15+
outputSource: step1/result
16+
17+
steps:
18+
step1:
19+
run:
20+
class: CommandLineTool
21+
inputs:
22+
lfile:
23+
type: File
24+
inputBinding:
25+
position: 1
26+
stdout: "out.txt"
27+
outputs:
28+
result:
29+
type: string
30+
outputBinding:
31+
glob: "out.txt"
32+
loadContents: true
33+
outputEval: $(self[0].contents)-$(self[0].checksum)
34+
baseCommand: ["cat"]
35+
in:
36+
counter:
37+
default: 0
38+
limit: limit
39+
lfile:
40+
valueFrom: "${return {'class': 'File', 'basename': 'init-value-from.' + inputs.counter, 'contents': 'first,' + inputs.counter }}"
41+
out:
42+
- id: result
43+
when: $(inputs.counter < inputs.limit)
44+
loop:
45+
counter:
46+
valueFrom: $(inputs.counter + 1)
47+
lfile:
48+
valueFrom: "${return {'class': 'File', 'basename': 'iter-value-from.' + (inputs.counter + 1), 'contents': 'first,' + (inputs.counter + 1)}}"
49+
outputMethod: all_iterations

tests/loop/value-from-loop-3.cwl

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/usr/bin/env cwl-runner
2+
cwlVersion: v1.3.0-dev1
3+
class: Workflow
4+
requirements:
5+
InlineJavascriptRequirement: {}
6+
StepInputExpressionRequirement: {}
7+
inputs:
8+
limit:
9+
type: int
10+
default: 5
11+
12+
outputs:
13+
- id: result
14+
type: string[]
15+
outputSource: step1/result
16+
17+
steps:
18+
step1:
19+
run:
20+
class: CommandLineTool
21+
inputs:
22+
lfile:
23+
type: File
24+
inputBinding:
25+
position: 1
26+
stdout: "out.txt"
27+
outputs:
28+
result:
29+
type: string
30+
outputBinding:
31+
glob: "out.txt"
32+
loadContents: true
33+
outputEval: $(self[0].contents)-$(self[0].checksum)
34+
baseCommand: ["cat"]
35+
in:
36+
counter:
37+
default: 0
38+
limit: limit
39+
lfile:
40+
valueFrom: "${return {'class': 'File', 'basename': 'init-value-from.' + inputs.counter, 'contents': 'first,' + inputs.counter }}"
41+
out:
42+
- id: result
43+
when: $(inputs.counter < inputs.limit)
44+
loop:
45+
counter:
46+
valueFrom: $(inputs.counter + 1)
47+
outputMethod: all_iterations

tests/test_loop.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,46 @@ def test_loop_value_from_fail_no_requirement() -> None:
191191
assert main(params) == 1
192192

193193

194+
def test_loop_value_from_literal_file() -> None:
195+
"""Test a loop case with a literal file generated by a valueFrom directive inside the loop."""
196+
stream = StringIO()
197+
params = [
198+
"--enable-dev",
199+
get_data("tests/loop/value-from-loop-2.cwl"),
200+
]
201+
main(params, stdout=stream)
202+
expected = {
203+
"result": [
204+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
205+
"first,1-sha1$c2ee1cb0abf988529ae1d67c5a6798a9db9e133a",
206+
"first,2-sha1$7663c0076cdf1dbe14373237e8c2eea8735b04f2",
207+
"first,3-sha1$83b77de68c3c6cce92a381adc9159d6e59332545",
208+
"first,4-sha1$eb74efd51e4399144f465534f4077f515d996d57",
209+
]
210+
}
211+
assert json.loads(stream.getvalue()) == expected
212+
213+
214+
def test_loop_and_value_from_literal_file() -> None:
215+
"""Test a loop case with a literal file generated by a valueFrom directive outside the loop."""
216+
stream = StringIO()
217+
params = [
218+
"--enable-dev",
219+
get_data("tests/loop/value-from-loop-3.cwl"),
220+
]
221+
main(params, stdout=stream)
222+
expected = {
223+
"result": [
224+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
225+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
226+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
227+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
228+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
229+
]
230+
}
231+
assert json.loads(stream.getvalue()) == expected
232+
233+
194234
def test_loop_inside_scatter() -> None:
195235
"""Test a loop subworkflow inside a scatter step."""
196236
stream = StringIO()

tests/test_loop_ext.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,46 @@ def test_loop_value_from() -> None:
220220
assert json.loads(stream.getvalue()) == expected
221221

222222

223+
def test_loop_value_from_literal_file() -> None:
224+
"""Test a loop case with a literal file generated by a valueFrom directive inside the loop."""
225+
stream = StringIO()
226+
params = [
227+
"--enable-ext",
228+
get_data("tests/loop-ext/value-from-loop-2.cwl"),
229+
]
230+
main(params, stdout=stream)
231+
expected = {
232+
"result": [
233+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
234+
"first,1-sha1$c2ee1cb0abf988529ae1d67c5a6798a9db9e133a",
235+
"first,2-sha1$7663c0076cdf1dbe14373237e8c2eea8735b04f2",
236+
"first,3-sha1$83b77de68c3c6cce92a381adc9159d6e59332545",
237+
"first,4-sha1$eb74efd51e4399144f465534f4077f515d996d57",
238+
]
239+
}
240+
assert json.loads(stream.getvalue()) == expected
241+
242+
243+
def test_loop_and_value_from_literal_file() -> None:
244+
"""Test a loop case with a literal file generated by a valueFrom directive outside the loop."""
245+
stream = StringIO()
246+
params = [
247+
"--enable-ext",
248+
get_data("tests/loop-ext/value-from-loop-3.cwl"),
249+
]
250+
main(params, stdout=stream)
251+
expected = {
252+
"result": [
253+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
254+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
255+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
256+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
257+
"first,0-sha1$e445e7ebf0b1e19e5eb7f3e8e4d86f5424c4b103",
258+
]
259+
}
260+
assert json.loads(stream.getvalue()) == expected
261+
262+
223263
def test_loop_value_from_fail_no_requirement() -> None:
224264
"""Test workflow loop fails for valueFrom without StepInputExpressionRequirement."""
225265
params = [

0 commit comments

Comments
 (0)