| # -*- Mode: perl; indent-tabs-mode: nil -*- |
| # |
| # The contents of this file are subject to the Mozilla Public |
| # License Version 1.1 (the "License"); you may not use this file |
| # except in compliance with the License. You may obtain a copy of |
| # the License at http://www.mozilla.org/MPL/ |
| # |
| # Software distributed under the License is distributed on an "AS |
| # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
| # implied. See the License for the specific language governing |
| # rights and limitations under the License. |
| # |
| # The Original Code are the Bugzilla tests. |
| # |
| # The Initial Developer of the Original Code is Jacob Steenhagen. |
| # Portions created by Jacob Steenhagen are |
| # Copyright (C) 2001 Jacob Steenhagen. All |
| # Rights Reserved. |
| # |
| # Contributor(s): Gervase Markham <gerv@gerv.net> |
| # |
| |
| ################# |
| #Bugzilla Test 9# |
| ####bugwords##### |
| |
| # Bugzilla has a mechanism for taking various words, including "bug", "bugs", |
| # and "a bug" and automatically replacing them in the templates with the local |
| # terminology. It does this by using the 'terms' hash, so "bug" becomes |
| # "[% terms.bug %]". This test makes sure the relevant words aren't used |
| # bare. |
| |
| use strict; |
| |
| use lib 't'; |
| |
| use Support::Files; |
| use Support::Templates; |
| use Bugzilla::Util; |
| |
| use File::Spec; |
| |
| use Test::More tests => ($Support::Templates::num_actual_files); |
| |
| # Find all the templates |
| my @testitems; |
| for my $path (@Support::Templates::include_paths) { |
| push(@testitems, map(File::Spec->catfile($path, $_), |
| Support::Templates::find_actual_files($path))); |
| } |
| |
| foreach my $file (@testitems) { |
| my @errors; |
| |
| # Read the entire file into a string |
| local $/; |
| open (FILE, "<$file") || die "Can't open $file: $!\n"; |
| my $slurp = <FILE>; |
| close (FILE); |
| |
| # /g means we execute this loop for every match |
| # /s means we ignore linefeeds in the regexp matches |
| # This extracts everything which is _not_ a directive. |
| while ($slurp =~ /%\](.*?)(\[%|$)/gs) { |
| my $text = $1; |
| |
| my @lineno = ($` =~ m/\n/gs); |
| my $lineno = scalar(@lineno) + 1; |
| |
| # "a bug", "bug", "bugs" |
| if (grep /(a?[\s>]bugs?[\s.:;,])/i, $text) { |
| # Exclude variable assignment. |
| unless (grep /bugs =/, $text) { |
| push(@errors, [$lineno, $text]); |
| next; |
| } |
| } |
| |
| # "Bugzilla" |
| if (grep /(?<!X\-)Bugzilla(?!_|::|->|\.pm)/, $text) { |
| # Exclude JS comments, hyperlinks, USE, and variable assignment. |
| unless (grep /(\/\/.*|org.*>|api\/|USE |= )Bugzilla/, $text) { |
| push(@errors, [$lineno, $text]); |
| next; |
| } |
| } |
| } |
| |
| if (scalar(@errors)) { |
| ok(0, "$file contains invalid bare words (e.g. 'bug') --WARNING"); |
| |
| foreach my $error (@errors) { |
| print "$error->[0]: $error->[1]\n"; |
| } |
| } |
| else { |
| ok(1, "$file has no invalid barewords"); |
| } |
| } |
| |
| exit 0; |