From 22c0c88ef0fb97af1a72c425a7b865a1be57f68e Mon Sep 17 00:00:00 2001 From: kristapsmelderis Date: Wed, 15 Jul 2015 05:39:24 -0700 Subject: [PATCH 1/3] page-title-test-02 Add new audit rule that warns about bad page titles, add tests for audit rule --- src/audits/PageWithBadTitle.js | 43 ++++++++++++++++ test/audits/page-with-bad-title-test.js | 65 +++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 src/audits/PageWithBadTitle.js create mode 100644 test/audits/page-with-bad-title-test.js diff --git a/src/audits/PageWithBadTitle.js b/src/audits/PageWithBadTitle.js new file mode 100644 index 00000000..21c97298 --- /dev/null +++ b/src/audits/PageWithBadTitle.js @@ -0,0 +1,43 @@ +// 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(scope) { + // test length of title + if (document.title.length >= 66) + return true; + // test if last char of title is '.' + if (document.title.slice(-1) === '.') + return true; + // tests if title contains illegal chars + if (document.title.indexOf('-') === -1) + return true; + if (document.title.indexOf('/') === -1) + return true; + if (document.title.indexOf('\\') === -1) + return true; + return false; + }, + 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; + +}); + From 40ed4b3a38cc327768497658211ddbee900830b0 Mon Sep 17 00:00:00 2001 From: kristapsmelderis Date: Thu, 16 Jul 2015 03:48:32 -0700 Subject: [PATCH 2/3] page-title-test-02 fix audit script to query for title across scope, not use document directly --- src/audits/PageWithBadTitle.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/audits/PageWithBadTitle.js b/src/audits/PageWithBadTitle.js index 21c97298..07273b63 100644 --- a/src/audits/PageWithBadTitle.js +++ b/src/audits/PageWithBadTitle.js @@ -24,18 +24,20 @@ axs.AuditRules.addRule({ return element.tagName.toLowerCase() == "title"; }, test: function(scope) { + var head = scope.querySelector('head'); + var title = head.querySelector('title'); // test length of title - if (document.title.length >= 66) + if (title.length >= 66) return true; // test if last char of title is '.' - if (document.title.slice(-1) === '.') + if (title.slice(-1) === '.') return true; // tests if title contains illegal chars - if (document.title.indexOf('-') === -1) + if (title.indexOf('-') === -1) return true; - if (document.title.indexOf('/') === -1) + if (title.indexOf('/') === -1) return true; - if (document.title.indexOf('\\') === -1) + if (title.indexOf('\\') === -1) return true; return false; }, From 35aad78afe738fa2081b42df9aaac34bb70a5e95 Mon Sep 17 00:00:00 2001 From: kristapsmelderis Date: Tue, 21 Jul 2015 10:18:18 -0700 Subject: [PATCH 3/3] page-title-test-02 fix the AX_TITLE_02 audit so it works post-closure-build --- src/audits/PageWithBadTitle.js | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/audits/PageWithBadTitle.js b/src/audits/PageWithBadTitle.js index 07273b63..99d00dd3 100644 --- a/src/audits/PageWithBadTitle.js +++ b/src/audits/PageWithBadTitle.js @@ -23,23 +23,10 @@ axs.AuditRules.addRule({ relevantElementMatcher: function(element) { return element.tagName.toLowerCase() == "title"; }, - test: function(scope) { - var head = scope.querySelector('head'); - var title = head.querySelector('title'); - // test length of title - if (title.length >= 66) - return true; - // test if last char of title is '.' - if (title.slice(-1) === '.') - return true; - // tests if title contains illegal chars - if (title.indexOf('-') === -1) - return true; - if (title.indexOf('/') === -1) - return true; - if (title.indexOf('\\') === -1) - return true; - return false; + test: function(title) { + var titleText = title.textContent; + var badChars = /([-/\\]|[.]$)/; + return titleText.length > 65 || badChars.test(titleText); }, code: 'AX_TITLE_02' });