| <html> | |
| <body> | |
| <div id="test"><span id="span1">foo<span id="span2">bar</span></span><span id="span3">baz</span></div> | |
| <div id="console"></div> | |
| <script> | |
| var s = window.getSelection(); | |
| var testDiv = document.getElementById("test"); | |
| var span1 = document.getElementById("span1"); | |
| var span2 = document.getElementById("span2"); | |
| var span3 = document.getElementById("span3"); | |
| function log(str) { | |
| var li = document.createElement("li"); | |
| li.appendChild(document.createTextNode(str)); | |
| document.getElementById("console").appendChild(li); | |
| } | |
| function shouldBe(expr, expected) { | |
| var actual = eval(expr); | |
| if (actual != expected) | |
| log("Failure: " + expr + " should be " + expected + ", was " + actual + "."); | |
| else | |
| log("Success: " + expr + " is " + expected + "."); | |
| } | |
| if (window.testRunner) | |
| testRunner.dumpAsText(); | |
| var r = document.createRange(); | |
| // select span2 | |
| r.setStart(span1, 1); | |
| r.setEnd(span1, 2); | |
| s.addRange(r); | |
| shouldBe('s.containsNode(null, false)', false); | |
| shouldBe('s.containsNode(null, true)', false); | |
| shouldBe('s.containsNode(testDiv, false)', false); | |
| shouldBe('s.containsNode(testDiv, true)', true); | |
| shouldBe('s.containsNode(span1, false)', false); | |
| shouldBe('s.containsNode(span1, true)', true); | |
| shouldBe('s.containsNode(span2.firstChild, false)', true); | |
| shouldBe('s.containsNode(span2.firstChild, true)', true); | |
| shouldBe('s.containsNode(span3.firstChild, false)', false); | |
| shouldBe('s.containsNode(span3.firstChild, true)', false); | |
| shouldBe('s.containsNode(document, false)', false); | |
| shouldBe('s.containsNode(document.body, true)', true); | |
| shouldBe('s.containsNode(document.getElementById("console"), false)', false); | |
| shouldBe('s.containsNode(document.getElementById("console"), true)', false); | |
| shouldBe('s.containsNode(document.implementation.createDocumentType("name", "", ""), true)', false); | |
| // partially select a text node | |
| r.setStart(span2.firstChild, 1); | |
| r.setEnd(span2.firstChild, 2); | |
| s.removeAllRanges(); | |
| s.addRange(r); | |
| shouldBe('s.containsNode(span2.firstChild, false)', true); | |
| shouldBe('s.containsNode(span2.firstChild, true)', true); | |
| shouldBe('s.containsNode(span2, false)', false); | |
| shouldBe('s.containsNode(span2, true)', true); | |
| shouldBe('s.containsNode(span1, false)', false); | |
| shouldBe('s.containsNode(span1, true)', true); | |
| // select several nodes | |
| r.setStart(span1.firstChild, 1); | |
| r.setEnd(span3.firstChild, 2); | |
| s.removeAllRanges(); | |
| s.addRange(r); | |
| shouldBe('s.containsNode(span2, false)', true); | |
| shouldBe('s.containsNode(span2.firstChild, false)', true); | |
| shouldBe('s.containsNode(span3, false)', false); | |
| shouldBe('s.containsNode(span3, true)', true); | |
| </script> | |
| </body> | |
| </html> |