summaryrefslogtreecommitdiff
path: root/scripts/t/Dpkg_Substvars.t
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/t/Dpkg_Substvars.t')
-rw-r--r--scripts/t/Dpkg_Substvars.t111
1 files changed, 111 insertions, 0 deletions
diff --git a/scripts/t/Dpkg_Substvars.t b/scripts/t/Dpkg_Substvars.t
new file mode 100644
index 000000000..5a9c18313
--- /dev/null
+++ b/scripts/t/Dpkg_Substvars.t
@@ -0,0 +1,111 @@
+#!/usr/bin/perl
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use Test::More tests => 32;
+
+use strict;
+use warnings;
+
+use Dpkg ();
+use Dpkg::Arch qw(get_host_arch);
+
+use_ok('Dpkg::Substvars');
+
+my $srcdir = $ENV{srcdir} || '.';
+my $datadir = $srcdir . '/t/Dpkg_Substvars';
+
+my $s = Dpkg::Substvars->new();
+
+$s->load("$datadir/substvars1");
+
+# simple value tests
+is($s->get('var1'), 'Some value', 'var1');
+is($s->get('var2'), 'Some other value', 'var2');
+is($s->get('var3'), 'Yet another value', 'var3');
+is($s->get('var4'), undef, 'no var4');
+
+# overriding
+$s->set('var1', 'New value');
+is($s->get('var1'), 'New value', 'var1 updated');
+
+# deleting
+$s->delete('var3');
+is($s->get('var3'), undef, 'var3 deleted');
+
+# default variables
+is($s->get('Newline'), "\n", 'newline');
+is($s->get('Space'), ' ', 'space');
+is($s->get('Tab'), "\t", 'tab');
+is($s->get('dpkg:Version'), $Dpkg::PROGVERSION, 'dpkg version 1');
+
+# special variables
+is($s->get('Arch'), undef, 'no arch');
+$s->set_arch_substvars();
+is($s->get('Arch'), get_host_arch(), 'arch');
+
+is($s->get($_), undef, 'no ' . $_) for qw/binary:Version source:Version source:Upstream-Version/;
+$s->set_version_substvars('1:2.3.4~5-6.7.8~nmu9', '1:2.3.4~5-6.7.8~nmu9+bin0');
+is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+bin0', 'binary:Version');
+is($s->get('source:Version'), '1:2.3.4~5-6.7.8~nmu9', 'source:Version');
+is($s->get('source:Upstream-Version'), '1:2.3.4~5', 'source:Upstream-Version');
+$s->set_version_substvars('2.3.4~5-6.7.8~nmu9+b1', '1:2.3.4~5-6.7.8~nmu9+b1');
+is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+b1', 'binary:Version');
+is($s->get('source:Version'), '2.3.4~5-6.7.8~nmu9', 'source:Version');
+is($s->get('source:Upstream-Version'), '2.3.4~5', 'source:Upstream-Version');
+$s->set_version_substvars('1:2.3.4~5-6.7.8~nmu9+b0');
+is($s->get('binary:Version'), '1:2.3.4~5-6.7.8~nmu9+b0', 'binary:Version');
+is($s->get('source:Version'), '1:2.3.4~5-6.7.8~nmu9', 'source:Version');
+is($s->get('source:Upstream-Version'), '1:2.3.4~5', 'source:Upstream-Version');
+
+# Replace stuff
+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');
+
+my $output;
+$SIG{__WARN__} = sub { $output .= $_[0] };
+is($s->substvars('This is a string with unknown variable ${blubb}'),
+ 'This is a string with unknown variable ',
+ 'substvars missing');
+delete $SIG{__WARN__};
+is($output, 'Dpkg_Substvars.t: warning: unknown substitution variable ${blubb}'."\n"
+ , 'missing variables warning');
+
+# Recursive replace
+$s->set('rvar', 'recursive ${var1}');
+is($s->substvars('This is a string with ${rvar}'),
+ 'This is a string with recursive New value',
+ 'substvars recursive');
+
+# Strange input
+is($s->substvars('Nothing to $ ${substitute here}, is it ${}?, it ${is'),
+ 'Nothing to $ ${substitute here}, is it ${}?, it ${is',
+ 'substvars strange');
+
+# Warnings about unused variables
+$output = '';
+$SIG{__WARN__} = sub { $output .= $_[0] };
+$s->warn_about_unused();
+delete $SIG{__WARN__};
+is($output, "Dpkg_Substvars.t: warning: unused substitution variable \${var2}\n",
+ , 'unused variables warnings');
+
+# Disable warnings for a certain variable
+$s->mark_as_used('var2');
+$output = '';
+$SIG{__WARN__} = sub { $output .= $_[0] };
+$s->warn_about_unused();
+delete $SIG{__WARN__};
+is($output, '', 'disabled unused variables warnings');