From: Daniel Stenberg Date: Sun, 31 Dec 2023 15:27:46 +0000 (+0100) Subject: testutil: make runtests support %include X-Git-Tag: curl-8_6_0~156 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=12f832d950c2cd91fbadf1118e2ceecb0849cf14;p=thirdparty%2Fcurl.git testutil: make runtests support %include Using this instruction, a test case can include the contents of a file into the test during the preprocessing. Closes #12612 --- diff --git a/tests/FILEFORMAT.md b/tests/FILEFORMAT.md index 665d93eb85..5a8e783232 100644 --- a/tests/FILEFORMAT.md +++ b/tests/FILEFORMAT.md @@ -74,6 +74,17 @@ For example, to insert the word hello 100 times: %repeat[100 x hello]% +## Include file + +This instruction allows a test case to include another file. It is helpful to +remember that the ordinary variables are expanded before the include happens +so `%LOGDIR` and the others can be used in the include line. + +The file name cannot contain `%` as that letter is used to end the name for +the include instruction: + + %include filename% + ## Conditional lines Lines in the test file can be made to appear conditionally on a specific diff --git a/tests/testutil.pm b/tests/testutil.pm index ece0b6e053..1a44083e1b 100644 --- a/tests/testutil.pm +++ b/tests/testutil.pm @@ -94,6 +94,15 @@ sub clearlogs { ####################################################################### + +sub includefile { + my ($f) = @_; + open(F, "<$f"); + my @a = ; + close(F); + return join("", @a); +} + sub subbase64 { my ($thing) = @_; @@ -113,6 +122,7 @@ sub subbase64 { $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; $$thing =~ s/%%HEX%%/$d/; } + # repeat while($$thing =~ s/%repeat\[(\d+) x (.*?)\]%/%%REPEAT%%/i) { # decode %NN characters my ($d, $n) = ($2, $1); @@ -120,6 +130,9 @@ sub subbase64 { my $all = $d x $n; $$thing =~ s/%%REPEAT%%/$all/; } + + # include a file + $$thing =~ s/%include ([^%]*)%[\n\r]+/includefile($1)/ge; } my $prevupdate; # module scope so it remembers the last value