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

: while
:
{
  : true
  :
  $* <<EOI >>EOO
  while ($v != "aa")
    cmd "$v"
    v = "$(v)a"
  end
  EOI
  ? true
  cmd ''
  ? true
  cmd a
  ? false
  EOO

  : false
  :
  $* <<EOI >>EOO
  while ($v == "aa")
    cmd "$v"
    v = "$(v)a"
  end
  EOI
  ? false
  EOO

  : without-command
  :
  $* <<EOI 2>>EOE != 0
  while
    cmd
  end
  EOI
  buildfile:11:6: error: missing program
  EOE
}

: end
:
{
  : without-end
  :
  $* <<EOI 2>>EOE != 0
  while true
    cmd
  EOI
  buildfile:13:1: error: expected closing 'end'
  EOE
}

: elif
:
{
  : without-if
  :
  $* <<EOI 2>>EOE != 0
  while false
    elif true
      cmd
    end
  end
  EOI
  buildfile:12:3: error: 'elif' without preceding 'if'
  EOE
}

: nested
:
{
  $* -l -r <<EOI >>EOO
  while ($v != "aa")      # 1
    cmd1 "$v"             # 2
    if ($v == "a")        # 3
      cmd2                # 4
      while ($v2 != "$v") # 5
        cmd3              # 6
        v2=$v
      end
    else
      cmd4                # 7
    end
    cmd5                  # 8
    v = "$(v)a"
  end
  EOI
  ? true # 1 i1
  cmd1 '' # 2 i1
  ? false # 3 i1
  cmd4 # 7 i1
  cmd5 # 8 i1
  ? true # 1 i2
  cmd1 a # 2 i2
  ? true # 3 i2
  cmd2 # 4 i2
  ? true # 5 i2 i1
  cmd3 # 6 i2 i1
  ? false # 5 i2 i2
  cmd5 # 8 i2
  ? false # 1 i3
  EOO
}

: contained
:
{
  : eos
  :
  $* <<EOI 2>>EOE != 0
  while
  EOI
  buildfile:12:1: error: expected closing 'end'
  EOE
}

: var
:
$* <<EOI >>EOO
while ($v1 != "a")
  v1 = "$(v1)a"
  v2 = "$v1"
end
cmd $v1
EOI
? true
? false
cmd a
EOO