terminated by four asterisks ("****"). Even if no data is required for the particular
usage, the asterisks must be given.
-If the input line starts with '>>> ', this prefix and any trailing spaces
-(including line feed) are removed. The reminder is processed with Perl's
-string eval() function, effectivly evaluatiing escape sequences like
-'\x41', or '\r'. If you need a line feed there, you need to encode it
-according to your needs.
+If the input line starts with ':<cmd>:', this prefix is removed and the
+line is processed by the runtest script before sending. The following
+commands are recognised:
-If the input line starts with '\>>> ', the backslash is removed and the
-rest of the line is passed as input. This is used by the client tool,
-which understands the '>>> ' prefix for similar processing.
+- "eval": process the reset of the line with Perl's string eval()
+ function. This can be used to send arbitrary data by encoding it as
+ escape sequences (e.g. "\x41\101"). If you need a line ending, you have
+ to append it accordingly (e.g. "\r\n").
+
+- "noeol": do not terminate the data sent to the application with an end
+ of line character.
+
+- "sleep": interpret the rest of the line as an integer and sleep for
+ that number of seconds before proceeding. No data will be output to
+ the application.
background
(5) ">>> ": If a line begins with three '>' characters and a space, the rest of the
line is input to be sent to the server. Backslash escaping is done as
- described below, but no trailing "\r\n" is sent. As the runtest's
- input processing catches the '>>> ' for its string eval, you may
- want to escape from this first stage processing by prefixing your
- line with '\'.
+ described below, but no trailing "\r\n" is sent.
(6) "<<< ": If a line begin with three '<' characters and a space, the rest of the
line is a filename; the content of the file is inserted into the script
open CMD, "|${cmd}${stderrsuffix}" || tests_exit(1, "Failed to run $cmd");
CMD->autoflush(1);
-while (<SCRIPT>)
+LINE: while (<SCRIPT>)
{
$lineno++;
last if /^\*{4}\s*$/;
do_substitute($testno);
- s/^\\(>>>\s.*)/$1/ or s/^>>>\s(.*)\s*$/$1/ and $_ = eval "\"$1\"";
+ if (my ($cmd, $line) = /^(:\S+?:)(.*)/) {
+ $_ = $line;
+ {
+ $cmd eq ':eval:' and do {
+ $_ = eval "\"$_\"";
+ last;
+ };
+ $cmd eq ':noeol:' and do {
+ s/[\r\n]*$//;
+ last;
+ };
+ $cmd eq ':sleep:' and do {
+ sleep $_;
+ next LINE;
+ };
+ }
+ }
print CMD;
}
****
exim -odi userx@test.ex
Last line ending without a newline and with a partial match:
->>> From
+:noeol:From
****
exim -odi filter-userx@test.ex
Test message
****
exim -odi filter-userx@test.ex
Last line ending without a newline and with a partial match:
->>> From
+:noeol:From
****
exim -odi userx@test.ex
Last line ending without a newline and being a single dot:
->>> .
+:noeol:.
****
exim -odi mmdf-userx@test.ex
Line consisting of four ^A characters
****
exim -odi userx@test.ex
Last line ending without a newline and with a partial match:
->>> From
+:noeol:From
****
exim -odi filter-userx@test.ex
Test message
****
exim -odi filter-userx@test.ex
Last line ending without a newline and with a partial match:
->>> From
+:noeol:From
****
exim -odi userx@test.ex
Last line ending without a newline and being a single dot:
->>> .
+:noeol:.
****
exim -odi mmdf-userx@test.ex
Line consisting of four ^A characters