| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| # |
| # This Source Code Form is "Incompatible With Secondary Licenses", as |
| # defined by the Mozilla Public License, v. 2.0. |
| |
| # This test combines two field/operator combinations using AND in |
| # a single boolean chart. |
| package Bugzilla::Test::Search::AndTest; |
| use parent qw(Bugzilla::Test::Search::OrTest); |
| |
| use Bugzilla::Test::Search::Constants; |
| use List::MoreUtils qw(all); |
| |
| use constant type => 'AND'; |
| |
| ############# |
| # Accessors # |
| ############# |
| |
| # In an AND test, bugs ARE supposed to be contained only if they are contained |
| # by ALL tests. |
| sub bug_is_contained { |
| my ($self, $number) = @_; |
| return all { $_->bug_is_contained($number) } $self->field_tests; |
| } |
| |
| sub _bug_will_actually_be_contained { |
| my ($self, $number) = @_; |
| return all { $_->will_actually_contain_bug($number) } $self->field_tests; |
| } |
| |
| ############################## |
| # Bugzilla::Search arguments # |
| ############################## |
| |
| sub search_params { |
| my ($self) = @_; |
| my @all_params = map { $_->search_params } $self->field_tests; |
| my %params; |
| my $chart = 0; |
| foreach my $item (@all_params) { |
| $params{"field0-$chart-0"} = $item->{'field0-0-0'}; |
| $params{"type0-$chart-0"} = $item->{'type0-0-0'}; |
| $params{"value0-$chart-0"} = $item->{'value0-0-0'}; |
| $chart++; |
| } |
| return \%params; |
| } |
| |
| 1; |