diff --git a/tests/Format/test_XML.html b/tests/Format/test_XML.html
index 37067ab6ff..aff544e134 100644
--- a/tests/Format/test_XML.html
+++ b/tests/Format/test_XML.html
@@ -43,7 +43,7 @@
function test_Format_XML_read(t) {
var format = new OpenLayers.Format.XML();
- t.plan(format.xmldom ? 11 : 10);
+ t.plan(format.xmldom ? 10 : 9);
var doc = format.read(text);
t.eq(doc.nodeType, 9,
@@ -52,10 +52,8 @@
"doc has the correct node name");
t.ok(doc.documentElement,
"ok to access doc.documentElement");
- t.eq(doc.documentElement.nodeName, "ol:root",
- "doc root has the correct node name");
- t.eq(doc.documentElement.childNodes[1].firstChild.nodeValue, "junk2",
- "second child of doc root has correct child node");
+ t.xml_eq(doc.documentElement, text,
+ "doc.documentElement correctly read");
// read can also be called on the prototype directly
doc = OpenLayers.Format.XML.prototype.read(text);
@@ -65,17 +63,31 @@
"doc has the correct node name");
t.ok(doc.documentElement,
"ok to access doc.documentElement");
- t.eq(doc.documentElement.nodeName, "ol:root",
- "doc root has the correct node name");
- t.eq(doc.documentElement.childNodes[1].firstChild.nodeValue, "junk2",
- "second child of doc root has correct child node");
+ t.xml_eq(doc.documentElement, text,
+ "doc.documentElement correctly read");
// where appropriate, make sure doc is loaded into xmldom property
if(format.xmldom) {
- t.eq(format.xmldom.documentElement.childNodes[1].firstChild.nodeValue,
- "junk2",
- "second child of doc root has correct child node");
+ t.xml_eq(format.xmldom.documentElement, text,
+ "xmldom.documentElement contains equivalent xml");
}
+
+ // test equivalence with different namespace alias
+ var pre1 =
+ "" +
+ "value2" +
+ "value2" +
+ "" +
+ "";
+ var pre2 =
+ "" +
+ "value2" +
+ "value2" +
+ "" +
+ "";
+ var doc1 = format.read(pre1);
+ t.xml_eq(doc1.documentElement, pre2, "read correctly sets namespaces");
+
}
function test_Format_XML_write(t) {
diff --git a/tests/xml_eq.js b/tests/xml_eq.js
index c375e09828..47ab56559e 100644
--- a/tests/xml_eq.js
+++ b/tests/xml_eq.js
@@ -2,59 +2,9 @@
* File: xml_eq.js
* Adds a xml_eq method to AnotherWay test objects.
*
- * Function: Test.AnotherWay._test_object_t.xml_eq
- * Test if two XML nodes are equivalent. Tests for same node types, same
- * node names, same namespace prefix and URI, same attributes, and
- * recursively tests child nodes.
- *
- * (code)
- * t.xml_eq(got, expected, message);
- * (end)
- *
- * Parameters:
- * got - {DOMElement | String} A DOM node or XML string to test.
- * expected - {DOMElement | String} The expected DOM node or XML string.
- * msg - {String} A message to print with test output.
- *
*/
(function() {
-
- /**
- * Function: stringFormat
- * Given a string with tokens in the form ${token}, return a string
- * with tokens replaced with properties from the given context
- * object. Represent a literal "${" by doubling it, e.g. "${${".
- *
- * Parameters:
- * template - {String} A string with tokens to be replaced. A template
- * has the form "literal ${token}" where the token will be replaced
- * by the value of context["token"].
- * context - {Object} An optional object with properties corresponding
- * to the tokens in the format string. If no context is sent, the
- * window object will be used.
- *
- * Returns:
- * {String} A string with tokens replaced from the context object.
- */
- function formatString(template, context) {
- if(!context) {
- context = window;
- }
- var tokens = template.split("${");
- var item, last;
- for(var i=1; i 0) {
- tokens[i] = context[item.substring(0, last)] +
- item.substring(++last);
- } else {
- tokens[i] = "${" + item;
- }
- }
- return tokens.join("");
- }
/**
* Function: createNode
@@ -117,9 +67,9 @@
* Parameters:
* got - {Object}
* expected - {Object}
- * msg - {String} The message to be thrown. Can be formatted for use with
- * formatString where got and expected (cast to string) will be
- * substituted.
+ * msg - {String} The message to be thrown. This message will be appended
+ * with ": got {got} but expected {expected}" where got and expected are
+ * replaced with string representations of the above arguments.
*/
function assertEqual(got, expected, msg) {
if(got === undefined) {
@@ -132,11 +82,8 @@
} else if (expected === null) {
expected = "null";
}
- if(!msg) {
- msg = "got ${got} but expected ${expected}";
- }
if(got != expected) {
- throw formatString(msg, {got: got, expected: expected});
+ throw msg + ": got " + got + " but expected " + expected;
}
}
@@ -150,78 +97,102 @@
* Parameters:
* got - {DOMElement}
* expected - {DOMElement}
+ * options - {Object} Optional object for configuring test options. Set
+ * 'prefix' property to true in order to compare element and attribute
+ * prefixes (namespace uri always tested). By default, prefixes
+ * are not tested.
*/
- function assertElementNodesEqual(got, expected) {
+ function assertElementNodesEqual(got, expected, options) {
+ var testPrefix = (options && options.prefix === true);
+
// compare types
- assertEqual(
- got.nodeType, expected.nodeType,
- "Node type mismatch: got ${got} but expected ${expected}"
- );
+ assertEqual(got.nodeType, expected.nodeType, "Node type mismatch");
// compare names
- assertEqual(
- got.nodeName, expected.nodeName,
- "Node name mismatch: got ${got} but expected ${expected}"
- );
+ var gotName = testPrefix ?
+ got.nodeName : got.nodeName.split(":").pop();
+ var expName = testPrefix ?
+ expected.nodeName : expected.nodeName.split(":").pop();
+ assertEqual(gotName, expName, "Node name mismatch");
+ // for text nodes compare value
+ if(got.nodeType == 3) {
+ assertEqual(
+ got.nodeValue, expected.nodeValue, "Node value mismatch"
+ );
+ }
// for element type nodes compare namespace, attributes, and children
- if(got.nodeType == 1) {
+ else if(got.nodeType == 1) {
// test namespace alias and uri
if(got.prefix || expected.prefix) {
- assertEqual(
- got.prefix, expected.prefix,
- "Bad prefix for " + got.nodeName +
- ": got ${got} but expected ${expected}"
- );
+ if(testPrefix) {
+ assertEqual(
+ got.prefix, expected.prefix,
+ "Bad prefix for " + got.nodeName
+ );
+ }
}
if(got.namespaceURI || expected.namespaceURI) {
assertEqual(
got.namespaceURI, expected.namespaceURI,
- "Bad namespaceURI for " + got.nodeName +
- ": got ${got} but expected ${expected}"
+ "Bad namespaceURI for " + got.nodeName
);
}
// compare attributes - disregard xmlns given namespace handling above
var gotAttrLen = 0;
var gotAttr = {};
- var expectedAttrLen = 0;
- var expectedAttr = {};
- var ga, ea;
+ var expAttrLen = 0;
+ var expAttr = {};
+ var ga, ea, gn, en;
for(var i=0; i