-
-
Notifications
You must be signed in to change notification settings - Fork 385
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add rule: title-require,
<title>
must be present in <head>
tag.
- Loading branch information
Showing
15 changed files
with
625 additions
and
494 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/** | ||
* Copyright (c) 2015, Yanis Wang <[email protected]> | ||
* MIT Licensed | ||
*/ | ||
HTMLHint.addRule({ | ||
id: 'title-require', | ||
description: '<title> must be present in <head> tag.', | ||
init: function(parser, reporter){ | ||
var self = this; | ||
var hasTitle = false; | ||
function onTagStart(event){ | ||
if(event.tagName.toLowerCase() === 'title'){ | ||
hasTitle = true; | ||
} | ||
} | ||
function onTagEnd(event){ | ||
if(event.tagName.toLowerCase() === 'head'){ | ||
if(hasTitle === false){ | ||
reporter.error('<title> must be present in <head> tag.', event.line, event.col, self, event.raw); | ||
} | ||
parser.removeListener('tagstart', onTagStart); | ||
parser.removeListener('tagstart', onTagEnd); | ||
} | ||
} | ||
parser.addListener('tagstart', onTagStart); | ||
parser.addListener('tagend', onTagEnd); | ||
} | ||
}); |
232 changes: 116 additions & 116 deletions
232
test/rules/alt-require.js → test/rules/alt-require.spec.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,116 +1,116 @@ | ||
/** | ||
* Copyright (c) 2015, Yanis Wang <[email protected]> | ||
* Copyright (c) 2014, Takeshi Kurosawa <[email protected]> | ||
* MIT Licensed | ||
*/ | ||
|
||
var expect = require("expect.js"); | ||
|
||
var HTMLHint = require("../../index").HTMLHint; | ||
|
||
var ruldId = 'alt-require', | ||
ruleOptions = {}; | ||
|
||
ruleOptions[ruldId] = true; | ||
|
||
describe('Rules: '+ruldId, function(){ | ||
|
||
it('Img tag have empty alt attribute should not result in an error', function(){ | ||
var code = '<img width="200" height="300" alt="">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Img tag have non empty alt attribute should not result in an error', function(){ | ||
var code = '<img width="200" height="300" alt="test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Img tag have not alt attribute should result in an error', function(){ | ||
var code = '<img width="200" height="300">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(5); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
/* A tag can have shape and coords attributes and not have alt attribute */ | ||
it('A tag have not alt attribute should not result in an error', function(){ | ||
var code = '<a>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Area tag have not href and alt attributes should not result in an error', function(){ | ||
var code = '<area>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Area[href] tag have not alt attribute should result in an error', function(){ | ||
var code = '<area href="#test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(6); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Area[href] tag have empty alt attribute should result in an error', function(){ | ||
var code = '<area href="#test" alt="">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(6); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Area[href] tag have non emtpy alt attribute should not result in an error', function(){ | ||
var code = '<area href="#test" alt="test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input tag have not type and alt attributes should not result in an error', function(){ | ||
var code = '<input>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input[type="text"] tag have not alt attribute should not result in an error', function(){ | ||
var code = '<input type="text">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input[type="image"] tag have not alt attribute should result in an error', function(){ | ||
var code = '<input type="image">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(7); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Input[type="image"] tag have empty alt attribute should result in an error', function(){ | ||
var code = '<input type="image" alt="">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(7); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Input[type="image"] tag have non emtpy alt attribute should not result in an error', function(){ | ||
var code = '<input type="image" alt="test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
}); | ||
/** | ||
* Copyright (c) 2015, Yanis Wang <[email protected]> | ||
* Copyright (c) 2014, Takeshi Kurosawa <[email protected]> | ||
* MIT Licensed | ||
*/ | ||
|
||
var expect = require("expect.js"); | ||
|
||
var HTMLHint = require("../../index").HTMLHint; | ||
|
||
var ruldId = 'alt-require', | ||
ruleOptions = {}; | ||
|
||
ruleOptions[ruldId] = true; | ||
|
||
describe('Rules: '+ruldId, function(){ | ||
|
||
it('Img tag have empty alt attribute should not result in an error', function(){ | ||
var code = '<img width="200" height="300" alt="">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Img tag have non empty alt attribute should not result in an error', function(){ | ||
var code = '<img width="200" height="300" alt="test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Img tag have not alt attribute should result in an error', function(){ | ||
var code = '<img width="200" height="300">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(5); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
/* A tag can have shape and coords attributes and not have alt attribute */ | ||
it('A tag have not alt attribute should not result in an error', function(){ | ||
var code = '<a>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Area tag have not href and alt attributes should not result in an error', function(){ | ||
var code = '<area>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Area[href] tag have not alt attribute should result in an error', function(){ | ||
var code = '<area href="#test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(6); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Area[href] tag have empty alt attribute should result in an error', function(){ | ||
var code = '<area href="#test" alt="">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(6); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Area[href] tag have non emtpy alt attribute should not result in an error', function(){ | ||
var code = '<area href="#test" alt="test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input tag have not type and alt attributes should not result in an error', function(){ | ||
var code = '<input>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input[type="text"] tag have not alt attribute should not result in an error', function(){ | ||
var code = '<input type="text">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input[type="image"] tag have not alt attribute should result in an error', function(){ | ||
var code = '<input type="image">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(7); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Input[type="image"] tag have empty alt attribute should result in an error', function(){ | ||
var code = '<input type="image" alt="">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(7); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Input[type="image"] tag have non emtpy alt attribute should not result in an error', function(){ | ||
var code = '<input type="image" alt="test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
}); |
62 changes: 31 additions & 31 deletions
62
test/rules/attr-no-duplication.js → test/rules/attr-no-duplication.spec.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,32 @@ | ||
/** | ||
* Copyright (c) 2014, Yanis Wang <[email protected]> | ||
* MIT Licensed | ||
*/ | ||
|
||
var expect = require("expect.js"); | ||
|
||
var HTMLHint = require("../../index").HTMLHint; | ||
|
||
var ruldId = 'attr-no-duplication', | ||
ruleOptions = {}; | ||
|
||
ruleOptions[ruldId] = true; | ||
|
||
describe('Rules: '+ruldId, function(){ | ||
|
||
it('Attribute name been duplication should result in an error', function(){ | ||
var code = '<a href="a" href="b">bbb</a>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(12); | ||
}); | ||
|
||
it('Attribute name not been duplication should not result in an error', function(){ | ||
var code = '<a href="a">bbb</a>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
/** | ||
* Copyright (c) 2014, Yanis Wang <[email protected]> | ||
* MIT Licensed | ||
*/ | ||
|
||
var expect = require("expect.js"); | ||
|
||
var HTMLHint = require("../../index").HTMLHint; | ||
|
||
var ruldId = 'attr-no-duplication', | ||
ruleOptions = {}; | ||
|
||
ruleOptions[ruldId] = true; | ||
|
||
describe('Rules: '+ruldId, function(){ | ||
|
||
it('Attribute name been duplication should result in an error', function(){ | ||
var code = '<a href="a" href="b">bbb</a>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(12); | ||
}); | ||
|
||
it('Attribute name not been duplication should not result in an error', function(){ | ||
var code = '<a href="a">bbb</a>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
}); |
Oops, something went wrong.