diff --git a/src/audits/PageWithBadTitle.js b/src/audits/PageWithBadTitle.js new file mode 100644 index 00000000..99d00dd3 --- /dev/null +++ b/src/audits/PageWithBadTitle.js @@ -0,0 +1,32 @@ +// Copyright 2015 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +goog.require('axs.AuditRules'); +goog.require('axs.constants.Severity'); + +axs.AuditRules.addRule({ + name: 'pageWithBadTitle', + heading: 'The web page should have a title less than 66 characters long and does not contain bad characters', + url: 'https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#TODO-WIKIENTRY', + severity: axs.constants.Severity.WARNING, + relevantElementMatcher: function(element) { + return element.tagName.toLowerCase() == "title"; + }, + test: function(title) { + var titleText = title.textContent; + var badChars = /([-/\\]|[.]$)/; + return titleText.length > 65 || badChars.test(titleText); + }, + code: 'AX_TITLE_02' +}); diff --git a/test/audits/page-with-bad-title-test.js b/test/audits/page-with-bad-title-test.js new file mode 100644 index 00000000..4192961d --- /dev/null +++ b/test/audits/page-with-bad-title-test.js @@ -0,0 +1,65 @@ +module("Page titles"); + +test("Page title must be less than 66 characters in length", function() { + var rule = axs.AuditRules.getRule('pageWithBadTitle'); + + // Save the existing title for later use + var originalTitle = document.title; + + // Text that will replace the existing title for testing needs + var badTitle = "Hello, i am a text that is used for testing of this page, 12345678"; + + // Replace title with the bad title + document.title = badTitle; + + // This test fails because title is longer than 65 characters + equal(rule.run().result, + axs.constants.AuditResult.FAIL); + + // Tidy up, revert the title to its original state + document.title = originalTitle; + +}); + +test("Page title must not end with '.'", function() { + var rule = axs.AuditRules.getRule('pageWithBadTitle'); + + // Save the existing title for later use + var originalTitle = document.title; + + // Text that will replace the existing title for testing needs + var badTitle = "Hello, i am a text that is used for testing of this page, 123456."; + + // Replace title with the bad title + document.title = badTitle; + + // This test fails because the title ends with '.' (a full stop) + equal(rule.run().result, + axs.constants.AuditResult.FAIL); + + // Tidy up, revert the title to its original state + document.title = originalTitle; + +}); + +test("Page title must not contain '/', '\\' or '-' (slash, backslash or hyphen)", function() { + var rule = axs.AuditRules.getRule('pageWithBadTitle'); + + // Save the existing title for later use + var originalTitle = document.title; + + // Text that will replace the existing title for testing needs + var badTitle = "Hello - i am a text \\ that is used for testing of this page / 12"; + + // Replace title with the bad title + document.title = badTitle; + + // This test fails because the title contains '/', '\' or '-' (slash, backslash or hyphen) + equal(rule.run().result, + axs.constants.AuditResult.FAIL); + + // Tidy up, revert the title to its original state + document.title = originalTitle; + +}); +