This is an automated email from the git hooks/post-receive script. guillem pushed a commit to branch main in repository dpkg.
View the commit online: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=cbeb8718d00362d396fffce288b91ab3e7a903ab commit cbeb8718d00362d396fffce288b91ab3e7a903ab Author: Guillem Jover <[email protected]> AuthorDate: Tue Mar 28 00:39:57 2023 +0200 test: Add more substvar recursive replace cases --- scripts/t/Dpkg_Substvars.t | 54 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/scripts/t/Dpkg_Substvars.t b/scripts/t/Dpkg_Substvars.t index e3f935414..92afb76de 100644 --- a/scripts/t/Dpkg_Substvars.t +++ b/scripts/t/Dpkg_Substvars.t @@ -16,7 +16,7 @@ use strict; use warnings; -use Test::More tests => 52; +use Test::More tests => 55; use Test::Dpkg qw(:paths); use Dpkg (); @@ -29,6 +29,7 @@ use_ok('Dpkg::Substvars'); my $datadir = test_get_data_path(); +my $output; my $expected; my $s = Dpkg::Substvars->new(); @@ -110,15 +111,31 @@ is($s->get('ctrl:Some-Field'), 'some-value', 'contents of ctrl:Some-Field'); is($s->get('ctrl:Other-Field'), 'other-value', 'contents of ctrl:Other-Field'); is($s->get('ctrl:Alter-Field'), 'alter-value', 'contents of ctrl:Alter-Field'); -# Replace stuff +# Direct replace: few is($s->substvars('This is a string ${var1} with variables ${binary:Version}'), 'This is a string New value with variables 1:2.3.4~5-6.7.8~nmu9+b0', - 'substvars simple'); + 'direct replace, few times'); + +# Direct replace: many times (more than the recursive limit) +$s->set('dr', 'feed'); +is($s->substvars('${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}' . + '${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}${dr}'), + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed' . + 'feedfeedfeedfeedfeedfeedfeedfeedfeedfeed', + 'direct replace, many times'); # Add a test prefix to error and warning messages. $s->set_msg_prefix('test '); -my $output; +$output = q{}; $SIG{__WARN__} = sub { $output .= $_[0] }; is($s->substvars('This is a string with unknown variable ${blubb}'), 'This is a string with unknown variable ', @@ -128,11 +145,36 @@ is($output, 'Dpkg_Substvars.t: warning: test substitution variable ${blubb} used, but is not defined' . "\n", 'missing variables warning'); -# Recursive replace +# Recursive replace: Simple. $s->set('rvar', 'recursive ${var1}'); is($s->substvars('This is a string with ${rvar}'), 'This is a string with recursive New value', - 'substvars recursive'); + 'recursive replace simple'); + +# Recursive replace: Constructed variables. +$s->set('partref', 'recursive result'); +$s->set('part1', '${pa'); +$s->set('part2', 'rtr'); +$s->set('part3', 'ef}'); +is($s->substvars('Constructed ${part1}${part2}${part3} replace'), + 'Constructed recursive result replace', + 'recursive constructed variable'); + +# Recursive replace: Cycle. +$s->set('ref0', '${ref1}'); +$s->set('ref1', '${ref2}'); +$s->set('ref2', '${ref0}'); + +eval { + $s->substvars('Cycle reference ${ref0}'); + 1; +}; +$output = $@ // q{}; +is($output, + 'Dpkg_Substvars.t: error: test too many substitutions ' . + "- recursive ? - in 'Cycle reference \${ref2}'\n", + 'recursive cyclic expansion is limited'); + # Strange input is($s->substvars('Nothing to $ ${substitute here}, is it ${}?, it ${is'), -- Dpkg.Org's dpkg

