for my $el (@${order}) {
$pos++;
- my $match = 0;
+ my $match = 1;
my $first_field = 1; # true if no previous fields have been
# checked
- while ($el =~ /(?<joiner>^|\+|,)(?<field>[^=]+)=(?<value>[^=,\+])/g) {
+ while ($el =~ /(?<joiner>^|\+|,)(?<field>[^=]+)=(?<value>[^=,\+]+)/g) {
my ($j,$f,$v) = @+{qw(joiner field value)};
- if (not defined $j) {
- $j = '+';
- }
- if ($j eq '+' and $first_field) {
- $match = 1;
- }
my $isokay = 0;
$isokay = 1 if (defined $status->{$f} and $v eq $status->{$f});
$isokay = 1 if ($f eq "tag" && defined $tags{$v});
- if ($j eq ',') {
+ if (defined $j and $j eq ',') {
$match ||= $isokay;
} else {
$match &&= $isokay;
# if there is a match, or if there were no fields to check,
# this usertag matched.
if ($match || $first_field) {
- return $pos;
- last;
+ return $pos;
+ last;
}
}
return $pos + 1;
--- /dev/null
+# -*- mode: cperl;-*-
+
+use Test::More;
+
+use warnings;
+use strict;
+
+plan tests => 4;
+
+use_ok('Debbugs::CGI::Pkgreport');
+
+my @usertags = ('severity=serious,severity=grave,severity=critical',
+ 'tag=second',
+ 'tag=third',
+ '',
+ );
+
+my @bugs =
+ ({severity => 'normal',
+ tag => 'wrongtag',
+ order => 3,
+ },
+ {severity => 'critical',
+ tag => 'second',
+ order => 0,
+ },
+ {severity => 'normal',
+ tag => 'third',
+ order => 2,
+ },
+ );
+
+for my $bug (@bugs) {
+ ok(Debbugs::CGI::Pkgreport::get_bug_order_index(\@usertags,$bug) == $bug->{order},
+ "order is actually $bug->{order}",
+ );
+}
+
+