diff --git a/src/rules/alt-not-empty.js b/src/rules/alt-not-empty.js new file mode 100644 index 000000000..8ea57b504 --- /dev/null +++ b/src/rules/alt-not-empty.js @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2013, Yanis Wang + * Copyright (c) 2014, Takeshi Kurosawa + * MIT Licensed + */ +HTMLHint.addRule({ + id: 'alt-not-empty', + description: 'Alt of input[type=image], area[href] must set value.', + init: function(parser, reporter){ + var self = this; + parser.addListener('tagstart', function(event){ + var tagName = event.tagName.toLowerCase(), + attrs = event.attrs, + attrMap = {}, + attr, + col = event.col + tagName.length + 1, + selector; + if (tagName !== 'area' && tagName !== 'input'){ + return; + } + for(var i=0, l=attrs.length;i + * Copyright (c) 2014, Takeshi Kurosawa + * MIT Licensed + */ + +var expect = require("expect.js"); + +var HTMLHint = require("../../index").HTMLHint; + +var ruldId = 'alt-not-empty', + ruleOptions = {}; + +ruleOptions[ruldId] = true; + +describe('Rules: '+ruldId, function(){ + + /* 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 = ''; + var messages = HTMLHint.verify(code, ruleOptions); + expect(messages.length).to.be(0); + }); + + it('Area tag have not href and alt attribute should not result in an error', function(){ + var code = ''; + 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 = ''; + 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 = ''; + 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 = 'test'; + var messages = HTMLHint.verify(code, ruleOptions); + expect(messages.length).to.be(0); + }); + + it('Input tag have not type and alt attribute should not result in an error', function(){ + var code = ''; + 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 = ''; + 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 = ''; + 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 = ''; + 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 = ''; + var messages = HTMLHint.verify(code, ruleOptions); + expect(messages.length).to.be(0); + }); +}); \ No newline at end of file