# file      : tests/manifest/task.test
# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
# license   : MIT; see accompanying LICENSE file

test.options += -t

: valid
:
: Roundtrip the task manifest.
:
{
  : all-names
  :
  $* <<EOF >>EOF
  : 1
  name: libfoo
  version: 1.0
  repository: http://pkg.example.org/1/math
  trust: AB:0D:3F:C1:B0:13:E4:0E:AD:4A:08:06:AE:F3:85:DB:E2:27:5F:83:11:47:A2:7\
  8:64:3C:73:60:F8:66:3A:A4
  machine: windows_10-msvc_14
  target: x86_64-microsoft-win32-msvc14.0
  config: config.cc.coptions=/Z7 config.cc.loptions=/DEBUG
  EOF

  : no-target
  :
  $* <<EOF >>EOF
  : 1
  name: libfoo
  version: 1.0
  repository: http://pkg.example.org/1/math
  machine: windows_10-msvc_14
  config: config.cc.coptions=/Z7 config.cc.loptions=/DEBUG
  EOF

  : no-config
  :
  $* <<EOF >>EOF
  : 1
  name: libfoo
  version: 1.0
  repository: http://pkg.example.org/1/math
  machine: windows_10-msvc_14
  target: x86_64-microsoft-win32-msvc14.0
  EOF

  : config
  :
  {
    : empty-var-value
    :
    $* <<EOF >>EOF
    : 1
    name: libfoo
    version: 1.0
    repository: http://pkg.example.org/1/math
    machine: windows
    config: abc=
    EOF

    : var-value-quoting
    :
    $* <<EOF >>EOF
    : 1
    name: libfoo
    version: 1.0
    repository: http://pkg.example.org/1/math
    machine: windows
    config: abc='a "b '"d\e x y="
    EOF
  }

  : trust-yes
  :
  $* <<EOF >>EOF
  : 1
  name: libfoo
  version: 1.0
  repository: http://pkg.example.org/1/math
  trust: yes
  machine: windows_10-msvc_14
  target: x86_64-microsoft-win32-msvc14.0
  config: config.cc.coptions=/Z7 config.cc.loptions=/DEBUG
  EOF
}

: redefinition
:
{
  : name
  :
  $* <<EOI 2>'stdin:3:1: error: task package name redefinition' == 1
  : 1
  name: libfoo
  name: libfoo
  EOI

  : version
  :
  $* <<EOI 2>'stdin:3:1: error: task package version redefinition' == 1
  : 1
  version: 1.0
  version: 1.0
  EOI

  : repository
  :
  $* <<EOI 2>'stdin:3:1: error: task repository redefinition' == 1
  : 1
  repository: http://pkg.example.org/1/math
  repository: http://pkg.example.org/1/math
  EOI

  : machine
  :
  $* <<EOI 2>'stdin:3:1: error: task machine redefinition' == 1
  : 1
  machine: windows_10-msvc_14
  machine: windows_10-msvc_14
  EOI

  : target
  :
  $* <<EOI 2>'stdin:3:1: error: task target redefinition' == 1
  : 1
  target: x86_64-microsoft-win32-msvc14.0
  target: x86_64-microsoft-win32-msvc14.0
  EOI

  : config
  :
  $* <<EOI 2>'stdin:3:1: error: task configuration redefinition' == 1
  : 1
  config: config.cc.coptions=/Z7
  config: config.cc.loptions=/DEBUG
  EOI
}

: invalid
:
{
  : name-empty
  :
  $* <<EOI 2>'stdin:2:6: error: empty task package name' == 1
  : 1
  name:
  EOI

  : version
  :
  {
    : empty
    :
    $* <<EOI 2>'stdin:2:9: error: invalid task package version: unexpected end' == 1
    : 1
    version:
    EOI

    : release
    :
    $* <<EOI 2>'stdin:2:10: error: invalid task package version release' == 1
    : 1
    version: 1.2.3-
    EOI
  }

  : machine-empty
  :
  $* <<EOI 2>'stdin:2:9: error: empty task machine' == 1
  : 1
  machine:
  EOI

  : target-empty
  :
  $* <<EOI 2>'stdin:2:8: error: invalid task target: missing cpu' == 1
  : 1
  target:
  EOI

  : config
  :
  {
    : empty
    :
    $* <<EOI 2>'stdin:2:8: error: empty task configuration' == 1
    : 1
    config:
    EOI

    : bad-field
    :
    $* <<EOI 2>'stdin:2:15: error: invalid task configuration: unterminated quoted string' == 1
    : 1
    config: 'abc=x
    EOI

    : bad-var
    :
    $* <<EOI 2>'stdin:2:12: error: invalid task configuration: no variable value' == 1
    : 1
    config: abc xyz=1
    EOI

    : multiline
    :
    {
      : bad-field
      :
      $* <<EOI 2>'stdin:3:7: error: invalid task configuration: unterminated quoted string' == 1
      : 1
      config: \
      'abc=x
      \
      EOI

      : bad-var
      :
      $* <<EOI 2>'stdin:3:4: error: invalid task configuration: no variable value' == 1
      : 1
      config: \
      abc xyz=1
      \
      EOI
    }
  }

  : trust
  :
  $* <<EOI 2>'stdin:2:8: error: invalid repository certificate fingerprint' == 1
  : 1
  trust: abc
  EOI
}

: unknown-name
:
$* <<EOI 2>"stdin:2:1: error: unknown name 'x' in task manifest" == 1
: 1
x:
EOI

: missed
:
{
  : name
  :
  $* <<EOI 2>'stdin:5:1: error: no task package name specified' == 1
  : 1
  version: 1.0
  repository: http://pkg.example.org/1/math
  machine: windows_10-msvc_14
  EOI

  : version
  :
  $* <<EOI 2>'stdin:5:1: error: no task package version specified' == 1
  : 1
  name: libfoo
  repository: http://pkg.example.org/1/math
  machine: windows_10-msvc_14
  EOI

  : repository
  :
  $* <<EOI 2>'stdin:5:1: error: no task repository specified' == 1
  : 1
  name: libfoo
  version: 1.0
  machine: windows_10-msvc_14
  EOI

  : machine
  :
  $* <<EOI 2>'stdin:5:1: error: no task machine specified' == 1
  : 1
  name: libfoo
  version: 1.0
  repository: http://pkg.example.org/1/math
  EOI
}