diff --git a/js/tests/e4x/TypeConversion/10.1.1.js b/js/tests/e4x/TypeConversion/10.1.1.js
index 116196c97a09..82e47017a2fa 100644
--- a/js/tests/e4x/TypeConversion/10.1.1.js
+++ b/js/tests/e4x/TypeConversion/10.1.1.js
@@ -42,7 +42,14 @@
START("10.1.1 - XML.toString");
-order =
+var n = 0;
+var expect;
+var actual;
+var xml;
+
+// Example from ECMA 357 10.1.1
+
+var order =
John
@@ -55,14 +62,78 @@ order =
;
-name = order.customer.firstname + " " + order.customer.lastname;
+var name = order.customer.firstname + " " + order.customer.lastname;
-TEST(1, "John Doe", name);
+TEST(++n, "John Doe", name);
-total = order.item.price * order.item.quantity;
+var total = order.item.price * order.item.quantity;
-TEST(2, 1299.99, total);
+TEST(++n, 1299.99, total);
+
+// Semantics
+
+printStatus("test empty.toString()");
+
+xml = new XML();
+expect = '';
+actual = xml.toString();
+TEST(++n, expect, actual);
+
+printStatus("test attribute.toString()");
+
+xml = ;
+var attr = xml.@bar;
+expect = "baz";
+actual = attr.toString();
+TEST(++n, expect, actual);
+
+printStatus("test text.toString()");
+
+xml = new XML("this is text");
+expect = "this is text";
+actual = xml.toString();
+TEST(++n, expect, actual);
+
+printStatus("test simpleContent.toString()");
+
+xml = bar;
+expect = "bar";
+actual = xml.toString();
+TEST(++n, expect, actual);
+
+var truefalse = [true, false];
+
+for (var ic = 0; ic < truefalse.length; ic++)
+{
+ for (var ip = 0; ip < truefalse.length; ip++)
+ {
+ XML.ignoreComments = truefalse[ic];
+ XML.ignoreProcessingInstructions = truefalse[ip];
+
+ xml = bar;
+ expect = "bar";
+ actual = xml.toString();
+ TEST(++n, expect, actual);
+ }
+}
+
+printStatus("test nonSimpleContent.toString() == " +
+ "nonSimpleContent.toXMLString()");
+
+var indents = [0, 4];
+
+for (var pp = 0; pp < truefalse.length; pp++)
+{
+ XML.prettyPrinting = truefalse[pp];
+ for (var pi = 0; pi < indents.length; pi++)
+ {
+ XML.prettyIndent = indents[pi];
+
+ expect = order.toXMLString();
+ actual = order.toString();
+ TEST(++n, expect, actual);
+ }
+}
-
END();