diff options
Diffstat (limited to 't')
-rw-r--r-- | t/009bugwords.t | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/t/009bugwords.t b/t/009bugwords.t new file mode 100644 index 000000000..564e7f67a --- /dev/null +++ b/t/009bugwords.t @@ -0,0 +1,118 @@ +# -*- 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 0.82; + +# We have a list of templates to exclude, if present. This allows us to exclude +# sample and b.m.o.-specific templates. Do _not_ add a template to this list +# without checking with developers@bugzilla.org first. +my @exclude; + +BEGIN { + @exclude = ( + 'template/en/default/pages/etiquette.html.tmpl' + ); +} + +use Test::More tests => ($Support::Templates::num_actual_files - + scalar(@exclude)); + +# Find all the templates (except those in @exclude) +my @testitems; +for my $path (@Support::Templates::include_paths) { + my @items = map(File::Spec->catfile($path, $_), + Support::Templates::find_actual_files($path)); + foreach my $item (@items) { + if (lsearch(\@exclude, $item) == -1) { + push(@testitems, $item); + } + } +} + +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 /Bugzilla[^_]/, $text) { + # Exclude JS comments, hyperlinks, USE and variable assignment. + unless (grep /(\/\/.*|org.*>|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; |