aboutsummaryrefslogtreecommitdiffstats
path: root/xt/lib
diff options
context:
space:
mode:
Diffstat (limited to 'xt/lib')
-rw-r--r--xt/lib/Bugzilla/Test/Search.pm15
-rw-r--r--xt/lib/Bugzilla/Test/Search/Constants.pm14
-rw-r--r--xt/lib/Bugzilla/Test/Search/FieldTest.pm2
-rw-r--r--xt/lib/Bugzilla/Test/Search/FieldTestNormal.pm20
4 files changed, 44 insertions, 7 deletions
diff --git a/xt/lib/Bugzilla/Test/Search.pm b/xt/lib/Bugzilla/Test/Search.pm
index 467615ba0..5137302b7 100644
--- a/xt/lib/Bugzilla/Test/Search.pm
+++ b/xt/lib/Bugzilla/Test/Search.pm
@@ -58,6 +58,7 @@ use Bugzilla::FlagType;
use Bugzilla::Group;
use Bugzilla::Install ();
use Bugzilla::Test::Search::Constants;
+use Bugzilla::Test::Search::FieldTestNormal;
use Bugzilla::Test::Search::OperatorTest;
use Bugzilla::User ();
use Bugzilla::Util qw(generate_random_password);
@@ -108,7 +109,11 @@ sub num_tests {
my $sql_injection_tests = scalar(@fields) * scalar(@top_operators)
* scalar(@injection_values) * NUM_SEARCH_TESTS;
- return $operator_field_tests + $sql_injection_tests;
+ # This @{ [] } thing is the only reasonable way to get a count out of a
+ # constant array.
+ my $special_tests = scalar(@{ [SPECIAL_PARAM_TESTS] }) * TESTS_PER_RUN;
+
+ return $operator_field_tests + $sql_injection_tests + $special_tests;
}
sub _total_operator_tests {
@@ -852,6 +857,14 @@ sub run {
# Even though _setup_bugs set us as an admin, we want to be sure at
# this point that we have an admin with refreshed group memberships.
Bugzilla->set_user($self->admin);
+ foreach my $test (SPECIAL_PARAM_TESTS) {
+ my $operator_test =
+ new Bugzilla::Test::Search::OperatorTest($test->{operator}, $self);
+ my $field = Bugzilla::Field->check($test->{field});
+ my $special_test = new Bugzilla::Test::Search::FieldTestNormal(
+ $operator_test, $field, $test);
+ $special_test->run();
+ }
foreach my $operator ($self->top_level_operators) {
my $operator_test =
new Bugzilla::Test::Search::OperatorTest($operator, $self);
diff --git a/xt/lib/Bugzilla/Test/Search/Constants.pm b/xt/lib/Bugzilla/Test/Search/Constants.pm
index 3c68f69d2..abe01bbd1 100644
--- a/xt/lib/Bugzilla/Test/Search/Constants.pm
+++ b/xt/lib/Bugzilla/Test/Search/Constants.pm
@@ -48,6 +48,7 @@ our @EXPORT = qw(
OR_SKIP
PG_BROKEN
SKIP_FIELDS
+ SPECIAL_PARAM_TESTS
SUBSTR_NO_FIELD_ADD
SUBSTR_SIZE
TESTS
@@ -1248,4 +1249,17 @@ use constant OR_BROKEN => {
},
};
+#################
+# Special Tests #
+#################
+
+use constant SPECIAL_PARAM_TESTS => (
+ { field => 'bug_status', operator => 'anyexact', value => '__open__',
+ contains => [5] },
+ { field => 'bug_status', operator => 'anyexact', value => '__closed__',
+ contains => [1,2,3,4] },
+ { field => 'bug_status', operator => 'anyexact', value => '__all__',
+ contains => [1,2,3,4,5] },
+);
+
1;
diff --git a/xt/lib/Bugzilla/Test/Search/FieldTest.pm b/xt/lib/Bugzilla/Test/Search/FieldTest.pm
index 98f6275fe..f73facb19 100644
--- a/xt/lib/Bugzilla/Test/Search/FieldTest.pm
+++ b/xt/lib/Bugzilla/Test/Search/FieldTest.pm
@@ -59,7 +59,7 @@ sub field_object { return $_[0]->{field_object} }
# than we need the object.
sub field {
my ($self) = @_;
- return $self->{field_name} ||= $self->field_object->name;
+ $self->{field_name} ||= $self->field_object->name;
return $self->{field_name};
}
# The Bugzilla::Test::Search object that this is a child of.
diff --git a/xt/lib/Bugzilla/Test/Search/FieldTestNormal.pm b/xt/lib/Bugzilla/Test/Search/FieldTestNormal.pm
index b42db08e2..a4b913caa 100644
--- a/xt/lib/Bugzilla/Test/Search/FieldTestNormal.pm
+++ b/xt/lib/Bugzilla/Test/Search/FieldTestNormal.pm
@@ -26,12 +26,22 @@ use strict;
use warnings;
use base qw(Bugzilla::Test::Search::FieldTest);
-# We just clone a FieldTest because that's the best for performance,
-# overall--that way we don't have to translate the value again.
+use Scalar::Util qw(blessed);
+
+# Normally, we just clone a FieldTest because that's the best for performance,
+# overall--that way we don't have to translate the value again. However,
+# sometimes (like in Bugzilla::Test::Search's direct code) we just want
+# to create a FieldTestNormal.
sub new {
- my ($class, $field_test) = @_;
- my $self = { %$field_test };
- return bless $self, $class;
+ my $class = shift;
+ my ($first_arg) = @_;
+ if (blessed $first_arg
+ and $first_arg->isa('Bugzilla::Test::Search::FieldTest'))
+ {
+ my $self = { %$first_arg };
+ return bless $self, $class;
+ }
+ return $class->SUPER::new(@_);
}
sub name {