# file      : libbuild2/build/script/parser+depdb.test.testscript
# license   : MIT; see accompanying LICENSE file

test.options += -d

: clear
:
{{
  : multiple
  :
  $* <<EOI 2>>EOE != 0
    depdb clear
    depdb clear
    EOI
    buildfile:12:1: error: multiple 'depdb clear' builtin calls
      buildfile:11:1: info: previous call is here
    EOE

  : after-string
  :
  $* <<EOI 2>>EOE != 0
    a = b
    depdb string "$a"
    depdb clear
    EOI
    buildfile:13:1: error: 'depdb clear' should be the first 'depdb' builtin call
      buildfile:12:1: info: first 'depdb' call is here
    EOE
}}

: preamble
:
{{
  : no-body
  :
  $* <<EOI >>EOO
    s = 'foo'
    if echo "$s" | sed 's/o/a/p' >>>? 'bar'
      f = 'baz'
    else
      f = 'fox'
    ifn $s
      n = 'baz'
    else
      n = 'fox'
    depdb clear
    depdb string "$s"
    depdb hash "$f"
    depdb hash "$n"
    foo "$s" "$f" "$n"
    EOI
    s = 'foo'
    if echo "$s" | sed 's/o/a/p' >>>? 'bar'
    {
      f = 'baz'
    }
    else
    {
      f = 'fox'
    }
    ifn $s
    {
      n = 'baz'
    }
    else
    {
      n = 'fox'
    }
    depdb string "$s"
    depdb hash "$f"
    depdb hash "$n"
    EOO

  : temp_dir
  :
  {{
    test.options += -t

    : no
    :
    $* <<EOI >false
      f = foo
      depdb hash "$f"
      f = $~/f
      foo "$f"
      EOI

    : yes
    :
    $* <<EOI >true
      f = $~/f
      depdb hash "$f"
      foo "$f"
      EOI

    : yes-mult
    :
    $* <<EOI >true
      f = $~/f
      depdb hash "$f"
      s = "abc"
      depdb string "$s"
      foo "$f"
      EOI
  }}
}}

: impure-function
:
{{
  : var-assignment
  :
  $* <<EOI 2>>~%EOE% != 0
    v = $getenv('VAR')
    EOI
    buildfile:11:6: error: call to impure function getenv is only allowed in depdb preamble
    %  info: .+%
    EOE

  : quoted
  :
  $* <<EOI 2>>~%EOE% != 0
    v = "$getenv('VAR')"
    EOI
    buildfile:11:7: error: call to impure function getenv is only allowed in depdb preamble
    %  info: .*%
    EOE

  : if-cond
  :
  $* <<EOI 2>>~%EOE% != 0
    if ($getenv('VAR') == 'yes')
      foo
    EOI
    buildfile:11:6: error: call to impure function getenv is only allowed in depdb preamble
    %  info: .+%
    EOE

  : command
  :
  $* <<EOI 2>>~%EOE% != 0
    $getenv('VAR')
    EOI
    buildfile:11:2: error: call to impure function getenv is only allowed in depdb preamble
    %  info: .+%
    EOE

  : non-functions
  :
  {{
    $* <'$getenv'             : var
    $* <'$getenv (v ? a : b)' : eval
  }}
}}

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

  : clear
  :
  {{
    : multiple
    :
    $* <<EOI 2>>EOE != 0
      depdb clear
      depdb clear
      EOI
      buildfile:12:1: error: multiple 'depdb clear' builtin calls
        buildfile:11:1: info: previous call is here
      EOE

    : after-string
    :
    $* <<EOI 2>>EOE != 0
      a = b
      depdb string "$a"
      depdb clear
      EOI
      buildfile:13:1: error: 'depdb clear' should be the first 'depdb' builtin call
        buildfile:12:1: info: first 'depdb' call is here
      EOE
  }}

  : preamble
  :
  {{
    : no-body
    :
    $* <<EOI >>EOO
      s = 'foo'
      if echo "$s" | sed 's/o/a/p' >>>? 'bar'
        f = 'baz'
      else
        f = 'fox'
      end
      depdb clear
      depdb string "$s"
      depdb hash "$f"
      foo "$s" "$f"
      EOI
      s = 'foo'
      if echo "$s" | sed 's/o/a/p' >>>? 'bar'
        f = 'baz'
      else
        f = 'fox'
      end
      depdb string "$s"
      depdb hash "$f"
      EOO

    : temp_dir
    :
    {{
      test.options += -t

      : no
      :
      $* <<EOI >false
        f = foo
        depdb hash "$f"
        f = $~/f
        foo "$f"
        EOI

      : yes
      :
      $* <<EOI >true
        f = $~/f
        depdb hash "$f"
        foo "$f"
        EOI

      : yes-mult
      :
      $* <<EOI >true
        f = $~/f
        depdb hash "$f"
        s = "abc"
        depdb string "$s"
        foo "$f"
        EOI
    }}
  }}

  : impure-function
  :
  {{
    : var-assignment
    :
    $* <<EOI 2>>~%EOE% != 0
      v = $getenv('VAR')
      EOI
      buildfile:11:6: error: call to impure function getenv is only allowed in depdb preamble
      %  info: .+%
      EOE

    : quoted
    :
    $* <<EOI 2>>~%EOE% != 0
      v = "$getenv('VAR')"
      EOI
      buildfile:11:7: error: call to impure function getenv is only allowed in depdb preamble
      %  info: .*%
      EOE

    : if-cond
    :
    $* <<EOI 2>>~%EOE% != 0
      if ($getenv('VAR') == 'yes')
        foo
      end
      EOI
      buildfile:11:6: error: call to impure function getenv is only allowed in depdb preamble
      %  info: .+%
      EOE

    : command
    :
    $* <<EOI 2>>~%EOE% != 0
      $getenv('VAR')
      EOI
      buildfile:11:2: error: call to impure function getenv is only allowed in depdb preamble
      %  info: .+%
      EOE

    : non-functions
    :
    {{
      $* <'$getenv'             : var
      $* <'$getenv (v ? a : b)' : eval
    }}
  }}
}}
