diff --git a/lib/OpenLayers/Format/XML.js b/lib/OpenLayers/Format/XML.js
index 0c0a2cbcae..0c2c1b02b3 100644
--- a/lib/OpenLayers/Format/XML.js
+++ b/lib/OpenLayers/Format/XML.js
@@ -243,6 +243,9 @@ OpenLayers.Format.XML = OpenLayers.Class(OpenLayers.Format, {
*/
createTextNode: function(text) {
var node;
+ if (typeof text !== "string") {
+ text = String(text);
+ }
if(this.xmldom) {
node = this.xmldom.createTextNode(text);
} else {
@@ -568,9 +571,6 @@ OpenLayers.Format.XML = OpenLayers.Class(OpenLayers.Format, {
}
var value = options.value;
if(value != null) {
- if(typeof value == "boolean") {
- value = String(value);
- }
node.appendChild(this.createTextNode(value));
}
return node;
diff --git a/tests/Format/XML.html b/tests/Format/XML.html
index ebd984c917..a85b6fbab7 100644
--- a/tests/Format/XML.html
+++ b/tests/Format/XML.html
@@ -167,18 +167,38 @@
}
function test_Format_XML_createTextNode(t) {
- t.plan(4);
+ t.plan(10);
var format = new OpenLayers.Format.XML();
- var value = Math.random().toString();
- var node = format.createTextNode(value);
+ var value, node;
+
+ value = "string";
+ node = format.createTextNode(value);
t.eq(node.nodeType, 3,
- "node has correct type");
+ "[string] node has correct type");
t.eq(node.nodeName, "#text",
- "node has correct name");
- t.eq(node.nodeValue, value,
- "node has correct value");
+ "[string] node has correct name");
+ t.eq(node.nodeValue, "string",
+ "[string] node has correct value");
+ value = 0.42;
+ node = format.createTextNode(value);
+ t.eq(node.nodeType, 3,
+ "[number] node has correct type");
+ t.eq(node.nodeName, "#text",
+ "[number] node has correct name");
+ t.eq(node.nodeValue, "0.42",
+ "[number] node has correct value");
+
+ value = false;
+ node = format.createTextNode(value);
+ t.eq(node.nodeType, 3,
+ "[boolean] node has correct type");
+ t.eq(node.nodeName, "#text",
+ "[boolean] node has correct name");
+ t.eq(node.nodeValue, "false",
+ "[boolean] node has correct value");
+
var doc = format.read(text);
if (doc.importNode) {
node = doc.importNode(node, true);
@@ -595,6 +615,10 @@
description: "value of 0 gets appended as a text node",
node: format.createElementNSPlus("foo:bar", {value: 0}),
expect: "0"
+ }, {
+ description: "value of 0.42 gets appended as a text node",
+ node: format.createElementNSPlus("foo:bar", {value: 0.42}),
+ expect: "0.42"
}, {
description: "value of true gets appended as a text node",
node: format.createElementNSPlus("foo:bar", {value: true}),