# file      : tests/test/script/runner/export.testscript
# license   : MIT; see accompanying LICENSE file

.include ../common.testscript

# Make sure that the foo variable, which may potentially be set in the build2
# environment, doesn't affect the tests.
#
+export --unset foo

: group
:
{
  : add
  :
  $c <<EOI && $b
    {
      +export foo=bar

      $* -v foo >'bar'
    }
    EOI

  : change
  :
  $c <<EOI && $b
    {
      +export foo=bar
      +export foo=baz

      $* -v foo >'baz'
    }
    EOI

  : remove
  :
  $c <<EOI && $b
    {
      +export foo=bar
      +export --unset foo

      $* -v foo >'<none>'
    }
    EOI

  : clear
  :
  {
    : added
    :
    $c <<EOI && $b
      {
        +export foo=bar
        +export --clear foo

        $* -v foo >'<none>'
      }
      EOI

    : removed
    :
    $c <<EOI && $b
      {
        +export foo=bar
        +export --unset foo
        +export --clear foo

        $* -v foo >'<none>'
      }
      EOI

    : non-existent
    :
    $c <<EOI && $b
      {
        +export --clear foo

        $* -v foo >'<none>'
      }
      EOI
  }

  : override
  :
  $c <<EOI && $b
    +export foo=bar

    {
      +export --unset foo

      export foo=baz;
      $* -v foo >'baz'

      -$* -v foo >'<none>'
    }

    -$* -v foo >'bar'
    EOI
}

: test
:
{
  : override
  :
  $c <<EOI && $b
    {
      export foo=bar;
      env foo=baz -- $* -v foo >'baz';
      $* -v foo >'bar'
    }
    EOI
}

: invalid
:
{
  : set
  :
  $c <'export foo' && $b 2>>~%EOE% != 0
    testscript:1:1: error: export: expected variable assignment instead of 'foo'
    %.+
    EOE

  : unset
  :
  $c <'export --unset foo=abc' && $b 2>>~%EOE% != 0
    testscript:1:1: error: export: invalid value 'foo=abc' for option -u|--unset: contains '='
    %.+
    EOE

  : clear
  :
  $c <'export --clear foo=abc' && $b 2>>~%EOE% != 0
    testscript:1:1: error: export: invalid value 'foo=abc' for option -c|--clear: contains '='
    %.+
    EOE
}