about summary refs log tree commit diff
path: root/e2e-tests
diff options
context:
space:
mode:
Diffstat (limited to 'e2e-tests')
-rw-r--r--e2e-tests/jobs/boolean-false-input-value.yaml2
-rw-r--r--e2e-tests/jobs/capture-output-file-with-parameter-reference.yaml4
-rw-r--r--e2e-tests/jobs/capture-output-file.yaml3
-rw-r--r--e2e-tests/jobs/checksum.yaml3
-rw-r--r--e2e-tests/jobs/decompress-compile-run.yaml3
-rw-r--r--e2e-tests/jobs/empty.yaml1
-rw-r--r--e2e-tests/jobs/hello-world.yaml1
-rw-r--r--e2e-tests/jobs/hello.c7
-rw-r--r--e2e-tests/jobs/hello.c.gzbin0 -> 101 bytes
-rw-r--r--e2e-tests/jobs/hello.tarbin0 -> 10240 bytes
-rw-r--r--e2e-tests/jobs/inline-javascript-requirement.yaml1
-rw-r--r--e2e-tests/jobs/int-for-float-input.yaml2
-rw-r--r--e2e-tests/jobs/prefix-arguments.yaml2
-rw-r--r--e2e-tests/jobs/scatter.yaml5
-rw-r--r--e2e-tests/jobs/spell-check-dictionary8
-rw-r--r--e2e-tests/jobs/spell-check-text.txt1
-rw-r--r--e2e-tests/jobs/spell-check.yaml6
-rw-r--r--e2e-tests/jobs/staging-input-files.yaml3
-rw-r--r--e2e-tests/manifest.scm2
-rw-r--r--e2e-tests/tests.yaml243
-rw-r--r--e2e-tests/tools/boolean-false-default-value.scm3
-rw-r--r--e2e-tests/tools/boolean-false-input-value.scm3
-rw-r--r--e2e-tests/tools/capture-output-file-with-parameter-reference.scm9
-rw-r--r--e2e-tests/tools/capture-output-file.scm9
-rw-r--r--e2e-tests/tools/capture-stdout.scm8
-rw-r--r--e2e-tests/tools/checksum.scm22
-rw-r--r--e2e-tests/tools/command-line-tool-step-with-default-input.scm8
-rw-r--r--e2e-tests/tools/command-line-tool-step-with-optional-and-required-inputs.scm8
-rw-r--r--e2e-tests/tools/command-line-tool-with-default-input.scm4
-rw-r--r--e2e-tests/tools/command-line-tool-without-arguments.cwl12
-rw-r--r--e2e-tests/tools/decompress-compile-run.scm22
-rw-r--r--e2e-tests/tools/hello-world.scm3
-rw-r--r--e2e-tests/tools/inline-javascript-requirement.scm4
-rw-r--r--e2e-tests/tools/int-for-float-input.scm3
-rw-r--r--e2e-tests/tools/pass-stdin.scm8
-rw-r--r--e2e-tests/tools/prefix-arguments.scm3
-rw-r--r--e2e-tests/tools/scatter.scm8
-rw-r--r--e2e-tests/tools/spell-check.scm33
-rw-r--r--e2e-tests/tools/staging-input-files.scm4
-rw-r--r--e2e-tests/tools/workflow-step-with-default-input.scm12
-rw-r--r--e2e-tests/tools/workflow-step-with-optional-and-required-inputs.scm14
-rw-r--r--e2e-tests/tools/workflow-with-default-input.scm8
42 files changed, 505 insertions, 0 deletions
diff --git a/e2e-tests/jobs/boolean-false-input-value.yaml b/e2e-tests/jobs/boolean-false-input-value.yaml
new file mode 100644
index 0000000..0729f40
--- /dev/null
+++ b/e2e-tests/jobs/boolean-false-input-value.yaml
@@ -0,0 +1,2 @@
+message: Hello world!
+no-newline?: false
diff --git a/e2e-tests/jobs/capture-output-file-with-parameter-reference.yaml b/e2e-tests/jobs/capture-output-file-with-parameter-reference.yaml
new file mode 100644
index 0000000..892dbe7
--- /dev/null
+++ b/e2e-tests/jobs/capture-output-file-with-parameter-reference.yaml
@@ -0,0 +1,4 @@
+archive:
+  class: File
+  location: hello.tar
+extractfile: hello.txt
diff --git a/e2e-tests/jobs/capture-output-file.yaml b/e2e-tests/jobs/capture-output-file.yaml
new file mode 100644
index 0000000..faf24d2
--- /dev/null
+++ b/e2e-tests/jobs/capture-output-file.yaml
@@ -0,0 +1,3 @@
+archive:
+  class: File
+  location: hello.tar
diff --git a/e2e-tests/jobs/checksum.yaml b/e2e-tests/jobs/checksum.yaml
new file mode 100644
index 0000000..dce679c
--- /dev/null
+++ b/e2e-tests/jobs/checksum.yaml
@@ -0,0 +1,3 @@
+file:
+  class: File
+  location: hello.tar
diff --git a/e2e-tests/jobs/decompress-compile-run.yaml b/e2e-tests/jobs/decompress-compile-run.yaml
new file mode 100644
index 0000000..e2a0b74
--- /dev/null
+++ b/e2e-tests/jobs/decompress-compile-run.yaml
@@ -0,0 +1,3 @@
+compressed_source:
+  class: File
+  location: hello.c.gz
diff --git a/e2e-tests/jobs/empty.yaml b/e2e-tests/jobs/empty.yaml
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/e2e-tests/jobs/empty.yaml
@@ -0,0 +1 @@
+{}
diff --git a/e2e-tests/jobs/hello-world.yaml b/e2e-tests/jobs/hello-world.yaml
new file mode 100644
index 0000000..5329e73
--- /dev/null
+++ b/e2e-tests/jobs/hello-world.yaml
@@ -0,0 +1 @@
+message: Hello world!
diff --git a/e2e-tests/jobs/hello.c b/e2e-tests/jobs/hello.c
new file mode 100644
index 0000000..07f4fc2
--- /dev/null
+++ b/e2e-tests/jobs/hello.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+int main ()
+{
+  printf("Hello World!\n");
+  return 0;
+}
diff --git a/e2e-tests/jobs/hello.c.gz b/e2e-tests/jobs/hello.c.gz
new file mode 100644
index 0000000..81c4d84
--- /dev/null
+++ b/e2e-tests/jobs/hello.c.gz
Binary files differdiff --git a/e2e-tests/jobs/hello.tar b/e2e-tests/jobs/hello.tar
new file mode 100644
index 0000000..edcc4a8
--- /dev/null
+++ b/e2e-tests/jobs/hello.tar
Binary files differdiff --git a/e2e-tests/jobs/inline-javascript-requirement.yaml b/e2e-tests/jobs/inline-javascript-requirement.yaml
new file mode 100644
index 0000000..73b1beb
--- /dev/null
+++ b/e2e-tests/jobs/inline-javascript-requirement.yaml
@@ -0,0 +1 @@
+number: 13
diff --git a/e2e-tests/jobs/int-for-float-input.yaml b/e2e-tests/jobs/int-for-float-input.yaml
new file mode 100644
index 0000000..0d12299
--- /dev/null
+++ b/e2e-tests/jobs/int-for-float-input.yaml
@@ -0,0 +1,2 @@
+message1: 1
+message2: 1.2
diff --git a/e2e-tests/jobs/prefix-arguments.yaml b/e2e-tests/jobs/prefix-arguments.yaml
new file mode 100644
index 0000000..6e888d9
--- /dev/null
+++ b/e2e-tests/jobs/prefix-arguments.yaml
@@ -0,0 +1,2 @@
+separator: ","
+last: 10
diff --git a/e2e-tests/jobs/scatter.yaml b/e2e-tests/jobs/scatter.yaml
new file mode 100644
index 0000000..702d6f3
--- /dev/null
+++ b/e2e-tests/jobs/scatter.yaml
@@ -0,0 +1,5 @@
+message: foo
+other_messages:
+  - bar
+  - foobar
+  - barbar
diff --git a/e2e-tests/jobs/spell-check-dictionary b/e2e-tests/jobs/spell-check-dictionary
new file mode 100644
index 0000000..71df044
--- /dev/null
+++ b/e2e-tests/jobs/spell-check-dictionary
@@ -0,0 +1,8 @@
+brown
+dog
+fox
+jumps
+lazy
+over
+quick
+the
\ No newline at end of file
diff --git a/e2e-tests/jobs/spell-check-text.txt b/e2e-tests/jobs/spell-check-text.txt
new file mode 100644
index 0000000..a116b9a
--- /dev/null
+++ b/e2e-tests/jobs/spell-check-text.txt
@@ -0,0 +1 @@
+The quick brown fox jumps over the laazy dog.
diff --git a/e2e-tests/jobs/spell-check.yaml b/e2e-tests/jobs/spell-check.yaml
new file mode 100644
index 0000000..b01a8e1
--- /dev/null
+++ b/e2e-tests/jobs/spell-check.yaml
@@ -0,0 +1,6 @@
+text-file:
+  class: File
+  location: spell-check-text.txt
+dictionary:
+  class: File
+  location: spell-check-dictionary
diff --git a/e2e-tests/jobs/staging-input-files.yaml b/e2e-tests/jobs/staging-input-files.yaml
new file mode 100644
index 0000000..94b5224
--- /dev/null
+++ b/e2e-tests/jobs/staging-input-files.yaml
@@ -0,0 +1,3 @@
+file:
+  class: File
+  location: hello.c
diff --git a/e2e-tests/manifest.scm b/e2e-tests/manifest.scm
new file mode 100644
index 0000000..dfa4780
--- /dev/null
+++ b/e2e-tests/manifest.scm
@@ -0,0 +1,2 @@
+(specifications->manifest
+ (list "coreutils" "gcc-toolchain" "gzip" "tar"))
diff --git a/e2e-tests/tests.yaml b/e2e-tests/tests.yaml
new file mode 100644
index 0000000..d14b93a
--- /dev/null
+++ b/e2e-tests/tests.yaml
@@ -0,0 +1,243 @@
+- id: hello-world
+  doc: Hello world!
+  tool: tools/hello-world.cwl
+  job: jobs/hello-world.yaml
+  output:
+    output_message:
+      class: File
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
+- id: doc-hello-world
+  doc: Hello world workflow from the documentation
+  tool: tools/doc-hello-world.cwl
+  job: jobs/doc-hello-world.yaml
+  output:
+    message:
+      class: File
+      size: 10
+      checksum: sha1$d4322d1d18549a84abb5e19558784d819785a884
+- id: capture-output-file
+  doc: Capture output file using a glob
+  tool: tools/capture-output-file.cwl
+  job: jobs/capture-output-file.yaml
+  output:
+    extracted_file:
+      class: File
+      basename: hello.txt
+      nameroot: hello
+      nameext: .txt
+      size: 13
+      checksum: sha1$a0b65939670bc2c010f4d5d6a0b3e4e4590fb92b
+- id: capture-output-file-with-parameter-reference
+  doc: Capture output file using a glob and a parameter reference
+  tool: tools/capture-output-file-with-parameter-reference.cwl
+  job: jobs/capture-output-file-with-parameter-reference.yaml
+  output:
+    extracted_file:
+      class: File
+      basename: hello.txt
+      nameroot: hello
+      nameext: .txt
+      size: 13
+      checksum: sha1$a0b65939670bc2c010f4d5d6a0b3e4e4590fb92b
+- id: capture-stdout
+  doc: Capture standard output as a file
+  tool: tools/capture-stdout.cwl
+  job: jobs/hello-world.yaml
+  output:
+    printed_message:
+      class: File
+      basename: printed-message-output.txt
+      nameroot: printed-message-output
+      nameext: .txt
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
+- id: checksum
+  doc: Compute several hashes
+  tool: tools/checksum.cwl
+  job: jobs/checksum.yaml
+  output:
+    md5:
+      class: File
+      basename: md5
+      nameroot: md5
+      nameext: ""
+      size: 44
+      checksum: sha1$9fa7df2256ce2e726bd9e89485d596b9985971a7
+    sha1:
+      class: File
+      basename: sha1
+      nameroot: sha1
+      nameext: ""
+      size: 52
+      checksum: sha1$5beabf5a3d41d2c4a494d4342419894d9d7800e0
+    sha256:
+      class: File
+      basename: sha256
+      nameroot: sha256
+      nameext: ""
+      size: 76
+      checksum: sha1$1d4d44c8563d8e5279dd8d0eb1e3e599c7c3ef3f
+- id: decompress-compile-run
+  doc: Decompress a compressed C source file, compile and run it
+  tool: tools/decompress-compile-run.cwl
+  job: jobs/decompress-compile-run.yaml
+  output:
+    stdout:
+      class: File
+      basename: run-output.txt
+      nameroot: run-output
+      nameext: .txt
+      size: 13
+      checksum: sha1$a0b65939670bc2c010f4d5d6a0b3e4e4590fb92b
+- id: inline-javascript-requirement
+  doc: Run javascript for InlineJavascriptRequirement
+  tool: tools/inline-javascript-requirement.cwl
+  job: jobs/inline-javascript-requirement.yaml
+  output:
+    sum:
+      class: File
+      size: 3
+      checksum: sha1$030514d80869744a4e2f60d2fd37d6081f5ed01a
+- id: pass-stdin
+  doc: Pass standard input into command
+  tool: tools/pass-stdin.cwl
+  job: jobs/checksum.yaml
+  output:
+    bytes:
+      class: File
+      size: 6
+      checksum: sha1$0929a71b2f03c579afed345f79635816595c2041
+- id: prefix-arguments
+  doc: Command with prefix arguments
+  tool: tools/prefix-arguments.cwl
+  job: jobs/prefix-arguments.yaml
+  output:
+    sequence:
+      class: File
+      size: 21
+      checksum: sha1$474f936f3e4a4db3f01ee46f9fa8fc928a07c2ab
+- id: scatter
+  doc: Workflow with a scattering step
+  tool: tools/scatter.cwl
+  job: jobs/scatter.yaml
+  output:
+    printed_output:
+      - class: File
+        size: 8
+        checksum: sha1$d53a205a336e07cf9eac45471b3870f9489288ec
+      - class: File
+        size: 11
+        checksum: sha1$f784299d4fcaf81aba0b0647264a959fdfe8180d
+      - class: File
+        size: 11
+        checksum: sha1$b7ee58e14913c07256e9255e69310ddcde4bdb51
+- id: spell-check
+  doc: Spell-check workflow using Unix utilities
+  tool: tools/spell-check.cwl
+  job: jobs/spell-check.yaml
+  output:
+    misspellings:
+      class: File
+      basename: misspelt-words
+      size: 6
+      checksum: sha1$e701a33e7681ea185a709168c44e13217497d220
+- id: staging-input-files
+  doc: Stage input files to working directory
+  tool: tools/staging-input-files.cwl
+  job: jobs/staging-input-files.yaml
+  output:
+    output_file:
+      class: File
+      size: 76
+      checksum: sha1$a43e1394643339f6a203147ccbf82cc3be1777e0
+- id: command-line-tool-with-default-input
+  doc: CommandLineTool with default input
+  tool: tools/command-line-tool-with-default-input.cwl
+  job: jobs/empty.yaml
+  output:
+    output_message:
+      class: File
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
+- id: command-line-tool-step-with-default-input
+  doc: CommandLineTool step with default input
+  tool: tools/command-line-tool-step-with-default-input.cwl
+  job: jobs/empty.yaml
+  output:
+    output_message:
+      class: File
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
+- id: command-line-tool-step-with-optional-and-required-inputs
+  doc: CommandLineTool step with optional and required inputs
+  tool: tools/command-line-tool-step-with-optional-and-required-inputs.cwl
+  job: jobs/hello-world.yaml
+  output:
+    output_message:
+      class: File
+      size: 26
+      checksum: sha1$2544f363c82bf304dc363829620ecf213e1a2c1e
+- id: workflow-with-default-input
+  doc: Workflow with default input
+  tool: tools/workflow-with-default-input.cwl
+  job: jobs/empty.yaml
+  output:
+    output_message:
+      class: File
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
+- id: workflow-step-with-default-input
+  doc: Workflow step with default input
+  tool: tools/workflow-step-with-default-input.cwl
+  job: jobs/empty.yaml
+  output:
+    output_message:
+      class: File
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
+- id: workflow-step-with-optional-and-required-inputs
+  doc: Workflow step with optional and required inputs
+  tool: tools/workflow-step-with-optional-and-required-inputs.cwl
+  job: jobs/hello-world.yaml
+  output:
+    output_message:
+      class: File
+      size: 26
+      checksum: sha1$2544f363c82bf304dc363829620ecf213e1a2c1e
+- id: boolean-false-default-value
+  doc: Workflow with a boolean false default value
+  tool: tools/boolean-false-default-value.cwl
+  job: jobs/hello-world.yaml
+  output:
+    output_message:
+      class: File
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
+- id: boolean-false-input-value
+  doc: Boolean false input value
+  tool: tools/boolean-false-input-value.cwl
+  job: jobs/boolean-false-input-value.yaml
+  output:
+    output_message:
+      class: File
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
+- id: int-for-float-input
+  doc: int supplied for float input must be coerced into a float
+  tool: tools/int-for-float-input.cwl
+  job: jobs/int-for-float-input.yaml
+  output:
+    output_message:
+      class: File
+      size: 6
+      checksum: sha1$d493abaf2d0ffe0bec8d302fdee38a43e80d2a91
+- id: command-line-tool-without-arguments
+  doc: CommandLineTool without the arguments field
+  tool: tools/command-line-tool-without-arguments.cwl
+  job: jobs/hello-world.yaml
+  output:
+    output_message:
+      class: File
+      size: 13
+      checksum: sha1$47a013e660d408619d894b20806b1d5086aab03b
diff --git a/e2e-tests/tools/boolean-false-default-value.scm b/e2e-tests/tools/boolean-false-default-value.scm
new file mode 100644
index 0000000..58b460a
--- /dev/null
+++ b/e2e-tests/tools/boolean-false-default-value.scm
@@ -0,0 +1,3 @@
+(command #:inputs (message #:type string) (no-newline? #:type boolean #:default #f)
+         #:run "echo" ("-n" no-newline?) message
+         #:outputs (output_message #:type stdout))
diff --git a/e2e-tests/tools/boolean-false-input-value.scm b/e2e-tests/tools/boolean-false-input-value.scm
new file mode 100644
index 0000000..08db60d
--- /dev/null
+++ b/e2e-tests/tools/boolean-false-input-value.scm
@@ -0,0 +1,3 @@
+(command #:inputs (message #:type string) (no-newline? #:type boolean)
+         #:run "echo" ("-n" no-newline?) message
+         #:outputs (output_message #:type stdout))
diff --git a/e2e-tests/tools/capture-output-file-with-parameter-reference.scm b/e2e-tests/tools/capture-output-file-with-parameter-reference.scm
new file mode 100644
index 0000000..1f0d619
--- /dev/null
+++ b/e2e-tests/tools/capture-output-file-with-parameter-reference.scm
@@ -0,0 +1,9 @@
+(define extract-specific-file
+  (command #:inputs (archive #:type File) (extractfile #:type string)
+           #:run "tar" "--no-same-owner" "--extract" "--file" archive extractfile
+           #:outputs (extracted_file
+                      #:type File
+                      #:binding ((glob . "$(inputs.extractfile)")))))
+
+(workflow ((archive #:type File) (extractfile #:type string))
+  (extract-specific-file #:archive archive #:extractfile extractfile))
diff --git a/e2e-tests/tools/capture-output-file.scm b/e2e-tests/tools/capture-output-file.scm
new file mode 100644
index 0000000..aa1dca0
--- /dev/null
+++ b/e2e-tests/tools/capture-output-file.scm
@@ -0,0 +1,9 @@
+(define extract
+  (command #:inputs (archive #:type File)
+           #:run "tar" "--no-same-owner" "--extract" "--file" archive
+           #:outputs (extracted_file
+                      #:type File
+                      #:binding ((glob . "hello.txt")))))
+
+(workflow ((archive #:type File))
+  (extract #:archive archive))
diff --git a/e2e-tests/tools/capture-stdout.scm b/e2e-tests/tools/capture-stdout.scm
new file mode 100644
index 0000000..0901f4d
--- /dev/null
+++ b/e2e-tests/tools/capture-stdout.scm
@@ -0,0 +1,8 @@
+(define print
+  (command #:inputs (message #:type string)
+           #:run "echo" message
+           #:outputs (printed_message #:type stdout)
+           #:stdout "printed-message-output.txt"))
+
+(workflow ((message #:type string))
+  (print #:message message))
diff --git a/e2e-tests/tools/checksum.scm b/e2e-tests/tools/checksum.scm
new file mode 100644
index 0000000..27dec78
--- /dev/null
+++ b/e2e-tests/tools/checksum.scm
@@ -0,0 +1,22 @@
+(define md5sum
+  (command #:inputs (file #:type File #:stage? #t)
+           #:run "md5sum" "$(inputs.file.basename)"
+           #:outputs (md5 #:type stdout)
+           #:stdout "md5"))
+
+(define sha1sum
+  (command #:inputs (file #:type File #:stage? #t)
+           #:run "sha1sum" "$(inputs.file.basename)"
+           #:outputs (sha1 #:type stdout)
+           #:stdout "sha1"))
+
+(define sha256sum
+  (command #:inputs (file #:type File #:stage? #t)
+           #:run "sha256sum" "$(inputs.file.basename)"
+           #:outputs (sha256 #:type stdout)
+           #:stdout "sha256"))
+
+(workflow ((file #:type File))
+  (tee (md5sum #:file file)
+       (sha1sum #:file file)
+       (sha256sum #:file file)))
diff --git a/e2e-tests/tools/command-line-tool-step-with-default-input.scm b/e2e-tests/tools/command-line-tool-step-with-default-input.scm
new file mode 100644
index 0000000..cb9ab44
--- /dev/null
+++ b/e2e-tests/tools/command-line-tool-step-with-default-input.scm
@@ -0,0 +1,8 @@
+(define echo
+  (command #:inputs (message #:type string
+                             #:default "Hello world!")
+           #:run "echo" message
+           #:outputs (output_message #:type stdout)))
+
+(workflow ()
+  (echo))
diff --git a/e2e-tests/tools/command-line-tool-step-with-optional-and-required-inputs.scm b/e2e-tests/tools/command-line-tool-step-with-optional-and-required-inputs.scm
new file mode 100644
index 0000000..e6d0478
--- /dev/null
+++ b/e2e-tests/tools/command-line-tool-step-with-optional-and-required-inputs.scm
@@ -0,0 +1,8 @@
+(define echo
+  (command #:inputs (message1 #:type string) (message2 #:type string
+                                                       #:default "Hello world!")
+           #:run "echo" message1 message2
+           #:outputs (output_message #:type stdout)))
+
+(workflow ((message #:type string))
+  (echo #:message1 message))
diff --git a/e2e-tests/tools/command-line-tool-with-default-input.scm b/e2e-tests/tools/command-line-tool-with-default-input.scm
new file mode 100644
index 0000000..82801a4
--- /dev/null
+++ b/e2e-tests/tools/command-line-tool-with-default-input.scm
@@ -0,0 +1,4 @@
+(command #:inputs (message #:type string
+                           #:default "Hello world!")
+         #:run "echo" message
+         #:outputs (output_message #:type stdout))
diff --git a/e2e-tests/tools/command-line-tool-without-arguments.cwl b/e2e-tests/tools/command-line-tool-without-arguments.cwl
new file mode 100644
index 0000000..f0440b0
--- /dev/null
+++ b/e2e-tests/tools/command-line-tool-without-arguments.cwl
@@ -0,0 +1,12 @@
+cwlVersion: v1.2
+class: CommandLineTool
+baseCommand:
+  - echo
+inputs:
+  message:
+    type: string
+    inputBinding:
+      position: 1
+outputs:
+  output_message:
+    type: stdout
diff --git a/e2e-tests/tools/decompress-compile-run.scm b/e2e-tests/tools/decompress-compile-run.scm
new file mode 100644
index 0000000..884f6a4
--- /dev/null
+++ b/e2e-tests/tools/decompress-compile-run.scm
@@ -0,0 +1,22 @@
+(define decompress
+  (command #:inputs (compressed #:type File)
+           #:run "gzip" "--stdout" "--decompress" compressed
+           #:outputs (decompressed #:type stdout)))
+
+(define compile
+  (command #:inputs (source #:type File)
+           #:run "gcc" "-x" "c" source
+           #:outputs (executable
+                      #:type File
+                      #:binding ((glob . "a.out")))))
+
+(define run
+  (command #:inputs executable
+           #:run executable
+           #:outputs (stdout #:type stdout)
+           #:stdout "run-output.txt"))
+
+(workflow ((compressed_source #:type File))
+  (pipe (decompress #:compressed compressed_source)
+        (compile #:source decompressed)
+        (run #:executable executable)))
diff --git a/e2e-tests/tools/hello-world.scm b/e2e-tests/tools/hello-world.scm
new file mode 100644
index 0000000..a037a36
--- /dev/null
+++ b/e2e-tests/tools/hello-world.scm
@@ -0,0 +1,3 @@
+(command #:inputs (message #:type string)
+         #:run "echo" message
+         #:outputs (output_message #:type stdout))
diff --git a/e2e-tests/tools/inline-javascript-requirement.scm b/e2e-tests/tools/inline-javascript-requirement.scm
new file mode 100644
index 0000000..cd6a4e5
--- /dev/null
+++ b/e2e-tests/tools/inline-javascript-requirement.scm
@@ -0,0 +1,4 @@
+(command #:inputs (number #:type int)
+         #:run "echo" "$(1 + inputs.number)"
+         #:outputs (sum #:type stdout)
+         #:requirements ((InlineJavascriptRequirement)))
diff --git a/e2e-tests/tools/int-for-float-input.scm b/e2e-tests/tools/int-for-float-input.scm
new file mode 100644
index 0000000..a2f351e
--- /dev/null
+++ b/e2e-tests/tools/int-for-float-input.scm
@@ -0,0 +1,3 @@
+(command #:inputs (message1 #:type float) (message2 #:type float)
+         #:run "echo" message1 message2
+         #:outputs (output_message #:type stdout))
diff --git a/e2e-tests/tools/pass-stdin.scm b/e2e-tests/tools/pass-stdin.scm
new file mode 100644
index 0000000..4ba251c
--- /dev/null
+++ b/e2e-tests/tools/pass-stdin.scm
@@ -0,0 +1,8 @@
+(define count-bytes
+  (command #:inputs (file #:type File)
+           #:run "wc" "-c"
+           #:outputs (bytes #:type stdout)
+           #:stdin file))
+
+(workflow ((file #:type File))
+  (count-bytes #:file file))
diff --git a/e2e-tests/tools/prefix-arguments.scm b/e2e-tests/tools/prefix-arguments.scm
new file mode 100644
index 0000000..d680ace
--- /dev/null
+++ b/e2e-tests/tools/prefix-arguments.scm
@@ -0,0 +1,3 @@
+(command #:inputs (last #:type int) (separator #:type string)
+         #:run "seq" ("-s" separator) last
+         #:outputs (sequence #:type stdout))
diff --git a/e2e-tests/tools/scatter.scm b/e2e-tests/tools/scatter.scm
new file mode 100644
index 0000000..805f4df
--- /dev/null
+++ b/e2e-tests/tools/scatter.scm
@@ -0,0 +1,8 @@
+(define print
+  (command #:inputs (message #:type string) (other-message #:type string)
+           #:run "echo" message other-message
+           #:outputs (printed_output #:type stdout)))
+
+(workflow ((message #:type string) (other_messages #:type (array string)))
+  (scatter (print #:message message)
+           #:other-message other_messages))
diff --git a/e2e-tests/tools/spell-check.scm b/e2e-tests/tools/spell-check.scm
new file mode 100644
index 0000000..d5ccebb
--- /dev/null
+++ b/e2e-tests/tools/spell-check.scm
@@ -0,0 +1,33 @@
+(define split-words
+  (command #:inputs text
+           #:run "tr" "--complement" "--squeeze-repeats" "A-Za-z" "\\n"
+           #:stdin text
+           #:outputs (words #:type stdout)))
+
+(define downcase
+  (command #:inputs words
+           #:run "tr" "A-Z" "a-z"
+           #:stdin words
+           #:outputs (downcased-words #:type stdout)))
+
+(define sort
+  (command #:inputs words
+           #:run "sort" "--unique"
+           #:stdin words
+           #:outputs (sorted #:type stdout)))
+ 
+(define find-misspellings
+  (command #:inputs words dictionary
+           #:run "comm" "-23" words dictionary
+           #:outputs (misspellings #:type stdout)
+           #:stdout "misspelt-words"))
+
+(workflow (text-file dictionary)
+  (pipe (tee (pipe (split-words #:text text-file)
+                   (downcase #:words words)
+                   (sort (sort-words) #:words downcased-words)
+                   (rename #:sorted-words sorted))
+             (pipe (sort (sort-dictionary) #:words dictionary)
+                   (rename #:sorted-dictionary sorted)))
+        (find-misspellings #:words sorted-words
+                           #:dictionary sorted-dictionary)))
diff --git a/e2e-tests/tools/staging-input-files.scm b/e2e-tests/tools/staging-input-files.scm
new file mode 100644
index 0000000..f81ee47
--- /dev/null
+++ b/e2e-tests/tools/staging-input-files.scm
@@ -0,0 +1,4 @@
+(command #:inputs (file #:type File
+                        #:stage? #t)
+         #:run "cat" "./$(inputs.file.basename)"
+         #:outputs (output_file #:type stdout))
diff --git a/e2e-tests/tools/workflow-step-with-default-input.scm b/e2e-tests/tools/workflow-step-with-default-input.scm
new file mode 100644
index 0000000..9a3f981
--- /dev/null
+++ b/e2e-tests/tools/workflow-step-with-default-input.scm
@@ -0,0 +1,12 @@
+(define echo
+  (command #:inputs (message #:type string)
+           #:run "echo" message
+           #:outputs (output_message #:type stdout)))
+
+(define echo-workflow
+  (workflow ((message #:type string
+                      #:default "Hello world!"))
+    (echo #:message message)))
+
+(workflow ()
+  (echo-workflow))
diff --git a/e2e-tests/tools/workflow-step-with-optional-and-required-inputs.scm b/e2e-tests/tools/workflow-step-with-optional-and-required-inputs.scm
new file mode 100644
index 0000000..aa71940
--- /dev/null
+++ b/e2e-tests/tools/workflow-step-with-optional-and-required-inputs.scm
@@ -0,0 +1,14 @@
+(define echo
+  (command #:inputs (message1 #:type string) (message2 #:type string)
+           #:run "echo" message1 message2
+           #:outputs (output_message #:type stdout)))
+
+(define echo-workflow
+  (workflow ((message1 #:type string)
+             (message2 #:type string
+                       #:default "Hello world!"))
+    (echo #:message1 message1
+          #:message2 message2)))
+
+(workflow ((message #:type string))
+  (echo-workflow #:message1 message))
diff --git a/e2e-tests/tools/workflow-with-default-input.scm b/e2e-tests/tools/workflow-with-default-input.scm
new file mode 100644
index 0000000..7f1a671
--- /dev/null
+++ b/e2e-tests/tools/workflow-with-default-input.scm
@@ -0,0 +1,8 @@
+(define echo
+  (command #:inputs (message #:type string)
+           #:run "echo" message
+           #:outputs (output_message #:type stdout)))
+
+(workflow ((message #:type string
+                    #:default "Hello world!"))
+  (echo #:message message))