test: parseAttr

This commit is contained in:
Zongmin Lei
2014-02-13 10:26:17 +08:00
parent 1540118ac7
commit ad057762a3
2 changed files with 45 additions and 4 deletions

View File

@@ -117,7 +117,7 @@ function parseAttr (html, onAttr) {
'user strict';
var lastPos = 0; // 当前位置
var retHtml = ''; // 待返回的HTML
var retAttrs = []; // 待返回的属性列表
var tmpName = false; // 临时属性名称
var len = html.length; // HTML代码长度
@@ -125,7 +125,7 @@ function parseAttr (html, onAttr) {
name = name.trim();
name = name.replace(REGEXP_ATTR_NAME, '').toLowerCase();
if (name.length < 1) return;
retHtml += onAttr(name, value);
retAttrs.push(onAttr(name, value || ''));
};
// 逐个分析字符
@@ -172,7 +172,7 @@ function parseAttr (html, onAttr) {
}
}
return retHtml.trim();
return retAttrs.join(' ').trim();
}
exports.parseTag = parseTag;

View File

@@ -46,11 +46,52 @@ describe('test HTML parser', function () {
throw new Error();
}
}, escapeHtml);
console.log(html);
assert.equal(html, 'hello[link]www[/link]ccc[B]');
});
it('#parseAttr', function () {
var i = 0;
function attr (n, v) {
if (v) {
return n + '="' + v.replace(/"/g, '&quote;') + '"';
} else {
return n;
}
}
var html = parseAttr('href="#"attr1=b attr2=c attr3 attr4=\'value4"\'attr5/', function (name, value) {
i++;
console.log(arguments);
if (i === 1) {
assert.equal(name, 'href');
assert.equal(value, '#');
return attr(name, value);
} else if (i === 2) {
assert.equal(name, 'attr1');
assert.equal(value, 'b');
return attr(name, value);
} else if (i === 3) {
assert.equal(name, 'attr2');
assert.equal(value, 'c');
return attr(name, value);
} else if (i === 4) {
assert.equal(name, 'attr3');
assert.equal(value, '');
return attr(name, value);
} else if (i === 5) {
assert.equal(name, 'attr4');
assert.equal(value, 'value4"');
return attr(name, value);
} else if (i === 6) {
assert.equal(name, 'attr5');
assert.equal(value, '');
return attr(name, value);
} else {
throw new Error();
}
});
console.log(html);
assert.equal(html, 'href="#" attr1="b" attr2="c" attr3 attr4="value4&quote;" attr5');
});
});