# @@ REGEX Note that the script can still fail on POSIX for space-containing
#    paths.
#
if ($cxx.target.class == "windows")
  q = "'"
end

$* testscript <'cmd $@' >"cmd 1"     # id-testscript
$* foo.test   <'cmd $@' >"cmd foo/1" # id

wd = [dir_path] $~;
wd += test-driver;
wd += 1;
$* testscript <'cmd "$~"' >"cmd $q$wd$q"   # wd-testscript

wd = [dir_path] $~;
wd += test-driver;
wd += foo;
wd += 1;
$* foo.test   <'cmd "$~"' >"cmd $q$wd$q"   # wd

$* -s <<EOI                          # group-empty
{
}
EOI

$* -s <<EOI                          # group-empty-empty
{
 {
 }
}
EOI

$* -s <<EOI >>EOO                    # group
{
  cmd1
  cmd2
}
EOI
{
  {
    {
      cmd1
    }
    {
      cmd2
    }
  }
}
EOO

# Test scope.
#

$* -s -i <<EOI >>EOO                 # test-scope
{
  cmd
}
EOI
{
  { # 1
    cmd
  }
}
EOO

$* -s -i <<EOI >>EOO                    # test-scope-nested
{
  {
    cmd
  }
}
EOI
{
  { # 1
    cmd
  }
}
EOO

$* -s -i <<EOI >>EOO                    # test-scope-var
{
  x = abc
  cmd $x
}
EOI
{
  { # 1
    cmd abc
  }
}
EOO

$* -s -i <<EOI >>EOO                    # test-scope-setup
{
  x = abc
  +setup
  cmd $x
}
EOI
{
  { # 1
    setup
    { # 1/4
      cmd abc
    }
  }
}
EOO


#
#
$* <:"{x" 2>>EOE != 0                # expected-newline-lcbrace
testscript:1:2: error: expected newline after '{'
EOE

$* <"{" 2>>EOE != 0                  # expected-rcbrace
testscript:2:1: error: expected '}' at the end of the scope
EOE

$* <<EOI 2>>EOE != 0                 # expected-line-rcbrace
{
  cmd;
}
EOI
testscript:3:1: error: expected another line after ';'
EOE

$* <<:EOI 2>>EOE != 0                 # expected-newline-rcbrace
{
}
EOI
testscript:2:2: error: expected newline after '}'
EOE

$* -s <<EOI >>EOO                    # test-1
cmd1
EOI
{
  {
    cmd1
  }
}
EOO

$* -s <<EOI >>EOO                    # test-2
cmd1;
cmd2
EOI
{
  {
    cmd1
    cmd2
  }
}
EOO

$* -s <<EOI >>EOO                    # test-3
cmd1;
cmd2;
cmd3
EOI
{
  {
    cmd1
    cmd2
    cmd3
  }
}
EOO

$* -s <<EOI >>EOO                    # test-var
cmd1;
x = abc;
cmd2 $x
EOI
{
  {
    cmd1
    cmd2 abc
  }
}
EOO

$* -s <<EOI >>EOO                    # test-var-first
x = abc;
cmd $x
EOI
{
  {
    cmd abc
  }
}
EOO

$* -s <<EOI >>EOO                    # var-setup-tdown
x = abc
cmd $x
y = 123
EOI
{
  {
    cmd abc
  }
}
EOO

$* <<EOI 2>>EOE != 0                 # test-after-tdown
cmd1
x = abc
cmd2
EOI
testscript:3:1: error: test after teardown
  testscript:2:1: info: last teardown line appears here
EOE

$* <<EOI 2>>EOE != 0                 # expected-line-eof
cmd;
EOI
testscript:2:1: error: expected another line after ';'
EOE

$* <<:EOI 2>>EOE != 0                # expected-newline-cmd
cmd;
EOI
testscript:1:5: error: expected newline instead of <end of file>
EOE

$* <:"x = abc;" 2>>EOE != 0          # expected-newline-var
testscript:1:9: error: expected newline instead of <end of file>
EOE