# file      : tests/pkg-test.testscript
# license   : MIT; see accompanying LICENSE file

.include common.testscript config.testscript remote.testscript

# Source repository:
#
# pkg-build
# |
# `-- t0a
#     |-- libbar-0.0.1.tar.gz   -> libbaz == 0.0.1
#     |-- libbaz-0.0.1.tar.gz   -> libfox
#     |-- libbaz-0.0.3.tar.gz   -> libfoo
#     |-- libbox-0.0.1.tar.gz   -> libbaz
#     |-- libfix-0.0.1.tar.gz
#     |-- libfoo-0.0.1.tar.gz   -> libfix
#     |-- libfox-0.0.1.tar.gz
#     `-- repositories.manifest

# Prepare repositories used by tests if running in the local mode.
#
+if! $remote
  rep_create += 2>!

  cp -r $src/t0a $out/t0a && $rep_create $out/t0a &$out/t0a/packages.manifest
end

cfg_create += -d cfg 2>! &cfg/***
pkg_build  += -d cfg --yes --auth all --trust-yes 2>!

+$pkg_build "libbaz@$rep/t0a"

test.options += --build-option -s

: args
:
{
  : no-name
  :
  $* 2>>EOE != 0
    error: package name argument expected
      info: run 'bpkg help pkg-test' for more information
    EOE

  : all-all-pattern
  :
  $* --all --all-pattern 'lib*' 2>>EOE != 0
    error: both --all|-a and --all-pattern specified
      info: run 'bpkg help pkg-test' for more information
    EOE

  : all-name
  :
  $* --all libbaz 2>>EOE != 0
    error: both --all|-a and package argument specified
      info: run 'bpkg help pkg-test' for more information
    EOE

  : all-pattern-name
  :
  $* --all-pattern 'lib*' libbaz 2>>EOE != 0
    error: both --all-pattern and package argument specified
      info: run 'bpkg help pkg-test' for more information
    EOE

  : recursive-immediate
  :
  $* libbaz --recursive --immediate 2>>~%EOE% != 0
      error: both --immediate|-i and --recursive|-r specified
        info: run 'bpkg help pkg-test' for more information
      EOE
}

: package
:
{
  $clone_cfg;

  $* libbaz 2>>~%EOE%
      %info: .+ has nothing to test%
      tested libbaz/0.0.3
      EOE
}

: all
:
{
  : src
  :
  {
    $clone_root_cfg;

    $* --all 2>>~%EOE%
        %info: .+ has nothing to test%
        tested libbaz/0.0.3
        EOE
  }

  : sys
  :
  {
    $cfg_create;
    $pkg_build "sys:libbaz@$rep/t0a";

    $* --all 2>'info: nothing to test'
  }
}

: all-pattern
:
{
  : match
  :
  {
    $clone_root_cfg;

    $* --all-pattern 'libf*' --all-pattern 'lib*' --all-pattern 'libz*' 2>>~%EOE%
        %info: .+ has nothing to test%
        tested libbaz/0.0.3
        EOE
  }

  : not-match
  :
  {
    $clone_root_cfg;

    $* --all-pattern 'libf*' 2>'info: nothing to test'
  }
}

: immediate
:
{
  $clone_cfg;

  $* libbaz --immediate 2>>~%EOE%
      %info: .+ has nothing to test%{2}
      tested libbaz/0.0.3
      tested libfoo/0.0.1
      EOE
}

: recursive
:
{
  $clone_cfg;

  $* libbaz --recursive 2>>~%EOE%
      %info: .+ has nothing to test%{3}
      tested libbaz/0.0.3
      tested libfoo/0.0.1
      tested libfix/0.0.1
      EOE
}

: package-cwd
:
{
  $clone_cfg;

  $* libbaz --recursive --package-cwd -v 2>>/~%EOE%
      %(.+ test\('\./'\)|info: .+ has nothing to test)%{6}
      %tested .+%{3}
      EOE
}
