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

test.options += -b

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

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

  : no
  :
  $* <<EOI >false
    foo
    EOI

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

  : preamble-no
  :
  $* <<EOI >false
    f1 = $~/f2
    depdb string "$f1"
    f2 = $~/f3
    depdb string "$f2"
    foo "$f1" "$f2"
    EOI

  : preamble-yes
  :
  $* <<EOI >true
    f1 = $~/f1
    depdb string "$f1"
    f2 = $~/f2
    foo "$f2"
    EOI
}}

: command
:
$* <<EOF >>EOF
  foo >| 2>- &a &?b
  foo >=c 2>~/error:.*/ &!c
  foo >>:/~%EOS%
  %.*
  abc
  %xyz.*%
  EOS
  EOF

: if-else
:
$* <<EOF >>EOF
  if foo
  {
    bar
  }
  elif fox
  {
    if fix
    {
      baz
    }
    biz
  }
  if! foo
  {
    bar
  }
  elif! fox
  {
    baz
  }
  EOF

: quoting
:
$* <<EOI >>EOO
  foo 'bar' "baz" '' ""
  "$foo"
  "foo$bar"
  "fo"o
  "foo"\"
  "foo\\"
  "foo\"<"
  fo\"o
  fo\\o
  fo\<o
  "fo<o"
  'fo\"o'
  f"oo" "ba"r
  f"oo" 'ba'r
  "fo"'o'
  'foo b"ar baz'
  EOI
  foo 'bar' "baz" '' ""
  "$foo"
  "foo$bar"
  "foo"
  "foo\""
  "foo\\"
  "foo\"<"
  fo\"o
  fo\\o
  fo\<o
  "fo<o"
  'fo\"o'
  "foo bar"
  "foo" 'bar'
  "foo"
  'foo b"ar baz'
  EOO

: no-newline
:
$* <:'foo' 2>>EOE != 0
  buildfile:11:4: error: expected newline instead of <end of file>
  EOE

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

  : lines
  :
  $* <<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
    foo "$s" "$f"
    EOO

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

    : no
    :
    $* <<EOI >false
      foo
      EOI

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

    : preamble-no
    :
    $* <<EOI >false
      f1 = $~/f2
      depdb string "$f1"
      f2 = $~/f3
      depdb string "$f2"
      foo "$f1" "$f2"
      EOI

    : preamble-yes
    :
    $* <<EOI >true
      f1 = $~/f1
      depdb string "$f1"
      f2 = $~/f2
      foo "$f2"
      EOI
  }}

  : command
  :
  $* <<EOF >>EOF
    foo >| 2>- &a &?b
    foo >=c 2>~/error:.*/ &!c
    foo >>:/~%EOS%
    %.*
    abc
    %xyz.*%
    EOS
    EOF

  : if-else
  :
  $* <<EOF >>EOF
    if foo
      bar
    elif fox
      if fix
        baz
      end
      biz
    end
    if! foo
      bar
    elif! fox
      baz
    end
    EOF

  : quoting
  :
  $* <<EOI >>EOO
    foo 'bar' "baz" '' ""
    "$foo"
    "foo$bar"
    "fo"o
    "foo"\"
    "foo\\"
    "foo\"<"
    fo\"o
    fo\\o
    fo\<o
    "fo<o"
    'fo\"o'
    f"oo" "ba"r
    f"oo" 'ba'r
    "fo"'o'
    'foo b"ar baz'
    EOI
    foo 'bar' "baz" '' ""
    "$foo"
    "foo$bar"
    "foo"
    "foo\""
    "foo\\"
    "foo\"<"
    fo\"o
    fo\\o
    fo\<o
    "fo<o"
    'fo\"o'
    "foo bar"
    "foo" 'bar'
    "foo"
    'foo b"ar baz'
    EOO

  : no-newline
  :
  $* <:'foo' 2>>EOE != 0
    buildfile:11:4: error: expected newline instead of <end of file>
    EOE
}}
