> # Some fixed variables
>
> exim_path: TESTSUITE/eximdir/exim
+> exim_version: x.yz
+> config_dir: TESTSUITE
+> config_file: TESTSUITE/test-config
> primary_hostname: myhost.test.ex
> primary_hostname: myhost.test.ex
> qualify_domain: myhost.test.ex
> bounce_return_size_limit: 102400
> spool_directory: TESTSUITE/spool
+> queue_name:
> Failed: unknown variable in "${unknown}"
> h_subject: (should be empty)
> h_subject: (should be empty)
> reduce: +abc
> reduce: 6
> reduce: 9
+> # Check for extract corrupting reduce's
+> reduce: a , b
>
> listnamed: *.aa.bb : ^\Nxxx(.*)
> listnamed: *.aa.bb : ^\Nxxx(.*)
> listcount: 3
> listcount: 2
>
+> listextract: b
+> listextract: XcX
+> listextract:
+> listextract:
+> listextract: fail
+> Failed: "listextract" failed and "fail" requested
+>
+> sort: 1:2:3:4
+> sort: 4,3,2,1
+> sort: a:aa:B:c
+> sort: 10 smtp.ex.com:100 r2.ex.com:666 r99.ex.com
+> sort: 10,smtp.ex.com:100,r2.ex.com:666,r99.ex.com
+> sort: ""
+>
> # Tests with iscntrl() and illegal separators
>
> map: 'a'
>
> # Operators
>
-> Failed: missing or misplaced { or }
-> Failed: missing or misplaced { or }
+> Failed: Not enough arguments for 'acl' (min is 1)
+> Failed: Not enough arguments for 'acl' (min is 1)
> Failed: error from acl "a_nosuch"
> acl: (0) [] []
> acl: (1) [person@dom.ain] []
> addresses: local-part@dom.ain+xyz@abc
> addresses: local-part@dom.ain:xyz@abc:p@q:r@s
> addresses:
+> Failed: output separator missing in expanding ${addresses:>}
+>
+> escape: B7\267F2\362
+> excape8bit: undisturbed text tab
+newline tab\134backslash ~tilde\177DEL\200\201.
>
-> escape: B7\267F2\362
> eval: 2
> eval: 7
> eval: 9
> hex2b64:MPPJPkZDbetYunCBao7BJA==
> hex2b64:ztcfpyNSMb7Tg/rP3EHE3cwi7PE=
>
+> base32: 0 <>
+> base32: 1 <b>
+> base32: 31 <7>
+> base32: 32 <ba>
+> base32: 42 <bk>
+> Failed: argument for base32 operator is "0x1", which is not a decimal number
+>
+> base32d: 0 0
+> base32d: 1 1
+> base32d: 31 31
+> base32d: 32 32
+> base32d: 42 42
+> Failed: argument for base32d operator is "ABC", which is not a base 32 number
+>
> The base62 operator is actually a base36 operator in the Darwin and Cygwin
> environments. Write cunning tests that produce the same output in both cases,
> while doing a reasonable check.
> mask: 0.0.0.0/0
> Failed: missing mask value in "192.168.10.206"
> Failed: "a.b.c.d" is not an IP address
+> ipv6denorm: 0000:0000:0000:0000:0000:0000:0000:0001
+> ipv6denorm: fe00:0000:0000:0000:0000:0000:0000:0001
+> ipv6denorm: 0000:0000:0000:0000:0000:ffff:c0a8:0001
+> ipv6denorm: fe80:0000:0000:0000:0000:0000:c0a8:0001
+> ipv6norm: ::1
+> ipv6norm: 2a00::
+> ipv6norm: 2a00::1
+> ipv6norm: 2a00:eadf::1:0
+> ipv6norm: 2a00:eadf:0:1::
+> ipv6norm: 2a00::
+> ipv6norm: 2a00:2:3:4:5:6:7:8
> nhash: 19 0/61
> lc/uc: the quick BROWN FOX
> length: The quick abc
> substr:
> str2b64:YWJjZA==
> str2b64:VGhlIHF1aWNrIGJyb3duIAogZm94
+> base64: YWJjZA==
+> base64: VGhlIHF1aWNrIGJyb3duIAogZm94
+> base64d:abcd
+> base64d:The quick brown
+ fox
> strlen: 0
> strlen: 1
> strlen: 8
>
> # Error forms
>
-> Failed: missing or misplaced { or }
+> Failed: Not enough arguments for 'hash' (min is 2)
> Failed: "nonnumber" is not a number (in "hash" expansion)
-> Failed: Too many arguments for "hash" (max is 3)
+> Failed: Too many arguments for 'hash' (max is 3)
> Failed: "-2" is not a positive number (in "substr" expansion)
>
> # Skipped operators
> # Numeric overflow
> # >32b should work, >64b not
>
-> 4096M y
-> 4096000000 y
-> 4611686018427387904 y
+> 1 > 2047M n
+> 1 > 2048M n
+> 1 > 4096000000 n
+> 1 > 4096M n
+> 1 > 4611686018427387904 n
> Failed: absolute value of integer "46116860184273879040" is too large (overflow)
>
> # Conditions
> 5>3m: n
> Failed: invalid integer "3z "
> Failed: integer expected but "a" found
+> Failed: integer expected but "${substr_2_2:65535}" found
>
> >0: n
> =: y
> Failed: unknown variable "post" after "def:"
> def:h_f n
> def:h_f n
-> Failed: missing or misplaced { or }
+> Failed: curly-bracket problem in conditional yes/no parsing: 'yes' part did not start with '{'
+ remaining string is ':{y}{n}}'
>
> exists: y
> exists: n
> isip: y 1.2.3.4
> isip4: y 1.2.3.4
> isip6: n 1.2.3.4
+> isip: n ::1.2.3.256
+> isip4: n 1.2.3.256
> isip: n 1:2:3:4
> isip4: n 1:2:3:4
> isip6: n 1:2:3:4
> isip: y fe80::a00:20ff:fe86:a061
> isip4: n fe80::a00:20ff:fe86:a061
> isip6: y fe80::a00:20ff:fe86:a061
+> isip: y fe80::1.2.3.4
> isip: n rhubarb
> isip4: n rhubarb
> isip6: n rhubarb
> Failed: first argument of "extract" must not be empty
> b
>
+> a:b:c
+> Failed: missing '}' closing extract inside "map" item
+> a:b:c
+>
> # Translation
>
> abcdea aaa xyz zbcdez
> " yes" true EXPECT: true
> " no" false EXPECT: false
> "yes " true EXPECT: true
-> Failed: unrecognised boolean value "-1"
+> "-1" true EXPECT: true
> "0" false EXPECT: false
> "1" true EXPECT: true
> " 0 " false EXPECT: false
> " " false EXPECT: false
> Failed: unrecognised boolean value "text"
> Failed: unrecognised boolean value "text"
+> Failed: unrecognised boolean value "-text"
> Failed: unrecognised boolean value "text"
> Failed: unrecognised boolean value "text"
> "00" false EXPECT: false
>
> # File insertion
>
-> Failed: missing or misplaced { or }
+> Failed: Not enough arguments for 'readfile' (min is 1)
> abcde
12345
> Failed: unknown condition "xya" inside "and{...}" condition
> Failed: condition name expected, but found "${lookup{x}lsear" inside "and{...}" condition
> Failed: missing } at end of string - could be header name not terminated by colon
-> Failed: missing or misplaced { or }
+> Failed: curly-bracket problem in conditional yes/no parsing: did not close with '}'
+ remaining string is ''
> Failed: missing or misplaced { or } - could be header name not terminated by colon
> Failed: each subcondition inside an "or{...}" condition must be in its own {}
> Failed: missing } at end of condition inside "or" group
>
> true
>
+> # Environment access
+>
+> CALLER
+> correct
+>
>
> escape: B7·F2ò
>
> yes
> match_address: no
>
+> -be Sender host name and address etc, all unset
> -oMa sender_host_address =
> sender_host_port = 0
> -oMaa sender_host_authenticated =
> -oMs sender_host_name =
> -oMt sender_ident = CALLER
>
+> -be Sender host name and address etc, all set except host name.
> -oMa sender_host_address = V4NET.0.0.1
> sender_host_port = 1234
> -oMaa sender_host_authenticated = AAA
> -oMr received_protocol = special
> -oMt sender_ident = me
>
+> -be Sender host name explicitly set
> -oMa sender_host_address = V4NET.0.0.1
> sender_host_port = 1234
> -oMs sender_host_name = my.host.name
>
+> be Sender host name lookup fails (V4NET.11.12.13 is not reverse registered)
> -oMs sender_host_name =
> host_lookup_failed = 1
>
+> -be Sender host name and protocol set by Sendmail-compatible option
> -p received_protocol = special
> -p sender_host_name = host.name
>
+> -be Sender host name and address etc, all set except host name
> -oMa sender_host_address = V4NET.0.0.1
> sender_host_port = 1234
> -oMaa sender_host_authenticated = AAA