# file      : unit-tests/test/script/parser/setup-teardown.test
# copyright : Copyright (c) 2014-2017 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
}