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

Reply via email to