# file : tests/function/builtin/testscript # license : MIT; see accompanying LICENSE file .include ../../common.testscript : defined : { : true : $* <'true' foo = [null] print $defined(foo) EOI : false : $* <'false' print $defined(foo) EOI } : type : { $* <'print $type([string])' >'string' : empty-typed $* <'print $type("")' >'' : empty-untyped $* <'print $type([string, null])' >'string' : null-typed $* <'print $type([null])' >'' : null-untyped $* <'print $type([string] abc)' >'string' : value-typed $* <'print $type(abc)' >'' : value-untyped } : null : { $* <'print $null("")' >'false' : empty $* <'print $null(abc)' >'false' : value $* <'print $null([null])' >'true' : null } : empty : { $* <'true' : empty-untyped x = print $empty($x) EOI $* <'print $empty([string])' >'true' : empty-typed $* <'print $empty(abc)' >'false' : name $* <'print $empty(abc cxx{foo})' >'false' : names $* <'print $empty([bool] false)' >'false' : bool $* <'print $empty([json] null)' >'true' : json-null $* <'print $empty([json] "[]")' >'true' : json-array $* <'print $empty([json] "{}")' >'true' : json-object } : first-second : { $* <'print $first(a@1)' >'a' : first $* <'print $second(a@1)' >'1' : second $* <'print $first(@1)' >'{}' : first-empty $* <'print $second(a@)' >'{}' : second-empty $* <'print $first(1)' >'[null]' : first-null $* <'print $second(a)' >'[null]' : second-null $* <'print $first(1, true)' >'1' : first-all $* <'print $second(a, true)' >'a' : second-all $* <'print $first(0 a@1 b@2 c@ 4)' >'a b c' : firsts $* <'print $second(z a@1 b@2 @3 d)' >'1 2 3' : seconds $* <'print $first(0 a@1 b@2 c@ 4, true)' >'0 a b c 4' : firsts-all $* <'print $second(z a@1 b@2 @3 d, true)' >'z 1 2 3 d' : seconds-all $* <'print $first([name_pair] a@1)' >'a' : first-typed $* <'print $second([name_pair] a@1)' >'1' : second-typed } : identity : { $* <'print $identity([string])' >''; $* <'print $type($identity([string]))' >'string' : empty-typed $* <'print $identity("")' >'{}'; $* <'print $type($identity(""))' >'' : empty-untyped $* <'print $identity([string, null])' >'[null]'; $* <'print $type($identity([string, null]))' >'string' : null-typed $* <'print $identity([null])' >'[null]'; $* <'print $type($identity([null]))' >'' : null-untyped $* <'print $identity([string] abc)' >'abc'; $* <'print $type($identity([string] abc))' >'string' : typed $* <'print $identity(abc)' >'abc'; $* <'print $type($identity(abc))' >'' : untyped } : getenv : { : set : : Here we rely on the facts that on POSIX PATH environment variable most : likely is set at the time of login, and on Windows it is set by build2 on : startup. : : @@ TMP Use a custom variable, when an ability to set environment variables : in testscript is implemented. It is now! : { : string : $* <'print $getenv([string] "PATH")' | set v; ($v != '[null]') || exit "PATH environment variable is not set" : untyped : $* <'print $getenv("PATH")' | set v; ($v != '[null]') || exit "PATH environment variable is not set" : path : $* <'print $getenv([path] a)' >'[null]' : none : $* <'print $getenv()' 2>>~/EOE/ != 0 :1:8: error: unmatched call to getenv() /(( info: candidate: getenv(), qualified name builtin.getenv /)|( info: candidate: getenv(), qualified name builtin.getenv /)) EOE : names : $* <'print $getenv(a b)' 2>>EOE != 0 error: invalid argument: invalid string value: multiple names :1:8: info: while calling getenv() EOE } : unset : $* <'print $getenv("non-existent-var-name")' >'[null]' }