sax
Version:
An evented streaming XML parser in JavaScript
45 lines (40 loc) • 1.27 kB
JavaScript
// BOM at the very begining of the stream should be ignored
require(__dirname).test({
xml: '\uFEFF<P></P>',
expect: [
['opentag', {'name':'P', attributes:{}, isSelfClosing: false}],
['closetag', 'P']
]
});
// In all other places it should be consumed
require(__dirname).test({
xml: '\uFEFF<P BOM="\uFEFF">\uFEFFStarts and ends with BOM\uFEFF</P>',
expect: [
['attribute', {'name':'BOM', 'value':'\uFEFF'}],
['opentag', {'name':'P', attributes:{'BOM':'\uFEFF'}, isSelfClosing: false}],
['text', '\uFEFFStarts and ends with BOM\uFEFF'],
['closetag', 'P']
]
});
// BOM after a whitespace is an error
require(__dirname).test({
xml: ' \uFEFF<P></P>',
expect: [
['error', 'Non-whitespace before first tag.\nLine: 0\nColumn: 2\nChar: \uFEFF'],
['text', '\uFEFF'],
['opentag', {'name': 'P', attributes: {}, isSelfClosing: false}],
['closetag', 'P'],
],
strict: true
});
// There is only one BOM allowed at the start
require(__dirname).test({
xml: '\uFEFF\uFEFF<P></P>',
expect: [
['error', 'Non-whitespace before first tag.\nLine: 0\nColumn: 2\nChar: \uFEFF'],
['text', '\uFEFF'],
['opentag', {'name': 'P', attributes: {}, isSelfClosing: false}],
['closetag', 'P'],
],
strict: true
});