# file      : libbuild2/test/script/lexer+command-expansion.test.testscript
# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
# license   : MIT; see accompanying LICENSE file

test.arguments = command-expansion

: pass-redirect
:
{
  : in
  :
  $* <:"0<|" >>EOO
  '0'
  <|
  EOO

  : arg-in
  :
  $* <:"0 <|" >>EOO
  '0 '
  <|
  EOO

  : out
  :
  $* <:"1>|" >>EOO
  '1'
  >|
  EOO

  : arg-out
  :
  $* <:"1 >|" >>EOO
  '1 '
  >|
  EOO
}

: null-redirect
:
{
  : in
  :
  $* <:"0<-" >>EOO
  '0'
  <-
  EOO

  : arg-in
  :
  $* <:"0 <-" >>EOO
  '0 '
  <-
  EOO

  : out
  :
  $* <:"1>-" >>EOO
  '1'
  >-
  EOO

  : arg-out
  :
  $* <:"1 >-" >>EOO
  '1 '
  >-
  EOO
}

: trace-redirect
:
{
  : out
  :
  $* <:"1>!" >>EOO
  '1'
  >!
  EOO

  : arg-out
  :
  $* <:"1 >!" >>EOO
  '1 '
  >!
  EOO
}

: merge-redirect
:
{
  : out
  :
  $* <:"1>&2" >>EOO
  '1'
  >&
  '2'
  EOO

  : arg-out
  :
  $* <:"1 >&2" >>EOO
  '1 '
  >&
  '2'
  EOO
}

: str-redirect
:
{
  : in
  :
  {
    : newline
    :
    $* <:"0<a b" >>EOO
    '0'
    <
    'a b'
    EOO

    : no-newline
    :
    $* <:"0<:a b" >>EOO
    '0'
    <:
    'a b'
    EOO
  }

  : out
  :
  {
    : newline
    :
    $* <:"1>a b" >>EOO
    '1'
    >
    'a b'
    EOO

    : no-newline
    :
    $* <:"1>:a b" >>EOO
    '1'
    >:
    'a b'
    EOO
  }
}

: doc-redirect
:
{
  : in
  :
  {
    : newline
    :
    $* <:"0<<E O I" >>EOO
    '0'
    <<
    'E O I'
    EOO

    : no-newline
    :
    $* <:"0<<:E O I" >>EOO
    '0'
    <<:
    'E O I'
    EOO
  }

  : out
  :
  {
    : newline
    :
    $* <:"1>>E O O" >>EOO
    '1'
    >>
    'E O O'
    EOO

    : no-newline
    :
    $* <:"1>>:E O O" >>EOO
    '1'
    >>:
    'E O O'
    EOO
  }
}

: file-redirect
:
{
  : in
  :
  $* <:"0<<<a b" >>EOO
  '0'
  <<<
  'a b'
  EOO

  : out
  :
  $* <:"1>=a b" >>EOO
  '1'
  >=
  'a b'
  EOO

  : out-app
  :
  $* <:"1>+a b" >>EOO
  '1'
  >+
  'a b'
  EOO
}

: cleanup
:
{
  : always
  :
  $* <:"&file" >>EOO
  &
  'file'
  EOO

  : maybe
  :
  $* <:"&?file" >>EOO
  &?
  'file'
  EOO

  : never
  :
  $* <:"&!file" >>EOO
  &!
  'file'
  EOO
}