UNPKG

mip-validator

Version:
162 lines (160 loc) 5.37 kB
const chai = require('./chai.js') const expect = chai.expect const Validator = require('..') const ERR = require('../src/error/dfn.json') describe('mandatory tag missing', function() { var result it('should accept valid mandatory', function() { var validator = Validator({ div: { mandatory: true } }) result = validator.validate('<div><img></div>') expect(result).to.have.lengthOf(0) }) it('should support attributes', function() { var validator = Validator({ 'body': { 'mandatory': { 'mip': '/.*/', 'foo': 'bar' } } }) var result = validator.validate('<body mip foo="bar"></body>') expect(result).to.have.lengthOf(0) result = validator.validate('<body></body>') expect(result).to.have.lengthOf(1) expect(result[0].code).to.equal(ERR.MANDATORY_TAG_MISSING.code) var message = "强制性标签 '<body mip=\"/.*/\" foo=\"bar\">' 缺失或错误" expect(result[0].message).to.equal(message) }) it('should support arrays', function() { var validator = Validator({ 'link': { 'mandatory': [{ 'rel': 'standardhtml' }, { 'rel': 'miphtml' }] } }) var result = validator.validate('<div><link rel="standardhtml"><link rel="miphtml"></div>') expect(result).to.have.lengthOf(0) result = validator.validate('<div><link rel="miphtml"></div>') expect(result).to.have.lengthOf(1) }) it('should support OR arrays', function() { var validator = Validator({ 'meta': { 'mandatory_or': [{ 'http-equiv': '/Content-Type/i', 'content': '/charset=utf-8/' }, { 'charset': 'utf-8' }] } }) var result = validator.validate('<div></div>') expect(result).to.have.lengthOf(1) result = validator.validate('<meta http-equiv="content-type" content="charset=utf-8">') expect(result).to.have.lengthOf(0) result = validator.validate('<meta charset="utf-8">') expect(result).to.have.lengthOf(0) }) it('should reject when mandatory tag missing', function() { var validator = Validator({ div: { mandatory: true } }) var result = validator.validate('<p></p>') expect(result).to.have.lengthOf(1) var err = ERR.MANDATORY_TAG_MISSING expect(result[0].code).to.equal(err.code) var message = "强制性标签 '<div>' 缺失或错误" expect(result[0].message).to.equal(message) }) it('should accept when mandatory false', function() { var validator = Validator({ div: { mandatory: false } }) var result = validator.validate('<p></p>') expect(result).to.have.lengthOf(0) }) it('should accept when mandatory not set', function() { var validator = Validator({ div: {} }) var result = validator.validate('<p></p>') expect(result).to.have.lengthOf(0) }) it('should accept when rule not set', function() { var validator = Validator({}) var result = validator.validate('<p></p>') expect(result).to.have.lengthOf(0) }) it('should produce position info', function() { var validator = Validator({ div: { mandatory: true } }) var result = validator.validate('<p></p>') expect(result).to.have.lengthOf(1) expect(result[0].line).to.equal(0) expect(result[0].col).to.equal(0) }) it('should validate html/head/body tag', function() { var validator = Validator({ html: { mandatory: true }, head: { mandatory: true }, body: { mandatory: true } }) var result = validator.validate('<html><body><head>') expect(result).to.have.lengthOf(0) result = validator.validate('<div>') expect(result).to.have.lengthOf(3) }) it('should pass body when not specified', function() { var validator = Validator({ html: { mandatory: true }, head: { mandatory: true }, body: {} }) var result = validator.validate('<html><head>') console.log(result) expect(result).to.have.lengthOf(0) }) it('should validate noscript tag', function() { var validator = Validator({ 'noscript': { mandatory: true } }) var result = validator.validate('<html>') expect(result).to.have.lengthOf(1) }) it('should ignore case for tag name', function() { var validator = Validator({ html: { mandatory: true } }) var result = validator.validate('<HTMl></HTMl>') expect(result).to.have.lengthOf(0) }) })