@qooxdoo/framework
Version:
The JS Framework for Coders
206 lines (155 loc) • 7.84 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Fabian Jakobs (fjakobs)
************************************************************************ */
qx.Class.define("qx.test.Xml",
{
extend : qx.dev.unit.TestCase,
members :
{
serializeArray : function(arr)
{
var ser = [];
for (var i=0; i<arr.length; i++) {
ser[i] = qx.xml.Element.serialize(arr[i]);
}
return ser.join(", ");
},
testParseSerializeXml : function()
{
var doc = qx.xml.Document.create();
this.assertTrue(qx.dom.Node.isDocument(doc));
var div = doc.createElement("div");
this.assertEquals("div", div.tagName);
var xmlStr = '<html>' + '<body>Juhu <em id="toll">Kinners</em>. Wie geht es <em>Euch</em>?</body>' + '</html>';
var doc2 = qx.xml.Document.fromString(xmlStr);
this.assertTrue(qx.dom.Node.isDocument(doc2));
this.assertEquals(xmlStr, qx.xml.Element.serialize(doc2));
},
testFromString : function()
{
var data = "<Root><Row>test1</Row><Row>test2</Row><Row>test3</Row></Root>";
var xml = qx.xml.Document.fromString(data);
// this.debug("Converted to XML Document ", xml);
},
testCreateDocument : function()
{
var doc = qx.xml.Document.create("", "rss");
this.assertEquals('rss', doc.documentElement.tagName);
this.assertEquals(0, doc.documentElement.childNodes.length);
doc = qx.xml.Document.create("http://www.w3.org/1999/xhtml/", "html");
this.assertEquals('http://www.w3.org/1999/xhtml/', doc.documentElement.namespaceURI);
this.assertEquals('html', doc.documentElement.tagName);
this.assertEquals(0, doc.documentElement.childNodes.length);
},
testXPath : function()
{
var xmlStr = '<html><body>Juhu <em id="toll">Kinners</em>. Wie geht es <em>Euch</em>?</body></html>';
var doc2 = qx.xml.Document.fromString(xmlStr);
var em = doc2.getElementsByTagName("em")[0];
this.assertEquals('<em id="toll">Kinners</em>', qx.xml.Element.serialize(em));
this.assertEquals(qx.xml.Element.serialize(em), qx.xml.Element.serialize(qx.xml.Element.selectSingleNode(doc2, '//*[@id="toll"]')));
this.assertEquals(qx.xml.Element.serialize(doc2.getElementsByTagName("body")[0]), qx.xml.Element.serialize(qx.xml.Element.selectSingleNode(doc2, '//body')));
this.assertEquals(this.serializeArray(doc2.getElementsByTagName("em")), this.serializeArray(qx.xml.Element.selectNodes(doc2, '//em')));
this.assertEquals(this.serializeArray(doc2.getElementsByTagName("em")), this.serializeArray(qx.xml.Element.selectNodes(doc2.documentElement, '//em')));
},
testXPathNS : function()
{
var xmlStr = '<html xmlns="http://www.w3.org/1999/xhtml/"><body>Juhu <em id="toll">Kinners</em>. Wie geht es <em>Euch</em>?<foo xmlns="http://qooxdoo.org" id="bar"/></body></html>';
var doc = qx.xml.Document.fromString(xmlStr);
var em = qx.xml.Element.getElementsByTagNameNS(doc, "http://www.w3.org/1999/xhtml/", "em")[0];
var foo = qx.xml.Element.getElementsByTagNameNS(doc, "http://qooxdoo.org", "foo")[0];
var emStr = qx.xml.Element.serialize(em);
var fooStr = qx.xml.Element.serialize(foo);
var nsMap = {
"xhtml" : "http://www.w3.org/1999/xhtml/",
"qx" : "http://qooxdoo.org"
};
var q1 = "//xhtml:em";
var q2 = "//qx:foo";
var q3 = "//xhtml:body";
// Chrome versions older than 532.2 will throw an exception. See Chromium
// bug #671 (http://code.google.com/p/chromium/issues/detail?id=671)
if (navigator.userAgent.indexOf('Chrome') > 0 &&
qx.core.Environment.get("engine.version") < 532.2) {
this.assertException(function () {
qx.xml.Element.selectSingleNode(doc, q1, nsMap);
}, Error, "DOM Exception 14", "Namespaced XPath query worked in Chrome < 532.2!");
this.assertException(function () {
qx.xml.Element.selectSingleNode(doc, q2, nsMap);
}, Error, "DOM Exception 14", "Namespaced XPath query worked in Chrome < 532.2!");
}
else {
var n1 = qx.xml.Element.selectSingleNode(doc, q1, nsMap);
var s1 = qx.xml.Element.serialize(n1);
// this.debug("Found node: " + s1);
this.assertEquals(s1, emStr);
var n2 = qx.xml.Element.selectSingleNode(doc, q2, nsMap);
var s2 = qx.xml.Element.serialize(n2);
// this.debug("Found node: " + s2);
this.assertEquals(s2, fooStr);
var n3 = qx.xml.Element.selectNodes(doc, q3, nsMap);
var n4 = qx.xml.Element.selectNodes(n3[0], q2, nsMap);
var s4 = qx.xml.Element.serialize(n4[0]);
this.assertEquals(s4, fooStr);
}
},
testGetElementsByTagNameNS : function()
{
var xmlStr =
"<\?xml version='1.0' " +
"encoding='UTF-8'?>" +
"<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" +
"<xsl:output method='xml' version='1.0' encoding='UTF-8' indent='yes'/>" +
"<xsl:template match='*'></xsl:template><xsl:template match='@*'>" +
"</xsl:template></xsl:stylesheet>";
var nsDoc = qx.xml.Document.fromString(xmlStr);
var templates = qx.xml.Element.getElementsByTagNameNS(nsDoc, "http://www.w3.org/1999/XSL/Transform", "template");
// this.debug(qx.xml.String.escape(this.serializeArray(templates)));
this.assertEquals(2, templates.length, "getElementsByTagNameNS for XML documents failed!");
this.assertEquals("xsl:template", templates[0].tagName, "getElementsByTagNameNS for XML documents failed!");
var templates = qx.xml.Element.getElementsByTagNameNS(nsDoc.documentElement, "http://www.w3.org/1999/XSL/Transform", "template");
this.assertEquals(2, templates.length, "getElementsByTagNameNS for element nodes failed!");
this.assertEquals("xsl:template", templates[0].tagName, "getElementsByTagNameNS for element nodes failed!");
},
testSetAttributeNS : function()
{
var doc = qx.xml.Document.create("http://www.w3.org/1999/xhtml/", "html");
var node = doc.createElement("a");
var namespaceURI = "http://www.qooxdoo.org/";
qx.xml.Element.setAttributeNS(doc, node, namespaceURI, "qxid", "foo");
if (node.getAttributeNS) {
this.assertEquals("foo", node.getAttributeNS(namespaceURI, "qxid"));
}
else {
this.assertEquals(namespaceURI, node.getAttributeNode("qxid").namespaceURI);
}
},
testGetAttributeNS : function()
{
var doc = qx.xml.Document.create("http://www.w3.org/1999/xhtml/", "html");
var node = doc.createElement("a");
var namespaceURI = "http://www.qooxdoo.org/";
qx.xml.Element.setAttributeNS(doc, node, namespaceURI, "qxid", "foo");
this.assertEquals('foo', qx.xml.Element.getAttributeNS(node,namespaceURI,'qxid'));
},
testCreateSubElementNS : function()
{
var xmlStr = '<html><body>Juhu <em id="toll">Kinners</em>.</body></html>';
var doc = qx.xml.Document.fromString(xmlStr);
var parent = doc.getElementsByTagName("em")[0];
var namespaceUri = "http://qooxdoo.org";
var subElem = qx.xml.Element.createSubElementNS(doc, parent, "foo", namespaceUri);
var createdNode = qx.xml.Element.getElementsByTagNameNS(doc.documentElement, namespaceUri, "foo")[0];
this.assertEquals(subElem, createdNode);
this.assertTrue(subElem.parentNode == parent);
}
}
});