1 | var fs = require("fs"),
|
2 | libxmljs = require("libxmljs"),
|
3 | test = require("tap").test;
|
4 |
|
5 | var addrs = require("../lib/email-addresses");
|
6 |
|
7 | var TESTS_FILE = "tests.xml",
|
8 | TESTS_FILE_ENCODING = "utf8";
|
9 |
|
10 | var ISEMAIL_ERR = "ISEMAIL_ERR",
|
11 | ISEMAIL_ERR_DOMAINHYPHENSTART = "ISEMAIL_ERR_DOMAINHYPHENSTART",
|
12 | ISEMAIL_ERR_DOMAINHYPHENEND = "ISEMAIL_ERR_DOMAINHYPHENEND";
|
13 |
|
14 |
|
15 | function isEmailTest(t, data) {
|
16 | var nodes = getNodes(data, "//test");
|
17 | nodes.forEach(function (node) {
|
18 | var id = getAttr(node, "id"),
|
19 | address = getChildValue(node, "address"),
|
20 | diagnosis = getChildValue(node, "diagnosis");
|
21 |
|
22 | var result = addrs(convertAddress(address)),
|
23 | ast = null;
|
24 | if (result !== null) {
|
25 | ast = result.addresses[0].node;
|
26 | }
|
27 |
|
28 | var isValid = ast !== null,
|
29 | expectedToBeValid = shouldParse(diagnosis);
|
30 |
|
31 | t.equal(isValid, expectedToBeValid,
|
32 | "[test " + id + "] address: " + address + ", expects: " + expectedToBeValid);
|
33 | });
|
34 | t.end();
|
35 | }
|
36 |
|
37 | function shouldParse(diagnosis) {
|
38 | var isOk = !startsWith(diagnosis, ISEMAIL_ERR) ||
|
39 |
|
40 |
|
41 |
|
42 |
|
43 | diagnosis === ISEMAIL_ERR_DOMAINHYPHENSTART ||
|
44 | diagnosis === ISEMAIL_ERR_DOMAINHYPHENEND;
|
45 | return isOk;
|
46 | }
|
47 |
|
48 |
|
49 |
|
50 | function convertAddress(s) {
|
51 | var chars = [];
|
52 | for (var i = 0; i < s.length; i += 1) {
|
53 | var code = s.charCodeAt(i);
|
54 | if (code >= 0x2400) {
|
55 | code -= 0x2400;
|
56 | }
|
57 | chars.push(String.fromCharCode(code));
|
58 | }
|
59 | return chars.join('');
|
60 | }
|
61 |
|
62 | function getChildValue(parent, nodeName) {
|
63 | return parent.find(nodeName)[0].text();
|
64 | }
|
65 |
|
66 | function getAttr(node, attrName) {
|
67 | return node.attr(attrName).value();
|
68 | }
|
69 |
|
70 | function getNodes(xml, xpath) {
|
71 | var doc = libxmljs.parseXml(xml);
|
72 | return doc.find(xpath);
|
73 | }
|
74 |
|
75 | function startsWith(s, t) {
|
76 | return s.substring(0, t.length) === t;
|
77 | }
|
78 |
|
79 | test("isemail tests", function (t) {
|
80 | fs.readFile(TESTS_FILE, TESTS_FILE_ENCODING, function (err, data) {
|
81 | if (err) {
|
82 | t.end();
|
83 | return console.error(err);
|
84 | }
|
85 | isEmailTest(t, data);
|
86 | });
|
87 | });
|