2010-07-27 Ojan Vafai <ojan@chromium.org>
authorojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 29 Jul 2010 20:16:52 +0000 (20:16 +0000)
committerojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 29 Jul 2010 20:16:52 +0000 (20:16 +0000)
        Reviewed by Adam Barth.

        dump-as-markup should have better output
        https://bugs.webkit.org/show_bug.cgi?id=43015

        -Merge dom2string into dump-as-markup and pull over all dom2string features (e.g. indent).
        -#-prefix selection markers

        * editing/deleting/delete-br-in-last-table-cell-expected.txt:
        * editing/execCommand/crash-indenting-list-item-expected.txt:
        * editing/execCommand/crash-on-enter-in-contentEditable-list-expected.txt:
        * editing/execCommand/create-list-from-range-selection-expected.txt:
        * editing/execCommand/hilitecolor-expected.txt:
        * editing/execCommand/indent-pre-expected.txt:
        * editing/execCommand/insert-list-empty-div-expected.txt:
        * editing/selection/dump-as-markup-expected.txt:
        * editing/selection/dump-as-markup.html:
        * editing/selection/home-inside-noneditable-table-expected.txt:
        * editing/style/remove-underline-from-stylesheet-expected.txt:
        * editing/style/style-text-node-without-editable-parent-expected.txt:
        * editing/undo/redo-split-text-node-expected.txt:
        * editing/undo/redo-split-text-with-removal-expected.txt:
        * html5lib/resources/dom2string.js: Removed.
        * html5lib/resources/tests4.dat:
        * html5lib/resources/tests6.dat:
        * html5lib/runner-expected.txt:
        * html5lib/runner.html:
        * html5lib/webkit-resumer.html:
        * resources/dump-as-markup.js:
        (Markup.notifyDone):
        (Markup._get):
        (Markup._namespace):
        (Markup._dumpCalls.0.Markup._indent):
        (Markup._toAsciiLowerCase):
        (Markup._getMarkupForTextNode):
        (Markup._getSelectionMarker):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@64303 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 files changed:
LayoutTests/ChangeLog
LayoutTests/editing/deleting/delete-br-in-last-table-cell-expected.txt
LayoutTests/editing/execCommand/crash-indenting-list-item-expected.txt
LayoutTests/editing/execCommand/crash-on-enter-in-contentEditable-list-expected.txt
LayoutTests/editing/execCommand/create-list-from-range-selection-expected.txt
LayoutTests/editing/execCommand/hilitecolor-expected.txt
LayoutTests/editing/execCommand/indent-pre-expected.txt
LayoutTests/editing/execCommand/insert-list-empty-div-expected.txt
LayoutTests/editing/selection/dump-as-markup-expected.txt
LayoutTests/editing/selection/dump-as-markup.html
LayoutTests/editing/selection/home-inside-noneditable-table-expected.txt
LayoutTests/editing/style/remove-underline-from-stylesheet-expected.txt
LayoutTests/editing/style/style-text-node-without-editable-parent-expected.txt
LayoutTests/editing/undo/redo-split-text-node-expected.txt
LayoutTests/editing/undo/redo-split-text-with-removal-expected.txt
LayoutTests/html5lib/resources/dom2string.js [deleted file]
LayoutTests/html5lib/runner.html
LayoutTests/html5lib/webkit-resumer.html
LayoutTests/resources/dump-as-markup.js

index b0a615e..309dc56 100644 (file)
@@ -1,3 +1,42 @@
+2010-07-27  Ojan Vafai  <ojan@chromium.org>
+
+        Reviewed by Adam Barth.
+
+        dump-as-markup should have better output
+        https://bugs.webkit.org/show_bug.cgi?id=43015
+
+        -Merge dom2string into dump-as-markup and pull over all dom2string features (e.g. indent).
+        -#-prefix selection markers
+
+        * editing/deleting/delete-br-in-last-table-cell-expected.txt:
+        * editing/execCommand/crash-indenting-list-item-expected.txt:
+        * editing/execCommand/crash-on-enter-in-contentEditable-list-expected.txt:
+        * editing/execCommand/create-list-from-range-selection-expected.txt:
+        * editing/execCommand/hilitecolor-expected.txt:
+        * editing/execCommand/indent-pre-expected.txt:
+        * editing/execCommand/insert-list-empty-div-expected.txt:
+        * editing/selection/dump-as-markup-expected.txt:
+        * editing/selection/dump-as-markup.html:
+        * editing/selection/home-inside-noneditable-table-expected.txt:
+        * editing/style/remove-underline-from-stylesheet-expected.txt:
+        * editing/style/style-text-node-without-editable-parent-expected.txt:
+        * editing/undo/redo-split-text-node-expected.txt:
+        * editing/undo/redo-split-text-with-removal-expected.txt:
+        * html5lib/resources/dom2string.js: Removed.
+        * html5lib/resources/tests4.dat:
+        * html5lib/resources/tests6.dat:
+        * html5lib/runner-expected.txt:
+        * html5lib/runner.html:
+        * html5lib/webkit-resumer.html:
+        * resources/dump-as-markup.js:
+        (Markup.notifyDone):
+        (Markup._get):
+        (Markup._namespace):
+        (Markup._dumpCalls.0.Markup._indent):
+        (Markup._toAsciiLowerCase):
+        (Markup._getMarkupForTextNode):
+        (Markup._getSelectionMarker):
+
 2010-07-29  Victor Wang  <victorw@chromium.org>
 
         Reviewed by Jeremy Orlow.
index da61d09..d4d68f3 100644 (file)
@@ -1,83 +1,79 @@
-
-<HTML>
-<HEAD>
-<#text>
-</#text>
-<SCRIPT src="../../resources/dump-as-markup.js" type="text/JavaScript"></SCRIPT>
-<#text>
-</#text>
-<SCRIPT src="../editing.js" type="text/JavaScript"></SCRIPT>
-<#text>
-</#text>
-<SCRIPT>
+| <html>
+|   <head>
+|     "
+"
+|     <script>
+|       language="JavaScript"
+|       src="../../resources/dump-as-markup.js"
+|       type="text/JavaScript"
+|     "
+"
+|     <script>
+|       language="JavaScript"
+|       src="../editing.js"
+|       type="text/JavaScript"
+|     "
+"
+|     <script>
+|       "
 function runTest()
 {
-br = document.getElementById("lastBR");
-sel = window.getSelection();
-sel.setBaseAndExtent(br, 0, br, 0);
-deleteCommand();
+    br = document.getElementById("lastBR");
+    sel = window.getSelection();
+    sel.setBaseAndExtent(br, 0, br, 0);
+    deleteCommand();
 }
-</SCRIPT>
-<#text>
-</#text>
-</HEAD>
-<#text>
+"
+|     "
+"
+|   "
 
-</#text>
-<BODY>
-<#text>
-</#text>
-<P>
-<A href="https://bugs.webkit.org/show_bug.cgi?id=35369">
-<#text>Bug 35369</#text>
-</A>
-<#text> and </#text>
-<A href="https://bugs.webkit.org/show_bug.cgi?id=35632">
-<#text>Bug 35632</#text>
-</A>
-</P>
-<#text>
-</#text>
-<P>
-<#text>Executing a delete command when positioned before a BR in a table cell (esp. the last)</#text>
-</P>
-<#text>
-</#text>
-<DIV contentEditable="">
-<#text>
-</#text>
-<TABLE id="table">
-<TBODY>
-<TR>
-<TD>
-<#text>1</#text>
-</TD>
-<TD>
-<#text>2</#text>
-</TD>
-</TR>
-<TR>
-<TD>
-<#text>3</#text>
-</TD>
-<TD>
-<#text>4<selection-caret></#text>
-<BR id="lastBR">
-</TD>
-</TR>
-</TBODY>
-</TABLE>
-<#text>
-</#text>
-</DIV>
-<#text>
-</#text>
-<SCRIPT>
+"
+|   <body>
+|     "
+"
+|     <p>
+|       <a>
+|         href="https://bugs.webkit.org/show_bug.cgi?id=35369"
+|         "Bug 35369"
+|       " and "
+|       <a>
+|         href="https://bugs.webkit.org/show_bug.cgi?id=35632"
+|         "Bug 35632"
+|     "
+"
+|     <p>
+|       "Executing a delete command when positioned before a BR in a table cell (esp. the last)"
+|     "
+"
+|     <div>
+|       contenteditable=""
+|       "
+"
+|       <table>
+|         id="table"
+|         <tbody>
+|           <tr>
+|             <td>
+|               "1"
+|             <td>
+|               "2"
+|           <tr>
+|             <td>
+|               "3"
+|             <td>
+|               "4<#selection-caret>"
+|               <br>
+|                 id="lastBR"
+|       "
+"
+|     "
+"
+|     <script>
+|       "
 runTest();
-</SCRIPT>
-<#text>
+"
+|     "
 
 
-</#text>
-</BODY>
-</HTML>
+"
index d349d57..f5e7882 100644 (file)
@@ -1,29 +1,25 @@
-
-<HTML>
-<HEAD>
-</HEAD>
-<BODY>
-<DIV contentEditable="">
-<UL>
-<UL>
-<LI id="foo">
-<#text>PASSED</#text>
-</LI>
-</UL>
-</UL>
-</DIV>
-<#text>
-</#text>
-<SCRIPT src="../../resources/dump-as-markup.js"></SCRIPT>
-<#text>
-</#text>
-<SCRIPT>
+| <html>
+|   <head>
+|   <body>
+|     <div>
+|       contenteditable=""
+|       <ul>
+|         <ul>
+|           <li>
+|             id="foo"
+|             "PASSED"
+|     "
+"
+|     <script>
+|       src="../../resources/dump-as-markup.js"
+|     "
+"
+|     <script>
+|       "
 window.getSelection().setBaseAndExtent(foo, 0, foo, 0);
 // This test passes if it does not crash.
 document.execCommand('indent', false, null);
 document.getElementById("foo").innerText = "PASSED";
-</SCRIPT>
-<#text>
-</#text>
-</BODY>
-</HTML>
+"
+|     "
+"
index d6c06e6..4a9bf15 100644 (file)
@@ -1,34 +1,32 @@
-
-<HTML>
-<HEAD>
-<SCRIPT src="../../resources/dump-as-markup.js"></SCRIPT>
-<#text>
-</#text>
-</HEAD>
-<BODY>
-<DIV>
-<#text>This test passes if it doesn't crash.</#text>
-</DIV>
-<#text>
-</#text>
-<UL contentEditable="">
-<#text>
-</#text>
-<LI id="foo">
-</LI>
-<LI id="foo"><selection-caret>
-<BR>
-</LI>
-<#text>
-</#text>
-</UL>
-<#text>
-</#text>
-<SCRIPT>
+| <html>
+|   <head>
+|     <script>
+|       src="../../resources/dump-as-markup.js"
+|     "
+"
+|   <body>
+|     <div>
+|       "This test passes if it doesn't crash."
+|     "
+"
+|     <ul>
+|       contenteditable=""
+|       "
+    "
+|       <li>
+|         id="foo"
+|       <li>
+|         id="foo"
+|         <#selection-caret>
+|         <br>
+|       "
+"
+|     "
+"
+|     <script>
+|       "
 window.getSelection().selectAllChildren(foo);
 document.execCommand('insertParagraph');
-</SCRIPT>
-<#text>
-</#text>
-</BODY>
-</HTML>
+"
+|     "
+"
index 4fc5e36..472ca10 100644 (file)
@@ -1,26 +1,16 @@
-
-<DIV id="test" contentEditable="true">
-<OL>
-<LI>
-<#text>asd</#text>
-<SPAN id="start">
-<#text>fo<selection-anchor>o</#text>
-</SPAN>
-</LI>
-<LI>
-<#text>bar</#text>
-</LI>
-<LI>
-<#text>baz</#text>
-</LI>
-<LI>
-<#text>foo</#text>
-</LI>
-<LI>
-<#text>bar</#text>
-</LI>
-<LI>
-<#text>ba<selection-focus>z</#text>
-</LI>
-</OL>
-</DIV>
+| <ol>
+|   <li>
+|     "asd"
+|     <span>
+|       id="start"
+|       "fo<#selection-anchor>o"
+|   <li>
+|     "bar"
+|   <li>
+|     "baz"
+|   <li>
+|     "foo"
+|   <li>
+|     "bar"
+|   <li>
+|     "ba<#selection-focus>z"
index d1aadf1..d84f2a1 100644 (file)
@@ -10,11 +10,9 @@ EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidEndEditing:WebViewDidEndEditingNotification
-
-<DIV id="test" contentEditable="true">
-<#text><selection-caret>The </#text>
-<SPAN style="background-color: red;" class="Apple-style-span">
-<#text>second</#text>
-</SPAN>
-<#text> word, and only the second word of this sentence should have a red background color.</#text>
-</DIV>
+| "<#selection-caret>The "
+| <span>
+|   class="Apple-style-span"
+|   style="background-color: red;"
+|   "second"
+| " word, and only the second word of this sentence should have a red background color."
index 5805289..a0df82b 100644 (file)
 CONSOLE MESSAGE: line 44: Wrong node selected.
 CONSOLE MESSAGE: line 46: Wrong anchor offset: 8 instead of 0
+| <html>
+|   <head>
+|   <body>
+|     <p>
+|       "This test tries to indent lines within pre tags.  This test passes if it
+does not crash."
+|     "
+"
+|     <div>
+|       contenteditable=""
+|       "
+"
+|       <blockquote>
+|         class="webkit-indent-blockquote"
+|         style="margin: 0 0 0 40px; border: none; padding: 0px;"
+|         <pre>
+|           id="pre-basic"
+|           "line one
+"
+|       <pre>
+|         id="pre-basic"
+|         "line two
+"
+|       <blockquote>
+|         class="webkit-indent-blockquote"
+|         style="margin: 0 0 0 40px; border: none; padding: 0px;"
+|         <pre>
+|           id="pre-basic"
+|           "line three
+"
+|         <pre>
+|           id="pre-basic"
+|           "line four"
+|       "
 
-<HTML>
-<HEAD>
-</HEAD>
-<BODY>
-<P>
-<#text>This test tries to indent lines within pre tags. This test passes if it
-does not crash.</#text>
-</P>
-<#text>
-</#text>
-<DIV contentEditable="">
-<#text>
-</#text>
-<BLOCKQUOTE style="margin: 0 0 0 40px; border: none; padding: 0px;" class="webkit-indent-blockquote">
-<PRE id="pre-basic">
-<#text>line one
-</#text>
-</PRE>
-</BLOCKQUOTE>
-<PRE id="pre-basic">
-<#text>line two
-</#text>
-</PRE>
-<BLOCKQUOTE style="margin: 0 0 0 40px; border: none; padding: 0px;" class="webkit-indent-blockquote">
-<PRE id="pre-basic">
-<#text>line three
-</#text>
-</PRE>
-<PRE id="pre-basic">
-<#text>line four</#text>
-</PRE>
-</BLOCKQUOTE>
-<#text>
+"
+|       <ul>
+|         <li>
+|           <pre>
+|             id="pre-list"
+|             "list one
+"
+|             <blockquote>
+|               class="webkit-indent-blockquote"
+|               style="margin: 0 0 0 40px; border: none; padding: 0px;"
+|               "list two
+"
+|               "list three
+"
+|             "list four
+"
+|       "
 
-</#text>
-<UL>
-<LI>
-<PRE id="pre-list">
-<#text>list one
-</#text>
-<BLOCKQUOTE style="margin: 0 0 0 40px; border: none; padding: 0px;" class="webkit-indent-blockquote">
-<#text>list two
-</#text>
-<#text>list three
-</#text>
-</BLOCKQUOTE>
-<#text>list four
-</#text>
-</PRE>
-</LI>
-</UL>
-<#text>
+"
+|       <table>
+|         "
+"
+|         <tbody>
+|           <tr>
+|             <td>
+|               <pre>
+|                 id="pre-table"
+|                 "table one<#selection-anchor>
+"
+|               <blockquote>
+|                 class="webkit-indent-blockquote"
+|                 style="margin: 0 0 0 40px; border: none; padding: 0px;"
+|                 <pre>
+|                   id="pre-table"
+|                   "table two
+"
+|                 <pre>
+|                   id="pre-table"
+|                   "table three<#selection-focus>"
+|             <td>
+|               "right cell"
+|       "
 
-</#text>
-<TABLE>
-<#text>
-</#text>
-<TBODY>
-<TR>
-<TD>
-<PRE id="pre-table">
-<#text>table one<selection-anchor>
-</#text>
-</PRE>
-<BLOCKQUOTE style="margin: 0 0 0 40px; border: none; padding: 0px;" class="webkit-indent-blockquote">
-<PRE id="pre-table">
-<#text>table two
-</#text>
-</PRE>
-<PRE id="pre-table">
-<#text>table three<selection-focus></#text>
-</PRE>
-</BLOCKQUOTE>
-</TD>
-<TD>
-<#text>right cell</#text>
-</TD>
-</TR>
-</TBODY>
-</TABLE>
-<#text>
+"
+|       <div>
+|         id="results"
+|         "PASSED (did not crash)"
+|       "
+"
+|     "
 
-</#text>
-<DIV id="results">
-<#text>PASSED (did not crash)</#text>
-</DIV>
-<#text>
-</#text>
-</DIV>
-<#text>
-
-</#text>
-<A href="javascript:document.execCommand('indent')">
-<#text>indent</#text>
-</A>
-<#text>
-</#text>
-<A href="javascript:document.execCommand('outdent')">
-<#text>outdent</#text>
-</A>
-<#text>
-</#text>
-<SCRIPT src="../../resources/dump-as-markup.js"></SCRIPT>
-<#text>
-</#text>
-<SCRIPT src="../editing.js"></SCRIPT>
-<#text>
-</#text>
-<SCRIPT>
+"
+|     <a>
+|       href="javascript:document.execCommand('indent')"
+|       "indent"
+|     "
+"
+|     <a>
+|       href="javascript:document.execCommand('outdent')"
+|       "outdent"
+|     "
+"
+|     <script>
+|       src="../../resources/dump-as-markup.js"
+|     "
+"
+|     <script>
+|       src="../editing.js"
+|     "
+"
+|     <script>
+|       "
 function setSelection(node)
 {
-var textNode = node.firstChild;
-if (textNode.nodeType != Node.TEXT_NODE)
-throw "Wrong node type: " + textNode;
-execSetSelectionCommand(textNode, 0, 0);
+    var textNode = node.firstChild;
+    if (textNode.nodeType != Node.TEXT_NODE)
+        throw "Wrong node type: " + textNode;
+    execSetSelectionCommand(textNode, 0, 0);
 }
 
 function verifyTextSelection(startNode, startOffset, endNode, endOffset)
 {
-if (startNode.nodeType != Node.TEXT_NODE)
-console.log("Wrong start node type: " + startNode);
-if (endNode.nodeType != Node.TEXT_NODE)
-console.log("Wrong end node type: " + endNode);
-var sel = window.getSelection();
-if (sel.anchorNode != startNode || sel.focusNode != endNode)
-console.log("Wrong node selected.");
-if (sel.anchorOffset != startOffset)
-console.log("Wrong anchor offset: " + sel.anchorOffset + " instead of " + startOffset);
-if (sel.focusOffset != endOffset)
-console.log("Wrong focus offset: " + sel.focusOffset + " instead of " + endOffset);
+    if (startNode.nodeType != Node.TEXT_NODE)
+        console.log("Wrong start node type: " + startNode);
+    if (endNode.nodeType != Node.TEXT_NODE)
+        console.log("Wrong end node type: " + endNode);
+    var sel = window.getSelection();
+    if (sel.anchorNode != startNode || sel.focusNode != endNode)
+        console.log("Wrong node selected.");
+    if (sel.anchorOffset != startOffset)
+        console.log("Wrong anchor offset: " + sel.anchorOffset + " instead of " + startOffset);
+    if (sel.focusOffset != endOffset)
+        console.log("Wrong focus offset: " + sel.focusOffset + " instead of " + endOffset);
 }
 
 // Indent a single line in a pre and make sure the selection is correctly preserved.
@@ -140,7 +137,7 @@ execMoveSelectionForwardByCharacterCommand();
 execExtendSelectionForwardByWordCommand();
 document.execCommand("indent");
 verifyTextSelection(document.getElementsByTagName("pre")[0].firstChild, 1,
-document.getElementsByTagName("pre")[0].firstChild, 4);
+                    document.getElementsByTagName("pre")[0].firstChild, 4);
 
 // Indent 2 lines.
 setSelection(pre);
@@ -149,12 +146,12 @@ execExtendSelectionForwardByLineCommand();
 execExtendSelectionForwardByWordCommand();
 document.execCommand("indent");
 if (document.getElementsByTagName("pre").length > 3) {
-// FIXME: The selection for the anchorNode is wrong. It should stay at
-// the beginning of "line three", but it moves to the end of "line 2".
-verifyTextSelection(document.getElementsByTagName("pre")[2].firstChild, 0,
-document.getElementsByTagName("pre")[3].firstChild, 4);
+    // FIXME: The selection for the anchorNode is wrong.  It should stay at
+    // the beginning of "line three", but it moves to the end of "line 2".
+    verifyTextSelection(document.getElementsByTagName("pre")[2].firstChild, 0,
+                        document.getElementsByTagName("pre")[3].firstChild, 4);
 } else {
-console.log("Wrong number of pre nodes.");
+    console.log("Wrong number of pre nodes.");
 }
 
 // Indent <pre> lines in a list.
@@ -165,19 +162,17 @@ execExtendSelectionForwardByLineCommand();
 execExtendSelectionForwardByLineCommand();
 document.execCommand("indent");
 verifyTextSelection(document.getElementsByTagName("blockquote")[2].firstChild, 0,
-document.getElementsByTagName("blockquote")[2].firstChild.nextSibling, 10);
+                    document.getElementsByTagName("blockquote")[2].firstChild.nextSibling, 10);
 // Indenting <pre> lines in a table.
 pre = document.getElementById("pre-table");
 setSelection(pre);
 execMoveSelectionForwardByLineCommand();
 execExtendSelectionForwardByLineCommand();
 execExtendSelectionForwardByLineCommand();
-// FIXME: This is wrong. The pre tags get copied when they shouldn't be. 
+// FIXME: This is wrong.  The pre tags get copied when they shouldn't be. 
 // See https://bugs.webkit.org/show_bug.cgi?id=42009
 document.execCommand("indent");
 document.getElementById("results").innerText = "PASSED (did not crash)";
-</SCRIPT>
-<#text>
-</#text>
-</BODY>
-</HTML>
+"
+|     "
+"
index aef2ae9..d07245c 100644 (file)
@@ -1,8 +1,4 @@
-
-<DIV id="div" contentEditable="true">
-<UL>
-<LI><selection-caret>
-<BR>
-</LI>
-</UL>
-</DIV>
+| <ul>
+|   <li>
+|     <#selection-caret>
+|     <br>
index 43d18e2..b816901 100644 (file)
@@ -1,93 +1,86 @@
 Tests basic dump-as-markup functionality.
+| <!DOCTYPE html>
+| <html>
+|   <head>
+|     <script>
+|       src="../../resources/dump-as-markup.js"
+|     "
 
-<HTML>
-<HEAD>
-<SCRIPT src="../../resources/dump-as-markup.js"></SCRIPT>
-<#text>
+"
+|   <body>
+|     <div>
+|       id="bar"
+|       "<#selection-anchor>foo"
+|       <hr>
+|       <#selection-focus>
+|     "
+"
+|     <input>
+|       type="text"
+|     "
+"
+|     <div>
+|       contenteditable=""
+|       id="foo"
+|       "
+  foo"
+|       "   bar
+"
+|     "
+"
+|     <script>
+|       "foo.firstChild.splitText(6);"
+|     "
+"
+|     <span>
+|       "foo"
+|     <span>
+|       "bar"
+|     "
+"
+|     <div>
+|       <div>
+|         <b>
+|           "sdf"
+|         <i>
+|           "sdf"
+|         "sdf"
+|     "
+"
+|     <iframe>
+|       src="data:text/html;charset=utf-8,<!DOCTYPE%20HTML%20PUBLIC%20"-//W3C//DTD%20HTML%204.0//EN">%0D%0A<html%20lang%3D"en">%0D%0A%20<head>%0D%0A%20%20<title>Test</title>%0D%0A%20%20<style%20type%3D"text/css">%0D%0A%20%20</style>%0D%0A%20</head>%0D%0A%20<body>%0D%0A%20%20<p></p>%0D%0A%20</body>%0D%0A</html>%0D%0A"
+|     "
 
-</#text>
-</HEAD>
-<BODY>
-<DIV id="bar">
-<#text><selection-anchor>foo</#text>
-<HR><selection-focus>
-</DIV>
-<#text>
-</#text>
-<INPUT type="text">
-<#text>
-</#text>
-<DIV id="foo" contentEditable="">
-<#text>
-foo</#text>
-<#text> bar
-</#text>
-</DIV>
-<#text>
-</#text>
-<SCRIPT>foo.firstChild.splitText(6);</SCRIPT>
-<#text>
-</#text>
-<SPAN>
-<#text>foo</#text>
-</SPAN>
-<SPAN>
-<#text>bar</#text>
-</SPAN>
-<#text>
-</#text>
-<DIV>
-<DIV>
-<B>
-<#text>sdf</#text>
-</B>
-<I>
-<#text>sdf</#text>
-</I>
-<#text>sdf</#text>
-</DIV>
-</DIV>
-<#text>
-</#text>
-<IFRAME src="data:text/html;charset=utf-8,<!DOCTYPE%20HTML%20PUBLIC%20"-//W3C//DTD%20HTML%204.0//EN">%0D%0A<html%20lang%3D"en">%0D%0A%20<head>%0D%0A%20%20<title>Test</title>%0D%0A%20%20<style%20type%3D"text/css">%0D%0A%20%20</style>%0D%0A%20</head>%0D%0A%20<body>%0D%0A%20%20<p></p>%0D%0A%20</body>%0D%0A</html>%0D%0A"></IFRAME>
-<#text>
-
-</#text>
-<SCRIPT>
+"
+|     <script>
+|       "
 Markup.description("Tests basic dump-as-markup functionality.");
 window.getSelection().selectAllChildren(bar)
-</SCRIPT>
-<#text>
-</#text>
-</BODY>
-</HTML>
+"
+|     "
+"
 
 FRAME 0:
+| <head>
+|   "
+  "
+|   <title>
+|     "Test"
+|   "
+  "
+|   <style>
+|     type="text/css"
+|     "
+  "
+|   "
+ "
+| "
+ "
+| <body>
+|   "
+  "
+|   <p>
+|   "
 
-<HTML>
-<HEAD>
-<#text>
-</#text>
-<TITLE>
-<#text>Test</#text>
-</TITLE>
-<#text>
-</#text>
-<STYLE type="text/css">
-</STYLE>
-<#text>
-</#text>
-</HEAD>
-<#text>
-</#text>
-<BODY>
-<#text>
-</#text>
-<P>
-</P>
-<#text>
-
-
-</#text>
-</BODY>
-</HTML>
+"
index 28bd837..ad390ec 100644 (file)
@@ -1,3 +1,4 @@
+<!DocType html>
 <script src="../../resources/dump-as-markup.js"></script>
 
 <div id="bar">foo<hr></div>
index 9a0a4f2..ca2ecac 100644 (file)
@@ -1,33 +1,27 @@
 Tests whether home moves the caret to the beginning of line inside a content-editable in an uneditable table.
 
 Dump of markup 1:
-<DIV id="test" contentEditable="true">
-<#text>
-</#text>
-<DIV id="l1">
-<#text>The caret is initially <selection-caret>here but should move to the beginning of the line.</#text>
-</DIV>
-<#text>
-</#text>
-<DIV>
-<#text>dummy text</#text>
-</DIV>
-<#text>
-</#text>
-</DIV>
+| "
+      "
+| <div>
+|   id="l1"
+|   "The caret is initially <#selection-caret>here but should move to the beginning of the line."
+| "
+      "
+| <div>
+|   "dummy text"
+| "
+    "
 
 Dump of markup 2:
-<DIV id="test" contentEditable="true">
-<#text>
-</#text>
-<DIV id="l1">
-<#text><selection-caret>The caret is initially here but should move to the beginning of the line.</#text>
-</DIV>
-<#text>
-</#text>
-<DIV>
-<#text>dummy text</#text>
-</DIV>
-<#text>
-</#text>
-</DIV>
+| "
+      "
+| <div>
+|   id="l1"
+|   "<#selection-caret>The caret is initially here but should move to the beginning of the line."
+| "
+      "
+| <div>
+|   "dummy text"
+| "
+    "
index 826ffb6..ae5e587 100644 (file)
@@ -70,11 +70,8 @@ EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidEndEditing:WebViewDidEndEditingNotification
 This tests removing underline from stylesheet (.editing has underline). Because text-decoration that comes from a style rule cannot be pushed down, the underline should stay. (see bug 27809).
-
-<DIV class="editing" id="root" contentEditable="">
-<#text>xxxxxx </#text>
-<#text><selection-anchor>xxxxxx<selection-focus></#text>
-<#text> xxxxxx</#text>
-<SPAN id="test">
-</SPAN>
-</DIV>
+| "xxxxxx "
+| "<#selection-anchor>xxxxxx<#selection-focus>"
+| " xxxxxx"
+| <span>
+|   id="test"
index 2165704..d52814c 100644 (file)
 This tests applying inline style to a text node, which is a child of the editable root. Style should be applied properly and the test should not crash. (See the bug 39989).
 
 bold first:
-<SPAN contentEditable="">
-<B>
-<#text><selection-anchor>hello, <selection-focus></#text>
-</B>
-<#text>world WebKit</#text>
-</SPAN>
+| <b>
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 bold middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<B>
-<#text><selection-anchor>world<selection-focus></#text>
-</B>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <b>
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 bold last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<B>
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</B>
-</SPAN>
+| "hello, world"
+| <b>
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 bold all:
-<SPAN contentEditable="">
-<B>
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</B>
-</SPAN>
+| <b>
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
 
 italic first:
-<SPAN contentEditable="">
-<I>
-<#text><selection-anchor>hello, <selection-focus></#text>
-</I>
-<#text>world WebKit</#text>
-</SPAN>
+| <i>
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 italic middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<I>
-<#text><selection-anchor>world<selection-focus></#text>
-</I>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <i>
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 italic last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<I>
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</I>
-</SPAN>
+| "hello, world"
+| <i>
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 italic all:
-<SPAN contentEditable="">
-<I>
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</I>
-</SPAN>
+| <i>
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
 
 underline first:
-<SPAN contentEditable="">
-<U>
-<#text><selection-anchor>hello, <selection-focus></#text>
-</U>
-<#text>world WebKit</#text>
-</SPAN>
+| <u>
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 underline middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<U>
-<#text><selection-anchor>world<selection-focus></#text>
-</U>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <u>
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 underline last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<U>
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</U>
-</SPAN>
+| "hello, world"
+| <u>
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 underline all:
-<SPAN contentEditable="">
-<U>
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</U>
-</SPAN>
+| <u>
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
 
 strikeThrough first:
-<SPAN contentEditable="">
-<S>
-<#text><selection-anchor>hello, <selection-focus></#text>
-</S>
-<#text>world WebKit</#text>
-</SPAN>
+| <s>
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 strikeThrough middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<S>
-<#text><selection-anchor>world<selection-focus></#text>
-</S>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <s>
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 strikeThrough last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<S>
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</S>
-</SPAN>
+| "hello, world"
+| <s>
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 strikeThrough all:
-<SPAN contentEditable="">
-<S>
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</S>
-</SPAN>
+| <s>
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
 
 foreColor first:
-<SPAN contentEditable="">
-<FONT class="Apple-style-span" color="#0000FF">
-<#text><selection-anchor>hello, <selection-focus></#text>
-</FONT>
-<#text>world WebKit</#text>
-</SPAN>
+| <font>
+|   class="Apple-style-span"
+|   color="#0000FF"
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 foreColor middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<FONT class="Apple-style-span" color="#0000FF">
-<#text><selection-anchor>world<selection-focus></#text>
-</FONT>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <font>
+|   class="Apple-style-span"
+|   color="#0000FF"
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 foreColor last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<FONT class="Apple-style-span" color="#0000FF">
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</FONT>
-</SPAN>
+| "hello, world"
+| <font>
+|   class="Apple-style-span"
+|   color="#0000FF"
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 foreColor all:
-<SPAN contentEditable="">
-<FONT class="Apple-style-span" color="#0000FF">
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</FONT>
-</SPAN>
+| <font>
+|   class="Apple-style-span"
+|   color="#0000FF"
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
 
 hiliteColor first:
-<SPAN contentEditable="">
-<SPAN style="background-color: blue;" class="Apple-style-span">
-<#text><selection-anchor>hello, <selection-focus></#text>
-</SPAN>
-<#text>world WebKit</#text>
-</SPAN>
+| <span>
+|   class="Apple-style-span"
+|   style="background-color: blue;"
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 hiliteColor middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<SPAN style="background-color: blue;" class="Apple-style-span">
-<#text><selection-anchor>world<selection-focus></#text>
-</SPAN>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <span>
+|   class="Apple-style-span"
+|   style="background-color: blue;"
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 hiliteColor last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<SPAN style="background-color: blue;" class="Apple-style-span">
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</SPAN>
-</SPAN>
+| "hello, world"
+| <span>
+|   class="Apple-style-span"
+|   style="background-color: blue;"
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 hiliteColor all:
-<SPAN contentEditable="">
-<SPAN style="background-color: blue;" class="Apple-style-span">
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</SPAN>
-</SPAN>
+| <span>
+|   class="Apple-style-span"
+|   style="background-color: blue;"
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
 
 subscript first:
-<SPAN contentEditable="">
-<SUB>
-<#text><selection-anchor>hello, <selection-focus></#text>
-</SUB>
-<#text>world WebKit</#text>
-</SPAN>
+| <sub>
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 subscript middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<SUB>
-<#text><selection-anchor>world<selection-focus></#text>
-</SUB>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <sub>
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 subscript last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<SUB>
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</SUB>
-</SPAN>
+| "hello, world"
+| <sub>
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 subscript all:
-<SPAN contentEditable="">
-<SUB>
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</SUB>
-</SPAN>
+| <sub>
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
 
 superscript first:
-<SPAN contentEditable="">
-<SUP>
-<#text><selection-anchor>hello, <selection-focus></#text>
-</SUP>
-<#text>world WebKit</#text>
-</SPAN>
+| <sup>
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 superscript middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<SUP>
-<#text><selection-anchor>world<selection-focus></#text>
-</SUP>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <sup>
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 superscript last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<SUP>
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</SUP>
-</SPAN>
+| "hello, world"
+| <sup>
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 superscript all:
-<SPAN contentEditable="">
-<SUP>
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</SUP>
-</SPAN>
+| <sup>
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
 
 createLink first:
-<SPAN contentEditable="">
-<A href="http://webkit.org/">
-<#text><selection-anchor>hello, <selection-focus></#text>
-</A>
-<#text>world WebKit</#text>
-</SPAN>
+| <a>
+|   href="http://webkit.org/"
+|   "<#selection-anchor>hello, <#selection-focus>"
+| "world WebKit"
 
 createLink middle:
-<SPAN contentEditable="">
-<#text>hello, </#text>
-<A href="http://webkit.org/">
-<#text><selection-anchor>world<selection-focus></#text>
-</A>
-<#text> WebKit</#text>
-</SPAN>
+| "hello, "
+| <a>
+|   href="http://webkit.org/"
+|   "<#selection-anchor>world<#selection-focus>"
+| " WebKit"
 
 createLink last:
-<SPAN contentEditable="">
-<#text>hello, world</#text>
-<A href="http://webkit.org/">
-<#text><selection-anchor> WebKit<selection-focus></#text>
-</A>
-</SPAN>
+| "hello, world"
+| <a>
+|   href="http://webkit.org/"
+|   "<#selection-anchor> WebKit<#selection-focus>"
 
 createLink all:
-<SPAN contentEditable="">
-<A href="http://webkit.org/">
-<#text><selection-anchor>hello, world WebKit<selection-focus></#text>
-</A>
-</SPAN>
+| <a>
+|   href="http://webkit.org/"
+|   "<#selection-anchor>hello, world WebKit<#selection-focus>"
index 73a7bfb..a93497e 100644 (file)
@@ -2,26 +2,16 @@ This test splits a text node by inserting a new paragraph and bolds the the firs
 If splitTextNode correctly reapplied the split, undo and redo should preserve the style. (See bug 42941).
 
 before undo:
-<DIV id="test" contentEditable="">
-<B>
-<#text><selection-anchor>he<selection-focus></#text>
-</B>
-<DIV>
-<#text>llo</#text>
-</DIV>
-</DIV>
+| <b>
+|   "<#selection-anchor>he<#selection-focus>"
+| <div>
+|   "llo"
 
 after undo:
-<DIV id="test" contentEditable="">
-<#text>he<selection-caret>llo</#text>
-</DIV>
+| "he<#selection-caret>llo"
 
 after redo:
-<DIV id="test" contentEditable="">
-<B>
-<#text><selection-anchor>he<selection-focus></#text>
-</B>
-<DIV>
-<#text>llo</#text>
-</DIV>
-</DIV>
+| <b>
+|   "<#selection-anchor>he<#selection-focus>"
+| <div>
+|   "llo"
index 96c4164..ba0693c 100644 (file)
@@ -2,27 +2,17 @@ This test splits a text node by inserting a new paragraph and bolds the the firs
 After undoing these two steps, it removes the text node, and then redo. The test should not crash. (See bug 42941).
 
 before undo:
-<DIV id="test" contentEditable="">
-<B>
-<#text><selection-anchor>he<selection-focus></#text>
-</B>
-<DIV>
-<#text>llo</#text>
-</DIV>
-</DIV>
+| <b>
+|   "<#selection-anchor>he<#selection-focus>"
+| <div>
+|   "llo"
 
 after undo:
-<DIV id="test" contentEditable="">
-<#text>he<selection-caret>llo</#text>
-</DIV>
+| "he<#selection-caret>llo"
 
 after node removal:
-<DIV id="test" contentEditable="">
-</DIV>
+| 
 
 after redo:
-<DIV id="test" contentEditable="">
-<DIV>
-<#text>hello</#text>
-</DIV>
-</DIV>
+| <div>
+|   "hello"
diff --git a/LayoutTests/html5lib/resources/dom2string.js b/LayoutTests/html5lib/resources/dom2string.js
deleted file mode 100644 (file)
index 3deb658..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-String.prototype.toAsciiLowerCase = function () {
-  var output = "";
-  for (var i = 0, len = this.length; i < len; ++i) {
-    if (this.charCodeAt(i) >= 0x41 && this.charCodeAt(i) <= 0x5A) {
-      output += String.fromCharCode(this.charCodeAt(i) + 0x20)
-    } else {
-      output += this.charAt(i);
-    }
-  }
-  return output;
-}
-
-function indent(ancestors) {
-  var str = "";
-  if (ancestors > 0) {
-    while (ancestors--)
-      str += "  ";
-  }
-  return str;
-}
-
-function dom2string(node, ancestors) {
-  var str = "";
-  if (typeof ancestors == "undefined")
-    var ancestors = 0;
-  if (!node.firstChild)
-    return "| ";
-  var parent = node;
-  var current = node.firstChild;
-  var next = null;
-  var misnested = null;
-  for (;;) {
-    str += "\n| " + indent(ancestors);
-    switch (current.nodeType) {
-      case 10:
-        str += '<!DOCTYPE ' + current.nodeName;
-        if (current.publicId || current.systemId) {
-            str += ' "' + current.publicId + '"';
-            str += ' "' + current.systemId + '"';
-        }
-        str += '>';
-        break;
-      case 8:
-        try {
-          str += '<!-- ' + current.nodeValue + ' -->';
-        } catch (e) {
-          str += '<!--  -->';
-        }
-        if (parent != current.parentNode) {
-          return str += ' (misnested... aborting)';
-        }
-        break;
-      case 7:
-        str += '<?' + current.nodeName + current.nodeValue + '>';
-        break;
-      case 4:
-        str += '<![CDATA[ ' + current.nodeValue + ' ]]>';
-        break;
-      case 3:
-        str += '"' + current.nodeValue + '"';
-        if (parent != current.parentNode) {
-          return str += ' (misnested... aborting)';
-        }
-        break;
-      case 1:
-        str += "<";
-        switch (current.namespaceURI) {
-          case "http://www.w3.org/2000/svg":
-            str += "svg ";
-            break;
-          case "http://www.w3.org/1998/Math/MathML":
-            str += "math ";
-            break;
-        }
-        if (current.localName && current.namespaceURI && current.namespaceURI != null) {
-          str += current.localName;
-        } else {
-          str += current.nodeName.toAsciiLowerCase();
-        }
-        str += '>';
-        if (parent != current.parentNode) {
-          return str += ' (misnested... aborting)';
-        } else {
-          if (current.attributes) {
-            var attrNames = [];
-            var attrPos = {};
-            for (var j = 0; j < current.attributes.length; j += 1) {
-              if (current.attributes[j].specified) {
-                var name = "";
-                switch (current.attributes[j].namespaceURI) {
-                  case "http://www.w3.org/XML/1998/namespace":
-                    name += "xml ";
-                    break;
-                  case "http://www.w3.org/2000/xmlns/":
-                    name += "xmlns ";
-                    break;
-                  case "http://www.w3.org/1999/xlink":
-                    name += "xlink ";
-                    break;
-                }
-                if (current.attributes[j].localName) {
-                  name += current.attributes[j].localName;
-                } else {
-                  name += current.attributes[j].nodeName;
-                }
-                attrNames.push(name);
-                attrPos[name] = j;
-              }
-            }
-            if (attrNames.length > 0) {
-              attrNames.sort();
-              for (var j = 0; j < attrNames.length; j += 1) {
-                str += "\n| " + indent(1 + ancestors) + attrNames[j];
-                str += '="' + current.attributes[attrPos[attrNames[j]]].nodeValue + '"';
-              }
-            }
-          }
-          if (next = current.firstChild) {
-            parent = current;
-            current = next;
-            ancestors++;
-            continue;
-          }
-        }
-        break;
-    }
-    for (;;) {
-      if (next = current.nextSibling) {
-        current = next;
-        break;
-      }
-      current = current.parentNode;
-      parent = parent.parentNode;
-      ancestors--;
-      if (current == node) {
-        return str.substring(1);
-      }
-    }
-  }
-}
index 05a493f..655f028 100644 (file)
@@ -21,11 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 -->
 <title>html5lib test runner</title>
-<script src=resources/dom2string.js></script>
-<script>
-if (window.layoutTestController)
-    layoutTestController.dumpAsText();
-</script>
+<script src=../resources/dump-as-markup.js></script>
 <style>
 .overview:hover {
 background: #ccc;
@@ -37,6 +33,8 @@ display: none;
 <p>Script did not run</p>
 <iframe></iframe>
 <script>
+Markup.noAutoDump();
+
 var test_files = [
         'resources/tests1.dat',
         'resources/tests2.dat',
@@ -228,7 +226,7 @@ function run_test(input, contextElement, expected)
 
 function process_result(input, result, expected)
 {
-    result = dom2string(result);
+    result = Markup.get(result);
     if (result !== expected)
     {
         fail_list.push(test_number);
index 2d3a017..bd961a4 100644 (file)
 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 // THE SOFTWARE.
 </script>
-<script>
-String.prototype.toAsciiLowerCase = function () {
-  var output = "";
-  for (var i = 0, len = this.length; i < len; ++i) {
-    if (this.charCodeAt(i) >= 0x41 && this.charCodeAt(i) <= 0x5A) {
-      output += String.fromCharCode(this.charCodeAt(i) + 0x20)
-    } else {
-      output += this.charAt(i);
-    }
-  }
-  return output;
-}
-
-function indent(ancestors) {
-  var str = "";
-  if (ancestors > 0) {
-    while (ancestors--)
-      str += "  ";
-  }
-  return str;
-}
-
-function dom2string(node, ancestors) {
-  var str = "";
-  if (typeof ancestors == "undefined")
-    var ancestors = 0;
-  if (!node.firstChild)
-    return "| ";
-  var parent = node;
-  var current = node.firstChild;
-  var next = null;
-  var misnested = null;
-  for (;;) {
-    str += "\n| " + indent(ancestors);
-    switch (current.nodeType) {
-      case 10:
-        str += '<!DOCTYPE ' + current.nodeName + '>';
-        break;
-      case 8:
-        try {
-          str += '<!-- ' + current.nodeValue + ' -->';
-        } catch (e) {
-          str += '<!--  -->';
-        }
-        if (parent != current.parentNode) {
-          return str += ' (misnested... aborting)';
-        }
-        break;
-      case 7:
-        str += '<?' + current.nodeName + current.nodeValue + '>';
-        break;
-      case 4:
-        str += '<![CDATA[ ' + current.nodeValue + ' ]]>';
-        break;
-      case 3:
-        str += '"' + current.nodeValue + '"';
-        if (parent != current.parentNode) {
-          return str += ' (misnested... aborting)';
-        }
-        break;
-      case 1:
-        str += "<";
-        switch (current.namespaceURI) {
-          case "http://www.w3.org/2000/svg":
-            str += "svg ";
-            break;
-          case "http://www.w3.org/1998/Math/MathML":
-            str += "math ";
-            break;
-        }
-        if (current.localName && current.namespaceURI && current.namespaceURI != null) {
-          str += current.localName;
-        } else {
-          str += current.nodeName.toAsciiLowerCase();
-        }
-        str += '>';
-        if (parent != current.parentNode) {
-          return str += ' (misnested... aborting)';
-        } else {
-          if (current.attributes) {
-            var attrNames = [];
-            var attrPos = {};
-            for (var j = 0; j < current.attributes.length; j += 1) {
-              if (current.attributes[j].specified) {
-                var name = "";
-                switch (current.attributes[j].namespaceURI) {
-                  case "http://www.w3.org/XML/1998/namespace":
-                    name += "xml ";
-                    break;
-                  case "http://www.w3.org/2000/xmlns/":
-                    name += "xmlns ";
-                    break;
-                  case "http://www.w3.org/1999/xlink":
-                    name += "xlink ";
-                    break;
-                }
-                if (current.attributes[j].localName) {
-                  name += current.attributes[j].localName;
-                } else {
-                  name += current.attributes[j].nodeName;
-                }
-                attrNames.push(name);
-                attrPos[name] = j;
-              }
-            }
-            if (attrNames.length > 0) {
-              attrNames.sort();
-              for (var j = 0; j < attrNames.length; j += 1) {
-                str += "\n| " + indent(1 + ancestors) + attrNames[j];
-                str += '="' + current.attributes[attrPos[attrNames[j]]].nodeValue + '"';
-              }
-            }
-          }
-          if (next = current.firstChild) {
-            parent = current;
-            current = next;
-            ancestors++;
-            continue;
-          }
-        }
-        break;
-    }
-    for (;;) {
-      if (next = current.nextSibling) {
-        current = next;
-        break;
-      }
-      current = current.parentNode;
-      parent = parent.parentNode;
-      ancestors--;
-      if (current == node) {
-        return str.substring(1);
-      }
-    }
-  }
-}
-</script>
-<script>
-if (window.layoutTestController)
-    layoutTestController.dumpAsText();
-</script>
+<script src=../resources/dump-as-markup.js></script>
 <style>
 .overview:hover {
 background: #ccc;
@@ -172,6 +32,8 @@ display: none;
 <p>Script did not run</p>
 <iframe></iframe>
 <script>
+Markup.noAutoDump();
+
 var test_files = [
         // 'resources/tests1.dat',
         // 'resources/tests2.dat',
@@ -357,7 +219,7 @@ function run_test(input, contextElement, expected)
 
 function process_result(input, result, expected, async)
 {
-    result = dom2string(result);
+    result = Markup.get(result);
     if (result !== expected)
     {
         fail_list.push(test_number + "." + subtest_number);
index eeafce8..b6eee92 100644 (file)
  *    Optionally specify the node to dump and the description for each call of dump.
  */
 
-if (window.layoutTestController) {
+if (window.layoutTestController)
     layoutTestController.dumpAsText();
-    layoutTestController.waitUntilDone();
-}
 
 // Namespace
+// FIXME: Rename dump-as-markup.js to dump-dom.js and Markup to DOM.
 var Markup = {};
 
 // The description of what this test is testing. Gets prepended to the dumped markup.
@@ -36,7 +35,7 @@ Markup.dump = function(opt_node, opt_description)
     if (typeof opt_node == 'string')
         opt_node = document.getElementById(opt_node);
 
-    var node = opt_node || Markup._node || document.body.parentElement
+    var node = opt_node || Markup._node || document
     var markup = "";
 
     if (Markup._test_description && !Markup._dumpCalls)
@@ -51,7 +50,7 @@ Markup.dump = function(opt_node, opt_description)
             opt_description = "Dump of markup " + Markup._dumpCalls
         if (Markup._dumpCalls > 1)
             markup += '\n';
-        markup += '\n' + opt_description + ':';
+        markup += '\n' + opt_description + ':\n';
     }
 
     markup += Markup.get(node);
@@ -59,7 +58,6 @@ Markup.dump = function(opt_node, opt_description)
     if (!Markup._container) {
         Markup._container = document.createElement('pre');
         Markup._container.style.width = '100%';
-        document.body.appendChild(Markup._container);
     }
 
     // FIXME: Have this respect layoutTestController.dumpChildFramesAsText?
@@ -74,16 +72,24 @@ Markup.dump = function(opt_node, opt_description)
         }
     }
 
-    Markup._container.innerText += markup;
+    Markup._container.appendChild(document.createTextNode(markup));
 }
 
-Markup.waitUntilDone = function()
+Markup.noAutoDump = function()
 {
     window.removeEventListener('load', Markup.notifyDone, false);
 }
 
+Markup.waitUntilDone = function()
+{
+    layoutTestController.waitUntilDone();
+    Markup.noAutoDump();
+}
+
 Markup.notifyDone = function()
 {
+    // Need to waitUntilDone or some tests won't finish appending the markup before the text is dumped.
+    layoutTestController.waitUntilDone();
     Markup._done = true;
 
     // If dump has already been called, don't bother to dump again
@@ -93,8 +99,10 @@ Markup.notifyDone = function()
     // In non-layout test mode, append the results in a pre so that we don't
     // clobber the test itself. But when in layout test mode, we don't want
     // side effects from the test to be included in the results.
-    if (window.layoutTestController)
-        document.body.innerText = Markup._container.innerText;
+    if (window.layoutTestController) {
+        document.body.innerHTML = '';
+        document.body.appendChild(Markup._container);
+    }
 
     if (window.layoutTestController)
         layoutTestController.notifyDone();
@@ -107,98 +115,134 @@ Markup.setNodeToDump = function(node)
     Markup._node = node
 }
 
+Markup.get = function(node)
+{
+    if (!node.firstChild)
+        return '| ';
+
+    // Don't print any markup for the root node.
+    var markup = '';
+    for (var i = 0, len = node.childNodes.length; i < len; i++) {
+        markup += Markup._get(node.childNodes[i], 0);
+    }
+    return markup.substring(1);
+}
+
 // Returns the markup for the given node. To be used for cases where a test needs
 // to get the markup but not clobber the whole page.
-Markup.get = function(node, opt_depth)
+Markup._get = function(node, depth)
 {
-    var depth = opt_depth || 0;
-
-    var attrs = Markup._getAttributes(node);
-    var attrsString = attrs.length ? ' ' + attrs.join(' ') : '';
-
-    var nodeName = node.nodeName;
-    var markup = '<' + nodeName + attrsString + '>';
-
-    var isSpecialNode = Markup._FORBIDS_END_TAG[nodeName];
-    var innerMarkup = '';
-    switch (nodeName) {
-        case '#text':
-        case 'STYLE':
-        case 'SCRIPT':
-        case 'IFRAME':
-        case 'TEXTAREA':
-        case 'XMP':
-            innerMarkup = nodeName == '#text' ? Markup._getMarkupForTextNode(node) : node.innerText;
-            innerMarkup = innerMarkup.replace(/\n/g, '\n' + Markup._spaces(depth))
-            isSpecialNode = true;
-            break;
-        
-        default:
-            for (var i = 0, len = node.childNodes.length; i < len; i++) {
-                innerMarkup += Markup._getSelectionMarker(node, i);
-                innerMarkup += Markup.get(node.childNodes[i], depth + 1);
+    var str = Markup._indent(depth);
+
+    switch (node.nodeType) {
+    case 10:
+        str += '<!DOCTYPE ' + node.nodeName;
+        if (node.publicId || node.systemId) {
+            str += ' "' + node.publicId + '"';
+            str += ' "' + node.systemId + '"';
+        }
+        str += '>';
+        break;
+
+    case 8:
+        try {
+            str += '<!-- ' + node.nodeValue + ' -->';
+        } catch (e) {
+            str += '<!--  -->';
+        }
+        break;
+
+    case 7:
+        str += '<?' + node.nodeName + node.nodeValue + '>';
+        break;
+
+    case 4:
+        str += '<![CDATA[ ' + node.nodeValue + ' ]]>';
+        break;
+
+    case 3:
+        str += '"' + Markup._getMarkupForTextNode(node) + '"';
+        break;
+
+    case 1:
+        str += "<";
+        str += Markup._namespace(node)
+
+        if (node.localName && node.namespaceURI && node.namespaceURI != null)
+            str += node.localName;
+        else
+            str += Markup._toAsciiLowerCase(node.nodeName);
+
+        str += '>';
+
+        if (node.attributes) {
+            var attrNames = [];
+            var attrPos = {};
+            for (var j = 0; j < node.attributes.length; j += 1) {
+                if (node.attributes[j].specified) {
+                    var name = Markup._namespace(node.attributes[j])
+                    name += node.attributes[j].localName || node.attributes[j].nodeName;
+                    attrNames.push(name);
+                    attrPos[name] = j;
+                }
+            }
+            if (attrNames.length > 0) {
+              attrNames.sort();
+              for (var j = 0; j < attrNames.length; j += 1) {
+                str += Markup._indent(depth + 1) + attrNames[j];
+                str += '="' + node.attributes[attrPos[attrNames[j]]].nodeValue + '"';
+              }
             }
-            innerMarkup += Markup._getSelectionMarker(node, i);
+        }
+        break;
     }
 
-    markup = '\n' + Markup._spaces(depth) + markup 
-    if (!isSpecialNode)
-        innerMarkup += '\n' + Markup._spaces(depth);
+    for (var i = 0, len = node.childNodes.length; i < len; i++) {
+        var selection = Markup._getSelectionMarker(node, i);
+        if (selection)
+            str += Markup._indent(depth + 1) + selection;
 
-    markup += innerMarkup;
+        str += Markup._get(node.childNodes[i], depth + 1);
+    }
     
-    if (!Markup._FORBIDS_END_TAG[nodeName])
-        markup += '</' + nodeName + '>';
+    var selection = Markup._getSelectionMarker(node, i);
+    if (selection)
+        str += Markup._indent(depth + 1) + selection;
 
-    return markup;
+    return str;
 }
 
-Markup._dumpCalls = 0
-
-Markup._spaces = function(multiplier)
+Markup._namespace = function(node)
 {
-    return new Array(multiplier * 4 + 1).join(' ');
+    if (Markup._NAMESPACE_URI_MAP[node.namespaceURI])
+        return Markup._NAMESPACE_URI_MAP[node.namespaceURI] + ' ';
+    return '';
 }
 
-// FIXME: Is there a better way to do this than a hard coded list?
-Markup._DUMP_AS_MARKUP_PROPERTIES = ['src', 'type', 'href', 'style', 'class', 'id', 'color', 'bgcolor', 'contentEditable'];
+Markup._dumpCalls = 0
 
-Markup._getAttributes = function(node)
+Markup._indent = function(depth)
 {
-    var props = [];
-    if (!node.hasAttribute)
-        return props;
-
-    for (var i = 0; i < Markup._DUMP_AS_MARKUP_PROPERTIES.length; i++) {
-        var attr = Markup._DUMP_AS_MARKUP_PROPERTIES[i];
-        if (node.hasAttribute(attr)) {
-            props.push(attr + '="' + node.getAttribute(attr) + '"');
-        }
-    }
-    return props;
+    return "\n| " + new Array(depth * 2 + 1).join(' ');
+}
+
+Markup._toAsciiLowerCase = function (str) {
+  var output = "";
+  for (var i = 0, len = this.length; i < len; ++i) {
+    if (str.charCodeAt(i) >= 0x41 && str.charCodeAt(i) <= 0x5A)
+      output += String.fromCharCode(str.charCodeAt(i) + 0x20)
+    else
+      output += str.charAt(i);
+  }
+  return output;
 }
 
-// This list should match all HTML elements that return TagStatusForbidden for endTagRequirement().
-Markup._FORBIDS_END_TAG = {
-    'META': 1,
-    'HR': 1,
-    'AREA': 1,
-    'LINK': 1,
-    'WBR': 1,
-    'BR': 1,
-    'BASE': 1,
-    'TABLECOL': 1,
-    'SOURCE': 1,
-    'INPUT': 1,
-    'PARAM': 1,
-    'EMBED': 1,
-    'FRAME': 1,
-    'CANVAS': 1,
-    'IMG': 1,
-    'ISINDEX': 1,
-    'BASEFONT': 1,
-    'DATAGRIDCELL': 1,
-    'DATAGRIDCOL': 1
+Markup._NAMESPACE_URI_MAP = {
+    "http://www.w3.org/2000/svg": "svg",
+    "http://www.w3.org/1998/Math/MathML": "math",
+    "http://www.w3.org/XML/1998/namespace": "xml",
+    "http://www.w3.org/2000/xmlns/": "xmlns",
+    "http://www.w3.org/1999/xlink": "xlink"
 }
 
 Markup._getSelectionFromNode = function(node)
@@ -206,6 +250,10 @@ Markup._getSelectionFromNode = function(node)
     return node.ownerDocument.defaultView.getSelection();
 }
 
+Markup._SELECTION_FOCUS = '<#selection-focus>';
+Markup._SELECTION_ANCHOR = '<#selection-anchor>';
+Markup._SELECTION_CARET = '<#selection-caret>';
+
 Markup._getMarkupForTextNode = function(node)
 {
     innerMarkup = node.nodeValue;
@@ -215,26 +263,26 @@ Markup._getMarkupForTextNode = function(node)
     if (node == sel.anchorNode && node == sel.focusNode) {
         if (sel.isCollapsed) {
             startOffset = sel.anchorOffset;
-            startText = '<selection-caret>';
+            startText = Markup._SELECTION_CARET;
         } else {
             if (sel.focusOffset > sel.anchorOffset) {
                 startOffset = sel.anchorOffset;
                 endOffset = sel.focusOffset;
-                startText = '<selection-anchor>';
-                endText = '<selection-focus>';
+                startText = Markup._SELECTION_ANCHOR;
+                endText = Markup._SELECTION_FOCUS;
             } else {
                 startOffset = sel.focusOffset;
                 endOffset = sel.anchorOffset;
-                startText = '<selection-focus>';
-                endText = '<selection-anchor>';                        
+                startText = Markup._SELECTION_FOCUS;
+                endText = Markup._SELECTION_ANCHOR;
             }
         }
     } else if (node == sel.focusNode) {
         startOffset = sel.focusOffset;
-        startText = '<selection-focus>';
+        startText = Markup._SELECTION_FOCUS;
     } else if (node == sel.anchorNode) {
         startOffset = sel.anchorOffset;
-        startText = '<selection-anchor>';
+        startText = Markup._SELECTION_ANCHOR;
     }
     
     if (startText && endText)
@@ -247,14 +295,17 @@ Markup._getMarkupForTextNode = function(node)
 
 Markup._getSelectionMarker = function(node, index)
 {
+    if (node.nodeType != 1)
+        return '';
+
     var sel = Markup._getSelectionFromNode(node);;
     if (index == sel.anchorOffset && node == sel.anchorNode) {
         if (sel.isCollapsed)
-            return '<selection-caret>';
+            return Markup._SELECTION_CARET;
         else
-            return '<selection-anchor>';
+            return Markup._SELECTION_ANCHOR;
     } else if (index == sel.focusOffset && node == sel.focusNode)
-        return '<selection-focus>';
+        return Markup._SELECTION_FOCUS;
 
     return '';
 }