aboutsummaryrefslogtreecommitdiff
path: root/unit-tests/test/script/parser
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2019-03-06 23:06:30 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2019-03-08 16:42:31 +0300
commit77410b0cdde47219d6c6a36533fcb9354f17c3dd (patch)
tree703c39f3bc81792fabaf81769035f01a08cf6a2f /unit-tests/test/script/parser
parent8ca10194e206a181797ffb7a73dd2deee12ac753 (diff)
Use new setup for unit tests
Diffstat (limited to 'unit-tests/test/script/parser')
-rw-r--r--unit-tests/test/script/parser/buildfile6
-rw-r--r--unit-tests/test/script/parser/cleanup.testscript58
-rw-r--r--unit-tests/test/script/parser/command-if.testscript548
-rw-r--r--unit-tests/test/script/parser/command-re-parse.testscript12
-rw-r--r--unit-tests/test/script/parser/description.testscript486
-rw-r--r--unit-tests/test/script/parser/directive.testscript74
-rw-r--r--unit-tests/test/script/parser/driver.cxx242
-rw-r--r--unit-tests/test/script/parser/exit.testscript27
-rw-r--r--unit-tests/test/script/parser/expansion.testscript36
-rw-r--r--unit-tests/test/script/parser/here-document.testscript213
-rw-r--r--unit-tests/test/script/parser/here-string.testscript19
-rw-r--r--unit-tests/test/script/parser/include.testscript104
-rw-r--r--unit-tests/test/script/parser/pipe-expr.testscript133
-rw-r--r--unit-tests/test/script/parser/pre-parse.testscript23
-rw-r--r--unit-tests/test/script/parser/redirect.testscript356
-rw-r--r--unit-tests/test/script/parser/regex.testscript223
-rw-r--r--unit-tests/test/script/parser/scope-if.testscript554
-rw-r--r--unit-tests/test/script/parser/scope.testscript280
-rw-r--r--unit-tests/test/script/parser/setup-teardown.testscript151
19 files changed, 0 insertions, 3545 deletions
diff --git a/unit-tests/test/script/parser/buildfile b/unit-tests/test/script/parser/buildfile
deleted file mode 100644
index 952ec7a..0000000
--- a/unit-tests/test/script/parser/buildfile
+++ /dev/null
@@ -1,6 +0,0 @@
-# file : unit-tests/test/script/parser/buildfile
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-include ../../../../build2/
-exe{driver}: {hxx cxx}{*} ../../../../build2/libue{b} testscript{*}
diff --git a/unit-tests/test/script/parser/cleanup.testscript b/unit-tests/test/script/parser/cleanup.testscript
deleted file mode 100644
index 962fea0..0000000
--- a/unit-tests/test/script/parser/cleanup.testscript
+++ /dev/null
@@ -1,58 +0,0 @@
-# file : unit-tests/test/script/parser/cleanup.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: always
-:
-$* <<EOI >>EOO
-cmd &file
-EOI
-cmd &file
-EOO
-
-: maybe
-:
-$* <<EOI >>EOO
-cmd &?file
-EOI
-cmd &?file
-EOO
-
-: never
-:
-$* <<EOI >>EOO
-cmd &!file
-EOI
-cmd &!file
-EOO
-
-: empty
-:
-$* <<EOI 2>>EOE != 0
-cmd &""
-EOI
-testscript:1:6: error: empty cleanup path
-EOE
-
-: missed-before
-:
-{
- : token
- :
- : Path missed before command next token
- :
- $* <<EOI 2>>EOE != 0
- cmd & >file
- EOI
- testscript:1:7: error: missing cleanup path
- EOE
-
- : end
- : Test path missed before end of command
- :
- $* <<EOI 2>>EOE != 0
- cmd &
- EOI
- testscript:1:6: error: missing cleanup path
- EOE
-}
diff --git a/unit-tests/test/script/parser/command-if.testscript b/unit-tests/test/script/parser/command-if.testscript
deleted file mode 100644
index 274e81e..0000000
--- a/unit-tests/test/script/parser/command-if.testscript
+++ /dev/null
@@ -1,548 +0,0 @@
-# file : unit-tests/test/script/parser/command-if.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: if
-:
-{
- : true
- :
- $* <<EOI >>EOO
- if true foo
- cmd1
- cmd2
- end
- EOI
- ? true foo
- cmd1
- cmd2
- EOO
-
- : false
- :
- $* <<EOI >>EOO
- if false foo
- cmd1
- cmd2
- end
- EOI
- ? false foo
- EOO
-
- : not-true
- :
- $* <<EOI >>EOO
- if! true foo
- cmd1
- cmd2
- end
- EOI
- ? true foo
- EOO
-
- : not-false
- :
- $* <<EOI >>EOO
- if! false foo
- cmd1
- cmd2
- end
- EOI
- ? false foo
- cmd1
- cmd2
- EOO
-
- : without-command
- :
- $* <<EOI 2>>EOE != 0
- if
- cmd
- end
- EOI
- testscript:1:3: error: missing program
- EOE
-
- : after-semi
- :
- $* -s <<EOI >>EOO
- cmd1;
- if true
- cmd2
- end
- EOI
- {
- {
- cmd1
- ? true
- cmd2
- }
- }
- EOO
-
- : setup
- :
- $* -s <<EOI >>EOO
- +if true
- cmd
- end
- EOI
- {
- ? true
- +cmd
- }
- EOO
-
- : tdown
- :
- $* -s <<EOI >>EOO
- -if true
- cmd
- end
- EOI
- {
- ? true
- -cmd
- }
- EOO
-}
-
-: elif
-:
-{
- : true
- :
- $* <<EOI >>EOO
- if false
- cmd1
- cmd2
- elif true
- cmd3
- cmd4
- end
- EOI
- ? false
- ? true
- cmd3
- cmd4
- EOO
-
- : false
- :
- $* <<EOI >>EOO
- if false
- cmd1
- cmd2
- elif false
- cmd3
- cmd4
- end
- EOI
- ? false
- ? false
- EOO
-
- : not-true
- :
- $* <<EOI >>EOO
- if false
- cmd1
- cmd2
- elif! true
- cmd3
- cmd4
- end
- EOI
- ? false
- ? true
- EOO
-
- : not-false
- :
- $* <<EOI >>EOO
- if false
- cmd1
- cmd2
- elif! false
- cmd3
- cmd4
- end
- EOI
- ? false
- ? false
- cmd3
- cmd4
- EOO
-
- : without-if
- :
- $* <<EOI 2>>EOE != 0
- cmd
- elif true
- cmd
- end
- EOI
- testscript:2:1: error: 'elif' without preceding 'if'
- EOE
-
- : not-without-if
- :
- $* <<EOI 2>>EOE != 0
- cmd
- elif! true
- cmd
- end
- EOI
- testscript:2:1: error: 'elif!' without preceding 'if'
- EOE
-
- : after-else
- :
- $* <<EOI 2>>EOE != 0
- if false
- cmd
- else
- cmd
- elif true
- cmd
- end
- EOI
- testscript:5:1: error: 'elif' after 'else'
- EOE
-}
-
-: else
-:
-{
- : true
- :
- $* <<EOI >>EOO
- if false
- cmd1
- cmd2
- else
- cmd3
- cmd4
- end
- EOI
- ? false
- cmd3
- cmd4
- EOO
-
- : false
- :
- $* <<EOI >>EOO
- if true
- cmd1
- cmd2
- else
- cmd3
- cmd4
- end
- EOI
- ? true
- cmd1
- cmd2
- EOO
-
- : chain
- :
- $* <<EOI >>EOO
- if false
- cmd
- cmd
- elif false
- cmd
- cmd
- elif false
- cmd
- cmd
- elif true
- cmd1
- cmd2
- elif false
- cmd
- cmd
- else
- cmd
- cmd
- end
- EOI
- ? false
- ? false
- ? false
- ? true
- cmd1
- cmd2
- EOO
-
- : command-after
- :
- $* <<EOI 2>>EOE != 0
- if true
- cmd
- else cmd
- cmd
- end
- EOI
- testscript:3:6: error: expected newline instead of 'cmd'
- EOE
-
- : without-if
- :
- $* <<EOI 2>>EOE != 0
- cmd
- else
- cmd
- end
- EOI
- testscript:2:1: error: 'else' without preceding 'if'
- EOE
-
- : after-else
- :
- $* <<EOI 2>>EOE != 0
- if false
- cmd
- else
- cmd
- else
- cmd
- end
- EOI
- testscript:5:1: error: 'else' after 'else'
- EOE
-}
-
-: end
-{
- : without-if
- :
- $* <<EOI 2>>EOE != 0
- cmd
- end
- EOI
- testscript:2:1: error: 'end' without preceding 'if'
- EOE
-
- : before
- {
- : semi
- :
- $* -s <<EOI >>EOO
- if true
- cmd1
- end;
- cmd2
- EOI
- {
- {
- ? true
- cmd1
- cmd2
- }
- }
- EOO
-
- : command
- :
- $* <<EOI 2>>EOE != 0
- if true
- cmd
- end cmd
- EOI
- testscript:3:5: error: expected newline instead of 'cmd'
- EOE
-
- : colon
- :
- $* -s <<EOI >>EOO
- if true
- cmd1
- cmd2
- end : test
- EOI
- {
- : id:test
- {
- ? true
- cmd1
- cmd2
- }
- }
- EOO
- }
-}
-
-: nested
-:
-{
- : take
- :
- $* <<EOI >>EOO
- if true
- cmd1
- if false
- cmd
- elif false
- if true
- cmd
- end
- else
- cmd2
- end
- cmd3
- end
- EOI
- ? true
- cmd1
- ? false
- ? false
- cmd2
- cmd3
- EOO
-
- : skip
- :
- $* <<EOI >>EOO
- if false
- cmd1
- if false
- cmd
- elif false
- if true
- cmd
- end
- else
- cmd2
- end
- cmd3
- else
- cmd
- end
- EOI
- ? false
- cmd
- EOO
-}
-
-: contained
-{
- : semi
- :
- $* <<EOI 2>>EOE != 0
- if
- cmd;
- cmd
- end
- EOI
- testscript:2:3: error: ';' inside 'if'
- EOE
-
- : colon-leading
- :
- $* <<EOI 2>>EOE != 0
- if
- : foo
- cmd
- end
- EOI
- testscript:2:3: error: description inside 'if'
- EOE
-
- : colon-trailing
- :
- $* <<EOI 2>>EOE != 0
- if
- cmd : foo
- end
- EOI
- testscript:2:3: error: description inside 'if'
- EOE
-
- : eos
- :
- $* <<EOI 2>>EOE != 0
- if
- EOI
- testscript:2:1: error: expected closing 'end'
- EOE
-
- : scope
- :
- $* <<EOI 2>>EOE != 0
- if
- cmd
- {
- }
- end
- EOI
- testscript:3:3: error: expected closing 'end'
- EOE
-
- : setup
- :
- $* <<EOI 2>>EOE != 0
- if
- +cmd
- end
- EOI
- testscript:2:3: error: setup command inside 'if'
- EOE
-
- : tdown
- :
- $* <<EOI 2>>EOE != 0
- if
- -cmd
- end
- EOI
- testscript:2:3: error: teardown command inside 'if'
- EOE
-}
-
-: line-index
-:
-$* -l <<EOI >>EOO
-if false
- cmd
- if true
- cmd
- end
- cmd
-elif false
- cmd
-else
- cmd
-end
-EOI
-? false # 1
-? false # 6
-cmd # 8
-EOO
-
-: var
-:
-$* <<EOI >>EOO
-if true
- x = foo
-else
- x = bar
-end;
-cmd $x
-EOI
-? true
-cmd foo
-EOO
-
-: leading-and-trailing-description
-:
-$* <<EOI 2>>EOE != 0
-: foo
-if true
- cmd
-end : bar
-EOI
-testscript:4:1: error: both leading and trailing descriptions
-EOE
diff --git a/unit-tests/test/script/parser/command-re-parse.testscript b/unit-tests/test/script/parser/command-re-parse.testscript
deleted file mode 100644
index 62a1c7b..0000000
--- a/unit-tests/test/script/parser/command-re-parse.testscript
+++ /dev/null
@@ -1,12 +0,0 @@
-# file : unit-tests/test/script/parser/command-re-parse.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: double-quote
-:
-$* <<EOI >>EOO
-x = cmd \">-\" "'<-'"
-$x
-EOI
-cmd '>-' '<-'
-EOO
diff --git a/unit-tests/test/script/parser/description.testscript b/unit-tests/test/script/parser/description.testscript
deleted file mode 100644
index 20e6ec0..0000000
--- a/unit-tests/test/script/parser/description.testscript
+++ /dev/null
@@ -1,486 +0,0 @@
-# file : unit-tests/test/script/parser/description.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: id
-:
-{
- : lead
- :
- $* <<EOI >>EOO
- : foo
- cmd
- EOI
- : id:foo
- cmd
- EOO
-
- : trail
- :
- $* <<EOI >>EOO
- cmd : foo
- EOI
- : id:foo
- cmd
- EOO
-
- : dup
- : Id uniqueness
- :
- {
- : test
- :
- {
- : test
- :
- $* <<EOI 2>>EOE != 0
- : foo
- cmd
- : foo
- cmd
- EOI
- testscript:3:1: error: duplicate id foo
- testscript:1:1: info: previously used here
- EOE
-
- : group
- :
- $* <<EOI 2>>EOE != 0
- : foo
- cmd
- : foo
- {
- cmd
- cmd
- }
- EOI
- testscript:3:1: error: duplicate id foo
- testscript:1:1: info: previously used here
- EOE
-
- : derived
- :
- $* <<EOI 2>>EOE != 0
- : 3
- cmd
- cmd
- EOI
- testscript:3:1: error: duplicate id 3
- testscript:1:1: info: previously used here
- EOE
- }
-
- : group
- :
- {
- : test
- :
- $* <<EOI 2>>EOE != 0
- : foo
- {
- cmd
- cmd
- }
- : foo
- cmd
- EOI
- testscript:6:1: error: duplicate id foo
- testscript:1:1: info: previously used here
- EOE
-
- : group
- :
- $* <<EOI 2>>EOE != 0
- : foo
- {
- cmd
- cmd
- }
- : foo
- {
- cmd
- cmd
- }
- EOI
- testscript:6:1: error: duplicate id foo
- testscript:1:1: info: previously used here
- EOE
-
- : derived
- :
- $* <<EOI 2>>EOE != 0
- : 3
- cmd
- {
- cmd
- cmd
- }
- EOI
- testscript:3:1: error: duplicate id 3
- testscript:1:1: info: previously used here
- EOE
- }
- }
-}
-
-: summary
-{
- : lead
- :
- $* <<EOI >>EOO
- : foo bar
- cmd
- EOI
- : sm:foo bar
- cmd
- EOO
-
- : trail
- :
- $* <<EOI >>EOO
- cmd: foo bar
- EOI
- : sm:foo bar
- cmd
- EOO
-
- : id
- :
- $* <<EOI >>EOO
- : foo-bar
- : foo bar
- cmd
- EOI
- : id:foo-bar
- : sm:foo bar
- cmd
- EOO
-}
-
-: details
-{
- : id
- :
- $* <<EOI >>EOO
- : foo-bar
- :
- : foo bar
- : bar baz
- cmd
- EOI
- : id:foo-bar
- :
- : foo bar
- : bar baz
- cmd
- EOO
-
- : summary
- :
- {
- : only
- :
- $* <<EOI >>EOO
- : foo bar
- :
- : foo bar
- : bar baz
- cmd
- EOI
- : sm:foo bar
- :
- : foo bar
- : bar baz
- cmd
- EOO
-
- : assumed
- :
- $* <<EOI >>EOO
- : foo bar
- : bar baz
- cmd
- EOI
- : foo bar
- : bar baz
- cmd
- EOO
-
- : id
- :
- $* <<EOI >>EOO
- : foo-bar
- : foo bar
- :
- : foo bar
- : bar baz
- cmd
- EOI
- : id:foo-bar
- : sm:foo bar
- :
- : foo bar
- : bar baz
- cmd
- EOO
-
- : id-assumed
- :
- $* <<EOI >>EOO
- : foo-bar
- : bar baz
- : baz fox
- cmd
- EOI
- : foo-bar
- : bar baz
- : baz fox
- cmd
- EOO
- }
-}
-
-: legal
-:
-: Legal places for description.
-:
-{
- : var
- :
- $* <<EOI >>EOO
- : foo bar
- x = y;
- cmd $x
- EOI
- : sm:foo bar
- cmd y
- EOO
-}
-
-: illegal
-:
-: Illegal places for description.
-:
-{
- : eof
- :
- $* <": foo" 2>>EOE != 0
- testscript:2:1: error: description before <end of file>
- EOE
-
- : rcbrace
- :
- $* <<EOI 2>>EOE != 0
- {
- cmd
- : foo
- }
- EOI
- testscript:4:1: error: description before '}'
- EOE
-
- : setup
- :
- $* <<EOI 2>>EOE != 0
- : foo
- +cmd
- EOI
- testscript:2:1: error: description before setup command
- EOE
-
- : tdown
- :
- $* <<EOI 2>>EOE != 0
- : foo
- -cmd
- EOI
- testscript:2:1: error: description before teardown command
- EOE
-
- : var
- :
- $* <<EOI 2>>EOE != 0
- : foo
- x = y
- EOI
- testscript:2:1: error: description before setup/teardown variable
- EOE
-
- : var-if
- :
- $* <<EOI 2>>EOE != 0
- : foo
- if true
- x = y
- end
- EOI
- testscript:2:1: error: description before/after setup/teardown variable-if
- EOE
-
- : var-if-after
- :
- $* <<EOI 2>>EOE != 0
- if true
- x = y
- end : foo
- EOI
- testscript:1:1: error: description before/after setup/teardown variable-if
- EOE
-
- : test
- :
- $* <<EOI 2>>EOE != 0
- cmd1;
- : foo
- cmd2
- EOI
- testscript:2:1: error: description inside test
- EOE
-}
-
-: test-scope
-:
-: Interaction with test scope merging.
-:
-{
- : both
- :
- : No merge since both have description.
- :
- $* -s -i <<EOI >>EOO
- : foo
- {
- : bar
- cmd
- }
- EOI
- {
- : id:foo
- { # foo
- : id:bar
- { # foo/bar
- cmd
- }
- }
- }
- EOO
-
- : test
- :
- : No merge since test has description.
- :
- $* -s -i <<EOI >>EOO
- {
- : foo-bar
- : foo bar
- cmd
- }
- EOI
- {
- { # 1
- : id:foo-bar
- : sm:foo bar
- { # 1/foo-bar
- cmd
- }
- }
- }
- EOO
-
- : group
- :
- $* -s -i <<EOI >>EOO
- : foo-bar
- : foo bar
- {
- cmd
- }
- EOI
- {
- : id:foo-bar
- : sm:foo bar
- { # foo-bar
- cmd
- }
- }
- EOO
-}
-
-: blanks
-:
-$* <<EOI >>EOO
-:
-:
-: foo bar
-: bar baz
-:
-: baz fox
-:
-:
-cmd
-EOI
-: foo bar
-: bar baz
-:
-: baz fox
-cmd
-EOO
-
-: strip
-:
-$* <<EOI >>EOO
-: foo-bar
-: bar baz
-:
-: baz fox
-: fox biz
-:biz buz
-:
-cmd
-EOI
-: id:foo-bar
-: sm:bar baz
-:
-: baz fox
-: fox biz
-: biz buz
-cmd
-EOO
-
-: trail-compound
-:
-$* <<EOI >>EOO
-cmd1;
-cmd2: foo
-EOI
-: id:foo
-cmd1
-cmd2
-EOO
-
-: empty
-:
-$* <<EOI 2>>EOE != 0
-:
-:
-cmd
-EOI
-testscript:1:1: error: empty description
-EOE
-
-: trail-empty
-:
-$* <<EOI 2>>EOE != 0
-cmd:
-EOI
-testscript:1:4: error: empty description
-EOE
-
-: both
-:
-$* <<EOI 2>>EOE != 0
-: foo
-cmd : bar
-EOI
-testscript:2:1: error: both leading and trailing descriptions
-EOE
diff --git a/unit-tests/test/script/parser/directive.testscript b/unit-tests/test/script/parser/directive.testscript
deleted file mode 100644
index 0fc0b7a..0000000
--- a/unit-tests/test/script/parser/directive.testscript
+++ /dev/null
@@ -1,74 +0,0 @@
-# file : unit-tests/test/script/parser/directive.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: not-directive
-:
-$* <<EOI >>EOO
-x = x
-".include" foo.testscript
-\.include foo.testscript
-EOI
-.include foo.testscript
-.include foo.testscript
-EOO
-
-: expected-name
-:
-$* <<EOI 2>>EOE != 0
-.$
-EOI
-testscript:1:2: error: expected directive name instead of '$'
-EOE
-
-: unknown-name
-:
-$* <<EOI 2>>EOE != 0
-.bogus
-EOI
-testscript:1:2: error: unknown directive 'bogus'
-EOE
-
-: separated
-:
-touch foo.testscript;
-$* <<EOI
-. include foo.testscript
-EOI
-
-: not-separated
-:
-touch foo.testscript;
-$* <<EOI
-x = foo.testscript
-.include$x
-EOI
-
-: var-expansion
-:
-cat <<EOI >="foo-$(build.verson.project).testscript";
-cmd
-EOI
-$* <<EOI >>EOO
-.include "foo-$(build.verson.project).testscript"
-EOI
-cmd
-EOO
-
-: after-semi
-:
-$* <<EOI 2>>EOE != 0
-cmd;
-.include foo.testscript
-EOI
-testscript:2:1: error: directive after ';'
-EOE
-
-: semi-after
-:
-$* <<EOI 2>>EOE != 0
-.include foo.testscript;
-cmd
-EOI
-testscript:1:24: error: ';' after directive
-EOE
diff --git a/unit-tests/test/script/parser/driver.cxx b/unit-tests/test/script/parser/driver.cxx
deleted file mode 100644
index d17c76b..0000000
--- a/unit-tests/test/script/parser/driver.cxx
+++ /dev/null
@@ -1,242 +0,0 @@
-// file : unit-tests/test/script/parser/driver.cxx -*- C++ -*-
-// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#include <cassert>
-#include <iostream>
-
-#include <build2/types.hxx>
-#include <build2/utility.hxx>
-
-#include <build2/target.hxx>
-#include <build2/context.hxx> // reset()
-#include <build2/scheduler.hxx>
-
-#include <build2/test/target.hxx>
-
-#include <build2/test/script/token.hxx>
-#include <build2/test/script/parser.hxx>
-#include <build2/test/script/runner.hxx>
-
-using namespace std;
-
-namespace build2
-{
- namespace test
- {
- namespace script
- {
- // Here we assume we are running serially.
- //
- class print_runner: public runner
- {
- public:
- print_runner (bool scope, bool id, bool line)
- : scope_ (scope), id_ (id), line_ (line) {}
-
- virtual bool
- test (scope&) const override
- {
- return true;
- }
-
- virtual void
- enter (scope& s, const location&) override
- {
- if (s.desc)
- {
- const auto& d (*s.desc);
-
- if (!d.id.empty ())
- cout << ind_ << ": id:" << d.id << endl;
-
- if (!d.summary.empty ())
- cout << ind_ << ": sm:" << d.summary << endl;
-
- if (!d.details.empty ())
- {
- if (!d.id.empty () || !d.summary.empty ())
- cout << ind_ << ":" << endl; // Blank.
-
- const auto& s (d.details);
- for (size_t b (0), e (0), n; e != string::npos; b = e + 1)
- {
- e = s.find ('\n', b);
- n = ((e != string::npos ? e : s.size ()) - b);
-
- cout << ind_ << ':';
- if (n != 0)
- {
- cout << ' ';
- cout.write (s.c_str () + b, static_cast<streamsize> (n));
- }
- cout << endl;
- }
- }
- }
-
- if (scope_)
- {
- cout << ind_ << "{";
-
- if (id_ && !s.id_path.empty ()) // Skip empty root scope id.
- cout << " # " << s.id_path.string ();
-
- cout << endl;
-
- ind_ += " ";
- }
- }
-
- virtual void
- run (scope&,
- const command_expr& e, command_type t,
- size_t i,
- const location&) override
- {
- const char* s (nullptr);
-
- switch (t)
- {
- case command_type::test: s = ""; break;
- case command_type::setup: s = "+"; break;
- case command_type::teardown: s = "-"; break;
- }
-
- cout << ind_ << s << e;
-
- if (line_)
- cout << " # " << i;
-
- cout << endl;
- }
-
- virtual bool
- run_if (scope&,
- const command_expr& e,
- size_t i,
- const location&) override
- {
- cout << ind_ << "? " << e;
-
- if (line_)
- cout << " # " << i;
-
- cout << endl;
-
- return e.back ().pipe.back ().program.string () == "true";
- }
-
- virtual void
- leave (scope&, const location&) override
- {
- if (scope_)
- {
- ind_.resize (ind_.size () - 2);
- cout << ind_ << "}" << endl;
- }
- }
-
- private:
- bool scope_;
- bool id_;
- bool line_;
- string ind_;
- };
-
- // Usage: argv[0] [-s] [-i] [-l] [<testscript-name>]
- //
- int
- main (int argc, char* argv[])
- {
- tracer trace ("main");
-
- init (argv[0], 1); // Fake build system driver, default verbosity.
- sched.startup (1); // Serial execution.
- reset (strings ()); // No command line variables.
-
- bool scope (false);
- bool id (false);
- bool line (false);
- path name;
-
- for (int i (1); i != argc; ++i)
- {
- string a (argv[i]);
-
- if (a == "-s")
- scope = true;
- else if (a == "-i")
- id = true;
- else if (a == "-l")
- line = true;
- else
- {
- name = path (move (a));
- break;
- }
- }
-
- if (name.empty ())
- name = path ("testscript");
-
- assert (!id || scope); // Id can only be printed with scope.
-
- try
- {
- cin.exceptions (istream::failbit | istream::badbit);
-
- // Enter mock targets. Use fixed names and paths so that we can use
- // them in expected results. Strictly speaking target paths should
- // be absolute. However, the testscript implementation doesn't
- // really care.
- //
- file& tt (
- targets.insert<file> (work,
- dir_path (),
- "driver",
- string (),
- trace));
-
- value& v (
- tt.assign (
- var_pool.rw ().insert<target_triplet> (
- "test.target", variable_visibility::project)));
-
- v = cast<target_triplet> ((*global_scope)["build.host"]);
-
- testscript& st (
- targets.insert<testscript> (work,
- dir_path (),
- name.leaf ().base ().string (),
- name.leaf ().extension (),
- trace));
-
- tt.path (path ("driver"));
- st.path (name);
-
- // Parse and run.
- //
- parser p;
- script s (tt, st, dir_path (work) /= "test-driver");
- p.pre_parse (cin, s);
-
- print_runner r (scope, id, line);
- p.execute (s, r);
- }
- catch (const failed&)
- {
- return 1;
- }
-
- return 0;
- }
- }
- }
-}
-
-int
-main (int argc, char* argv[])
-{
- return build2::test::script::main (argc, argv);
-}
diff --git a/unit-tests/test/script/parser/exit.testscript b/unit-tests/test/script/parser/exit.testscript
deleted file mode 100644
index 75867d6..0000000
--- a/unit-tests/test/script/parser/exit.testscript
+++ /dev/null
@@ -1,27 +0,0 @@
-# file : unit-tests/test/script/parser/exit.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: eq
-:
-$* <<EOI >>EOO
-cmd == 1
-EOI
-cmd == 1
-EOO
-
-: ne
-:
-$* <<EOI >>EOO
-cmd!=1
-EOI
-cmd != 1
-EOO
-
-: end
-:
-$* <<EOI 2>>EOE != 0
-cmd != 1 <"foo"
-EOI
-testscript:1:10: error: unexpected '<' after command exit status
-EOE
diff --git a/unit-tests/test/script/parser/expansion.testscript b/unit-tests/test/script/parser/expansion.testscript
deleted file mode 100644
index ea952af..0000000
--- a/unit-tests/test/script/parser/expansion.testscript
+++ /dev/null
@@ -1,36 +0,0 @@
-# file : unit-tests/test/script/parser/expansion.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: quote
-:
-: Make sure everything expanded as strings.
-:
-$* <<EOI >>EOO
-x = dir/ proj% proj%name proj%proj%dir/type{name name {name}}
-cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}}
-cmd $x
-EOI
-cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}}
-cmd dir/ proj% proj%name proj%proj%dir/type{name name {name}}
-EOO
-
-: unterm-quoted-seq
-:
-$* <<EOI 2>>EOE != 0
-x = "'a bc"
-cmd xy$x
-EOI
-<string>:1:8: error: unterminated single-quoted sequence
- testscript:2:5: info: while parsing string 'xy'a bc'
-EOE
-
-: invalid-redirect
-:
-$* <<EOI 2>>EOE != 0
-x = "1>&a"
-cmd $x
-EOI
-<string>:1:4: error: stdout merge redirect file descriptor must be 2
- testscript:2:5: info: while parsing string '1>&a'
-EOE
diff --git a/unit-tests/test/script/parser/here-document.testscript b/unit-tests/test/script/parser/here-document.testscript
deleted file mode 100644
index de6255e..0000000
--- a/unit-tests/test/script/parser/here-document.testscript
+++ /dev/null
@@ -1,213 +0,0 @@
-# file : unit-tests/test/script/parser/here-document.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: end-marker
-:
-{
- : missing-newline
- :
- $* <'cmd <<' 2>>EOE != 0
- testscript:1:7: error: expected here-document end marker
- EOE
-
- : missing-exit
- :
- $* <'cmd << != 0' 2>>EOE != 0
- testscript:1:8: error: expected here-document end marker
- EOE
-
- : missing-empty
- :
- $* <'cmd <<""' 2>>EOE != 0
- testscript:1:7: error: expected here-document end marker
- EOE
-
- : unseparated-expansion
- :
- $* <'cmd <<FOO$foo' 2>>EOE != 0
- testscript:1:10: error: here-document end marker must be literal
- EOE
-
- : quoted-single-partial
- :
- $* <"cmd <<F'O'O" 2>>EOE != 0
- testscript:1:7: error: partially-quoted here-document end marker
- EOE
-
- : quoted-double-partial
- :
- $* <'cmd <<"FO"O' 2>>EOE != 0
- testscript:1:7: error: partially-quoted here-document end marker
- EOE
-
- : quoted-mixed
- :
- $* <"cmd <<\"FO\"'O'" 2>>EOE != 0
- testscript:1:7: error: partially-quoted here-document end marker
- EOE
-
- : unseparated
- :
- $* <<EOI >>EOO
- cmd <<EOF!=0
- foo
- EOF
- EOI
- cmd <<EOF != 0
- foo
- EOF
- EOO
-
- : quoted-single
- :
- $* <<EOI >>EOO
- cmd <<'EOF'
- foo
- EOF
- EOI
- cmd <<EOF
- foo
- EOF
- EOO
-
- : quoted-double
- :
- $* <<EOI >>EOO
- cmd <<"EOF"
- foo
- EOF
- EOI
- cmd <<EOF
- foo
- EOF
- EOO
-}
-
-: indent
-:
-{
- : basic
- :
- $* <<EOI >>EOO
- cmd <<EOF
- foo
- bar
- baz
- EOF
- EOI
- cmd <<EOF
- foo
- bar
- baz
- EOF
- EOO
-
- : blank
- :
- $* <<EOI >>EOO
- cmd <<EOF
- foo
-
-
- bar
- EOF
- EOI
- cmd <<EOF
- foo
-
-
- bar
- EOF
- EOO
-
- : non-ws-prefix
- :
- $* <<EOI >>EOO
- cmd <<EOF
- x EOF
- EOF
- EOI
- cmd <<EOF
- x EOF
- EOF
- EOO
-
- : whole-token
- : Test the case where the indentation is a whole token
- :
- $* <<EOI >>EOO
- x = foo bar
- cmd <<"EOF"
- $x
- EOF
- EOI
- cmd <<EOF
- foo bar
- EOF
- EOO
-
- : long-line
- : Test the case where the line contains multiple tokens
- :
- $* <<EOI >>EOO
- x = foo
- cmd <<"EOF"
- $x bar $x
- EOF
- EOI
- cmd <<EOF
- foo bar foo
- EOF
- EOO
-
- : unindented
- :
- $* <<EOI 2>>EOE != 0
- cmd <<EOF
- bar
- EOF
- EOI
- testscript:2:1: error: unindented here-document line
- EOE
-}
-
-: blank
-:
-$* <<EOI >>EOO
-cmd <<EOF
-
-foo
-
-bar
-
-EOF
-EOI
-cmd <<EOF
-
-foo
-
-bar
-
-EOF
-EOO
-
-: quote
-:
-: Note: they are still recognized in eval contexts.
-:
-$* <<EOI >>EOO
-cmd <<"EOF"
-'single'
-"double"
-b'o't"h"
-('single' "double")
-EOF
-EOI
-cmd <<EOF
-'single'
-"double"
-b'o't"h"
-single double
-EOF
-EOO
diff --git a/unit-tests/test/script/parser/here-string.testscript b/unit-tests/test/script/parser/here-string.testscript
deleted file mode 100644
index 012162c..0000000
--- a/unit-tests/test/script/parser/here-string.testscript
+++ /dev/null
@@ -1,19 +0,0 @@
-# file : unit-tests/test/script/parser/here-string.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: empty
-:
-$* <<EOI >>EOO
-cmd <""
-EOI
-cmd <''
-EOO
-
-: empty-nn
-:
-$* <<EOI >>EOO
-cmd <:""
-EOI
-cmd <:''
-EOO
diff --git a/unit-tests/test/script/parser/include.testscript b/unit-tests/test/script/parser/include.testscript
deleted file mode 100644
index c5241a1..0000000
--- a/unit-tests/test/script/parser/include.testscript
+++ /dev/null
@@ -1,104 +0,0 @@
-# file : unit-tests/test/script/parser/include.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: none
-:
-$* <<EOI
-.include
-.include --once
-EOI
-
-: empty
-:
-touch foo.testscript;
-$* <<EOI
-.include foo.testscript
-.include --once foo.testscript
-EOI
-
-: one
-:
-cat <"cmd" >=foo.testscript;
-$* <<EOI >>EOO
-.include foo.testscript
-EOI
-cmd
-EOO
-
-: multiple
-:
-cat <"cmd foo" >=foo.testscript;
-cat <"cmd bar" >=bar.testscript;
-$* <<EOI >>EOO
-.include foo.testscript bar.testscript
-EOI
-cmd foo
-cmd bar
-EOO
-
-: once
-:
-cat <"cmd" >=foo.testscript;
-$* <<EOI >>EOO
-.include foo.testscript
-x
-.include --once foo.testscript
-.include --once bar/../foo.testscript
-y
-.include ../once/foo.testscript
-EOI
-cmd
-x
-y
-cmd
-EOO
-
-: group-id
-:
-cat <<EOI >=foo.testscript;
-{
- x = b
-}
-EOI
-$* -s -i <<EOI >>EOO
-x = a
-.include foo.testscript
-EOI
-{
- { # 2-foo-1
- }
-}
-EOO
-
-: test-id
-:
-cat <<EOI >=foo.testscript;
-cmd
-EOI
-$* -s -i <<EOI >>EOO
-x = a
-.include foo.testscript
-EOI
-{
- { # 2-foo-1
- cmd
- }
-}
-EOO
-
-: invalid-path
-:
-$* <<EOI 2>>EOE != 0
-.include ""
-EOI
-testscript:1:2: error: invalid testscript include path ''
-EOE
-
-: unable-open
-:
-$* <<EOI 2>>~/EOE/ != 0
-.include foo.testscript
-EOI
-/testscript:1:2: error: unable to read testscript foo.testscript: .+/
-EOE
diff --git a/unit-tests/test/script/parser/pipe-expr.testscript b/unit-tests/test/script/parser/pipe-expr.testscript
deleted file mode 100644
index a66a4ac..0000000
--- a/unit-tests/test/script/parser/pipe-expr.testscript
+++ /dev/null
@@ -1,133 +0,0 @@
-# file : unit-tests/test/script/parser/pipe-expr.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: pipe
-:
-$* <<EOI >>EOO
-cmd1 | cmd2|cmd3
-EOI
-cmd1 | cmd2 | cmd3
-EOO
-
-: log
-:
-$* <<EOI >>EOO
-cmd1 || cmd2&&cmd3
-EOI
-cmd1 || cmd2 && cmd3
-EOO
-
-: pipe-log
-:
-$* <<EOI >>EOO
-cmd1 | cmd2 && cmd3 | cmd4
-EOI
-cmd1 | cmd2 && cmd3 | cmd4
-EOO
-
-: exit
-:
-$* <<EOI >>EOO
-cmd1|cmd2==1&&cmd3!=0|cmd4
-EOI
-cmd1 | cmd2 == 1 && cmd3 != 0 | cmd4
-EOO
-
-: here-doc
-:
-$* <<EOI >>EOO
-cmd1 <<EOI1 | cmd2 >>EOO2 && cmd3 <<EOI3 2>&1 | cmd4 2>>EOE4 >>EOO4
-input
-one
-EOI1
-ouput
-two
-EOO2
-input
-three
-EOI3
-error
-four
-EOE4
-output
-four
-EOO4
-EOI
-cmd1 <<EOI1 | cmd2 >>EOO2 && cmd3 <<EOI3 2>&1 | cmd4 >>EOO4 2>>EOE4
-input
-one
-EOI1
-ouput
-two
-EOO2
-input
-three
-EOI3
-output
-four
-EOO4
-error
-four
-EOE4
-EOO
-
-: leading
-:
-$* <<EOI 2>>EOE != 0
-| cmd
-EOI
-testscript:1:1: error: missing program
-EOE
-
-: trailing
-:
-$* <<EOI 2>>EOE != 0
-cmd &&
-EOI
-testscript:1:7: error: missing program
-EOE
-
-: redirected
-:
-{
- : input
- :
- {
- : first
- :
- $* <<EOI >>EOO
- cmd1 <foo | cmd2
- EOI
- cmd1 <foo | cmd2
- EOO
-
- : non-first
- :
- $* <<EOI 2>>EOE != 0
- cmd1 | cmd2 <foo
- EOI
- testscript:1:13: error: stdin is both piped and redirected
- EOE
- }
-
- : output
- :
- {
- : last
- :
- $* <<EOI >>EOO
- cmd1 | cmd2 >foo
- EOI
- cmd1 | cmd2 >foo
- EOO
-
- : non-last
- :
- $* <<EOI 2>>EOE != 0
- cmd1 >foo | cmd2
- EOI
- testscript:1:11: error: stdout is both redirected and piped
- EOE
- }
-}
diff --git a/unit-tests/test/script/parser/pre-parse.testscript b/unit-tests/test/script/parser/pre-parse.testscript
deleted file mode 100644
index 1afd566..0000000
--- a/unit-tests/test/script/parser/pre-parse.testscript
+++ /dev/null
@@ -1,23 +0,0 @@
-# file : unit-tests/test/script/parser/pre-parse.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: attribute
-:
-{
- : pair
- :
- $* <<EOI 2>>EOE != 0
- x = [foo=bar]
- EOI
- testscript:1:5: error: unknown value attribute foo=bar
- EOE
-
- : pair-empty
- :
- $* <<EOI 2>>EOE != 0
- x = [foo=]
- EOI
- testscript:1:5: error: unknown value attribute foo
- EOE
-}
diff --git a/unit-tests/test/script/parser/redirect.testscript b/unit-tests/test/script/parser/redirect.testscript
deleted file mode 100644
index 09074cd..0000000
--- a/unit-tests/test/script/parser/redirect.testscript
+++ /dev/null
@@ -1,356 +0,0 @@
-# file : unit-tests/test/script/parser/redirect.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-# @@ Add tests for redirects other than trace, here-*, file and merge.
-# @@ Does it make sense to split into separate files - one per redirect type?
-#
-
-: trace
-:
-{
- $* <'cmd >!' >'cmd >!' : out
- $* <'cmd 2>!' >'cmd 2>!' : err
-}
-
-: str
-:
-{
- : literal
- :
- {
- : portable-path
- :
- $* <<EOI >>EOO
- cmd </foo >/bar 2>/baz
- EOI
- cmd </foo >/bar 2>/baz
- EOO
- }
-
- : regex
- :
- {
- : portable-path
- :
- $* <<EOI >>EOO
- cmd >/~%foo% 2>/~%bar%
- EOI
- cmd >/~%foo% 2>/~%bar%
- EOO
- }
-}
-
-: doc
-:
-{
- : literal
- :
- {
- : portable-path
- :
- $* <<EOI >>EOO
- cmd <</EOI_ >/EOO_ 2>/EOE_
- foo
- EOI_
- bar
- EOO_
- baz
- EOE_
- EOI
- cmd <</EOI_ >/EOO_ 2>/EOE_
- foo
- EOI_
- bar
- EOO_
- baz
- EOE_
- EOO
-
- : sharing
- :
- {
- : in-out
- :
- $* <<EOI >>EOO
- cmd <<:/EOF >>:/EOF
- foo
- EOF
- EOI
- cmd <<:/EOF >>:/EOF
- foo
- EOF
- EOO
-
- : different
- :
- {
- : modifiers
- :
- $* <<EOI 2>>EOE != 0
- cmd <<:/EOF >>:EOF
- foo
- EOF
- EOI
- testscript:1:16: error: different modifiers for shared here-document 'EOF'
- EOE
-
- : quoting
- :
- $* <<EOI 2>>EOE != 0
- cmd <<EOF >>"EOF"
- foo
- EOF
- EOI
- testscript:1:13: error: different quoting for shared here-document 'EOF'
- EOE
- }
- }
- }
-
- : regex
- :
- {
- : portable-path
- :
- $* <<EOI >>EOO
- cmd >/~%EOF% 2>/~%EOE%
- foo
- EOF
- bar
- EOE
- EOI
- cmd >/~%EOF% 2>/~%EOE%
- foo
- EOF
- bar
- EOE
- EOO
-
- : sharing
- :
- {
- : in-out
- :
- $* <<EOI >>EOO
- cmd >>~/EOF/ 2>>~/EOF/
- foo
- EOF
- EOI
- cmd >>~/EOF/ 2>>~/EOF/
- foo
- EOF
- EOO
-
- : different
- :
- {
- : introducers
- :
- $* <<EOI 2>>EOE != 0
- cmd >>~/EOF/ 2>>~%EOF%
- foo
- EOF
- EOI
- testscript:1:18: error: different introducers for shared here-document regex 'EOF'
- EOE
-
- : flags
- :
- $* <<EOI 2>>EOE != 0
- cmd >>~/EOF/ 2>>~/EOF/i
- foo
- EOF
- EOI
- testscript:1:18: error: different global flags for shared here-document regex 'EOF'
- EOE
- }
- }
- }
-}
-
-: file
-:
-{
- : cmp
- :
- $* <<EOI >>EOO
- cmd 0<<<a 1>>>b 2>>>c
- EOI
- cmd <<<a >>>b 2>>>c
- EOO
-
- : write
- :
- $* <<EOI >>EOO
- cmd 1>=b 2>+c
- EOI
- cmd >=b 2>+c
- EOO
-
- : quote
- :
- $* <<EOI >>EOO
- cmd 0<<<"a f" 1>="b f" 2>+"c f"
- EOI
- cmd <<<'a f' >='b f' 2>+'c f'
- EOO
-
- : in
- :
- {
- : missed
- :
- $* <<EOI 2>>EOE !=0
- cmd <<<
- EOI
- testscript:1:8: error: missing stdin file
- EOE
-
- : empty
- :
- $* <<EOI 2>>EOE !=0
- cmd <<<""
- EOI
- testscript:1:8: error: empty stdin redirect path
- EOE
- }
-
- : out
- :
- {
- : missed
- :
- $* <<EOI 2>>EOE !=0
- cmd >=
- EOI
- testscript:1:7: error: missing stdout file
- EOE
-
- : empty
- :
- $* <<EOI 2>>EOE !=0
- cmd >=""
- EOI
- testscript:1:7: error: empty stdout redirect path
- EOE
- }
-
- : err
- :
- {
- : missed
- :
- $* <<EOI 2>>EOE !=0
- cmd 2>=
- EOI
- testscript:1:8: error: missing stderr file
- EOE
-
- : empty
- :
- $* <<EOI 2>>EOE !=0
- cmd 2>=""
- EOI
- testscript:1:8: error: empty stderr redirect path
- EOE
- }
-}
-
-: merge
-{
- : out
- :
- {
- : err
- :
- $* <<EOI >>EOO
- cmd 1>&2
- EOI
- cmd >&2
- EOO
-
- : no-mutual
- :
- $* <<EOI >>EOO
- cmd 1>&2 2>&1 2>a
- EOI
- cmd >&2 2>a
- EOO
-
- : not-descriptor
- :
- $* <<EOI 2>>EOE != 0
- cmd 1>&a
- EOI
- testscript:1:8: error: stdout merge redirect file descriptor must be 2
- EOE
-
- : self
- :
- $* <<EOI 2>>EOE != 0
- cmd 1>&1
- EOI
- testscript:1:8: error: stdout merge redirect file descriptor must be 2
- EOE
-
- : missed
- :
- $* <<EOI 2>>EOE != 0
- cmd 1>&
- EOI
- testscript:1:8: error: missing stdout file descriptor
- EOE
- }
-
- : err
- {
- : out
- :
- $* <<EOI >>EOO
- cmd 2>&1
- EOI
- cmd 2>&1
- EOO
-
- : no-mutual
- :
- $* <<EOI >>EOO
- cmd 1>&2 2>&1 >a
- EOI
- cmd >a 2>&1
- EOO
-
- : not-descriptor
- :
- $* <<EOI 2>>EOE != 0
- cmd 2>&a
- EOI
- testscript:1:8: error: stderr merge redirect file descriptor must be 1
- EOE
-
- : self
- :
- $* <<EOI 2>>EOE != 0
- cmd 2>&2
- EOI
- testscript:1:8: error: stderr merge redirect file descriptor must be 1
- EOE
-
- : missed
- :
- $* <<EOI 2>>EOE != 0
- cmd 2>&
- EOI
- testscript:1:8: error: missing stderr file descriptor
- EOE
- }
-
- : mutual
- :
- $* <<EOI 2>>EOE != 0
- cmd 1>&2 2>&1
- EOI
- testscript:1:14: error: stdout and stderr redirected to each other
- EOE
-}
diff --git a/unit-tests/test/script/parser/regex.testscript b/unit-tests/test/script/parser/regex.testscript
deleted file mode 100644
index 216c0c4..0000000
--- a/unit-tests/test/script/parser/regex.testscript
+++ /dev/null
@@ -1,223 +0,0 @@
-# file : unit-tests/test/script/parser/regex.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: here-string
-:
-{
- : stdout
- :
- {
- : missed
- :
- $* <'cmd >~' 2>>EOE != 0
- testscript:1:7: error: missing stdout here-string regex
- EOE
-
- : no-introducer
- :
- $* <'cmd >~""' 2>>EOE != 0
- testscript:1:7: error: no introducer character in stdout regex redirect
- EOE
-
- : no-term-introducer
- :
- $* <'cmd >~/' 2>>EOE != 0
- testscript:1:7: error: no closing introducer character in stdout regex redirect
- EOE
-
- : portable-path-introducer
- :
- $* <'cmd >/~/foo/' 2>>EOE != 0
- testscript:1:8: error: portable path modifier and '/' introducer in stdout regex redirect
- EOE
-
- : empty
- :
- $* <'cmd >~//' 2>>EOE != 0
- testscript:1:7: error: stdout regex redirect is empty
- EOE
-
- : no-flags
- :
- $* <'cmd >~/fo*/' >'cmd >~/fo*/'
-
- : idot
- :
- $* <'cmd >~/fo*/d' >'cmd >~/fo*/d'
-
- : icase
- :
- $* <'cmd >~/fo*/i' >'cmd >~/fo*/i'
-
- : invalid-flags1
- :
- $* <'cmd >~/foo/z' 2>>EOE != 0
- testscript:1:7: error: junk at the end of stdout regex redirect
- EOE
-
- : invalid-flags2
- :
- $* <'cmd >~/foo/iz' 2>>EOE != 0
- testscript:1:7: error: junk at the end of stdout regex redirect
- EOE
-
- : no-newline
- :
- $* <'cmd >:~/fo*/' >'cmd >:~/fo*/'
- }
-
- : stderr
- :
- {
- : missed
- :
- $* <'cmd 2>~' 2>>EOE != 0
- testscript:1:8: error: missing stderr here-string regex
- EOE
-
- : no-introducer
- :
- : Note that there is no need to reproduce all the errors as for stdout.
- : All we need is to make sure that the proper description is passed to
- : the parse_regex() function.
- :
- $* <'cmd 2>~""' 2>>EOE != 0
- testscript:1:8: error: no introducer character in stderr regex redirect
- EOE
- }
-
- : modifier-last
- :
- $* <'cmd >~/x' 2>>EOE != 0
- testscript:1:7: error: no closing introducer character in stdout regex redirect
- EOE
-}
-
-: here-doc
-:
-{
- : stdout
- :
- {
- : missed
- :
- $* <'cmd >>~' 2>>EOE != 0
- testscript:1:8: error: expected here-document regex end marker
- EOE
-
- : portable-path-introducer
- :
- $* <<EOI 2>>EOE != 0
- cmd >>/~/EOO/
- foo
- EOO
- EOI
- testscript:1:5: error: portable path modifier and '/' introducer in here-document regex end marker
- EOE
-
- : unterminated-line-char
- :
- $* <<EOI 2>>EOE != 0
- cmd >>~/EOO/
- /
- EOO
- EOI
- testscript:2:1: error: no syntax line characters
- EOE
-
- : empty
- :
- $* <<EOI 2>>EOE != 0
- cmd >>:~/EOO/
- EOO
- EOI
- testscript:2:1: error: empty here-document regex
- EOE
-
- : no-flags
- :
- $* <<EOI >>EOO
- cmd 2>>~/EOE/
- foo
- /?
- /foo/
- /foo/*
- /foo/i
- /foo/i*
-
- //
- //*
- EOE
- EOI
- cmd 2>>~/EOE/
- foo
- /?
- /foo/
- /foo/*
- /foo/i
- /foo/i*
-
- //
- //*
- EOE
- EOO
-
- : no-newline
- :
- $* <'cmd >:~/fo*/' >'cmd >:~/fo*/'
- $* <<EOI >>EOO
- cmd 2>>:~/EOE/
- foo
- EOE
- EOI
- cmd 2>>:~/EOE/
- foo
- EOE
- EOO
-
- : end-marker-restore
- :
- {
- : idot
- :
- $* <<EOI >>EOO
- cmd 2>>~/EOE/d
- foo
- EOE
- EOI
- cmd 2>>~/EOE/d
- foo
- EOE
- EOO
-
- : icase
- :
- $* <<EOI >>EOO
- cmd 2>>~/EOE/i
- foo
- EOE
- EOI
- cmd 2>>~/EOE/i
- foo
- EOE
- EOO
- }
- }
-
- : stderr
- :
- {
- : missed
- :
- $* <'cmd 2>>~' 2>>EOE != 0
- testscript:1:9: error: expected here-document regex end marker
- EOE
- }
-
- : modifier-last
- :
- $* <'cmd >>~:/FOO/' 2>>EOE != 0
- testscript:1:8: error: expected here-document regex end marker
- EOE
-}
diff --git a/unit-tests/test/script/parser/scope-if.testscript b/unit-tests/test/script/parser/scope-if.testscript
deleted file mode 100644
index 461d902..0000000
--- a/unit-tests/test/script/parser/scope-if.testscript
+++ /dev/null
@@ -1,554 +0,0 @@
-# file : unit-tests/test/script/parser/scope-if.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: if
-:
-{
- : true
- :
- $* -s <<EOI >>EOO
- if true foo
- {
- cmd
- }
- EOI
- {
- ? true foo
- {
- cmd
- }
- }
- EOO
-
- : false
- :
- $* -s <<EOI >>EOO
- if false foo
- {
- cmd
- }
- EOI
- {
- ? false foo
- }
- EOO
-
- : not-true
- :
- $* -s <<EOI >>EOO
- if! true
- {
- cmd
- }
- EOI
- {
- ? true
- }
- EOO
-
- : not-false
- :
- $* -s <<EOI >>EOO
- if! false
- {
- cmd
- }
- EOI
- {
- ? false
- {
- cmd
- }
- }
- EOO
-
- : eos-inside
- :
- $* <<EOI 2>>EOE != 0
- if
- {
- EOI
- testscript:3:1: error: expected '}' at the end of the scope
- EOE
-
-}
-
-: elif
-:
-{
- : true
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd
- }
- elif true
- {
- cmd1
- }
- EOI
- {
- ? false
- ? true
- {
- cmd1
- }
- }
- EOO
-
- : false
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd
- }
- elif false
- {
- cmd
- }
- EOI
- {
- ? false
- ? false
- }
- EOO
-
- : not-false
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd
- }
- elif! false
- {
- cmd1
- }
- EOI
- {
- ? false
- ? false
- {
- cmd1
- }
- }
- EOO
-
- : not-true
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd
- }
- elif! true
- {
- cmd
- }
- EOI
- {
- ? false
- ? true
- }
- EOO
-
- : after-else
- :
- $* <<EOI 2>>EOE != 0
- if false
- {
- cmd
- }
- else
- {
- cmd
- }
- elif true
- {
- cmd
- }
- EOI
- testscript:9:1: error: 'elif' after 'else'
- EOE
-}
-
-: else
-:
-{
- : true
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd
- }
- else
- {
- cmd1
- }
- EOI
- {
- ? false
- {
- cmd1
- }
- }
- EOO
-
- : false
- :
- $* -s <<EOI >>EOO
- if true
- {
- cmd1
- }
- else
- {
- cmd
- }
- EOI
- {
- ? true
- {
- cmd1
- }
- }
- EOO
-
- : chain
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd
- }
- elif false
- {
- cmd
- cmd
- }
- elif false
- {
- cmd
- }
- elif true
- {
- cmd1
- cmd2
- }
- elif false
- {
- cmd
- }
- else
- {
- cmd
- cmd
- }
- EOI
- {
- ? false
- ? false
- ? false
- ? true
- {
- {
- cmd1
- }
- {
- cmd2
- }
- }
- }
- EOO
-
- : scope-expected
- :
- $* <<EOI 2>>EOE != 0
- if
- {
- cmd
- }
- else
- cmd
- EOI
- testscript:5:1: error: expected scope after 'else'
- EOE
-
- : after-else
- :
- $* <<EOI 2>>EOE != 0
- if false
- {
- cmd
- }
- else
- {
- cmd
- }
- else
- {
- cmd
- }
- EOI
- testscript:9:1: error: 'else' after 'else'
- EOE
-}
-
-: nested
-:
-{
- : take
- :
- $* -s <<EOI >>EOO
- if true
- {
- cmd1
- if false
- {
- cmd
- }
- elif false
- {
- if true
- {
- cmd
- }
- }
- else
- {
- cmd2
- }
- cmd3
- }
- EOI
- {
- ? true
- {
- {
- cmd1
- }
- ? false
- ? false
- {
- {
- cmd2
- }
- }
- {
- cmd3
- }
- }
- }
- EOO
-
- : skip
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd1
- if false
- {
- cmd
- }
- elif false
- {
- if true
- {
- cmd
- }
- }
- else
- {
- cmd2
- }
- cmd3
- }
- else
- {
- cmd
- }
- EOI
- {
- ? false
- {
- {
- cmd
- }
- }
- }
- EOO
-}
-
-: demote
-:
-{
- : group
- : Chain remains a group
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd
- }
- elif true
- {
- cmd1
- cmd2
- }
- else
- {
- cmd
- }
- EOI
- {
- ? false
- ? true
- {
- {
- cmd1
- }
- {
- cmd2
- }
- }
- }
- EOO
-
- : test
- : Chain demoted to test
- :
- $* -s <<EOI >>EOO
- if false
- {
- cmd
- }
- elif true
- {
- cmd1
- }
- else
- {
- cmd
- }
- EOI
- {
- ? false
- ? true
- {
- cmd1
- }
- }
- EOO
-}
-
-: line-index
-: Make sure command line index spans setup/if/teardown
-:
-$* -s -l <<EOI >>EOO
-+setup # 1
-
-if false one # 2
-{
- cmd
-}
-elif false two # 3
-{
- cmd
-}
-elif true # 4
-{
- cmd1
-}
-elif false # 5
-{
- cmd
-}
-else
-{
- cmd
-}
-
-if false one # 6
-{
- cmd
-}
-elif false two # 7
-{
- cmd
-}
-else
-{
- cmd2
-}
-
--tdown # 8
-EOI
-{
- +setup # 1
- ? false one # 2
- ? false two # 3
- ? true # 4
- {
- cmd1 # 0
- }
- ? false one # 6
- ? false two # 7
- {
- cmd2 # 0
- }
- -tdown # 8
-}
-EOO
-
-: scope-comman-if
-:
-$* -s <<EOI >>EOO
-if true
-{
- cmd
-}
-if true
- cmd1
- cmd2
-end
-EOI
-{
- ? true
- {
- cmd
- }
- {
- ? true
- cmd1
- cmd2
- }
-}
-EOO
-
-: shared-id-desc
-:
-$* -s -i <<EOI >>EOO
-: test summary
-:
-if false
-{
- cmd
-}
-else
-{
- cmd1
-}
-EOI
-{
- ? false
- : sm:test summary
- { # 3
- cmd1
- }
-}
-EOO
diff --git a/unit-tests/test/script/parser/scope.testscript b/unit-tests/test/script/parser/scope.testscript
deleted file mode 100644
index cc254e9..0000000
--- a/unit-tests/test/script/parser/scope.testscript
+++ /dev/null
@@ -1,280 +0,0 @@
-# file : unit-tests/test/script/parser/scope.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-$* testscript <'cmd $@' >"cmd 1" : id-testscript
-$* foo.testscript <'cmd $@' >"cmd foo/1" : id
-
-: wd-testscript
-:
-$* testscript <'cmd "$~"' >~"%cmd '?.+[/\\\\]test-driver[/\\\\]1'?%"
-
-: wd
-:
-$* foo.testscript <'cmd "$~"' >~"%cmd '?.+[/\\\\]test-driver[/\\\\]foo[/\\\\]1'?%"
-
-: group
-:
-{
- : empty
- :
- $* -s <<EOI
- {
- }
- EOI
-
- : empty-empty
- :
- $* -s <<EOI
- {
- {
- }
- }
- EOI
-
- : non-empty
- :
- $* -s <<EOI >>EOO
- {
- cmd1
- cmd2
- }
- EOI
- {
- {
- {
- cmd1
- }
- {
- cmd2
- }
- }
- }
- EOO
-}
-
-: test
-:
-{
- : explicit
- :
- {
- : one-level
- :
- $* -s -i <<EOI >>EOO
- {
- cmd
- }
- EOI
- {
- { # 1
- cmd
- }
- }
- EOO
-
- : nested
- :
- $* -s -i <<EOI >>EOO
- {
- {
- cmd
- }
- }
- EOI
- {
- { # 1
- cmd
- }
- }
- EOO
-
- : var
- :
- $* -s -i <<EOI >>EOO
- {
- x = abc
- cmd $x
- }
- EOI
- {
- { # 1
- cmd abc
- }
- }
- EOO
-
- : setup
- :
- $* -s -i <<EOI >>EOO
- {
- x = abc
- +setup
- cmd $x
- }
- EOI
- {
- { # 1
- +setup
- { # 1/4
- cmd abc
- }
- }
- }
- EOO
- }
-
- : implicit
- {
- : one-cmd
- :
- $* -s <<EOI >>EOO
- cmd1
- EOI
- {
- {
- cmd1
- }
- }
- EOO
-
- : two-cmd
- :
- $* -s <<EOI >>EOO
- cmd1;
- cmd2
- EOI
- {
- {
- cmd1
- cmd2
- }
- }
- EOO
-
- : three-cmd
- :
- $* -s <<EOI >>EOO
- cmd1;
- cmd2;
- cmd3
- EOI
- {
- {
- cmd1
- cmd2
- cmd3
- }
- }
- EOO
-
- : var
- :
- $* -s <<EOI >>EOO
- cmd1;
- x = abc;
- cmd2 $x
- EOI
- {
- {
- cmd1
- cmd2 abc
- }
- }
- EOO
-
- : var-first
- :
- $* -s <<EOI >>EOO
- x = abc;
- cmd $x
- EOI
- {
- {
- cmd abc
- }
- }
- EOO
-
- : var-setup-tdown
- :
- $* -s <<EOI >>EOO
- x = abc
- cmd $x
- y = 123
- EOI
- {
- {
- cmd abc
- }
- }
- EOO
-
- : after-tdown
- :
- $* <<EOI 2>>EOE != 0
- cmd1
- x = abc
- cmd2
- EOI
- testscript:3:1: error: test after teardown
- testscript:2:1: info: last teardown line appears here
- EOE
- }
-}
-
-: expected
-{
- : newline-lcbrace
- :
- $* <:"{x" 2>>EOE != 0
- testscript:1:2: error: expected newline after '{'
- EOE
-
- : rcbrace
- :
- $* <"{" 2>>EOE != 0
- testscript:2:1: error: expected '}' at the end of the scope
- EOE
-
- : line-rcbrace
- :
- $* <<EOI 2>>EOE != 0
- {
- cmd;
- }
- EOI
- testscript:3:1: error: expected another line after ';'
- EOE
-
- : newline-rcbrace
- :
- $* <<:EOI 2>>EOE != 0
- {
- }
- EOI
- testscript:2:2: error: expected newline after '}'
- EOE
-
- : line-eof
- :
- $* <<EOI 2>>EOE != 0
- cmd;
- EOI
- testscript:2:1: error: expected another line after ';'
- EOE
-
- : newline-cmd
- :
- $* <<:EOI 2>>EOE != 0
- cmd;
- EOI
- testscript:1:5: error: expected newline instead of <end of file>
- EOE
-
- : newline-var
- :
- $* <:"x = abc;" 2>>EOE != 0
- testscript:1:9: error: expected newline instead of <end of file>
- EOE
-}
diff --git a/unit-tests/test/script/parser/setup-teardown.testscript b/unit-tests/test/script/parser/setup-teardown.testscript
deleted file mode 100644
index 0342e73..0000000
--- a/unit-tests/test/script/parser/setup-teardown.testscript
+++ /dev/null
@@ -1,151 +0,0 @@
-# file : unit-tests/test/script/parser/setup-teardown.testscript
-# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-# license : MIT; see accompanying LICENSE file
-
-: setup
-:
-{
- : followed
- :
- {
- : semi
- :
- $* <"+cmd;" 2>>EOE != 0
- testscript:1:5: error: ';' after setup command
- EOE
-
- : colon
- :
- $* <"+cmd:" 2>>EOE != 0
- testscript:1:5: error: ':' after setup command
- EOE
- }
-
- : after
- :
- {
- : test
- :
- $* <<EOI 2>>EOE != 0
- cmd
- +cmd
- EOI
- testscript:2:1: error: setup command after tests
- EOE
-
- : after-tdownt
- :
- $* <<EOI 2>>EOE != 0
- -cmd
- +cmd
- EOI
- testscript:2:1: error: setup command after teardown
- EOE
- }
-
- : in-test
- :
- $* <<EOI 2>>EOE != 0
- cmd;
- +cmd
- EOI
- testscript:2:1: error: setup command in test
- EOE
-}
-
-: tdown
-:
-{
- : followed
- :
- {
- : semi
- :
- $* <"-cmd;" 2>>EOE != 0
- testscript:1:5: error: ';' after teardown command
- EOE
-
- : colon
- :
- $* <"-cmd:" 2>>EOE != 0
- testscript:1:5: error: ':' after teardown command
- EOE
- }
-
- : in-test
- :
- $* <<EOI 2>>EOE != 0
- cmd;
- -cmd
- EOI
- testscript:2:1: error: teardown command in test
- EOE
-}
-
-: var
-:
-{
- : between-tests
- :
- $* <<EOI 2>>EOE != 0
- cmd
- x = y
- cmd
- EOI
- testscript:3:1: error: test after teardown
- testscript:2:1: info: last teardown line appears here
- EOE
-
- : between-tests-scope
- :
- $* <<EOI 2>>EOE != 0
- cmd
- x = y
- {
- cmd
- }
- EOI
- testscript:3:1: error: scope after teardown
- testscript:2:1: info: last teardown line appears here
- EOE
-
- : between-tests-command-if
- :
- $* <<EOI 2>>EOE != 0
- cmd
- x = y
- if true
- cmd
- end
- EOI
- testscript:3:1: error: test after teardown
- testscript:2:1: info: last teardown line appears here
- EOE
-
- : between-tests-scope-if
- :
- $* <<EOI 2>>EOE != 0
- cmd
- x = y
- if true
- {
- cmd
- }
- EOI
- testscript:3:1: error: scope after teardown
- testscript:2:1: info: last teardown line appears here
- EOE
-
- : between-tests-variable-if
- :
- $* <<EOI >>EOO
- cmd
- x = y
- if true
- y = x
- end
- EOI
- cmd
- ? true
- EOO
-}