| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- var fs = require("fs"),
- libxmljs = require("libxmljs"),
- test = require("tap").test;
- var addrs = require("../lib/email-addresses");
- var TESTS_FILE = "tests.xml",
- TESTS_FILE_ENCODING = "utf8";
- var ISEMAIL_ERR = "ISEMAIL_ERR",
- ISEMAIL_ERR_DOMAINHYPHENSTART = "ISEMAIL_ERR_DOMAINHYPHENSTART",
- ISEMAIL_ERR_DOMAINHYPHENEND = "ISEMAIL_ERR_DOMAINHYPHENEND";
- function isEmailTest(t, data) {
- var nodes = getNodes(data, "//test");
- nodes.forEach(function (node) {
- var id = getAttr(node, "id"),
- address = getChildValue(node, "address"),
- diagnosis = getChildValue(node, "diagnosis");
- var result = addrs(convertAddress(address)),
- ast = null;
- if (result !== null) {
- ast = result.addresses[0].node;
- }
- var isValid = ast !== null,
- expectedToBeValid = shouldParse(diagnosis);
- t.equal(isValid, expectedToBeValid,
- "[test " + id + "] address: " + address + ", expects: " + expectedToBeValid);
- });
- t.end();
- }
- function shouldParse(diagnosis) {
- var isOk = !startsWith(diagnosis, ISEMAIL_ERR) ||
- // is_email considers address with a domain beginning
- // or ending with "-" to be incorrect because they are not
- // valid domains, but we are only concerned with rfc5322.
- // From rfc5322's perspective, this is OK.
- diagnosis === ISEMAIL_ERR_DOMAINHYPHENSTART ||
- diagnosis === ISEMAIL_ERR_DOMAINHYPHENEND;
- return isOk;
- }
- // the is_email tests encode control characters
- // in the U+2400 block for display purposes
- function convertAddress(s) {
- var chars = [];
- for (var i = 0; i < s.length; i += 1) {
- var code = s.charCodeAt(i);
- if (code >= 0x2400) {
- code -= 0x2400;
- }
- chars.push(String.fromCharCode(code));
- }
- return chars.join('');
- }
- function getChildValue(parent, nodeName) {
- return parent.find(nodeName)[0].text();
- }
- function getAttr(node, attrName) {
- return node.attr(attrName).value();
- }
- function getNodes(xml, xpath) {
- var doc = libxmljs.parseXml(xml);
- return doc.find(xpath);
- }
- function startsWith(s, t) {
- return s.substring(0, t.length) === t;
- }
- test("isemail tests", function (t) {
- fs.readFile(TESTS_FILE, TESTS_FILE_ENCODING, function (err, data) {
- if (err) {
- t.end();
- return console.error(err);
- }
- isEmailTest(t, data);
- });
- });
|