# file      : libbuild2/test/script/parser+setup-teardown.test.testscript
# 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-tdown
    :
    $* <<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

  : description
  :
  $* <<EOI 2>>EOE != 0
  : description
  +cmd
  EOI
  testscript:2:1: error: description before setup command
  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: test 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;
  cmd2
  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: test scope after teardown
    testscript:2:1: info: last teardown line appears here
  EOE

  : description-before-var
  :
  $* <<EOI 2>>EOE != 0
  : desc
  x = y
  cmd
  EOI
  testscript:2:1: error: description before setup/teardown variable
  EOE

  : description-before-if
  :
  $* <<EOI 2>>EOE != 0
  : desc
  if true
    x = y
  cmd
  EOI
  testscript:2:1: error: description before/after setup/teardown variable-only 'if'
  EOE
}}

: syntax-1
:
{{
  test.options += -v 1

  : 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-tdown
      :
      $* <<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

    : description-before-var
    :
    $* <<EOI 2>>EOE != 0
    : desc
    x = y
    cmd
    EOI
    testscript:2:1: error: description before setup/teardown variable
    EOE

    : description-before-if
    :
    $* <<EOI 2>>EOE != 0
    : desc
    if true
      x = y
    end
    cmd
    EOI
    testscript:2:1: error: description before/after setup/teardown variable-only 'if'
    EOE
  }}
}}
