You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@corinthia.apache.org by ja...@apache.org on 2015/08/14 18:10:41 UTC

[34/51] [abbrv] [partial] incubator-corinthia git commit: added js test files

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-mergeWithNeighbours02-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-mergeWithNeighbours02-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-mergeWithNeighbours02-input.html
new file mode 100644
index 0000000..09fffaf
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-mergeWithNeighbours02-input.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script type="text/javascript" src="RangeTest.js"></script>
+<script>
+
+function createElementWithId(elementName,id)
+{
+    var element = DOM_createElement(document,elementName);
+    DOM_setAttribute(element,"id",id);
+    return element;
+}
+
+function performTest()
+{
+    // DOM_wrapNode() should not affect any positions, because the node itself remains in the
+    // tree unmodified.
+
+    DOM_deleteAllChildren(document.body);
+
+    var p = DOM_createElement(document,"P");
+
+    var span1 = createElementWithId("SPAN","span1");
+    var span2 = createElementWithId("SPAN","span2");
+    var span3 = createElementWithId("SPAN","span3");
+    var span4 = createElementWithId("SPAN","span4");
+    var span5 = createElementWithId("SPAN","span5");
+    DOM_setAttribute(span1,"style","color: blue");
+    DOM_setAttribute(span5,"style","color: blue");
+
+    DOM_appendChild(document.body,p);
+    DOM_appendChild(p,span1);
+    DOM_appendChild(p,span2);
+    DOM_appendChild(p,span3);
+    DOM_appendChild(p,span4);
+    DOM_appendChild(p,span5);
+
+    DOM_appendChild(span2,createElementWithId("BR","br1"));
+    DOM_appendChild(span2,createElementWithId("BR","br2"));
+    DOM_appendChild(span2,createElementWithId("BR","br3"));
+    DOM_appendChild(span3,createElementWithId("BR","br4"));
+    DOM_appendChild(span3,createElementWithId("BR","br5"));
+    DOM_appendChild(span3,createElementWithId("BR","br6"));
+    DOM_appendChild(span4,createElementWithId("BR","br7"));
+    DOM_appendChild(span4,createElementWithId("BR","br8"));
+    DOM_appendChild(span4,createElementWithId("BR","br9"));
+
+    var result = comparePositionsBeforeAndAfter(function() {
+
+        // Temporarily remove id attributes so that elements will be considered mergeable
+        DOM_removeAttribute(span1,"id");
+        DOM_removeAttribute(span2,"id");
+        DOM_removeAttribute(span3,"id");
+        DOM_removeAttribute(span4,"id");
+        DOM_removeAttribute(span5,"id");
+
+        Formatting_mergeWithNeighbours(span3,Formatting_MERGEABLE_INLINE);
+
+        DOM_setAttribute(span1,"id","span1");
+        DOM_setAttribute(span2,"id","span2");
+        DOM_setAttribute(span3,"id","span3");
+        DOM_setAttribute(span4,"id","span4");
+        DOM_setAttribute(span5,"id","span5");
+
+    });
+
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+result+"\n-"));
+}
+</script>
+</head>
+<body>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-moveNode-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-moveNode-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-moveNode-expected.html
new file mode 100644
index 0000000..561690d
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-moveNode-expected.html
@@ -0,0 +1,179 @@
+<html>
+  <head>
+  </head>
+  <body>
+    -
+Before: positions[0] = (BODY,0)
+Before: positions[1] = (P#p1,0)
+Before: positions[2] = (B,0)
+Before: positions[3] = "|ab"
+Before: positions[4] = "a|b"
+Before: positions[5] = "ab|"
+Before: positions[6] = (B,1)
+Before: positions[7] = (BR,0)
+Before: positions[8] = (B,2)
+Before: positions[9] = (P#p1,1)
+Before: positions[10] = (B,0)
+Before: positions[11] = "|cd"
+Before: positions[12] = "c|d"
+Before: positions[13] = "cd|"
+Before: positions[14] = (B,1)
+Before: positions[15] = (BR,0)
+Before: positions[16] = (B,2)
+Before: positions[17] = (P#p1,2)
+Before: positions[18] = (B,0)
+Before: positions[19] = "|ef"
+Before: positions[20] = "e|f"
+Before: positions[21] = "ef|"
+Before: positions[22] = (B,1)
+Before: positions[23] = (BR,0)
+Before: positions[24] = (B,2)
+Before: positions[25] = (P#p1,3)
+Before: positions[26] = (B,0)
+Before: positions[27] = "|gh"
+Before: positions[28] = "g|h"
+Before: positions[29] = "gh|"
+Before: positions[30] = (B,1)
+Before: positions[31] = (BR,0)
+Before: positions[32] = (B,2)
+Before: positions[33] = (P#p1,4)
+Before: positions[34] = (B,0)
+Before: positions[35] = "|ij"
+Before: positions[36] = "i|j"
+Before: positions[37] = "ij|"
+Before: positions[38] = (B,1)
+Before: positions[39] = (BR,0)
+Before: positions[40] = (B,2)
+Before: positions[41] = (P#p1,5)
+Before: positions[42] = (BODY,1)
+Before: positions[43] = (P#p2,0)
+Before: positions[44] = (B,0)
+Before: positions[45] = "|kl"
+Before: positions[46] = "k|l"
+Before: positions[47] = "kl|"
+Before: positions[48] = (B,1)
+Before: positions[49] = (BR,0)
+Before: positions[50] = (B,2)
+Before: positions[51] = (P#p2,1)
+Before: positions[52] = (B,0)
+Before: positions[53] = "|mn"
+Before: positions[54] = "m|n"
+Before: positions[55] = "mn|"
+Before: positions[56] = (B,1)
+Before: positions[57] = (BR,0)
+Before: positions[58] = (B,2)
+Before: positions[59] = (P#p2,2)
+Before: positions[60] = (B,0)
+Before: positions[61] = "|op"
+Before: positions[62] = "o|p"
+Before: positions[63] = "op|"
+Before: positions[64] = (B,1)
+Before: positions[65] = (BR,0)
+Before: positions[66] = (B,2)
+Before: positions[67] = (P#p2,3)
+Before: positions[68] = (B,0)
+Before: positions[69] = "|qr"
+Before: positions[70] = "q|r"
+Before: positions[71] = "qr|"
+Before: positions[72] = (B,1)
+Before: positions[73] = (BR,0)
+Before: positions[74] = (B,2)
+Before: positions[75] = (P#p2,4)
+Before: positions[76] = (B,0)
+Before: positions[77] = "|st"
+Before: positions[78] = "s|t"
+Before: positions[79] = "st|"
+Before: positions[80] = (B,1)
+Before: positions[81] = (BR,0)
+Before: positions[82] = (B,2)
+Before: positions[83] = (P#p2,5)
+Before: positions[84] = (BODY,2)
+
+After: positions[0] = (BODY,0)
+After: positions[1] = (P#p1,0)
+After: positions[2] = (B,0)
+After: positions[3] = "|ab"
+After: positions[4] = "a|b"
+After: positions[5] = "ab|"
+After: positions[6] = (B,1)
+After: positions[7] = (BR,0)
+After: positions[8] = (B,2)
+After: positions[9] = (P#p2,3) - changed from (P#p1,1)
+After: positions[10] = (B,0)
+After: positions[11] = "|cd"
+After: positions[12] = "c|d"
+After: positions[13] = "cd|"
+After: positions[14] = (B,1)
+After: positions[15] = (BR,0)
+After: positions[16] = (B,2)
+After: positions[17] = (P#p1,1) - changed from (P#p1,2)
+After: positions[18] = (B,0)
+After: positions[19] = "|ef"
+After: positions[20] = "e|f"
+After: positions[21] = "ef|"
+After: positions[22] = (B,1)
+After: positions[23] = (BR,0)
+After: positions[24] = (B,2)
+After: positions[25] = (P#p1,2) - changed from (P#p1,3)
+After: positions[26] = (B,0)
+After: positions[27] = "|gh"
+After: positions[28] = "g|h"
+After: positions[29] = "gh|"
+After: positions[30] = (B,1)
+After: positions[31] = (BR,0)
+After: positions[32] = (B,2)
+After: positions[33] = (P#p1,3) - changed from (P#p1,4)
+After: positions[34] = (B,0)
+After: positions[35] = "|ij"
+After: positions[36] = "i|j"
+After: positions[37] = "ij|"
+After: positions[38] = (B,1)
+After: positions[39] = (BR,0)
+After: positions[40] = (B,2)
+After: positions[41] = (P#p1,4) - changed from (P#p1,5)
+After: positions[42] = (BODY,1)
+After: positions[43] = (P#p2,0)
+After: positions[44] = (B,0)
+After: positions[45] = "|kl"
+After: positions[46] = "k|l"
+After: positions[47] = "kl|"
+After: positions[48] = (B,1)
+After: positions[49] = (BR,0)
+After: positions[50] = (B,2)
+After: positions[51] = (P#p2,1)
+After: positions[52] = (B,0)
+After: positions[53] = "|mn"
+After: positions[54] = "m|n"
+After: positions[55] = "mn|"
+After: positions[56] = (B,1)
+After: positions[57] = (BR,0)
+After: positions[58] = (B,2)
+After: positions[59] = (P#p2,2)
+After: positions[60] = (B,0)
+After: positions[61] = "|op"
+After: positions[62] = "o|p"
+After: positions[63] = "op|"
+After: positions[64] = (B,1)
+After: positions[65] = (BR,0)
+After: positions[66] = (B,2)
+After: positions[67] = (P#p2,3)
+After: positions[68] = (B,0)
+After: positions[69] = "|qr"
+After: positions[70] = "q|r"
+After: positions[71] = "qr|"
+After: positions[72] = (B,1)
+After: positions[73] = (BR,0)
+After: positions[74] = (B,2)
+After: positions[75] = (P#p2,5) - changed from (P#p2,4)
+After: positions[76] = (B,0)
+After: positions[77] = "|st"
+After: positions[78] = "s|t"
+After: positions[79] = "st|"
+After: positions[80] = (B,1)
+After: positions[81] = (BR,0)
+After: positions[82] = (B,2)
+After: positions[83] = (P#p2,6) - changed from (P#p2,5)
+After: positions[84] = (BODY,2)
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-moveNode-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-moveNode-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-moveNode-input.html
new file mode 100644
index 0000000..3375f56
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-moveNode-input.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script type="text/javascript" src="RangeTest.js"></script>
+<script>
+
+function performTest()
+{
+    // DOM_wrapNode() should not affect any positions, because the node itself remains in the
+    // tree unmodified.
+
+    removeWhitespaceAndCommentNodes(document.body);
+
+    var p1 = document.getElementById("p1");
+    var p2 = document.getElementById("p2");
+
+    var result = comparePositionsBeforeAndAfter(function() {
+        DOM_insertBefore(p2,p1.childNodes[1],p2.childNodes[3]);
+    });
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+result+"\n-"));
+}
+</script>
+</head>
+<body>
+<p id="p1">
+<b>ab<br></b>
+<b>cd<br></b>
+<b>ef<br></b>
+<b>gh<br></b>
+<b>ij<br></b>
+</p>
+<p id="p2">
+<b>kl<br></b>
+<b>mn<br></b>
+<b>op<br></b>
+<b>qr<br></b>
+<b>st<br></b>
+</p>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-removeNodeButKeepChildren-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-removeNodeButKeepChildren-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-removeNodeButKeepChildren-expected.html
new file mode 100644
index 0000000..95eab37
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-removeNodeButKeepChildren-expected.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+  </head>
+  <body>
+    -
+Before: positions[0] = (BODY,0)
+Before: positions[1] = (P#p1,0)
+Before: positions[2] = "|ab"
+Before: positions[3] = "a|b"
+Before: positions[4] = "ab|"
+Before: positions[5] = (P#p1,1)
+Before: positions[6] = (BR,0)
+Before: positions[7] = (P#p1,2)
+Before: positions[8] = (BODY,1)
+Before: positions[9] = (P#p2,0)
+Before: positions[10] = "|cd"
+Before: positions[11] = "c|d"
+Before: positions[12] = "cd|"
+Before: positions[13] = (P#p2,1)
+Before: positions[14] = (B,0)
+Before: positions[15] = "|ef"
+Before: positions[16] = "e|f"
+Before: positions[17] = "ef|"
+Before: positions[18] = (B,1)
+Before: positions[19] = (BR,0)
+Before: positions[20] = (B,2)
+Before: positions[21] = (P#p2,2)
+Before: positions[22] = "|gh"
+Before: positions[23] = "g|h"
+Before: positions[24] = "gh|"
+Before: positions[25] = (P#p2,3)
+Before: positions[26] = (BODY,2)
+Before: positions[27] = (P#p3,0)
+Before: positions[28] = "|ij"
+Before: positions[29] = "i|j"
+Before: positions[30] = "ij|"
+Before: positions[31] = (P#p3,1)
+Before: positions[32] = (BR,0)
+Before: positions[33] = (P#p3,2)
+Before: positions[34] = (BODY,3)
+Before: positions[35] = "|\n\n"
+Before: positions[36] = "\n|\n"
+Before: positions[37] = "\n\n|"
+Before: positions[38] = (BODY,4)
+
+After: positions[0] = (BODY,0)
+After: positions[1] = (P#p1,0)
+After: positions[2] = "|ab"
+After: positions[3] = "a|b"
+After: positions[4] = "ab|"
+After: positions[5] = (P#p1,1)
+After: positions[6] = (BR,0)
+After: positions[7] = (P#p1,2)
+After: positions[8] = (BODY,1)
+After: positions[9] = (BODY,1) - changed from (P#p2,0)
+After: positions[10] = "|cd"
+After: positions[11] = "c|d"
+After: positions[12] = "cd|"
+After: positions[13] = (BODY,2) - changed from (P#p2,1)
+After: positions[14] = (B,0)
+After: positions[15] = "|ef"
+After: positions[16] = "e|f"
+After: positions[17] = "ef|"
+After: positions[18] = (B,1)
+After: positions[19] = (BR,0)
+After: positions[20] = (B,2)
+After: positions[21] = (BODY,3) - changed from (P#p2,2)
+After: positions[22] = "|gh"
+After: positions[23] = "g|h"
+After: positions[24] = "gh|"
+After: positions[25] = (BODY,4) - changed from (P#p2,3)
+After: positions[26] = (BODY,4) - changed from (BODY,2)
+After: positions[27] = (P#p3,0)
+After: positions[28] = "|ij"
+After: positions[29] = "i|j"
+After: positions[30] = "ij|"
+After: positions[31] = (P#p3,1)
+After: positions[32] = (BR,0)
+After: positions[33] = (P#p3,2)
+After: positions[34] = (BODY,5) - changed from (BODY,3)
+After: positions[35] = "|\n\n"
+After: positions[36] = "\n|\n"
+After: positions[37] = "\n\n|"
+After: positions[38] = (BODY,6) - changed from (BODY,4)
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-removeNodeButKeepChildren-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-removeNodeButKeepChildren-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-removeNodeButKeepChildren-input.html
new file mode 100644
index 0000000..4ea6bc3
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-removeNodeButKeepChildren-input.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script type="text/javascript" src="RangeTest.js"></script>
+<script>
+
+function performTest()
+{
+    // DOM_wrapNode() should not affect any positions, because the node itself remains in the
+    // tree unmodified.
+
+   var result = comparePositionsBeforeAndAfter(function() {
+        DOM_removeNodeButKeepChildren(document.getElementById("p2"),"DIV");
+    });
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+result+"\n-"));
+}
+</script>
+</head>
+<body><p id="p1">ab<br></p><p id="p2">cd<b>ef<br></b>gh</b></p><p id="p3">ij<br></p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-replaceElement-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-replaceElement-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-replaceElement-expected.html
new file mode 100644
index 0000000..a83cfa6
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-replaceElement-expected.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+  </head>
+  <body>
+    -
+Before: positions[0] = (BODY,0)
+Before: positions[1] = (P#p1,0)
+Before: positions[2] = "|ab"
+Before: positions[3] = "a|b"
+Before: positions[4] = "ab|"
+Before: positions[5] = (P#p1,1)
+Before: positions[6] = (BR,0)
+Before: positions[7] = (P#p1,2)
+Before: positions[8] = (BODY,1)
+Before: positions[9] = (P#p2,0)
+Before: positions[10] = "|cd"
+Before: positions[11] = "c|d"
+Before: positions[12] = "cd|"
+Before: positions[13] = (P#p2,1)
+Before: positions[14] = (B,0)
+Before: positions[15] = "|ef"
+Before: positions[16] = "e|f"
+Before: positions[17] = "ef|"
+Before: positions[18] = (B,1)
+Before: positions[19] = (BR,0)
+Before: positions[20] = (B,2)
+Before: positions[21] = (P#p2,2)
+Before: positions[22] = "|gh"
+Before: positions[23] = "g|h"
+Before: positions[24] = "gh|"
+Before: positions[25] = (P#p2,3)
+Before: positions[26] = (BODY,2)
+Before: positions[27] = (P#p3,0)
+Before: positions[28] = "|ij"
+Before: positions[29] = "i|j"
+Before: positions[30] = "ij|"
+Before: positions[31] = (P#p3,1)
+Before: positions[32] = (BR,0)
+Before: positions[33] = (P#p3,2)
+Before: positions[34] = (BODY,3)
+Before: positions[35] = "|\n\n"
+Before: positions[36] = "\n|\n"
+Before: positions[37] = "\n\n|"
+Before: positions[38] = (BODY,4)
+
+After: positions[0] = (BODY,0)
+After: positions[1] = (P#p1,0)
+After: positions[2] = "|ab"
+After: positions[3] = "a|b"
+After: positions[4] = "ab|"
+After: positions[5] = (P#p1,1)
+After: positions[6] = (BR,0)
+After: positions[7] = (P#p1,2)
+After: positions[8] = (BODY,1)
+After: positions[9] = (DIV#p2,0) - changed from (P#p2,0)
+After: positions[10] = "|cd"
+After: positions[11] = "c|d"
+After: positions[12] = "cd|"
+After: positions[13] = (DIV#p2,1) - changed from (P#p2,1)
+After: positions[14] = (B,0)
+After: positions[15] = "|ef"
+After: positions[16] = "e|f"
+After: positions[17] = "ef|"
+After: positions[18] = (B,1)
+After: positions[19] = (BR,0)
+After: positions[20] = (B,2)
+After: positions[21] = (DIV#p2,2) - changed from (P#p2,2)
+After: positions[22] = "|gh"
+After: positions[23] = "g|h"
+After: positions[24] = "gh|"
+After: positions[25] = (DIV#p2,3) - changed from (P#p2,3)
+After: positions[26] = (BODY,2)
+After: positions[27] = (P#p3,0)
+After: positions[28] = "|ij"
+After: positions[29] = "i|j"
+After: positions[30] = "ij|"
+After: positions[31] = (P#p3,1)
+After: positions[32] = (BR,0)
+After: positions[33] = (P#p3,2)
+After: positions[34] = (BODY,3)
+After: positions[35] = "|\n\n"
+After: positions[36] = "\n|\n"
+After: positions[37] = "\n\n|"
+After: positions[38] = (BODY,4)
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-replaceElement-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-replaceElement-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-replaceElement-input.html
new file mode 100644
index 0000000..f4237b3
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-replaceElement-input.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script type="text/javascript" src="RangeTest.js"></script>
+<script>
+
+function performTest()
+{
+    // DOM_wrapNode() should not affect any positions, because the node itself remains in the
+    // tree unmodified.
+
+    var result = comparePositionsBeforeAndAfter(function() {
+        DOM_replaceElement(document.getElementById("p2"),"DIV");
+    });
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+result+"\n-"));
+}
+</script>
+</head>
+<body><p id="p1">ab<br></p><p id="p2">cd<b>ef<br></b>gh</b></p><p id="p3">ij<br></p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text1-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text1-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text1-expected.html
new file mode 100644
index 0000000..964c4f3
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text1-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|Here is text"
+positions[1] = "H|ere is text"
+positions[2] = "He|re is text"
+positions[3] = "Her|e is text"
+positions[4] = "Here| is text"
+positions[5] = "Here |is text"
+positions[6] = "Here i|s text"
+positions[7] = "Here is| text"
+positions[8] = "Here is |text"
+positions[9] = "Here is |text"
+positions[10] = "Here is |text"
+positions[11] = "Here is |text"
+positions[12] = "Here is |text"
+positions[13] = "Here is |text"
+positions[14] = "Here is t|ext"
+positions[15] = "Here is te|xt"
+positions[16] = "Here is tex|t"
+positions[17] = "Here is text|"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text1-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text1-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text1-input.html
new file mode 100644
index 0000000..aa854c2
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text1-input.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_deleteCharacters(text,8,13);
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text2-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text2-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text2-expected.html
new file mode 100644
index 0000000..d5c122d
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text2-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|is some text"
+positions[1] = "|is some text"
+positions[2] = "|is some text"
+positions[3] = "|is some text"
+positions[4] = "|is some text"
+positions[5] = "|is some text"
+positions[6] = "i|s some text"
+positions[7] = "is| some text"
+positions[8] = "is |some text"
+positions[9] = "is s|ome text"
+positions[10] = "is so|me text"
+positions[11] = "is som|e text"
+positions[12] = "is some| text"
+positions[13] = "is some |text"
+positions[14] = "is some t|ext"
+positions[15] = "is some te|xt"
+positions[16] = "is some tex|t"
+positions[17] = "is some text|"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text2-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text2-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text2-input.html
new file mode 100644
index 0000000..f952c17
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text2-input.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_deleteCharacters(text,0,5);
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text3-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text3-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text3-expected.html
new file mode 100644
index 0000000..1df6e5d
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text3-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|Here is some"
+positions[1] = "H|ere is some"
+positions[2] = "He|re is some"
+positions[3] = "Her|e is some"
+positions[4] = "Here| is some"
+positions[5] = "Here |is some"
+positions[6] = "Here i|s some"
+positions[7] = "Here is| some"
+positions[8] = "Here is |some"
+positions[9] = "Here is s|ome"
+positions[10] = "Here is so|me"
+positions[11] = "Here is som|e"
+positions[12] = "Here is some|"
+positions[13] = "Here is some|"
+positions[14] = "Here is some|"
+positions[15] = "Here is some|"
+positions[16] = "Here is some|"
+positions[17] = "Here is some|"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text3-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text3-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text3-input.html
new file mode 100644
index 0000000..e19dad9
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text3-input.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_deleteCharacters(text,12);
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text4-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text4-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text4-expected.html
new file mode 100644
index 0000000..6103a83
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text4-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|Here is (inserted)some text"
+positions[1] = "H|ere is (inserted)some text"
+positions[2] = "He|re is (inserted)some text"
+positions[3] = "Her|e is (inserted)some text"
+positions[4] = "Here| is (inserted)some text"
+positions[5] = "Here |is (inserted)some text"
+positions[6] = "Here i|s (inserted)some text"
+positions[7] = "Here is| (inserted)some text"
+positions[8] = "Here is |(inserted)some text"
+positions[9] = "Here is (inserted)s|ome text"
+positions[10] = "Here is (inserted)so|me text"
+positions[11] = "Here is (inserted)som|e text"
+positions[12] = "Here is (inserted)some| text"
+positions[13] = "Here is (inserted)some |text"
+positions[14] = "Here is (inserted)some t|ext"
+positions[15] = "Here is (inserted)some te|xt"
+positions[16] = "Here is (inserted)some tex|t"
+positions[17] = "Here is (inserted)some text|"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text4-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text4-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text4-input.html
new file mode 100644
index 0000000..7c1fe7b
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text4-input.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_insertCharacters(text,8,"(inserted)");
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text5-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text5-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text5-expected.html
new file mode 100644
index 0000000..f935774
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text5-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|(inserted)Here is some text"
+positions[1] = "(inserted)H|ere is some text"
+positions[2] = "(inserted)He|re is some text"
+positions[3] = "(inserted)Her|e is some text"
+positions[4] = "(inserted)Here| is some text"
+positions[5] = "(inserted)Here |is some text"
+positions[6] = "(inserted)Here i|s some text"
+positions[7] = "(inserted)Here is| some text"
+positions[8] = "(inserted)Here is |some text"
+positions[9] = "(inserted)Here is s|ome text"
+positions[10] = "(inserted)Here is so|me text"
+positions[11] = "(inserted)Here is som|e text"
+positions[12] = "(inserted)Here is some| text"
+positions[13] = "(inserted)Here is some |text"
+positions[14] = "(inserted)Here is some t|ext"
+positions[15] = "(inserted)Here is some te|xt"
+positions[16] = "(inserted)Here is some tex|t"
+positions[17] = "(inserted)Here is some text|"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text5-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text5-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text5-input.html
new file mode 100644
index 0000000..c4b0018
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text5-input.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_insertCharacters(text,0,"(inserted)");
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text6-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text6-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text6-expected.html
new file mode 100644
index 0000000..0f5ab29
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text6-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|Here is some text(inserted)"
+positions[1] = "H|ere is some text(inserted)"
+positions[2] = "He|re is some text(inserted)"
+positions[3] = "Her|e is some text(inserted)"
+positions[4] = "Here| is some text(inserted)"
+positions[5] = "Here |is some text(inserted)"
+positions[6] = "Here i|s some text(inserted)"
+positions[7] = "Here is| some text(inserted)"
+positions[8] = "Here is |some text(inserted)"
+positions[9] = "Here is s|ome text(inserted)"
+positions[10] = "Here is so|me text(inserted)"
+positions[11] = "Here is som|e text(inserted)"
+positions[12] = "Here is some| text(inserted)"
+positions[13] = "Here is some |text(inserted)"
+positions[14] = "Here is some t|ext(inserted)"
+positions[15] = "Here is some te|xt(inserted)"
+positions[16] = "Here is some tex|t(inserted)"
+positions[17] = "Here is some text|(inserted)"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text6-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text6-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text6-input.html
new file mode 100644
index 0000000..07b8887
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text6-input.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_insertCharacters(text,text.nodeValue.length,"(inserted)");
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text7-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text7-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text7-expected.html
new file mode 100644
index 0000000..6e62c11
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text7-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|Here is (inserted)text"
+positions[1] = "H|ere is (inserted)text"
+positions[2] = "He|re is (inserted)text"
+positions[3] = "Her|e is (inserted)text"
+positions[4] = "Here| is (inserted)text"
+positions[5] = "Here |is (inserted)text"
+positions[6] = "Here i|s (inserted)text"
+positions[7] = "Here is| (inserted)text"
+positions[8] = "Here is |(inserted)text"
+positions[9] = "Here is |(inserted)text"
+positions[10] = "Here is |(inserted)text"
+positions[11] = "Here is |(inserted)text"
+positions[12] = "Here is |(inserted)text"
+positions[13] = "Here is |(inserted)text"
+positions[14] = "Here is (inserted)t|ext"
+positions[15] = "Here is (inserted)te|xt"
+positions[16] = "Here is (inserted)tex|t"
+positions[17] = "Here is (inserted)text|"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text7-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text7-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text7-input.html
new file mode 100644
index 0000000..00942ca
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text7-input.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_deleteCharacters(text,8,13);
+        DOM_insertCharacters(text,8,"(inserted)");
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text8-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text8-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text8-expected.html
new file mode 100644
index 0000000..7fff8bb
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text8-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|(inserted) is some text"
+positions[1] = "|(inserted) is some text"
+positions[2] = "|(inserted) is some text"
+positions[3] = "|(inserted) is some text"
+positions[4] = "|(inserted) is some text"
+positions[5] = "(inserted) |is some text"
+positions[6] = "(inserted) i|s some text"
+positions[7] = "(inserted) is| some text"
+positions[8] = "(inserted) is |some text"
+positions[9] = "(inserted) is s|ome text"
+positions[10] = "(inserted) is so|me text"
+positions[11] = "(inserted) is som|e text"
+positions[12] = "(inserted) is some| text"
+positions[13] = "(inserted) is some |text"
+positions[14] = "(inserted) is some t|ext"
+positions[15] = "(inserted) is some te|xt"
+positions[16] = "(inserted) is some tex|t"
+positions[17] = "(inserted) is some text|"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text8-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text8-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text8-input.html
new file mode 100644
index 0000000..d40c4a1
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text8-input.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_deleteCharacters(text,0,4);
+        DOM_insertCharacters(text,0,"(inserted)");
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text9-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text9-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-text9-expected.html
new file mode 100644
index 0000000..369dd26
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text9-expected.html
@@ -0,0 +1,45 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before text change:
+positions[0] = "|Here is some text"
+positions[1] = "H|ere is some text"
+positions[2] = "He|re is some text"
+positions[3] = "Her|e is some text"
+positions[4] = "Here| is some text"
+positions[5] = "Here |is some text"
+positions[6] = "Here i|s some text"
+positions[7] = "Here is| some text"
+positions[8] = "Here is |some text"
+positions[9] = "Here is s|ome text"
+positions[10] = "Here is so|me text"
+positions[11] = "Here is som|e text"
+positions[12] = "Here is some| text"
+positions[13] = "Here is some |text"
+positions[14] = "Here is some t|ext"
+positions[15] = "Here is some te|xt"
+positions[16] = "Here is some tex|t"
+positions[17] = "Here is some text|"
+After text change:
+positions[0] = "|text(inserted)"
+positions[1] = "|text(inserted)"
+positions[2] = "|text(inserted)"
+positions[3] = "|text(inserted)"
+positions[4] = "|text(inserted)"
+positions[5] = "|text(inserted)"
+positions[6] = "|text(inserted)"
+positions[7] = "|text(inserted)"
+positions[8] = "|text(inserted)"
+positions[9] = "|text(inserted)"
+positions[10] = "|text(inserted)"
+positions[11] = "|text(inserted)"
+positions[12] = "|text(inserted)"
+positions[13] = "|text(inserted)"
+positions[14] = "t|ext(inserted)"
+positions[15] = "te|xt(inserted)"
+positions[16] = "tex|t(inserted)"
+positions[17] = "text|(inserted)"
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-text9-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-text9-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-text9-input.html
new file mode 100644
index 0000000..326c848
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-text9-input.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = document.getElementsByTagName("P")[0];
+    var text = p.firstChild;
+    var positions = new Array();
+    for (var i = 0; i <= text.nodeValue.length; i++)
+        positions.push(new Position(text,i));
+
+    var messages = new Array();
+    messages.push("Before text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_deleteCharacters(text,0,13);
+        DOM_insertCharacters(text,text.nodeValue.length,"(inserted)");
+    });
+
+    messages.push("After text change:");
+    for (var i = 0; i < positions.length; i++)
+        messages.push("positions["+i+"] = "+positions[i]);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>Here is some text</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-wrapNode-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-wrapNode-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking-wrapNode-expected.html
new file mode 100644
index 0000000..7012054
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-wrapNode-expected.html
@@ -0,0 +1,67 @@
+<html>
+  <head>
+  </head>
+  <body>
+    -
+Before: positions[0] = (BODY,0)
+Before: positions[1] = (P#p1,0)
+Before: positions[2] = "|ab"
+Before: positions[3] = "a|b"
+Before: positions[4] = "ab|"
+Before: positions[5] = (P#p1,1)
+Before: positions[6] = (BR,0)
+Before: positions[7] = (P#p1,2)
+Before: positions[8] = (BODY,1)
+Before: positions[9] = (P#p2,0)
+Before: positions[10] = "|cd"
+Before: positions[11] = "c|d"
+Before: positions[12] = "cd|"
+Before: positions[13] = (P#p2,1)
+Before: positions[14] = (BR,0)
+Before: positions[15] = (P#p2,2)
+Before: positions[16] = (BODY,2)
+Before: positions[17] = (P#p3,0)
+Before: positions[18] = "|ef"
+Before: positions[19] = "e|f"
+Before: positions[20] = "ef|"
+Before: positions[21] = (P#p3,1)
+Before: positions[22] = (BR,0)
+Before: positions[23] = (P#p3,2)
+Before: positions[24] = (BODY,3)
+Before: positions[25] = "|\n\n"
+Before: positions[26] = "\n|\n"
+Before: positions[27] = "\n\n|"
+Before: positions[28] = (BODY,4)
+
+After: positions[0] = (BODY,0)
+After: positions[1] = (P#p1,0)
+After: positions[2] = "|ab"
+After: positions[3] = "a|b"
+After: positions[4] = "ab|"
+After: positions[5] = (P#p1,1)
+After: positions[6] = (BR,0)
+After: positions[7] = (P#p1,2)
+After: positions[8] = (DIV,0) - changed from (BODY,1)
+After: positions[9] = (P#p2,0)
+After: positions[10] = "|cd"
+After: positions[11] = "c|d"
+After: positions[12] = "cd|"
+After: positions[13] = (P#p2,1)
+After: positions[14] = (BR,0)
+After: positions[15] = (P#p2,2)
+After: positions[16] = (DIV,1) - changed from (BODY,2)
+After: positions[17] = (P#p3,0)
+After: positions[18] = "|ef"
+After: positions[19] = "e|f"
+After: positions[20] = "ef|"
+After: positions[21] = (P#p3,1)
+After: positions[22] = (BR,0)
+After: positions[23] = (P#p3,2)
+After: positions[24] = (BODY,3)
+After: positions[25] = "|\n\n"
+After: positions[26] = "\n|\n"
+After: positions[27] = "\n\n|"
+After: positions[28] = (BODY,4)
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking-wrapNode-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking-wrapNode-input.html b/experiments/editorFramework/test/Layer0/dom/tracking-wrapNode-input.html
new file mode 100644
index 0000000..b38dc71
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking-wrapNode-input.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script type="text/javascript" src="RangeTest.js"></script>
+<script>
+
+function performTest()
+{
+    // DOM_wrapNode() should only affect positions which come directly
+    // before or after the node.
+
+    var result = comparePositionsBeforeAndAfter(function() {
+        DOM_wrapNode(document.getElementById("p2"),"DIV");
+    });
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+result+"\n-"));
+}
+</script>
+</head>
+<body><p id="p1">ab<br></p><p id="p2">cd<br></p><p id="p3">ef<br></p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking1-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking1-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking1-expected.html
new file mode 100644
index 0000000..a4bd0ab
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking1-expected.html
@@ -0,0 +1,32 @@
+<html>
+  <head></head>
+  <body>
+    -
+posOffset 0, nodeOffset 0: (BODY,0) (BODY,0) (BODY,0)
+posOffset 0, nodeOffset 1: (BODY,0) (BODY,0) (BODY,0)
+posOffset 0, nodeOffset 2: (BODY,0) (BODY,0) (BODY,0)
+posOffset 0, nodeOffset 3: (BODY,0) (BODY,0) (BODY,0)
+posOffset 0, nodeOffset 4: (BODY,0) (BODY,0) (BODY,0)
+posOffset 1, nodeOffset 0: (BODY,1) (BODY,2) (BODY,1)
+posOffset 1, nodeOffset 1: (BODY,1) (BODY,1) (BODY,1)
+posOffset 1, nodeOffset 2: (BODY,1) (BODY,1) (BODY,1)
+posOffset 1, nodeOffset 3: (BODY,1) (BODY,1) (BODY,1)
+posOffset 1, nodeOffset 4: (BODY,1) (BODY,1) (BODY,1)
+posOffset 2, nodeOffset 0: (BODY,2) (BODY,3) (BODY,2)
+posOffset 2, nodeOffset 1: (BODY,2) (BODY,3) (BODY,2)
+posOffset 2, nodeOffset 2: (BODY,2) (BODY,2) (BODY,2)
+posOffset 2, nodeOffset 3: (BODY,2) (BODY,2) (BODY,2)
+posOffset 2, nodeOffset 4: (BODY,2) (BODY,2) (BODY,2)
+posOffset 3, nodeOffset 0: (BODY,3) (BODY,4) (BODY,3)
+posOffset 3, nodeOffset 1: (BODY,3) (BODY,4) (BODY,3)
+posOffset 3, nodeOffset 2: (BODY,3) (BODY,4) (BODY,3)
+posOffset 3, nodeOffset 3: (BODY,3) (BODY,3) (BODY,3)
+posOffset 3, nodeOffset 4: (BODY,3) (BODY,3) (BODY,3)
+posOffset 4, nodeOffset 0: (BODY,4) (BODY,5) (BODY,4)
+posOffset 4, nodeOffset 1: (BODY,4) (BODY,5) (BODY,4)
+posOffset 4, nodeOffset 2: (BODY,4) (BODY,5) (BODY,4)
+posOffset 4, nodeOffset 3: (BODY,4) (BODY,5) (BODY,4)
+posOffset 4, nodeOffset 4: (BODY,4) (BODY,4) (BODY,4)
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking1-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking1-input.html b/experiments/editorFramework/test/Layer0/dom/tracking1-input.html
new file mode 100644
index 0000000..f819e8e
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking1-input.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var ps = document.getElementsByTagName("P");
+
+    var messages = new Array();
+    var nodeCount = document.body.childNodes.length;
+    for (var posOffset = 0; posOffset <= nodeCount; posOffset++) {
+        for (var nodeOffset = 0; nodeOffset <= nodeCount; nodeOffset++) {
+            var position = new Position(document.body,posOffset);
+            var temp = DOM_createElement(document,"B");
+            Position_trackWhileExecuting([position],function() {
+                var message = "posOffset "+posOffset+", nodeOffset "+nodeOffset+": "+position;
+                DOM_insertBefore(document.body,temp,document.body.childNodes[nodeOffset]);
+                message += " "+position;
+                DOM_deleteNode(temp);
+                message += " "+position;
+                messages.push(message);
+            });
+        }
+    }
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>One</p><p>Two</p><p>Three</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking2-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking2-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking2-expected.html
new file mode 100644
index 0000000..bfde537
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking2-expected.html
@@ -0,0 +1,11 @@
+<html>
+  <head></head>
+  <body>
+    -
+Before insertion: position = (BODY,4)
+After insertion: position = (BODY,4)
+Before removal: position = (BODY,4)
+After removal: position = (BODY,4)
+-
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking2-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking2-input.html b/experiments/editorFramework/test/Layer0/dom/tracking2-input.html
new file mode 100644
index 0000000..a17a42b
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking2-input.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var messages = new Array();
+
+    var ps = document.getElementsByTagName("P");
+    var position = new Position(document.body,document.body.childNodes.length);
+    messages.push("Before insertion: position = "+position);
+    Position_trackWhileExecuting([position],function() {
+        DOM_appendChild(ps[0],DOM_createTextNode(document,"X"));
+    });
+    messages.push("After insertion: position = "+position);
+
+    var position = new Position(document.body,document.body.childNodes.length);
+    messages.push("Before removal: position = "+position);
+    Position_trackWhileExecuting([position],function() {
+        DOM_deleteNode(ps[0].firstChild);
+    });
+    messages.push("After removal: position = "+position);
+
+    DOM_deleteAllChildren(document.body);
+    DOM_appendChild(document.body,DOM_createTextNode(document,"-\n"+messages.join("\n")+"\n-"));
+}
+</script>
+</head>
+<body><p>One</p><p>Two</p><p>Three</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking3-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking3-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking3-expected.html
new file mode 100644
index 0000000..92d4b24
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking3-expected.html
@@ -0,0 +1,10 @@
+<html>
+  <head></head>
+  <body>
+    <span>Zero</span>
+    <tt/>
+    <span>One</span>
+    <p>Two</p>
+    <p>Three</p>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking3-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking3-input.html b/experiments/editorFramework/test/Layer0/dom/tracking3-input.html
new file mode 100644
index 0000000..609fd52
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking3-input.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var ps = document.getElementsByTagName("P");
+    var position = new Position(ps[0],1);
+
+    Position_trackWhileExecuting([position],function() {
+        DOM_removeNodeButKeepChildren(ps[0]);
+    });
+
+    var tt = DOM_createElement(document,"tt");
+    insertAtPosition(position,tt);
+}
+</script>
+</head>
+<body><p><span>Zero</span><span>One</span></p><p>Two</p><p>Three</p></body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking4-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking4-expected.html b/experiments/editorFramework/test/Layer0/dom/tracking4-expected.html
new file mode 100644
index 0000000..bf11c6b
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking4-expected.html
@@ -0,0 +1,13 @@
+<html>
+  <head></head>
+  <body>
+    <p>
+      <b/>
+      <span>Zero</span>
+      <span>One</span>
+      <i/>
+    </p>
+    <p>Two</p>
+    <p>Three</p>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/tracking4-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/tracking4-input.html b/experiments/editorFramework/test/Layer0/dom/tracking4-input.html
new file mode 100644
index 0000000..3f78b47
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/tracking4-input.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var ps = document.getElementsByTagName("P");
+    var pos1 = new Position(ps[0],0);
+    var pos2 = new Position(ps[0],2);
+
+    Position_trackWhileExecuting([pos1,pos2],function() {
+        insertAtPosition(pos1,DOM_createElement(document,"b"));
+        insertAtPosition(pos2,DOM_createElement(document,"i"));
+    });
+}
+</script>
+</head>
+<body><p><span>Zero</span><span>One</span></p><p>Two</p><p>Three</p></body></html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/wrapSiblings01-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/wrapSiblings01-expected.html b/experiments/editorFramework/test/Layer0/dom/wrapSiblings01-expected.html
new file mode 100644
index 0000000..30ede3c
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/wrapSiblings01-expected.html
@@ -0,0 +1,26 @@
+<html>
+  <head></head>
+  <body>
+    <p>
+      (P,0)
+      <b>A</b>
+      (P,1)
+      <b>B</b>
+      <i>
+        (I,0)
+        <b>C</b>
+        (I,1)
+        <b>D</b>
+        (I,2)
+        <b>E</b>
+        (I,3)
+        <b>F</b>
+        (I,4)
+      </i>
+      <b>G</b>
+      (P,4)
+      <b>H</b>
+      (P,5)
+    </p>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/wrapSiblings01-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/wrapSiblings01-input.html b/experiments/editorFramework/test/Layer0/dom/wrapSiblings01-input.html
new file mode 100644
index 0000000..4dcb25a
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/wrapSiblings01-input.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = DOM_createElement(document,"P");
+    var nchildren = 8;
+    var positions = new Array();
+    var baseCode = "A".charCodeAt(0);
+    for (var i = 0; i < nchildren; i++) {
+        var b = DOM_createElement(document,"B");
+        DOM_appendChild(b,DOM_createTextNode(document,String.fromCharCode(baseCode+i)));
+        DOM_appendChild(p,b);
+        positions.push(new Position(p,i));
+    }
+    positions.push(new Position(p,nchildren));
+    DOM_appendChild(document.body,p);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_wrapSiblings(p.childNodes[2],p.childNodes[5],"I");
+    });
+
+    var lines = new Array();
+    for (var i = 0; i < positions.length; i++)
+        lines.push(positions[i].toString()+"\n");
+
+    for (var i = positions.length-1; i >= 0; i--) {
+        var pos = positions[i];
+        var text = DOM_createTextNode(document,pos.toString());
+        DOM_insertBefore(pos.node,text,pos.node.childNodes[pos.offset]);
+    }
+}
+</script>
+</head>
+<body>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/wrapSiblings02-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/wrapSiblings02-expected.html b/experiments/editorFramework/test/Layer0/dom/wrapSiblings02-expected.html
new file mode 100644
index 0000000..2152c93
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/wrapSiblings02-expected.html
@@ -0,0 +1,26 @@
+<html>
+  <head></head>
+  <body>
+    <p>
+      (P,0)
+      <b>A</b>
+      (P,1)
+      <b>B</b>
+      <i>
+        (I,0)
+        <b>C</b>
+        (I,1)
+      </i>
+      <b>D</b>
+      (P,4)
+      <b>E</b>
+      (P,5)
+      <b>F</b>
+      (P,6)
+      <b>G</b>
+      (P,7)
+      <b>H</b>
+      (P,8)
+    </p>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/wrapSiblings02-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/wrapSiblings02-input.html b/experiments/editorFramework/test/Layer0/dom/wrapSiblings02-input.html
new file mode 100644
index 0000000..0c70e18
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/wrapSiblings02-input.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = DOM_createElement(document,"P");
+    var nchildren = 8;
+    var positions = new Array();
+    var baseCode = "A".charCodeAt(0);
+    for (var i = 0; i < nchildren; i++) {
+        var b = DOM_createElement(document,"B");
+        DOM_appendChild(b,DOM_createTextNode(document,String.fromCharCode(baseCode+i)));
+        DOM_appendChild(p,b);
+        positions.push(new Position(p,i));
+    }
+    positions.push(new Position(p,nchildren));
+    DOM_appendChild(document.body,p);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_wrapSiblings(p.childNodes[2],p.childNodes[2],"I");
+    });
+
+    var lines = new Array();
+    for (var i = 0; i < positions.length; i++)
+        lines.push(positions[i].toString()+"\n");
+
+    for (var i = positions.length-1; i >= 0; i--) {
+        var pos = positions[i];
+        var text = DOM_createTextNode(document,pos.toString());
+        DOM_insertBefore(pos.node,text,pos.node.childNodes[pos.offset]);
+    }
+}
+</script>
+</head>
+<body>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/wrapSiblings03-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/wrapSiblings03-expected.html b/experiments/editorFramework/test/Layer0/dom/wrapSiblings03-expected.html
new file mode 100644
index 0000000..ffdb792
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/wrapSiblings03-expected.html
@@ -0,0 +1,26 @@
+<html>
+  <head></head>
+  <body>
+    <p>
+      <i>
+        (I,0)
+        <b>A</b>
+        (I,1)
+        <b>B</b>
+        (I,2)
+        <b>C</b>
+        (I,3)
+        <b>D</b>
+        (I,4)
+        <b>E</b>
+        (I,5)
+      </i>
+      <b>F</b>
+      (P,2)
+      <b>G</b>
+      (P,3)
+      <b>H</b>
+      (P,4)
+    </p>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/wrapSiblings03-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/wrapSiblings03-input.html b/experiments/editorFramework/test/Layer0/dom/wrapSiblings03-input.html
new file mode 100644
index 0000000..14dffba
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/wrapSiblings03-input.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = DOM_createElement(document,"P");
+    var nchildren = 8;
+    var positions = new Array();
+    var baseCode = "A".charCodeAt(0);
+    for (var i = 0; i < nchildren; i++) {
+        var b = DOM_createElement(document,"B");
+        DOM_appendChild(b,DOM_createTextNode(document,String.fromCharCode(baseCode+i)));
+        DOM_appendChild(p,b);
+        positions.push(new Position(p,i));
+    }
+    positions.push(new Position(p,nchildren));
+    DOM_appendChild(document.body,p);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_wrapSiblings(p.childNodes[0],p.childNodes[4],"I");
+    });
+
+    var lines = new Array();
+    for (var i = 0; i < positions.length; i++)
+        lines.push(positions[i].toString()+"\n");
+
+    for (var i = positions.length-1; i >= 0; i--) {
+        var pos = positions[i];
+        var text = DOM_createTextNode(document,pos.toString());
+        DOM_insertBefore(pos.node,text,pos.node.childNodes[pos.offset]);
+    }
+}
+</script>
+</head>
+<body>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/wrapSiblings04-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/wrapSiblings04-expected.html b/experiments/editorFramework/test/Layer0/dom/wrapSiblings04-expected.html
new file mode 100644
index 0000000..2de899e
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/wrapSiblings04-expected.html
@@ -0,0 +1,26 @@
+<html>
+  <head></head>
+  <body>
+    <p>
+      (P,0)
+      <b>A</b>
+      (P,1)
+      <b>B</b>
+      (P,2)
+      <b>C</b>
+      <i>
+        (I,0)
+        <b>D</b>
+        (I,1)
+        <b>E</b>
+        (I,2)
+        <b>F</b>
+        (I,3)
+        <b>G</b>
+        (I,4)
+        <b>H</b>
+        (I,5)
+      </i>
+    </p>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/dom/wrapSiblings04-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/dom/wrapSiblings04-input.html b/experiments/editorFramework/test/Layer0/dom/wrapSiblings04-input.html
new file mode 100644
index 0000000..0516d5e
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/dom/wrapSiblings04-input.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+function performTest()
+{
+    var p = DOM_createElement(document,"P");
+    var nchildren = 8;
+    var positions = new Array();
+    var baseCode = "A".charCodeAt(0);
+    for (var i = 0; i < nchildren; i++) {
+        var b = DOM_createElement(document,"B");
+        DOM_appendChild(b,DOM_createTextNode(document,String.fromCharCode(baseCode+i)));
+        DOM_appendChild(p,b);
+        positions.push(new Position(p,i));
+    }
+    positions.push(new Position(p,nchildren));
+    DOM_appendChild(document.body,p);
+
+    Position_trackWhileExecuting(positions,function() {
+        DOM_wrapSiblings(p.childNodes[3],p.childNodes[7],"I");
+    });
+
+    var lines = new Array();
+    for (var i = 0; i < positions.length; i++)
+        lines.push(positions[i].toString()+"\n");
+
+    for (var i = positions.length-1; i >= 0; i--) {
+        var pos = positions[i];
+        var text = DOM_createTextNode(document,pos.toString());
+        DOM_insertBefore(pos.node,text,pos.node.childNodes[pos.offset]);
+    }
+}
+</script>
+</head>
+<body>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/FiguresTest.js
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/FiguresTest.js b/experiments/editorFramework/test/Layer0/figures/FiguresTest.js
new file mode 100644
index 0000000..385017a
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/FiguresTest.js
@@ -0,0 +1,35 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+function figurePropertiesString(index)
+{
+    var figure = document.getElementsByTagName("FIGURE")[0];
+    var parent = figure.parentNode;
+    var offset = DOM_nodeOffset(figure);
+    Selection_set(parent,offset,parent,offset+1);
+    var properties = Figures_getProperties(Figures_getSelectedFigureId());
+    var strings = new Array();
+    var names = Object.getOwnPropertyNames(properties).sort();
+    for (var i = 0; i < names.length; i++) {
+        var name = names[i];
+        if (properties[name] == null)
+            strings.push(name+" = null");
+        else
+            strings.push(name+" = "+properties[name]);
+    }
+    return strings.join("\n");
+}

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties01-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties01-expected.html b/experiments/editorFramework/test/Layer0/figures/getProperties01-expected.html
new file mode 100644
index 0000000..4a2f422
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties01-expected.html
@@ -0,0 +1,2 @@
+src = nothing.png
+width = null

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties01-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties01-input.html b/experiments/editorFramework/test/Layer0/figures/getProperties01-input.html
new file mode 100644
index 0000000..0c79db8
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties01-input.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="FiguresTest.js"></script>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+
+    Figures_insertFigure("nothing.png",null,false,null);
+    PostponedActions_perform();
+
+    return figurePropertiesString(0);
+}
+</script>
+</head>
+<body>
+[]
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties02-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties02-expected.html b/experiments/editorFramework/test/Layer0/figures/getProperties02-expected.html
new file mode 100644
index 0000000..1de41c6
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties02-expected.html
@@ -0,0 +1,2 @@
+src = nothing.png
+width = 60%

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties02-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties02-input.html b/experiments/editorFramework/test/Layer0/figures/getProperties02-input.html
new file mode 100644
index 0000000..dfa32bd
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties02-input.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="FiguresTest.js"></script>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+
+    Figures_insertFigure("nothing.png","60%",false,null);
+    PostponedActions_perform();
+
+    return figurePropertiesString(0);
+}
+</script>
+</head>
+<body>
+[]
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties03-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties03-expected.html b/experiments/editorFramework/test/Layer0/figures/getProperties03-expected.html
new file mode 100644
index 0000000..dbe1cb9
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties03-expected.html
@@ -0,0 +1,2 @@
+src = null
+width = null

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties03-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties03-input.html b/experiments/editorFramework/test/Layer0/figures/getProperties03-input.html
new file mode 100644
index 0000000..3f756af
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties03-input.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="FiguresTest.js"></script>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+    return figurePropertiesString(0);
+}
+</script>
+</head>
+<body>
+  <figure>
+  </figure>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties04-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties04-expected.html b/experiments/editorFramework/test/Layer0/figures/getProperties04-expected.html
new file mode 100644
index 0000000..dbe1cb9
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties04-expected.html
@@ -0,0 +1,2 @@
+src = null
+width = null

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties04-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties04-input.html b/experiments/editorFramework/test/Layer0/figures/getProperties04-input.html
new file mode 100644
index 0000000..2362417
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties04-input.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="FiguresTest.js"></script>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+    return figurePropertiesString(0);
+}
+</script>
+</head>
+<body>
+  <figure>
+    Test
+  </figure>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties05-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties05-expected.html b/experiments/editorFramework/test/Layer0/figures/getProperties05-expected.html
new file mode 100644
index 0000000..4a2f422
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties05-expected.html
@@ -0,0 +1,2 @@
+src = nothing.png
+width = null

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties05-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties05-input.html b/experiments/editorFramework/test/Layer0/figures/getProperties05-input.html
new file mode 100644
index 0000000..4b37359
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties05-input.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="FiguresTest.js"></script>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+    return figurePropertiesString(0);
+}
+</script>
+</head>
+<body>
+  <figure>
+    <span><img src="nothing.png"></span>
+  </figure>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties06-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties06-expected.html b/experiments/editorFramework/test/Layer0/figures/getProperties06-expected.html
new file mode 100644
index 0000000..1de41c6
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties06-expected.html
@@ -0,0 +1,2 @@
+src = nothing.png
+width = 60%

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties06-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties06-input.html b/experiments/editorFramework/test/Layer0/figures/getProperties06-input.html
new file mode 100644
index 0000000..127e2d9
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties06-input.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="FiguresTest.js"></script>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+    return figurePropertiesString(0);
+}
+</script>
+</head>
+<body>
+  <figure>
+    <span><img src="nothing.png" style="width: 60%"></span>
+  </figure>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties07-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties07-expected.html b/experiments/editorFramework/test/Layer0/figures/getProperties07-expected.html
new file mode 100644
index 0000000..1de41c6
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties07-expected.html
@@ -0,0 +1,2 @@
+src = nothing.png
+width = 60%

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties07-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties07-input.html b/experiments/editorFramework/test/Layer0/figures/getProperties07-input.html
new file mode 100644
index 0000000..0318a72
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties07-input.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="FiguresTest.js"></script>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+    return figurePropertiesString(0);
+}
+</script>
+</head>
+<body>
+  <figure>
+    <span><img src="nothing.png" width="60%"></span>
+  </figure>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties08-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties08-expected.html b/experiments/editorFramework/test/Layer0/figures/getProperties08-expected.html
new file mode 100644
index 0000000..0dc9cd1
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties08-expected.html
@@ -0,0 +1,2 @@
+src = nothing.png
+width = 100%

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/getProperties08-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/getProperties08-input.html b/experiments/editorFramework/test/Layer0/figures/getProperties08-input.html
new file mode 100644
index 0000000..35e98fa
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/getProperties08-input.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="FiguresTest.js"></script>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+    return figurePropertiesString(0);
+}
+</script>
+</head>
+<body>
+  <figure>
+    <span><img src="nothing.png" style="width: 100%" width="60%"></span>
+  </figure>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/insertFigure-hierarchy01-expected.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/insertFigure-hierarchy01-expected.html b/experiments/editorFramework/test/Layer0/figures/insertFigure-hierarchy01-expected.html
new file mode 100644
index 0000000..e2892dc
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/insertFigure-hierarchy01-expected.html
@@ -0,0 +1,14 @@
+<html>
+  <head>
+    <link href="../generic.css" rel="stylesheet"/>
+  </head>
+  <body>
+    <figure id="item1">
+      <img src="nothing.png"/>
+      <figcaption>First figure</figcaption>
+    </figure>
+    <figure id="item2">
+      <img src="nothing.png"/>
+    </figure>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/0633908a/experiments/editorFramework/test/Layer0/figures/insertFigure-hierarchy01-input.html
----------------------------------------------------------------------
diff --git a/experiments/editorFramework/test/Layer0/figures/insertFigure-hierarchy01-input.html b/experiments/editorFramework/test/Layer0/figures/insertFigure-hierarchy01-input.html
new file mode 100644
index 0000000..cfcfb6a
--- /dev/null
+++ b/experiments/editorFramework/test/Layer0/figures/insertFigure-hierarchy01-input.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link href="../generic.css" rel="stylesheet"/>
+<script>
+function performTest()
+{
+    Outline_init();
+    PostponedActions_perform();
+
+    Figures_insertFigure("nothing.png",null,false,null);
+    PostponedActions_perform();
+}
+</script>
+</head>
+<body>
+
+<figure>
+  <img src="nothing.png"/>
+  <figcaption>First figure[]</figcaption>
+</figure>
+
+</body>
+</html>