]> git.donarmstrong.com Git - debbugs.git/commitdiff
add test for get_bug_order_index; fix faulty regex in while()
authorDon Armstrong <don@donarmstrong.com>
Sat, 21 Feb 2015 08:05:01 +0000 (00:05 -0800)
committerDon Armstrong <don@donarmstrong.com>
Sat, 21 Feb 2015 08:05:01 +0000 (00:05 -0800)
Debbugs/CGI/Pkgreport.pm
t/16_usertags.t [new file with mode: 0644]

index da937e5516f0b11d0c5e30892aaccf578afa2222..77b55165ae669916679d04c0e7bac69854383ff7 100644 (file)
@@ -469,21 +469,15 @@ sub get_bug_order_index {
 
      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;
@@ -493,8 +487,8 @@ sub get_bug_order_index {
           # 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;
diff --git a/t/16_usertags.t b/t/16_usertags.t
new file mode 100644 (file)
index 0000000..26a1e3d
--- /dev/null
@@ -0,0 +1,39 @@
+# -*- 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}",
+      );
+}
+
+