You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.6 KiB
170 lines
5.6 KiB
var assert = require("assert"), |
|
path = require("path"), |
|
entities = require("../"); |
|
|
|
describe("Encode->decode test", function() { |
|
var testcases = [ |
|
{ |
|
input: "asdf & ÿ ü '", |
|
xml: "asdf & ÿ ü '", |
|
html: "asdf & ÿ ü '" |
|
}, |
|
{ |
|
input: "&", |
|
xml: "&", |
|
html: "&" |
|
} |
|
]; |
|
testcases.forEach(function(tc) { |
|
var encodedXML = entities.encodeXML(tc.input); |
|
it("should XML encode " + tc.input, function() { |
|
assert.equal(encodedXML, tc.xml); |
|
}); |
|
it("should default to XML encode " + tc.input, function() { |
|
assert.equal(entities.encode(tc.input), tc.xml); |
|
}); |
|
it("should XML decode " + encodedXML, function() { |
|
assert.equal(entities.decodeXML(encodedXML), tc.input); |
|
}); |
|
it("should default to XML encode " + encodedXML, function() { |
|
assert.equal(entities.decode(encodedXML), tc.input); |
|
}); |
|
it("should default strict to XML encode " + encodedXML, function() { |
|
assert.equal(entities.decodeStrict(encodedXML), tc.input); |
|
}); |
|
|
|
var encodedHTML5 = entities.encodeHTML5(tc.input); |
|
it("should HTML5 encode " + tc.input, function() { |
|
assert.equal(encodedHTML5, tc.html); |
|
}); |
|
it("should HTML5 decode " + encodedHTML5, function() { |
|
assert.equal(entities.decodeHTML(encodedHTML5), tc.input); |
|
}); |
|
}); |
|
|
|
it("should encode data URIs (issue 16)", function() { |
|
var data = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAALAAABAAEAAAIBRAA7"; |
|
assert.equal(entities.decode(entities.encode(data)), data); |
|
}); |
|
}); |
|
|
|
describe("Decode test", function() { |
|
var testcases = [ |
|
{ input: "&", output: "&" }, |
|
{ input: "&", output: "&" }, |
|
{ input: "&", output: "&" }, |
|
{ input: "&", output: "&" }, |
|
{ input: "&", output: "&" }, |
|
{ input: "&", output: "&" }, |
|
{ input: "&", output: "&" }, |
|
{ input: ":", output: ":" }, |
|
{ input: ":", output: ":" }, |
|
{ input: ":", output: ":" }, |
|
{ input: ":", output: ":" } |
|
]; |
|
testcases.forEach(function(tc) { |
|
it("should XML decode " + tc.input, function() { |
|
assert.equal(entities.decodeXML(tc.input), tc.output); |
|
}); |
|
it("should HTML4 decode " + tc.input, function() { |
|
assert.equal(entities.decodeHTML(tc.input), tc.output); |
|
}); |
|
it("should HTML5 decode " + tc.input, function() { |
|
assert.equal(entities.decodeHTML(tc.input), tc.output); |
|
}); |
|
}); |
|
}); |
|
|
|
var levels = ["xml", "entities"]; |
|
|
|
describe("Documents", function() { |
|
levels |
|
.map(function(n) { |
|
return path.join("..", "maps", n); |
|
}) |
|
.map(require) |
|
.forEach(function(doc, i) { |
|
describe("Decode", function() { |
|
it(levels[i], function() { |
|
Object.keys(doc).forEach(function(e) { |
|
for (var l = i; l < levels.length; l++) { |
|
assert.equal(entities.decode("&" + e + ";", l), doc[e]); |
|
} |
|
}); |
|
}); |
|
}); |
|
|
|
describe("Decode strict", function() { |
|
it(levels[i], function() { |
|
Object.keys(doc).forEach(function(e) { |
|
for (var l = i; l < levels.length; l++) { |
|
assert.equal(entities.decodeStrict("&" + e + ";", l), doc[e]); |
|
} |
|
}); |
|
}); |
|
}); |
|
|
|
describe("Encode", function() { |
|
it(levels[i], function() { |
|
Object.keys(doc).forEach(function(e) { |
|
for (var l = i; l < levels.length; l++) { |
|
assert.equal(entities.decode(entities.encode(doc[e], l), l), doc[e]); |
|
} |
|
}); |
|
}); |
|
}); |
|
}); |
|
|
|
var legacy = require("../maps/legacy.json"); |
|
|
|
describe("Legacy", function() { |
|
it("should decode", runLegacy); |
|
}); |
|
|
|
function runLegacy() { |
|
Object.keys(legacy).forEach(function(e) { |
|
assert.equal(entities.decodeHTML("&" + e), legacy[e]); |
|
}); |
|
} |
|
}); |
|
|
|
var astral = { |
|
"1D306": "\uD834\uDF06", |
|
"1D11E": "\uD834\uDD1E" |
|
}; |
|
|
|
var astralSpecial = { |
|
"80": "\u20AC", |
|
"110000": "\uFFFD" |
|
}; |
|
|
|
describe("Astral entities", function() { |
|
Object.keys(astral).forEach(function(c) { |
|
it("should decode " + astral[c], function() { |
|
assert.equal(entities.decode("&#x" + c + ";"), astral[c]); |
|
}); |
|
|
|
it("should encode " + astral[c], function() { |
|
assert.equal(entities.encode(astral[c]), "&#x" + c + ";"); |
|
}); |
|
|
|
it("should escape " + astral[c], function() { |
|
assert.equal(entities.escape(astral[c]), "&#x" + c + ";"); |
|
}); |
|
}); |
|
|
|
Object.keys(astralSpecial).forEach(function(c) { |
|
it("special should decode \\u" + c, function() { |
|
assert.equal(entities.decode("&#x" + c + ";"), astralSpecial[c]); |
|
}); |
|
}); |
|
}); |
|
|
|
describe("Escape", function() { |
|
it("should always decode ASCII chars", function() { |
|
for (var i = 0; i < 0x7f; i++) { |
|
var c = String.fromCharCode(i); |
|
assert.equal(entities.decodeXML(entities.escape(c)), c); |
|
} |
|
}); |
|
});
|
|
|