Initial commit
This commit is contained in:
commit
ec49fedc45
1288 files changed
+226749
No files matched your search
+33
@@ -0,0 +1,33 @@
|
||||
require(__dirname).test(
|
||||
{ xml: "<root length='12345'></root>"
|
||||
, expect: [
|
||||
["attribute", {
|
||||
name: "length"
|
||||
, value: "12345"
|
||||
, prefix: ""
|
||||
, local: "length"
|
||||
, uri: ""
|
||||
}]
|
||||
, ["opentag", {
|
||||
name: "root"
|
||||
, prefix: ""
|
||||
, local: "root"
|
||||
, uri: ""
|
||||
, attributes: {
|
||||
length: {
|
||||
name: "length"
|
||||
, value: "12345"
|
||||
, prefix: ""
|
||||
, local: "length"
|
||||
, uri: ""
|
||||
}
|
||||
}
|
||||
, ns: {}
|
||||
, isSelfClosing: false
|
||||
}]
|
||||
, ["closetag", "root"]
|
||||
]
|
||||
, strict: true
|
||||
, opt: { xmlns: true }
|
||||
}
|
||||
)
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
// non-strict: no error
|
||||
require(__dirname).test
|
||||
( { xml : '<root attr1="first"attr2="second"/>'
|
||||
|
||||
, expect :
|
||||
[ [ "attribute", { name: 'attr1', value: 'first' } ]
|
||||
, [ "attribute", { name: 'attr2', value: 'second' } ]
|
||||
, [ "opentag", { name: "root", attributes: {attr1: 'first', attr2: 'second'}, isSelfClosing: true } ]
|
||||
, [ "closetag", "root" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : { lowercase: true }
|
||||
}
|
||||
)
|
||||
|
||||
// strict: should give an error, but still parse
|
||||
require(__dirname).test
|
||||
( { xml : '<root attr1="first"attr2="second"/>'
|
||||
|
||||
, expect :
|
||||
[ [ "attribute", { name: 'attr1', value: 'first' } ]
|
||||
, [ "error", "No whitespace between attributes\nLine: 0\nColumn: 20\nChar: a" ]
|
||||
, [ "attribute", { name: 'attr2', value: 'second' } ]
|
||||
, [ "opentag", { name: "root", attributes: {attr1: 'first', attr2: 'second'}, isSelfClosing: true } ]
|
||||
, [ "closetag", "root" ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { }
|
||||
}
|
||||
)
|
||||
|
||||
// strict: other cases should still pass
|
||||
require(__dirname).test
|
||||
( { xml : '<root attr1="first" attr2="second"/>'
|
||||
|
||||
, expect :
|
||||
[ [ "attribute", { name: 'attr1', value: 'first' } ]
|
||||
, [ "attribute", { name: 'attr2', value: 'second' } ]
|
||||
, [ "opentag", { name: "root", attributes: {attr1: 'first', attr2: 'second'}, isSelfClosing: true } ]
|
||||
, [ "closetag", "root" ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { }
|
||||
}
|
||||
)
|
||||
|
||||
// strict: other cases should still pass
|
||||
require(__dirname).test
|
||||
( { xml : '<root attr1="first"\nattr2="second"/>'
|
||||
|
||||
, expect :
|
||||
[ [ "attribute", { name: 'attr1', value: 'first' } ]
|
||||
, [ "attribute", { name: 'attr2', value: 'second' } ]
|
||||
, [ "opentag", { name: "root", attributes: {attr1: 'first', attr2: 'second'}, isSelfClosing: true } ]
|
||||
, [ "closetag", "root" ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { }
|
||||
}
|
||||
)
|
||||
|
||||
// strict: other cases should still pass
|
||||
require(__dirname).test
|
||||
( { xml : '<root attr1="first" attr2="second"/>'
|
||||
|
||||
, expect :
|
||||
[ [ "attribute", { name: 'attr1', value: 'first' } ]
|
||||
, [ "attribute", { name: 'attr2', value: 'second' } ]
|
||||
, [ "opentag", { name: "root", attributes: {attr1: 'first', attr2: 'second'}, isSelfClosing: true } ]
|
||||
, [ "closetag", "root" ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { }
|
||||
}
|
||||
)
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
// set this really low so that I don't have to put 64 MB of xml in here.
|
||||
var sax = require("../lib/sax")
|
||||
var bl = sax.MAX_BUFFER_LENGTH
|
||||
sax.MAX_BUFFER_LENGTH = 5;
|
||||
|
||||
require(__dirname).test({
|
||||
expect : [
|
||||
["error", "Max buffer length exceeded: tagName\nLine: 0\nColumn: 15\nChar: "],
|
||||
["error", "Max buffer length exceeded: tagName\nLine: 0\nColumn: 30\nChar: "],
|
||||
["error", "Max buffer length exceeded: tagName\nLine: 0\nColumn: 45\nChar: "],
|
||||
["opentag", {
|
||||
"name": "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||
"attributes": {},
|
||||
"isSelfClosing": false
|
||||
}],
|
||||
["text", "yo"],
|
||||
["closetag", "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"]
|
||||
]
|
||||
}).write("<abcdefghijklmn")
|
||||
.write("opqrstuvwxyzABC")
|
||||
.write("DEFGHIJKLMNOPQR")
|
||||
.write("STUVWXYZ>")
|
||||
.write("yo")
|
||||
.write("</abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ>")
|
||||
.close();
|
||||
sax.MAX_BUFFER_LENGTH = bl
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
// default to uppercase
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<span class=\"test\" hello=\"world\"></span>"
|
||||
, expect :
|
||||
[ [ "attribute", { name: "CLASS", value: "test" } ]
|
||||
, [ "attribute", { name: "HELLO", value: "world" } ]
|
||||
, [ "opentag", { name: "SPAN",
|
||||
attributes: { CLASS: "test", HELLO: "world" },
|
||||
isSelfClosing: false } ]
|
||||
, [ "closetag", "SPAN" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
|
||||
// lowercase option : lowercase tag/attribute names
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<span class=\"test\" hello=\"world\"></span>"
|
||||
, expect :
|
||||
[ [ "attribute", { name: "class", value: "test" } ]
|
||||
, [ "attribute", { name: "hello", value: "world" } ]
|
||||
, [ "opentag", { name: "span",
|
||||
attributes: { class: "test", hello: "world" },
|
||||
isSelfClosing: false } ]
|
||||
, [ "closetag", "span" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : {lowercase:true}
|
||||
}
|
||||
)
|
||||
|
||||
// backward compatibility with old lowercasetags opt
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<span class=\"test\" hello=\"world\"></span>"
|
||||
, expect :
|
||||
[ [ "attribute", { name: "class", value: "test" } ]
|
||||
, [ "attribute", { name: "hello", value: "world" } ]
|
||||
, [ "opentag", { name: "span",
|
||||
attributes: { class: "test", hello: "world" },
|
||||
isSelfClosing: false } ]
|
||||
, [ "closetag", "span" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : {lowercasetags:true}
|
||||
}
|
||||
)
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
|
||||
require(__dirname).test({
|
||||
expect : [
|
||||
["opentag", {"name": "R","attributes": {}, "isSelfClosing": false}],
|
||||
["opencdata", undefined],
|
||||
["cdata", " this is character data "],
|
||||
["closecdata", undefined],
|
||||
["closetag", "R"]
|
||||
]
|
||||
}).write("<r><![CDATA[ this is ").write("character data ").write("]]></r>").close();
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
|
||||
require(__dirname).test({
|
||||
expect : [
|
||||
["opentag", {"name": "R","attributes": {}, "isSelfClosing": false}],
|
||||
["opencdata", undefined],
|
||||
["cdata", " this is "],
|
||||
["closecdata", undefined],
|
||||
["closetag", "R"]
|
||||
]
|
||||
})
|
||||
.write("<r><![CDATA[ this is ]")
|
||||
.write("]>")
|
||||
.write("</r>")
|
||||
.close();
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
|
||||
var p = require(__dirname).test({
|
||||
expect : [
|
||||
["opentag", {"name": "R","attributes": {}, "isSelfClosing": false}],
|
||||
["opencdata", undefined],
|
||||
["cdata", "[[[[[[[[]]]]]]]]"],
|
||||
["closecdata", undefined],
|
||||
["closetag", "R"]
|
||||
]
|
||||
})
|
||||
var x = "<r><![CDATA[[[[[[[[[]]]]]]]]]]></r>"
|
||||
for (var i = 0; i < x.length ; i ++) {
|
||||
p.write(x.charAt(i))
|
||||
}
|
||||
p.close();
|
||||
|
||||
|
||||
var p2 = require(__dirname).test({
|
||||
expect : [
|
||||
["opentag", {"name": "R","attributes": {}, "isSelfClosing": false}],
|
||||
["opencdata", undefined],
|
||||
["cdata", "[[[[[[[[]]]]]]]]"],
|
||||
["closecdata", undefined],
|
||||
["closetag", "R"]
|
||||
]
|
||||
})
|
||||
var x = "<r><![CDATA[[[[[[[[[]]]]]]]]]]></r>"
|
||||
p2.write(x).close();
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
|
||||
require(__dirname).test({
|
||||
expect : [
|
||||
["opentag", {"name": "R","attributes": {}, "isSelfClosing": false}],
|
||||
["opencdata", undefined],
|
||||
["cdata", " this is "],
|
||||
["closecdata", undefined],
|
||||
["opencdata", undefined],
|
||||
["cdata", "character data "],
|
||||
["closecdata", undefined],
|
||||
["closetag", "R"]
|
||||
]
|
||||
}).write("<r><![CDATA[ this is ]]>").write("<![CDA").write("T").write("A[")
|
||||
.write("character data ").write("]]></r>").close();
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
require(__dirname).test({
|
||||
xml : "<r><![CDATA[ this is character data ]]></r>",
|
||||
expect : [
|
||||
["opentag", {"name": "R","attributes": {}, "isSelfClosing": false}],
|
||||
["opencdata", undefined],
|
||||
["cdata", " this is character data "],
|
||||
["closecdata", undefined],
|
||||
["closetag", "R"]
|
||||
]
|
||||
});
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
require(__dirname).test({
|
||||
xml: '<Р>тест</Р>',
|
||||
expect: [
|
||||
['opentag', {'name':'Р', attributes:{}, isSelfClosing: false}],
|
||||
['text', 'тест'],
|
||||
['closetag', 'Р']
|
||||
]
|
||||
});
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<span id=\"hello\" id=\"there\"></span>"
|
||||
, expect :
|
||||
[ [ "attribute", { name: "ID", value: "hello" } ]
|
||||
, [ "opentag", { name: "SPAN",
|
||||
attributes: { ID: "hello" }, isSelfClosing: false } ]
|
||||
, [ "closetag", "SPAN" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
var assert = require('assert');
|
||||
var saxStream = require('../lib/sax').createStream();
|
||||
assert.doesNotThrow(function() {
|
||||
saxStream.end();
|
||||
});
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
require(__dirname).test({
|
||||
xml: '<r>⌋ ' +
|
||||
'♠ © → & ' +
|
||||
'< < < < < > ℜ ℘ €</r>',
|
||||
expect: [
|
||||
['opentag', {'name':'R', attributes:{}, isSelfClosing: false}],
|
||||
['text', '⌋ ♠ © → & < < < < < > ℜ ℘ €'],
|
||||
['closetag', 'R']
|
||||
]
|
||||
});
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
var sax = require('../');
|
||||
var xml = '<r>';
|
||||
var text = '';
|
||||
for (var i in sax.ENTITIES) {
|
||||
xml += '&' + i + ';'
|
||||
text += sax.ENTITIES[i]
|
||||
}
|
||||
xml += '</r>'
|
||||
require(__dirname).test({
|
||||
xml: xml,
|
||||
expect: [
|
||||
['opentag', {'name':'R', attributes:{}, isSelfClosing: false}],
|
||||
['text', text],
|
||||
['closetag', 'R']
|
||||
]
|
||||
});
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
var parser = require(__dirname).test({
|
||||
expect: [
|
||||
['opentag', {'name':'T', attributes:{}, isSelfClosing: false}],
|
||||
['text', 'flush'],
|
||||
['text', 'rest'],
|
||||
['closetag', 'T'],
|
||||
]
|
||||
});
|
||||
|
||||
parser.write('<T>flush');
|
||||
parser.flush();
|
||||
parser.write('rest</T>');
|
||||
parser.close();
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
var globalsBefore = JSON.stringify(Object.keys(global))
|
||||
, util = require("util")
|
||||
, assert = require("assert")
|
||||
, fs = require("fs")
|
||||
, path = require("path")
|
||||
, sax = require("../lib/sax")
|
||||
|
||||
exports.sax = sax
|
||||
|
||||
// handy way to do simple unit tests
|
||||
// if the options contains an xml string, it'll be written and the parser closed.
|
||||
// otherwise, it's assumed that the test will write and close.
|
||||
exports.test = function test (options) {
|
||||
var xml = options.xml
|
||||
, parser = sax.parser(options.strict, options.opt)
|
||||
, expect = options.expect
|
||||
, e = 0
|
||||
sax.EVENTS.forEach(function (ev) {
|
||||
parser["on" + ev] = function (n) {
|
||||
if (process.env.DEBUG) {
|
||||
console.error({ expect: expect[e]
|
||||
, actual: [ev, n] })
|
||||
}
|
||||
if (e >= expect.length && (ev === "end" || ev === "ready")) return
|
||||
assert.ok( e < expect.length,
|
||||
"expectation #"+e+" "+util.inspect(expect[e])+"\n"+
|
||||
"Unexpected event: "+ev+" "+(n ? util.inspect(n) : ""))
|
||||
var inspected = n instanceof Error ? "\n"+ n.message : util.inspect(n)
|
||||
assert.equal(ev, expect[e][0],
|
||||
"expectation #"+e+"\n"+
|
||||
"Didn't get expected event\n"+
|
||||
"expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+
|
||||
"actual: "+ev+" "+inspected+"\n")
|
||||
if (ev === "error") assert.equal(n.message, expect[e][1])
|
||||
else assert.deepEqual(n, expect[e][1],
|
||||
"expectation #"+e+"\n"+
|
||||
"Didn't get expected argument\n"+
|
||||
"expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+
|
||||
"actual: "+ev+" "+inspected+"\n")
|
||||
e++
|
||||
if (ev === "error") parser.resume()
|
||||
}
|
||||
})
|
||||
if (xml) parser.write(xml).close()
|
||||
return parser
|
||||
}
|
||||
|
||||
if (module === require.main) {
|
||||
var running = true
|
||||
, failures = 0
|
||||
|
||||
function fail (file, er) {
|
||||
util.error("Failed: "+file)
|
||||
util.error(er.stack || er.message)
|
||||
failures ++
|
||||
}
|
||||
|
||||
fs.readdir(__dirname, function (error, files) {
|
||||
files = files.filter(function (file) {
|
||||
return (/\.js$/.exec(file) && file !== 'index.js')
|
||||
})
|
||||
var n = files.length
|
||||
, i = 0
|
||||
console.log("0.." + n)
|
||||
files.forEach(function (file) {
|
||||
// run this test.
|
||||
try {
|
||||
require(path.resolve(__dirname, file))
|
||||
var globalsAfter = JSON.stringify(Object.keys(global))
|
||||
if (globalsAfter !== globalsBefore) {
|
||||
var er = new Error("new globals introduced\n"+
|
||||
"expected: "+globalsBefore+"\n"+
|
||||
"actual: "+globalsAfter)
|
||||
globalsBefore = globalsAfter
|
||||
throw er
|
||||
}
|
||||
console.log("ok " + (++i) + " - " + file)
|
||||
} catch (er) {
|
||||
console.log("not ok "+ (++i) + " - " + file)
|
||||
fail(file, er)
|
||||
}
|
||||
})
|
||||
if (!failures) return console.log("#all pass")
|
||||
else return console.error(failures + " failure" + (failures > 1 ? "s" : ""))
|
||||
})
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<compileClassesResponse>"+
|
||||
"<result>"+
|
||||
"<bodyCrc>653724009</bodyCrc>"+
|
||||
"<column>-1</column>"+
|
||||
"<id>01pG0000002KoSUIA0</id>"+
|
||||
"<line>-1</line>"+
|
||||
"<name>CalendarController</name>"+
|
||||
"<success>true</success>"+
|
||||
"</result>"+
|
||||
"</compileClassesResponse>"
|
||||
|
||||
, expect :
|
||||
[ [ "opentag", { name: "COMPILECLASSESRESPONSE", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "opentag", { name : "RESULT", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "opentag", { name: "BODYCRC", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "653724009" ]
|
||||
, [ "closetag", "BODYCRC" ]
|
||||
, [ "opentag", { name: "COLUMN", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "-1" ]
|
||||
, [ "closetag", "COLUMN" ]
|
||||
, [ "opentag", { name: "ID", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "01pG0000002KoSUIA0" ]
|
||||
, [ "closetag", "ID" ]
|
||||
, [ "opentag", {name: "LINE", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "-1" ]
|
||||
, [ "closetag", "LINE" ]
|
||||
, [ "opentag", {name: "NAME", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "CalendarController" ]
|
||||
, [ "closetag", "NAME" ]
|
||||
, [ "opentag", {name: "SUCCESS", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "true" ]
|
||||
, [ "closetag", "SUCCESS" ]
|
||||
, [ "closetag", "RESULT" ]
|
||||
, [ "closetag", "COMPILECLASSESRESPONSE" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// https://github.com/isaacs/sax-js/issues/33
|
||||
require(__dirname).test
|
||||
( { xml : "<xml>\n"+
|
||||
"<!-- \n"+
|
||||
" comment with a single dash- in it\n"+
|
||||
"-->\n"+
|
||||
"<data/>\n"+
|
||||
"</xml>"
|
||||
|
||||
, expect :
|
||||
[ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "\n" ]
|
||||
, [ "comment", " \n comment with a single dash- in it\n" ]
|
||||
, [ "text", "\n" ]
|
||||
, [ "opentag", { name: "data", attributes: {}, isSelfClosing: true } ]
|
||||
, [ "closetag", "data" ]
|
||||
, [ "text", "\n" ]
|
||||
, [ "closetag", "xml" ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
// https://github.com/isaacs/sax-js/issues/35
|
||||
require(__dirname).test
|
||||
( { xml : "<xml>

\n"+
|
||||
"</xml>"
|
||||
|
||||
, expect :
|
||||
[ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "\r\r\n" ]
|
||||
, [ "closetag", "xml" ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// https://github.com/isaacs/sax-js/issues/47
|
||||
require(__dirname).test
|
||||
( { xml : '<a href="query.svc?x=1&y=2&z=3"/>'
|
||||
, expect : [
|
||||
[ "attribute", { name:'HREF', value:"query.svc?x=1&y=2&z=3"} ],
|
||||
[ "opentag", { name: "A", attributes: { HREF:"query.svc?x=1&y=2&z=3"}, isSelfClosing: true } ],
|
||||
[ "closetag", "A" ]
|
||||
]
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
// https://github.com/isaacs/sax-js/issues/49
|
||||
require(__dirname).test
|
||||
( { xml : "<xml><script>hello world</script></xml>"
|
||||
, expect :
|
||||
[ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "hello world" ]
|
||||
, [ "closetag", "script" ]
|
||||
, [ "closetag", "xml" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : { lowercasetags: true, noscript: true }
|
||||
}
|
||||
)
|
||||
|
||||
require(__dirname).test
|
||||
( { xml : "<xml><script><![CDATA[hello world]]></script></xml>"
|
||||
, expect :
|
||||
[ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "opencdata", undefined ]
|
||||
, [ "cdata", "hello world" ]
|
||||
, [ "closecdata", undefined ]
|
||||
, [ "closetag", "script" ]
|
||||
, [ "closetag", "xml" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : { lowercasetags: true, noscript: true }
|
||||
}
|
||||
)
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// https://github.com/isaacs/sax-js/issues/49
|
||||
require(__dirname).test
|
||||
( { xml : "<?has unbalanced \"quotes?><xml>body</xml>"
|
||||
, expect :
|
||||
[ [ "processinginstruction", { name: "has", body: "unbalanced \"quotes" } ],
|
||||
[ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "body" ]
|
||||
, [ "closetag", "xml" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : { lowercasetags: true, noscript: true }
|
||||
}
|
||||
)
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
var sax = require("../lib/sax"),
|
||||
assert = require("assert")
|
||||
|
||||
function testPosition(chunks, expectedEvents) {
|
||||
var parser = sax.parser();
|
||||
expectedEvents.forEach(function(expectation) {
|
||||
parser['on' + expectation[0]] = function() {
|
||||
for (var prop in expectation[1]) {
|
||||
assert.equal(parser[prop], expectation[1][prop]);
|
||||
}
|
||||
}
|
||||
});
|
||||
chunks.forEach(function(chunk) {
|
||||
parser.write(chunk);
|
||||
});
|
||||
};
|
||||
|
||||
testPosition(['<div>abcdefgh</div>'],
|
||||
[ ['opentag', { position: 5, startTagPosition: 1 }]
|
||||
, ['text', { position: 19, startTagPosition: 14 }]
|
||||
, ['closetag', { position: 19, startTagPosition: 14 }]
|
||||
]);
|
||||
|
||||
testPosition(['<div>abcde','fgh</div>'],
|
||||
[ ['opentag', { position: 5, startTagPosition: 1 }]
|
||||
, ['text', { position: 19, startTagPosition: 14 }]
|
||||
, ['closetag', { position: 19, startTagPosition: 14 }]
|
||||
]);
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
require(__dirname).test({
|
||||
xml : "<html><head><script>'<div>foo</div></'</script></head></html>",
|
||||
expect : [
|
||||
["opentag", {"name": "HTML","attributes": {}, isSelfClosing: false}],
|
||||
["opentag", {"name": "HEAD","attributes": {}, isSelfClosing: false}],
|
||||
["opentag", {"name": "SCRIPT","attributes": {}, isSelfClosing: false}],
|
||||
["script", "'<div>foo</div></'"],
|
||||
["closetag", "SCRIPT"],
|
||||
["closetag", "HEAD"],
|
||||
["closetag", "HTML"]
|
||||
]
|
||||
});
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
require(__dirname).test({
|
||||
xml : "<html><head><script>if (1 < 0) { console.log('elo there'); }</script></head></html>",
|
||||
expect : [
|
||||
["opentag", {"name": "HTML","attributes": {}, "isSelfClosing": false}],
|
||||
["opentag", {"name": "HEAD","attributes": {}, "isSelfClosing": false}],
|
||||
["opentag", {"name": "SCRIPT","attributes": {}, "isSelfClosing": false}],
|
||||
["script", "if (1 < 0) { console.log('elo there'); }"],
|
||||
["closetag", "SCRIPT"],
|
||||
["closetag", "HEAD"],
|
||||
["closetag", "HTML"]
|
||||
]
|
||||
});
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
|
||||
require(__dirname).test({
|
||||
xml :
|
||||
"<root>"+
|
||||
"<child>" +
|
||||
"<haha />" +
|
||||
"</child>" +
|
||||
"<monkey>" +
|
||||
"=(|)" +
|
||||
"</monkey>" +
|
||||
"</root>",
|
||||
expect : [
|
||||
["opentag", {
|
||||
"name": "root",
|
||||
"attributes": {},
|
||||
"isSelfClosing": false
|
||||
}],
|
||||
["opentag", {
|
||||
"name": "child",
|
||||
"attributes": {},
|
||||
"isSelfClosing": false
|
||||
}],
|
||||
["opentag", {
|
||||
"name": "haha",
|
||||
"attributes": {},
|
||||
"isSelfClosing": true
|
||||
}],
|
||||
["closetag", "haha"],
|
||||
["closetag", "child"],
|
||||
["opentag", {
|
||||
"name": "monkey",
|
||||
"attributes": {},
|
||||
"isSelfClosing": false
|
||||
}],
|
||||
["text", "=(|)"],
|
||||
["closetag", "monkey"],
|
||||
["closetag", "root"],
|
||||
["end"],
|
||||
["ready"]
|
||||
],
|
||||
strict : true,
|
||||
opt : {}
|
||||
});
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
|
||||
require(__dirname).test({
|
||||
xml :
|
||||
"<root>"+
|
||||
"<child>" +
|
||||
"<haha />" +
|
||||
"</child>" +
|
||||
"<monkey>" +
|
||||
"=(|)" +
|
||||
"</monkey>" +
|
||||
"</root>",
|
||||
expect : [
|
||||
["opentag", {
|
||||
"name": "ROOT",
|
||||
"attributes": {},
|
||||
"isSelfClosing": false
|
||||
}],
|
||||
["opentag", {
|
||||
"name": "CHILD",
|
||||
"attributes": {},
|
||||
"isSelfClosing": false
|
||||
}],
|
||||
["opentag", {
|
||||
"name": "HAHA",
|
||||
"attributes": {},
|
||||
"isSelfClosing": true
|
||||
}],
|
||||
["closetag", "HAHA"],
|
||||
["closetag", "CHILD"],
|
||||
["opentag", {
|
||||
"name": "MONKEY",
|
||||
"attributes": {},
|
||||
"isSelfClosing": false
|
||||
}],
|
||||
["text", "=(|)"],
|
||||
["closetag", "MONKEY"],
|
||||
["closetag", "ROOT"],
|
||||
["end"],
|
||||
["ready"]
|
||||
],
|
||||
strict : false,
|
||||
opt : {}
|
||||
});
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
|
||||
require(__dirname).test({
|
||||
xml :
|
||||
"<root> "+
|
||||
"<haha /> "+
|
||||
"<haha/> "+
|
||||
"<monkey> "+
|
||||
"=(|) "+
|
||||
"</monkey>"+
|
||||
"</root> ",
|
||||
expect : [
|
||||
["opentag", {name:"ROOT", attributes:{}, isSelfClosing: false}],
|
||||
["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}],
|
||||
["closetag", "HAHA"],
|
||||
["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}],
|
||||
["closetag", "HAHA"],
|
||||
// ["opentag", {name:"HAHA", attributes:{}}],
|
||||
// ["closetag", "HAHA"],
|
||||
["opentag", {name:"MONKEY", attributes:{}, isSelfClosing: false}],
|
||||
["text", "=(|)"],
|
||||
["closetag", "MONKEY"],
|
||||
["closetag", "ROOT"]
|
||||
],
|
||||
opt : { trim : true }
|
||||
});
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// stray ending tags should just be ignored in non-strict mode.
|
||||
// https://github.com/isaacs/sax-js/issues/32
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<a><b></c></b></a>"
|
||||
, expect :
|
||||
[ [ "opentag", { name: "A", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "opentag", { name: "B", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "text", "</c>" ]
|
||||
, [ "closetag", "B" ]
|
||||
, [ "closetag", "A" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
|
||||
require(__dirname).test({
|
||||
xml :
|
||||
"<root attrib>",
|
||||
expect : [
|
||||
["attribute", {name:"ATTRIB", value:"attrib"}],
|
||||
["opentag", {name:"ROOT", attributes:{"ATTRIB":"attrib"}, isSelfClosing: false}]
|
||||
],
|
||||
opt : { trim : true }
|
||||
});
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
|
||||
require(__dirname).test({
|
||||
xml : "<span>Welcome,</span> to monkey land",
|
||||
expect : [
|
||||
["opentag", {
|
||||
"name": "SPAN",
|
||||
"attributes": {},
|
||||
isSelfClosing: false
|
||||
}],
|
||||
["text", "Welcome,"],
|
||||
["closetag", "SPAN"],
|
||||
["text", " to monkey land"],
|
||||
["end"],
|
||||
["ready"]
|
||||
],
|
||||
strict : false,
|
||||
opt : {}
|
||||
});
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
require(__dirname).test
|
||||
( { xml : "<root>"
|
||||
|
||||
, expect :
|
||||
[ [ "opentag", { name: "root", attributes: {}, isSelfClosing: false } ]
|
||||
, [ "error", "Unclosed root tag\nLine: 0\nColumn: 6\nChar: " ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// unquoted attributes should be ok in non-strict mode
|
||||
// https://github.com/isaacs/sax-js/issues/31
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<span class=test hello=world></span>"
|
||||
, expect :
|
||||
[ [ "attribute", { name: "CLASS", value: "test" } ]
|
||||
, [ "attribute", { name: "HELLO", value: "world" } ]
|
||||
, [ "opentag", { name: "SPAN",
|
||||
attributes: { CLASS: "test", HELLO: "world" },
|
||||
isSelfClosing: false } ]
|
||||
, [ "closetag", "SPAN" ]
|
||||
]
|
||||
, strict : false
|
||||
, opt : {}
|
||||
}
|
||||
)
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
var assert = require('assert')
|
||||
var saxStream = require('../lib/sax').createStream()
|
||||
|
||||
var b = new Buffer('误')
|
||||
|
||||
saxStream.on('text', function(text) {
|
||||
assert.equal(text, b.toString())
|
||||
})
|
||||
|
||||
saxStream.write(new Buffer('<test><a>'))
|
||||
saxStream.write(b.slice(0, 1))
|
||||
saxStream.write(b.slice(1))
|
||||
saxStream.write(new Buffer('</a><b>'))
|
||||
saxStream.write(b.slice(0, 2))
|
||||
saxStream.write(b.slice(2))
|
||||
saxStream.write(new Buffer('</b><c>'))
|
||||
saxStream.write(b)
|
||||
saxStream.write(new Buffer('</c>'))
|
||||
saxStream.write(Buffer.concat([new Buffer('<d>'), b.slice(0, 1)]))
|
||||
saxStream.end(Buffer.concat([b.slice(1), new Buffer('</d></test>')]))
|
||||
|
||||
var saxStream2 = require('../lib/sax').createStream()
|
||||
|
||||
saxStream2.on('text', function(text) {
|
||||
assert.equal(text, '�')
|
||||
});
|
||||
|
||||
saxStream2.write(new Buffer('<e>'));
|
||||
saxStream2.write(new Buffer([0xC0]));
|
||||
saxStream2.write(new Buffer('</e>'));
|
||||
saxStream2.write(Buffer.concat([new Buffer('<f>'), b.slice(0,1)]));
|
||||
saxStream2.end();
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<xmlns/>"
|
||||
, expect :
|
||||
[ [ "opentag", { name: "xmlns", uri: "", prefix: "", local: "xmlns",
|
||||
attributes: {}, ns: {},
|
||||
isSelfClosing: true}
|
||||
],
|
||||
["closetag", "xmlns"]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { xmlns: true }
|
||||
}
|
||||
);
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
var t = require(__dirname)
|
||||
|
||||
, xmls = // should be the same both ways.
|
||||
[ "<parent xmlns:a='http://ATTRIBUTE' a:attr='value' />"
|
||||
, "<parent a:attr='value' xmlns:a='http://ATTRIBUTE' />" ]
|
||||
|
||||
, ex1 =
|
||||
[ [ "opennamespace"
|
||||
, { prefix: "a"
|
||||
, uri: "http://ATTRIBUTE"
|
||||
}
|
||||
]
|
||||
, [ "attribute"
|
||||
, { name: "xmlns:a"
|
||||
, value: "http://ATTRIBUTE"
|
||||
, prefix: "xmlns"
|
||||
, local: "a"
|
||||
, uri: "http://www.w3.org/2000/xmlns/"
|
||||
}
|
||||
]
|
||||
, [ "attribute"
|
||||
, { name: "a:attr"
|
||||
, local: "attr"
|
||||
, prefix: "a"
|
||||
, uri: "http://ATTRIBUTE"
|
||||
, value: "value"
|
||||
}
|
||||
]
|
||||
, [ "opentag"
|
||||
, { name: "parent"
|
||||
, uri: ""
|
||||
, prefix: ""
|
||||
, local: "parent"
|
||||
, attributes:
|
||||
{ "a:attr":
|
||||
{ name: "a:attr"
|
||||
, local: "attr"
|
||||
, prefix: "a"
|
||||
, uri: "http://ATTRIBUTE"
|
||||
, value: "value"
|
||||
}
|
||||
, "xmlns:a":
|
||||
{ name: "xmlns:a"
|
||||
, local: "a"
|
||||
, prefix: "xmlns"
|
||||
, uri: "http://www.w3.org/2000/xmlns/"
|
||||
, value: "http://ATTRIBUTE"
|
||||
}
|
||||
}
|
||||
, ns: {"a": "http://ATTRIBUTE"}
|
||||
, isSelfClosing: true
|
||||
}
|
||||
]
|
||||
, ["closetag", "parent"]
|
||||
, ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }]
|
||||
]
|
||||
|
||||
// swap the order of elements 2 and 1
|
||||
, ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3))
|
||||
, expected = [ex1, ex2]
|
||||
|
||||
xmls.forEach(function (x, i) {
|
||||
t.test({ xml: x
|
||||
, expect: expected[i]
|
||||
, strict: true
|
||||
, opt: { xmlns: true }
|
||||
})
|
||||
})
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<root xmlns:x='x1' xmlns:y='y1' x:a='x1' y:a='y1'>"+
|
||||
"<rebind xmlns:x='x2'>"+
|
||||
"<check x:a='x2' y:a='y1'/>"+
|
||||
"</rebind>"+
|
||||
"<check x:a='x1' y:a='y1'/>"+
|
||||
"</root>"
|
||||
|
||||
, expect :
|
||||
[ [ "opennamespace", { prefix: "x", uri: "x1" } ]
|
||||
, [ "opennamespace", { prefix: "y", uri: "y1" } ]
|
||||
, [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ]
|
||||
, [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ]
|
||||
, [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ]
|
||||
, [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ]
|
||||
, [ "opentag", { name: "root", uri: "", prefix: "", local: "root",
|
||||
attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" }
|
||||
, "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" }
|
||||
, "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" }
|
||||
, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } },
|
||||
ns: { x: 'x1', y: 'y1' },
|
||||
isSelfClosing: false } ]
|
||||
|
||||
, [ "opennamespace", { prefix: "x", uri: "x2" } ]
|
||||
, [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ]
|
||||
, [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind",
|
||||
attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } },
|
||||
ns: { x: 'x2' },
|
||||
isSelfClosing: false } ]
|
||||
|
||||
, [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ]
|
||||
, [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ]
|
||||
, [ "opentag", { name: "check", uri: "", prefix: "", local: "check",
|
||||
attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" }
|
||||
, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } },
|
||||
ns: { x: 'x2' },
|
||||
isSelfClosing: true } ]
|
||||
|
||||
, [ "closetag", "check" ]
|
||||
|
||||
, [ "closetag", "rebind" ]
|
||||
, [ "closenamespace", { prefix: "x", uri: "x2" } ]
|
||||
|
||||
, [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ]
|
||||
, [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ]
|
||||
, [ "opentag", { name: "check", uri: "", prefix: "", local: "check",
|
||||
attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" }
|
||||
, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } },
|
||||
ns: { x: 'x1', y: 'y1' },
|
||||
isSelfClosing: true } ]
|
||||
, [ "closetag", "check" ]
|
||||
|
||||
, [ "closetag", "root" ]
|
||||
, [ "closenamespace", { prefix: "x", uri: "x1" } ]
|
||||
, [ "closenamespace", { prefix: "y", uri: "y1" } ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { xmlns: true }
|
||||
}
|
||||
)
|
||||
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<root>"+
|
||||
"<plain attr='normal'/>"+
|
||||
"<ns1 xmlns='uri:default'>"+
|
||||
"<plain attr='normal'/>"+
|
||||
"</ns1>"+
|
||||
"<ns2 xmlns:a='uri:nsa'>"+
|
||||
"<plain attr='normal'/>"+
|
||||
"<a:ns a:attr='namespaced'/>"+
|
||||
"</ns2>"+
|
||||
"</root>"
|
||||
|
||||
, expect :
|
||||
[ [ "opentag", { name: "root", prefix: "", local: "root", uri: "",
|
||||
attributes: {}, ns: {}, isSelfClosing: false } ]
|
||||
|
||||
, [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ]
|
||||
, [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "",
|
||||
attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } },
|
||||
ns: {}, isSelfClosing: true } ]
|
||||
, [ "closetag", "plain" ]
|
||||
|
||||
, [ "opennamespace", { prefix: "", uri: "uri:default" } ]
|
||||
|
||||
, [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ]
|
||||
, [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default",
|
||||
attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } },
|
||||
ns: { "": "uri:default" }, isSelfClosing: false } ]
|
||||
|
||||
, [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ]
|
||||
, [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' },
|
||||
attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } },
|
||||
isSelfClosing: true } ]
|
||||
, [ "closetag", "plain" ]
|
||||
|
||||
, [ "closetag", "ns1" ]
|
||||
|
||||
, [ "closenamespace", { prefix: "", uri: "uri:default" } ]
|
||||
|
||||
, [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ]
|
||||
|
||||
, [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ]
|
||||
|
||||
, [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "",
|
||||
attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } },
|
||||
ns: { a: "uri:nsa" }, isSelfClosing: false } ]
|
||||
|
||||
, [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ]
|
||||
, [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "",
|
||||
attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } },
|
||||
ns: { a: 'uri:nsa' },
|
||||
isSelfClosing: true } ]
|
||||
, [ "closetag", "plain" ]
|
||||
|
||||
, [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ]
|
||||
, [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa",
|
||||
attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } },
|
||||
ns: { a: 'uri:nsa' },
|
||||
isSelfClosing: true } ]
|
||||
, [ "closetag", "a:ns" ]
|
||||
|
||||
, [ "closetag", "ns2" ]
|
||||
|
||||
, [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ]
|
||||
|
||||
, [ "closetag", "root" ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { xmlns: true }
|
||||
}
|
||||
)
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
require(__dirname).test(
|
||||
{ strict : true
|
||||
, opt : { xmlns: true }
|
||||
, expect :
|
||||
[ [ "error", "Unbound namespace prefix: \"unbound:root\"\nLine: 0\nColumn: 15\nChar: >"]
|
||||
, [ "opentag", { name: "unbound:root", uri: "unbound", prefix: "unbound", local: "root"
|
||||
, attributes: {}, ns: {}, isSelfClosing: true } ]
|
||||
, [ "closetag", "unbound:root" ]
|
||||
]
|
||||
}
|
||||
).write("<unbound:root/>");
|
||||
|
||||
require(__dirname).test(
|
||||
{ strict : true
|
||||
, opt : { xmlns: true }
|
||||
, expect :
|
||||
[ [ "opennamespace", { prefix: "unbound", uri: "someuri" } ]
|
||||
, [ "attribute", { name: 'xmlns:unbound', value: 'someuri'
|
||||
, prefix: 'xmlns', local: 'unbound'
|
||||
, uri: 'http://www.w3.org/2000/xmlns/' } ]
|
||||
, [ "opentag", { name: "unbound:root", uri: "someuri", prefix: "unbound", local: "root"
|
||||
, attributes: { 'xmlns:unbound': {
|
||||
name: 'xmlns:unbound'
|
||||
, value: 'someuri'
|
||||
, prefix: 'xmlns'
|
||||
, local: 'unbound'
|
||||
, uri: 'http://www.w3.org/2000/xmlns/' } }
|
||||
, ns: { "unbound": "someuri" }, isSelfClosing: true } ]
|
||||
, [ "closetag", "unbound:root" ]
|
||||
, [ "closenamespace", { prefix: 'unbound', uri: 'someuri' }]
|
||||
]
|
||||
}
|
||||
).write("<unbound:root xmlns:unbound=\"someuri\"/>");
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
|
||||
require(__dirname).test(
|
||||
{ strict : true
|
||||
, opt : { xmlns: true }
|
||||
, expect :
|
||||
[ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"]
|
||||
|
||||
, [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ]
|
||||
, [ "opentag", { name: "root", uri: "", prefix: "", local: "root",
|
||||
attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } },
|
||||
ns: {}, isSelfClosing: true } ]
|
||||
, [ "closetag", "root" ]
|
||||
]
|
||||
}
|
||||
).write("<root unbound:attr='value'/>")
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
var xmlns_attr =
|
||||
{
|
||||
name: "xmlns", value: "http://foo", prefix: "xmlns",
|
||||
local: "", uri : "http://www.w3.org/2000/xmlns/"
|
||||
};
|
||||
|
||||
var attr_attr =
|
||||
{
|
||||
name: "attr", value: "bar", prefix: "",
|
||||
local : "attr", uri : ""
|
||||
};
|
||||
|
||||
|
||||
require(__dirname).test
|
||||
( { xml :
|
||||
"<elm xmlns='http://foo' attr='bar'/>"
|
||||
, expect :
|
||||
[ [ "opennamespace", { prefix: "", uri: "http://foo" } ]
|
||||
, [ "attribute", xmlns_attr ]
|
||||
, [ "attribute", attr_attr ]
|
||||
, [ "opentag", { name: "elm", prefix: "", local: "elm", uri : "http://foo",
|
||||
ns : { "" : "http://foo" },
|
||||
attributes: { xmlns: xmlns_attr, attr: attr_attr },
|
||||
isSelfClosing: true } ]
|
||||
, [ "closetag", "elm" ]
|
||||
, [ "closenamespace", { prefix: "", uri: "http://foo"} ]
|
||||
]
|
||||
, strict : true
|
||||
, opt : {xmlns: true}
|
||||
}
|
||||
)
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
require(__dirname).test(
|
||||
{ xml : "<root xml:lang='en'/>"
|
||||
, expect :
|
||||
[ [ "attribute"
|
||||
, { name: "xml:lang"
|
||||
, local: "lang"
|
||||
, prefix: "xml"
|
||||
, uri: "http://www.w3.org/XML/1998/namespace"
|
||||
, value: "en"
|
||||
}
|
||||
]
|
||||
, [ "opentag"
|
||||
, { name: "root"
|
||||
, uri: ""
|
||||
, prefix: ""
|
||||
, local: "root"
|
||||
, attributes:
|
||||
{ "xml:lang":
|
||||
{ name: "xml:lang"
|
||||
, local: "lang"
|
||||
, prefix: "xml"
|
||||
, uri: "http://www.w3.org/XML/1998/namespace"
|
||||
, value: "en"
|
||||
}
|
||||
}
|
||||
, ns: {}
|
||||
, isSelfClosing: true
|
||||
}
|
||||
]
|
||||
, ["closetag", "root"]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { xmlns: true }
|
||||
}
|
||||
)
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
require(__dirname).test(
|
||||
{ xml : "<xml:root/>"
|
||||
, expect :
|
||||
[
|
||||
[ "opentag"
|
||||
, { name: "xml:root"
|
||||
, uri: "http://www.w3.org/XML/1998/namespace"
|
||||
, prefix: "xml"
|
||||
, local: "root"
|
||||
, attributes: {}
|
||||
, ns: {}
|
||||
, isSelfClosing: true
|
||||
}
|
||||
]
|
||||
, ["closetag", "xml:root"]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { xmlns: true }
|
||||
}
|
||||
)
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
require(__dirname).test(
|
||||
{ xml : "<xml:root xmlns:xml='ERROR'/>"
|
||||
, expect :
|
||||
[ ["error"
|
||||
, "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n"
|
||||
+ "Actual: ERROR\n"
|
||||
+ "Line: 0\nColumn: 27\nChar: '"
|
||||
]
|
||||
, [ "attribute"
|
||||
, { name: "xmlns:xml"
|
||||
, local: "xml"
|
||||
, prefix: "xmlns"
|
||||
, uri: "http://www.w3.org/2000/xmlns/"
|
||||
, value: "ERROR"
|
||||
}
|
||||
]
|
||||
, [ "opentag"
|
||||
, { name: "xml:root"
|
||||
, uri: "http://www.w3.org/XML/1998/namespace"
|
||||
, prefix: "xml"
|
||||
, local: "root"
|
||||
, attributes:
|
||||
{ "xmlns:xml":
|
||||
{ name: "xmlns:xml"
|
||||
, local: "xml"
|
||||
, prefix: "xmlns"
|
||||
, uri: "http://www.w3.org/2000/xmlns/"
|
||||
, value: "ERROR"
|
||||
}
|
||||
}
|
||||
, ns: {}
|
||||
, isSelfClosing: true
|
||||
}
|
||||
]
|
||||
, ["closetag", "xml:root"]
|
||||
]
|
||||
, strict : true
|
||||
, opt : { xmlns: true }
|
||||
}
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user