CSSStyleDeclaration.cssText should not contain extraneous whitespace in final delimiter
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Aug 2012 23:58:43 +0000 (23:58 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Aug 2012 23:58:43 +0000 (23:58 +0000)
https://bugs.webkit.org/show_bug.cgi?id=94633

Patch by Glenn Adams <glenn@skynav.com> on 2012-08-24
Reviewed by Benjamin Poulain.

Ensure cssText final delimiter does not contain extraneous space character after semicolon.

Source/WebCore:

Test: cssom/cssstyledeclaration-csstext-final-delimiter.html

* css/CSSFontFaceRule.cpp:
(WebCore::CSSFontFaceRule::cssText):
Conditionally add SPACE in serialized rule since asText() no longer
contains extra space.
Construct result using StringBuilder.

* css/CSSPageRule.cpp:
(WebCore::CSSPageRule::cssText):
Conditionally add SPACE in serialized rule since asText() no longer
contains extra space.
Construct result using StringBuilder.

* css/CSSProperty.cpp:
(WebCore::CSSProperty::cssText):
Ensure serialized property does longer contains extra space in cssText.
Construct result using StringBuilder.

* css/CSSStyleRule.cpp:
(WebCore::CSSStyleRule::cssText):
Conditionally add SPACE in serialized rule since asText() no longer
contains extra space.
Construct result using StringBuilder.

* css/CSSStyleSheet.cpp:
(WebCore::CSSStyleSheet::addRule):
Conditionally add SPACE in reserialized rule in case passed style no
longer contains extra space.  Note that if it does already contain an
extra space that inserting an extra space here is harmless (i.e., is
effectively normalized during parse).
Construct result using StringBuilder.

* css/StylePropertySet.cpp:
(WebCore::StylePropertySet::asText):
Ensure serialized property set does longer contains extra space in final
delimiter.
Construct result using StringBuilder.

* css/WebKitCSSKeyframeRule.cpp:
(WebCore::StyleKeyframe::cssText):
Conditionally add SPACE in serialized rule since asText() no longer
contains extra space.
Construct result using StringBuilder.

* editing/ApplyStyleCommand.cpp:
(WebCore::ApplyStyleCommand::addBlockStyle):
Conditionally add SPACE in block style since cssText no longer contains
extra space.
Construct result using StringBuilder.
(WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
Conditionally add SPACE in pre-existing inline style since cssText no
longer contains extra space.
Construct result using StringBuilder.

LayoutTests:

* cssom/README.txt: Added.
* cssom/cssstyledeclaration-csstext-final-delimiter-expected.txt: Added.
* cssom/cssstyledeclaration-csstext-final-delimiter.html: Added.
* editing/deleting/delete-line-break-before-underlined-content-expected.txt: Remove extraneous space.
* editing/deleting/delete-line-break-between-paragraphs-with-same-style-expected.txt: ditto
* editing/deleting/deleting-line-break-preserves-underline-color-expected.txt: ditto
* editing/deleting/merge-paragraph-from-h6-with-style-2-expected.txt: ditto
* editing/deleting/merge-paragraph-from-h6-with-style-expected.txt: ditto
* editing/deleting/merge-paragraph-from-p-with-style-3-expected.txt: ditto
* editing/deleting/merge-paragraph-from-p-with-style-expected.txt: ditto
* editing/deleting/paste-with-transparent-background-color-expected.txt: ditto
* editing/execCommand/insert-list-with-noneditable-content-expected.txt: ditto
* editing/execCommand/script-tests/toggle-link.js: ditto
* editing/execCommand/script-tests/toggle-unlink.js: ditto
* editing/execCommand/toggle-link-expected.txt: ditto
* editing/execCommand/toggle-unlink-expected.txt: ditto
* editing/inserting/page-zoom-font-size-expected.txt: ditto
* editing/pasteboard/19644-2-expected.txt: ditto
* editing/pasteboard/5761530-1-expected.txt: ditto
* editing/pasteboard/5780697-2-expected.txt: ditto
* editing/pasteboard/copy-null-characters-expected.txt: ditto
* editing/pasteboard/copy-paste-bidi-expected.txt: ditto
* editing/pasteboard/copy-text-with-backgroundcolor-expected.txt: ditto
* editing/pasteboard/data-transfer-items-expected.txt: ditto
* editing/pasteboard/display-block-on-spans-expected.txt: ditto
* editing/pasteboard/do-not-copy-unnecessary-styles-2-expected.txt: ditto
* editing/pasteboard/do-not-copy-unnecessary-styles-expected.txt: ditto
* editing/pasteboard/drag-drop-url-with-style-expected.txt: ditto
* editing/pasteboard/onpaste-text-html-expected.txt: ditto
* editing/pasteboard/paste-4039777-fix-expected.txt: ditto
* editing/pasteboard/paste-and-sanitize-expected.txt: ditto
* editing/pasteboard/paste-and-sanitize.html: ditto
* editing/pasteboard/paste-list-003-expected.txt: ditto
* editing/pasteboard/paste-noscript-expected.txt: ditto
* editing/pasteboard/paste-noscript-xhtml-expected.txt: ditto
* editing/pasteboard/paste-table-002-expected.txt: ditto
* editing/pasteboard/paste-text-with-style-4-expected.txt: ditto
* editing/pasteboard/paste-text-with-style-5-expected.txt: ditto
* editing/pasteboard/paste-with-redundant-style-expected.txt: ditto
* editing/pasteboard/preserve-underline-color-expected.txt: ditto
* editing/pasteboard/style-from-rules-expected.txt: ditto
* editing/pasteboard/testcase-9507-expected.txt: ditto
* editing/style/non-inheritable-styles-expected.txt: ditto
* editing/style/push-down-font-styles-expected.txt: ditto
* editing/style/push-down-implicit-styles-around-list-expected.txt: ditto
* editing/style/push-down-implicit-styles-expected.txt: ditto
* editing/style/push-down-inline-styles-expected.txt: ditto
* editing/style/script-tests/push-down-font-styles.js: ditto
* editing/style/script-tests/push-down-implicit-styles-around-list.js: ditto
* editing/style/script-tests/push-down-implicit-styles.js: ditto
* editing/style/script-tests/push-down-inline-styles.js: ditto
* editing/undo/remove-css-property-and-remove-style-expected.txt: ditto
* editing/undo/replace-by-span-then-remove-expected.txt: ditto
* editing/undo/replace-by-span-then-remove.html: ditto
* fast/css/background-position-serialize.html: ditto
* fast/css/counters/counter-cssText-expected.txt: ditto
* fast/css/counters/counter-cssText.html: ditto
* fast/css/parse-border-image-repeat-null-crash-expected.txt: ditto
* fast/css/remove-shorthand.html: ditto
* fast/dom/Element/scrollWidth.html: ditto
* fast/dom/HTMLMeterElement/meter-element-markup-expected.txt: ditto
* fast/dom/HTMLProgressElement/progress-element-markup-expected.txt: ditto
* fast/dom/attr-style-too-lazy-expected.txt: ditto
* fast/dom/attr-style-too-lazy.html: ditto
* fast/dom/css-set-property-exception-expected.txt: ditto
* fast/fast/events/ondrop-text-html-expected.txt: ditto
* fast/mutation/observe-attributes-expected.txt: ditto
* fast/mutation/observe-attributes.html: ditto
* inspector/elements/insert-node-expected.txt: ditto
* inspector/styles/styles-update-from-js-expected.txt: ditto
* platform/chromium-win/editing/pasteboard/5780697-2-expected.txt: ditto
* platform/efl/fast/dom/HTMLMeterElement/meter-element-markup-expected.txt: ditto
* platform/mac/editing/pasteboard/5761530-1-expected.txt: ditto
* platform/qt/editing/pasteboard/5761530-1-expected.txt: ditto
* platform/qt/editing/pasteboard/5780697-2-expected.txt: ditto
* svg/webarchive/svg-script-subresouces-expected.webarchive: ditto
* webarchive/test-link-rel-icon-beforeload-expected.webarchive: ditto

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

89 files changed:
LayoutTests/ChangeLog
LayoutTests/cssom/README.txt [new file with mode: 0644]
LayoutTests/cssom/cssstyledeclaration-csstext-final-delimiter-expected.txt [new file with mode: 0644]
LayoutTests/cssom/cssstyledeclaration-csstext-final-delimiter.html [new file with mode: 0644]
LayoutTests/editing/deleting/delete-line-break-before-underlined-content-expected.txt
LayoutTests/editing/deleting/delete-line-break-between-paragraphs-with-same-style-expected.txt
LayoutTests/editing/deleting/deleting-line-break-preserves-underline-color-expected.txt
LayoutTests/editing/deleting/merge-paragraph-from-h6-with-style-2-expected.txt
LayoutTests/editing/deleting/merge-paragraph-from-h6-with-style-expected.txt
LayoutTests/editing/deleting/merge-paragraph-from-p-with-style-3-expected.txt
LayoutTests/editing/deleting/merge-paragraph-from-p-with-style-expected.txt
LayoutTests/editing/deleting/paste-with-transparent-background-color-expected.txt
LayoutTests/editing/execCommand/insert-list-with-noneditable-content-expected.txt
LayoutTests/editing/execCommand/script-tests/toggle-link.js
LayoutTests/editing/execCommand/script-tests/toggle-unlink.js
LayoutTests/editing/execCommand/toggle-link-expected.txt
LayoutTests/editing/execCommand/toggle-unlink-expected.txt
LayoutTests/editing/inserting/page-zoom-font-size-expected.txt
LayoutTests/editing/pasteboard/19644-2-expected.txt
LayoutTests/editing/pasteboard/5761530-1-expected.txt
LayoutTests/editing/pasteboard/5780697-2-expected.txt
LayoutTests/editing/pasteboard/copy-null-characters-expected.txt
LayoutTests/editing/pasteboard/copy-paste-bidi-expected.txt
LayoutTests/editing/pasteboard/copy-text-with-backgroundcolor-expected.txt
LayoutTests/editing/pasteboard/data-transfer-items-expected.txt
LayoutTests/editing/pasteboard/display-block-on-spans-expected.txt
LayoutTests/editing/pasteboard/do-not-copy-unnecessary-styles-2-expected.txt
LayoutTests/editing/pasteboard/do-not-copy-unnecessary-styles-expected.txt
LayoutTests/editing/pasteboard/drag-drop-url-with-style-expected.txt
LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt
LayoutTests/editing/pasteboard/onpaste-text-html.html
LayoutTests/editing/pasteboard/paste-4039777-fix-expected.txt
LayoutTests/editing/pasteboard/paste-and-sanitize-expected.txt
LayoutTests/editing/pasteboard/paste-and-sanitize.html
LayoutTests/editing/pasteboard/paste-list-003-expected.txt
LayoutTests/editing/pasteboard/paste-noscript-expected.txt
LayoutTests/editing/pasteboard/paste-noscript-xhtml-expected.txt
LayoutTests/editing/pasteboard/paste-table-002-expected.txt
LayoutTests/editing/pasteboard/paste-text-with-style-4-expected.txt
LayoutTests/editing/pasteboard/paste-text-with-style-5-expected.txt
LayoutTests/editing/pasteboard/paste-with-redundant-style-expected.txt
LayoutTests/editing/pasteboard/preserve-underline-color-expected.txt
LayoutTests/editing/pasteboard/style-from-rules-expected.txt
LayoutTests/editing/pasteboard/testcase-9507-expected.txt
LayoutTests/editing/style/non-inheritable-styles-expected.txt
LayoutTests/editing/style/push-down-font-styles-expected.txt
LayoutTests/editing/style/push-down-implicit-styles-around-list-expected.txt
LayoutTests/editing/style/push-down-implicit-styles-expected.txt
LayoutTests/editing/style/push-down-inline-styles-expected.txt
LayoutTests/editing/style/script-tests/push-down-font-styles.js
LayoutTests/editing/style/script-tests/push-down-implicit-styles-around-list.js
LayoutTests/editing/style/script-tests/push-down-implicit-styles.js
LayoutTests/editing/style/script-tests/push-down-inline-styles.js
LayoutTests/editing/undo/remove-css-property-and-remove-style-expected.txt
LayoutTests/editing/undo/replace-by-span-then-remove-expected.txt
LayoutTests/editing/undo/replace-by-span-then-remove.html
LayoutTests/fast/css/background-position-serialize.html
LayoutTests/fast/css/counters/counter-cssText-expected.txt
LayoutTests/fast/css/counters/counter-cssText.html
LayoutTests/fast/css/parse-border-image-repeat-null-crash-expected.txt
LayoutTests/fast/css/remove-shorthand.html
LayoutTests/fast/dom/Element/scrollWidth.html
LayoutTests/fast/dom/HTMLMeterElement/meter-element-markup-expected.txt
LayoutTests/fast/dom/HTMLProgressElement/progress-element-markup-expected.txt
LayoutTests/fast/dom/attr-style-too-lazy-expected.txt
LayoutTests/fast/dom/attr-style-too-lazy.html
LayoutTests/fast/dom/css-set-property-exception-expected.txt
LayoutTests/fast/events/ondrop-text-html-expected.txt
LayoutTests/fast/events/ondrop-text-html.html
LayoutTests/fast/mutation/observe-attributes-expected.txt
LayoutTests/fast/mutation/observe-attributes.html
LayoutTests/inspector/elements/insert-node-expected.txt
LayoutTests/inspector/styles/styles-update-from-js-expected.txt
LayoutTests/platform/chromium-win/editing/pasteboard/5780697-2-expected.txt
LayoutTests/platform/efl/fast/dom/HTMLMeterElement/meter-element-markup-expected.txt
LayoutTests/platform/mac/editing/pasteboard/5761530-1-expected.txt
LayoutTests/platform/qt/editing/pasteboard/5761530-1-expected.txt
LayoutTests/platform/qt/editing/pasteboard/5780697-2-expected.txt
LayoutTests/svg/webarchive/svg-script-subresouces-expected.webarchive
LayoutTests/webarchive/test-link-rel-icon-beforeload-expected.webarchive
Source/WebCore/ChangeLog
Source/WebCore/css/CSSFontFaceRule.cpp
Source/WebCore/css/CSSPageRule.cpp
Source/WebCore/css/CSSProperty.cpp
Source/WebCore/css/CSSStyleRule.cpp
Source/WebCore/css/CSSStyleSheet.cpp
Source/WebCore/css/StylePropertySet.cpp
Source/WebCore/css/WebKitCSSKeyframeRule.cpp
Source/WebCore/editing/ApplyStyleCommand.cpp

index 85d3300..75b7ff3 100644 (file)
@@ -1,3 +1,90 @@
+2012-08-24  Glenn Adams  <glenn@skynav.com>
+
+        CSSStyleDeclaration.cssText should not contain extraneous whitespace in final delimiter
+        https://bugs.webkit.org/show_bug.cgi?id=94633
+
+        Reviewed by Benjamin Poulain.
+
+        Ensure cssText final delimiter does not contain extraneous space character after semicolon.
+
+        * cssom/README.txt: Added.
+        * cssom/cssstyledeclaration-csstext-final-delimiter-expected.txt: Added.
+        * cssom/cssstyledeclaration-csstext-final-delimiter.html: Added.
+        * editing/deleting/delete-line-break-before-underlined-content-expected.txt: Remove extraneous space.
+        * editing/deleting/delete-line-break-between-paragraphs-with-same-style-expected.txt: ditto
+        * editing/deleting/deleting-line-break-preserves-underline-color-expected.txt: ditto
+        * editing/deleting/merge-paragraph-from-h6-with-style-2-expected.txt: ditto
+        * editing/deleting/merge-paragraph-from-h6-with-style-expected.txt: ditto
+        * editing/deleting/merge-paragraph-from-p-with-style-3-expected.txt: ditto
+        * editing/deleting/merge-paragraph-from-p-with-style-expected.txt: ditto
+        * editing/deleting/paste-with-transparent-background-color-expected.txt: ditto
+        * editing/execCommand/insert-list-with-noneditable-content-expected.txt: ditto
+        * editing/execCommand/script-tests/toggle-link.js: ditto
+        * editing/execCommand/script-tests/toggle-unlink.js: ditto
+        * editing/execCommand/toggle-link-expected.txt: ditto
+        * editing/execCommand/toggle-unlink-expected.txt: ditto
+        * editing/inserting/page-zoom-font-size-expected.txt: ditto
+        * editing/pasteboard/19644-2-expected.txt: ditto
+        * editing/pasteboard/5761530-1-expected.txt: ditto
+        * editing/pasteboard/5780697-2-expected.txt: ditto
+        * editing/pasteboard/copy-null-characters-expected.txt: ditto
+        * editing/pasteboard/copy-paste-bidi-expected.txt: ditto
+        * editing/pasteboard/copy-text-with-backgroundcolor-expected.txt: ditto
+        * editing/pasteboard/data-transfer-items-expected.txt: ditto
+        * editing/pasteboard/display-block-on-spans-expected.txt: ditto
+        * editing/pasteboard/do-not-copy-unnecessary-styles-2-expected.txt: ditto
+        * editing/pasteboard/do-not-copy-unnecessary-styles-expected.txt: ditto
+        * editing/pasteboard/drag-drop-url-with-style-expected.txt: ditto
+        * editing/pasteboard/onpaste-text-html-expected.txt: ditto
+        * editing/pasteboard/paste-4039777-fix-expected.txt: ditto
+        * editing/pasteboard/paste-and-sanitize-expected.txt: ditto
+        * editing/pasteboard/paste-and-sanitize.html: ditto
+        * editing/pasteboard/paste-list-003-expected.txt: ditto
+        * editing/pasteboard/paste-noscript-expected.txt: ditto
+        * editing/pasteboard/paste-noscript-xhtml-expected.txt: ditto
+        * editing/pasteboard/paste-table-002-expected.txt: ditto
+        * editing/pasteboard/paste-text-with-style-4-expected.txt: ditto
+        * editing/pasteboard/paste-text-with-style-5-expected.txt: ditto
+        * editing/pasteboard/paste-with-redundant-style-expected.txt: ditto
+        * editing/pasteboard/preserve-underline-color-expected.txt: ditto
+        * editing/pasteboard/style-from-rules-expected.txt: ditto
+        * editing/pasteboard/testcase-9507-expected.txt: ditto
+        * editing/style/non-inheritable-styles-expected.txt: ditto
+        * editing/style/push-down-font-styles-expected.txt: ditto
+        * editing/style/push-down-implicit-styles-around-list-expected.txt: ditto
+        * editing/style/push-down-implicit-styles-expected.txt: ditto
+        * editing/style/push-down-inline-styles-expected.txt: ditto
+        * editing/style/script-tests/push-down-font-styles.js: ditto
+        * editing/style/script-tests/push-down-implicit-styles-around-list.js: ditto
+        * editing/style/script-tests/push-down-implicit-styles.js: ditto
+        * editing/style/script-tests/push-down-inline-styles.js: ditto
+        * editing/undo/remove-css-property-and-remove-style-expected.txt: ditto
+        * editing/undo/replace-by-span-then-remove-expected.txt: ditto
+        * editing/undo/replace-by-span-then-remove.html: ditto
+        * fast/css/background-position-serialize.html: ditto
+        * fast/css/counters/counter-cssText-expected.txt: ditto
+        * fast/css/counters/counter-cssText.html: ditto
+        * fast/css/parse-border-image-repeat-null-crash-expected.txt: ditto
+        * fast/css/remove-shorthand.html: ditto
+        * fast/dom/Element/scrollWidth.html: ditto
+        * fast/dom/HTMLMeterElement/meter-element-markup-expected.txt: ditto
+        * fast/dom/HTMLProgressElement/progress-element-markup-expected.txt: ditto
+        * fast/dom/attr-style-too-lazy-expected.txt: ditto
+        * fast/dom/attr-style-too-lazy.html: ditto
+        * fast/dom/css-set-property-exception-expected.txt: ditto
+        * fast/fast/events/ondrop-text-html-expected.txt: ditto
+        * fast/mutation/observe-attributes-expected.txt: ditto
+        * fast/mutation/observe-attributes.html: ditto
+        * inspector/elements/insert-node-expected.txt: ditto
+        * inspector/styles/styles-update-from-js-expected.txt: ditto
+        * platform/chromium-win/editing/pasteboard/5780697-2-expected.txt: ditto
+        * platform/efl/fast/dom/HTMLMeterElement/meter-element-markup-expected.txt: ditto
+        * platform/mac/editing/pasteboard/5761530-1-expected.txt: ditto
+        * platform/qt/editing/pasteboard/5761530-1-expected.txt: ditto
+        * platform/qt/editing/pasteboard/5780697-2-expected.txt: ditto
+        * svg/webarchive/svg-script-subresouces-expected.webarchive: ditto
+        * webarchive/test-link-rel-icon-beforeload-expected.webarchive: ditto
+
 2012-08-24  Julien Chaffraix  <jchaffraix@webkit.org>
 
         More unreviewed Chromium rebaselining.
diff --git a/LayoutTests/cssom/README.txt b/LayoutTests/cssom/README.txt
new file mode 100644 (file)
index 0000000..a2498ff
--- /dev/null
@@ -0,0 +1,11 @@
+This directory will contain a copy of W3C's CSSOM test suite [1] when it
+is completed. In the mean time the tests found here are snapshots of specific,
+preliminary tests being prepared by the editors of CSSOM [2] or having been
+submitted and accepted for adoption in the CSSOM test suite.
+
+[1] http://hg.csswg.org/test/file/tip/approved/cssom
+[2] http://hg.csswg.org/test/file/tip/contributors/gadams/incoming/cssom
+
+Until the CSSWG has concluded work on the CSSOM test suite, it is expected
+that the files in this directory will be modified as needed.
+
diff --git a/LayoutTests/cssom/cssstyledeclaration-csstext-final-delimiter-expected.txt b/LayoutTests/cssom/cssstyledeclaration-csstext-final-delimiter-expected.txt
new file mode 100644 (file)
index 0000000..e1e40e3
--- /dev/null
@@ -0,0 +1,5 @@
+
+PASS inline style - text - delimiters - zero declarations 
+PASS inline style - text - delimiters - one declaration 
+PASS inline style - text - delimiters - two declarations 
+
diff --git a/LayoutTests/cssom/cssstyledeclaration-csstext-final-delimiter.html b/LayoutTests/cssom/cssstyledeclaration-csstext-final-delimiter.html
new file mode 100644 (file)
index 0000000..3294c72
--- /dev/null
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>CSSOM - CSSStyleDeclaration - Text - Serialization - Delimiters</title>
+    <link rel="author" title="Glenn Adams" href="mailto:glenn@skynav.com"/>
+    <link rel="help" href="http://www.w3.org/TR/cssom/#the-cssstyledeclaration-interface"/>
+    <meta name="flags" content="dom"/>
+    <script src="../resources/testharness.js"></script>
+    <script src="../resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <div id="log"></div>
+    <div id="box"></div>
+    <script>
+      var style = document.getElementById('box').style;
+      var delim = new RegExp ( /(\s*\;\s*)/ );
+
+      function countDelimiters(s) {
+        var k = ( s.split(delim).length - 1 ) / 2;
+        return k;
+      }
+
+      function getNthDelimiter(s,n) {
+        if ( n > 0 ) {
+          var sa = s.split(delim);
+          var k = 1;
+          for ( var i in sa ) {
+            var s = sa[i];
+            var m = delim.exec(s);
+            if ( m && ( m.length > 1 ) ) {
+              if ( k++ == n ) {
+                return s;
+              }                          
+            }
+          }
+        }
+        return '';
+      }
+
+      test(function(){
+
+        style.cssText = "";
+        assert_equals(countDelimiters(style.cssText), 0);
+        assert_equals(getNthDelimiter(style.cssText,0), "");
+        assert_equals(style.cssText, "");
+
+      }, 'inline style - text - delimiters - zero declarations');
+
+      test(function(){
+
+        style.cssText = "left: 10px";
+        assert_equals(countDelimiters(style.cssText), 1);
+        assert_equals(getNthDelimiter(style.cssText,1), ";");
+        assert_equals(style.cssText, "left: 10px;");
+
+      }, 'inline style - text - delimiters - one declaration');
+
+      test(function(){
+
+        style.cssText = "left: 10px; right: 20px";
+        assert_equals(countDelimiters(style.cssText), 2);
+        assert_equals(getNthDelimiter(style.cssText,1), "; ");
+        assert_equals(getNthDelimiter(style.cssText,2), ";");
+        assert_equals(style.cssText, "left: 10px; right: 20px;");
+
+      }, 'inline style - text - delimiters - two declarations');
+    </script>
+  </body>
+</html>
index b6c6e71..601ab9c 100644 (file)
@@ -1,5 +1,5 @@
 This tests for a bug where underlined content would lose its underliningwhen deleting the line break before the paragraph that contained it.
 | "This shouldn't be underlined.<#selection-caret>"
 | <span>
-|   style="text-decoration: underline; "
+|   style="text-decoration: underline;"
 |   "This should be underlined."
index 467fadd..54a4bd5 100644 (file)
@@ -7,7 +7,7 @@ This tests deleting a line break between paragraphs with the same inline style.
 |     face="monospace"
 |     "hello world<#selection-caret>"
 |   <span>
-|     style="font-family: monospace; "
+|     style="font-family: monospace;"
 |     "WebKit"
 | "
 "
index 34d033e..a74ec94 100644 (file)
@@ -13,5 +13,5 @@ After:
 | <div>
 |   "This should not be underlined.<#selection-caret>"
 |   <span>
-|     style="color: red; text-decoration: underline; "
+|     style="color: red; text-decoration: underline;"
 |     "This should be underlined."
index 917b1df..1bf681c 100644 (file)
@@ -14,7 +14,7 @@ WebKit should not cancel styles added by h6 by those of document's default style
 | <em>
 |   "hello<#selection-caret>"
 | <span>
-|   style="color: red; "
+|   style="color: red;"
 |   "world"
 | "
 "
index 917b1df..1bf681c 100644 (file)
@@ -14,7 +14,7 @@ WebKit should not cancel styles added by h6 by those of document's default style
 | <em>
 |   "hello<#selection-caret>"
 | <span>
-|   style="color: red; "
+|   style="color: red;"
 |   "world"
 | "
 "
index 0dc1777..c58565e 100644 (file)
@@ -14,7 +14,7 @@ WebKit preserves the inline style of the merged paragraph, and "world" should be
 | <h1>
 |   "hello<#selection-caret>"
 |   <span>
-|     style="color: green; "
+|     style="color: green;"
 |     "world"
 | <font>
 |   color="red"
index f645db8..a8925fd 100644 (file)
@@ -12,7 +12,7 @@ This tests deleting line break before p.
 | "
 hello<#selection-caret>"
 | <span>
-|   style="font-style: italic; "
+|   style="font-style: italic;"
 |   "world"
 | "
 "
index 42aa102..085860e 100644 (file)
@@ -14,7 +14,7 @@ After cut and paste:
 | " "
 | <span>
 |   class="test"
-|   style="background-color: transparent; "
+|   style="background-color: transparent;"
 |   "world"
 | " "
 | "WebKit<#selection-caret>"
index 60895ed..34afc86 100644 (file)
@@ -3,7 +3,7 @@ This tests list creation in an editable context but across non-editable content.
 |   <li>
 |     "Editabl<#selection-anchor>e paragraph containing a "
 |     <span>
-|       style="background-color: rgb(211, 211, 211); "
+|       style="background-color: rgb(211, 211, 211);"
 |       "non-editable"
 |     " in the middle"
 |     <br>
index 39955d0..d26f882 100644 (file)
@@ -43,15 +43,15 @@ testSingleToggle("createLink", '<a href="http://trac.webkit.org/">hello <b>world
 testSingleToggle("createLink", '<a href="http://trac.webkit.org/" style="font-style: italic;">hello world</a> WebKit', selectFirstTwoWords, '<i><a href="http://webkit.org/">hello world</a></i> WebKit');
 testSingleToggle("createLink", 'hello <a href="http://trac.webkit.org/"><b>world</b> WebKit</a>', selectFirstTwoWords, '<a href="http://webkit.org/">hello <b>world</b></a><a href="http://trac.webkit.org/"> WebKit</a>');
 testSingleToggle("createLink", 'hello <a href="http://trac.webkit.org/" style="font-style: italic;"><b>world</b> WebKit</a>', selectFirstTwoWords,
-    '<a href="http://webkit.org/">hello <b style="font-style: italic; ">world</b></a><a href="http://trac.webkit.org/"><i> WebKit</i></a>');
+    '<a href="http://webkit.org/">hello <b style="font-style: italic;">world</b></a><a href="http://trac.webkit.org/"><i> WebKit</i></a>');
 testSingleToggle("createLink", 'hello <b>world</b> WebKit', selectLastWord, 'hello <b>world</b> <a href="http://webkit.org/">WebKit</a>');
 testSingleToggle("createLink", '<u>hello <b>world</b> WebKit</u>', selectLastWord, '<u>hello <b>world</b> <a href="http://webkit.org/">WebKit</a></u>');
 testSingleToggle("createLink", '<a href="http://trac.webkit.org/"><div>hello</div><div>world</div></a>', selectLastWord,
     '<a href="http://trac.webkit.org/"><div>hello</div></a><div><a href="http://webkit.org/">world</a></div>');
 testSingleToggle("createLink", '<a href="http://trac.webkit.org/" style="font-weight: bold;"><div>hello</div><div>world</div></a>', selectLastWord,
-    '<a href="http://trac.webkit.org/"><div style="font-weight: bold; ">hello</div></a><div style="font-weight: bold; "><a href="http://webkit.org/">world</a></div>');
+    '<a href="http://trac.webkit.org/"><div style="font-weight: bold;">hello</div></a><div style="font-weight: bold;"><a href="http://webkit.org/">world</a></div>');
 testSingleToggle("createLink", '<a href="http://trac.webkit.org/" style="font-weight: bold;"><div style="font-weight: normal;">hello</div><div>world</div></a>', selectLastWord,
-    '<a href="http://trac.webkit.org/"><div style="font-weight: normal; ">hello</div></a><div style="font-weight: bold; "><a href="http://webkit.org/">world</a></div>');
+    '<a href="http://trac.webkit.org/"><div style="font-weight: normal;">hello</div></a><div style="font-weight: bold;"><a href="http://webkit.org/">world</a></div>');
 
 document.body.removeChild(testContainer);
 
index 70e5bbd..66ba854 100644 (file)
@@ -50,19 +50,19 @@ testSingleToggle("unlink", 'hello <a href="http://webkit.org/" style="color: blu
     selectAll, 'hello <font color="#0000ff"><span style="display: block;">world</span></font> WebKit');
 testSingleToggle("unlink", '<a href="http://webkit.org/" style="font-size: large;">hello world</a> WebKit',
     selectLastTwoWords, '<a href="http://webkit.org/" style="font-size: large;">hello </a><font size="4">world</font> WebKit');
-testSingleToggle("unlink", 'hello <a href="http://webkit.org/" style="font-size: large;">world <span style="font-size: small; ">WebKit</span> rocks</a>',
-    selectLastTwoWords, 'hello <a href="http://webkit.org/"><font size="4">world </font></a><span style="font-size: small; ">WebKit</span><font size="4"> rocks</font>');
+testSingleToggle("unlink", 'hello <a href="http://webkit.org/" style="font-size: large;">world <span style="font-size: small;">WebKit</span> rocks</a>',
+    selectLastTwoWords, 'hello <a href="http://webkit.org/"><font size="4">world </font></a><span style="font-size: small;">WebKit</span><font size="4"> rocks</font>');
 testSingleToggle("unlink", 'hello <a href="http://webkit.org/" style="font-style: italic;"><b>world</b> WebKit</a>',
-    selectFirstTwoWords, 'hello <b style="font-style: italic; ">world</b><a href="http://webkit.org/"><i> WebKit</i></a>');
+    selectFirstTwoWords, 'hello <b style="font-style: italic;">world</b><a href="http://webkit.org/"><i> WebKit</i></a>');
 
 testSingleToggle("unlink", '<a href="http://webkit.org/" style="background-color: yellow;"><div>hello</div><div>world</div></a>',
-    selectAll, '<div style="background-color: yellow; ">hello</div><div style="background-color: yellow; ">world</div>');
+    selectAll, '<div style="background-color: yellow;">hello</div><div style="background-color: yellow;">world</div>');
 testSingleToggle("unlink", 'hello<a href="http://webkit.org/" style="background-color: yellow;"><div>world</div></a>WebKit',
-    selectAll, 'hello<div style="background-color: yellow; ">world</div><span style="background-color: yellow;">WebKit</span>');
+    selectAll, 'hello<div style="background-color: yellow;">world</div><span style="background-color: yellow;">WebKit</span>');
 testSingleToggle("unlink", '<a href="http://webkit.org/" style="font-weight: bold;"><div>hello</div><div>world WebKit</div></a>',
-    selectLastTwoWords, '<a href="http://webkit.org/"><div style="font-weight: bold; ">hello</div></a><div style="font-weight: bold; ">world WebKit</div>');
+    selectLastTwoWords, '<a href="http://webkit.org/"><div style="font-weight: bold;">hello</div></a><div style="font-weight: bold;">world WebKit</div>');
 testSingleToggle("unlink", '<a href="http://webkit.org/" style="font-weight: bold;"><div style="font-weight: normal;">hello</div><div>world</div></a>',
-    selectLastWord, '<a href="http://webkit.org/"><div style="font-weight: normal; ">hello</div></a><div style="font-weight: bold; ">world</div>');
+    selectLastWord, '<a href="http://webkit.org/"><div style="font-weight: normal;">hello</div></a><div style="font-weight: bold;">world</div>');
 
 document.body.removeChild(testContainer);
 
index 43afa7e..dd22b0c 100644 (file)
@@ -11,12 +11,12 @@ PASS select first two words of "hello <b>world</b> WebKit" and createLink (http:
 PASS select first two words of "<a href="http://trac.webkit.org/">hello <b>world</b></a> WebKit" and createLink (http://webkit.org/) yields "<a href="http://webkit.org/">hello <b>world</b></a> WebKit"
 PASS select first two words of "<a href="http://trac.webkit.org/" style="font-style: italic;">hello world</a> WebKit" and createLink (http://webkit.org/) yields "<i><a href="http://webkit.org/">hello world</a></i> WebKit"
 PASS select first two words of "hello <a href="http://trac.webkit.org/"><b>world</b> WebKit</a>" and createLink (http://webkit.org/) yields "<a href="http://webkit.org/">hello <b>world</b></a><a href="http://trac.webkit.org/"> WebKit</a>"
-PASS select first two words of "hello <a href="http://trac.webkit.org/" style="font-style: italic;"><b>world</b> WebKit</a>" and createLink (http://webkit.org/) yields "<a href="http://webkit.org/">hello <b style="font-style: italic; ">world</b></a><a href="http://trac.webkit.org/"><i> WebKit</i></a>"
+PASS select first two words of "hello <a href="http://trac.webkit.org/" style="font-style: italic;"><b>world</b> WebKit</a>" and createLink (http://webkit.org/) yields "<a href="http://webkit.org/">hello <b style="font-style: italic;">world</b></a><a href="http://trac.webkit.org/"><i> WebKit</i></a>"
 PASS select last word of "hello <b>world</b> WebKit" and createLink (http://webkit.org/) yields "hello <b>world</b> <a href="http://webkit.org/">WebKit</a>"
 PASS select last word of "<u>hello <b>world</b> WebKit</u>" and createLink (http://webkit.org/) yields "<u>hello <b>world</b> <a href="http://webkit.org/">WebKit</a></u>"
 PASS select last word of "<a href="http://trac.webkit.org/"><div>hello</div><div>world</div></a>" and createLink (http://webkit.org/) yields "<a href="http://trac.webkit.org/"><div>hello</div></a><div><a href="http://webkit.org/">world</a></div>"
-PASS select last word of "<a href="http://trac.webkit.org/" style="font-weight: bold;"><div>hello</div><div>world</div></a>" and createLink (http://webkit.org/) yields "<a href="http://trac.webkit.org/"><div style="font-weight: bold; ">hello</div></a><div style="font-weight: bold; "><a href="http://webkit.org/">world</a></div>"
-PASS select last word of "<a href="http://trac.webkit.org/" style="font-weight: bold;"><div style="font-weight: normal;">hello</div><div>world</div></a>" and createLink (http://webkit.org/) yields "<a href="http://trac.webkit.org/"><div style="font-weight: normal; ">hello</div></a><div style="font-weight: bold; "><a href="http://webkit.org/">world</a></div>"
+PASS select last word of "<a href="http://trac.webkit.org/" style="font-weight: bold;"><div>hello</div><div>world</div></a>" and createLink (http://webkit.org/) yields "<a href="http://trac.webkit.org/"><div style="font-weight: bold;">hello</div></a><div style="font-weight: bold;"><a href="http://webkit.org/">world</a></div>"
+PASS select last word of "<a href="http://trac.webkit.org/" style="font-weight: bold;"><div style="font-weight: normal;">hello</div><div>world</div></a>" and createLink (http://webkit.org/) yields "<a href="http://trac.webkit.org/"><div style="font-weight: normal;">hello</div></a><div style="font-weight: bold;"><a href="http://webkit.org/">world</a></div>"
 PASS successfullyParsed is true
 
 TEST COMPLETE
index e7e56af..012e8db 100644 (file)
@@ -10,12 +10,12 @@ PASS unlink on all of "hello <a href="http://webkit.org/" style="font-weight: bo
 PASS unlink on all of "hello <a href="http://webkit.org/" style="color: blue;">world</a> WebKit" yields "hello <font color="#0000ff">world</font> WebKit"
 PASS unlink on all of "hello <a href="http://webkit.org/" style="color: blue; display: block;">world</a> WebKit" yields "hello <font color="#0000ff"><span style="display: block;">world</span></font> WebKit"
 PASS unlink on last two words of "<a href="http://webkit.org/" style="font-size: large;">hello world</a> WebKit" yields "<a href="http://webkit.org/" style="font-size: large;">hello </a><font size="4">world</font> WebKit"
-PASS unlink on last two words of "hello <a href="http://webkit.org/" style="font-size: large;">world <span style="font-size: small; ">WebKit</span> rocks</a>" yields "hello <a href="http://webkit.org/"><font size="4">world </font></a><span style="font-size: small; ">WebKit</span><font size="4"> rocks</font>"
-PASS unlink on first two words of "hello <a href="http://webkit.org/" style="font-style: italic;"><b>world</b> WebKit</a>" yields "hello <b style="font-style: italic; ">world</b><a href="http://webkit.org/"><i> WebKit</i></a>"
-PASS unlink on all of "<a href="http://webkit.org/" style="background-color: yellow;"><div>hello</div><div>world</div></a>" yields "<div style="background-color: yellow; ">hello</div><div style="background-color: yellow; ">world</div>"
-PASS unlink on all of "hello<a href="http://webkit.org/" style="background-color: yellow;"><div>world</div></a>WebKit" yields "hello<div style="background-color: yellow; ">world</div><span style="background-color: yellow;">WebKit</span>"
-PASS unlink on last two words of "<a href="http://webkit.org/" style="font-weight: bold;"><div>hello</div><div>world WebKit</div></a>" yields "<a href="http://webkit.org/"><div style="font-weight: bold; ">hello</div></a><div style="font-weight: bold; ">world WebKit</div>"
-PASS unlink on last word of "<a href="http://webkit.org/" style="font-weight: bold;"><div style="font-weight: normal;">hello</div><div>world</div></a>" yields "<a href="http://webkit.org/"><div style="font-weight: normal; ">hello</div></a><div style="font-weight: bold; ">world</div>"
+PASS unlink on last two words of "hello <a href="http://webkit.org/" style="font-size: large;">world <span style="font-size: small;">WebKit</span> rocks</a>" yields "hello <a href="http://webkit.org/"><font size="4">world </font></a><span style="font-size: small;">WebKit</span><font size="4"> rocks</font>"
+PASS unlink on first two words of "hello <a href="http://webkit.org/" style="font-style: italic;"><b>world</b> WebKit</a>" yields "hello <b style="font-style: italic;">world</b><a href="http://webkit.org/"><i> WebKit</i></a>"
+PASS unlink on all of "<a href="http://webkit.org/" style="background-color: yellow;"><div>hello</div><div>world</div></a>" yields "<div style="background-color: yellow;">hello</div><div style="background-color: yellow;">world</div>"
+PASS unlink on all of "hello<a href="http://webkit.org/" style="background-color: yellow;"><div>world</div></a>WebKit" yields "hello<div style="background-color: yellow;">world</div><span style="background-color: yellow;">WebKit</span>"
+PASS unlink on last two words of "<a href="http://webkit.org/" style="font-weight: bold;"><div>hello</div><div>world WebKit</div></a>" yields "<a href="http://webkit.org/"><div style="font-weight: bold;">hello</div></a><div style="font-weight: bold;">world WebKit</div>"
+PASS unlink on last word of "<a href="http://webkit.org/" style="font-weight: bold;"><div style="font-weight: normal;">hello</div><div>world</div></a>" yields "<a href="http://webkit.org/"><div style="font-weight: normal;">hello</div></a><div style="font-weight: bold;">world</div>"
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 32be72d..a7eac41 100644 (file)
@@ -1,7 +1,7 @@
 Test to make sure that pasting text with a font size into a quirks mode document that is zoomed does not alter the font size.
 
 Paste Here:This font is size 16px.
-Paste Here:<span style="font-size: 16px; " class="Apple-style-span">This font is size 16px.</span>
+Paste Here:<span style="font-size: 16px;" class="Apple-style-span">This font is size 16px.</span>
 document.compatMode: BackCompat
 PASS
 
index bcb1efe..4030870 100644 (file)
@@ -1 +1 @@
-<span style="background-color: rgb(187, 187, 187); ">This tests to make sure that we wrap copied markup in a div to hold a fully selected body's attributes and style when the that body has a background-color. If you copy and paste this text into Mail, it should have a grey background.</span>
+<span style="background-color: rgb(187, 187, 187);">This tests to make sure that we wrap copied markup in a div to hold a fully selected body's attributes and style when the that body has a background-color. If you copy and paste this text into Mail, it should have a grey background.</span>
index a762a72..90085db 100644 (file)
@@ -1,3 +1,3 @@
 This tests to see that tabs are put into tab spans when they are copied individually. The pasted tab should be inside of a tab span, not a style span. To run the test manually, paste and then inspect the editable region, and ensure that there is a tab span at the beginning of the editable div.
 
-<span class="Apple-tab-span" style="white-space: pre; ">       </span><span class="Apple-tab-span" style="white-space:pre;">   </span>xxx
+<span class="Apple-tab-span" style="white-space: pre;">        </span><span class="Apple-tab-span" style="white-space:pre;">   </span>xxx
index ab4fa80..86c704e 100644 (file)
@@ -1,3 +1,3 @@
 This tests for a bug where copying content from a document in quirksmode and pasting it would produce overlapping text because of a height: 1%; overflow: visible; rule. To run manually, paste into a document not in quirksmode. The paragraphs should not overlap. When you inspect the source, the paragraphs should have pixel values for the height property.
 
-<p style="height: 54px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 54px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 54px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p>
+<p style="height: 54px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 54px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 54px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p>
index 2a8b11a..04b3208 100644 (file)
@@ -27,7 +27,7 @@ If there are NULL characters in text nodes, they should not be copied to the cli
 |     id="source"
 |     "Copy paste me"
 |   <span>
-|     style="color: green; "
+|     style="color: green;"
 |     "green"
 |   "Copy paste me"
 | "
index fc04a9e..77c0ca1 100644 (file)
@@ -26,7 +26,7 @@ second test - after:
 |   <div>
 |     "1234שדגכ:"
 |   <div>
-|     style="direction: rtl; "
+|     style="direction: rtl;"
 |     "1234שדגכ:<#selection-caret>"
 | "
 "
index 8ea5bc1..ec3bf37 100644 (file)
@@ -56,7 +56,7 @@ Markup after:
 |   style="background-color: rgb(255, 0, 0);"
 |   "Red background"
 | <span>
-|   style="background-color: rgb(255, 0, 0); "
+|   style="background-color: rgb(255, 0, 0);"
 |   "Red background"
 | <div>
 |   id="test2"
@@ -64,7 +64,7 @@ Markup after:
 |     style="background-color: green;"
 |     "Green background"
 |   <span>
-|     style="background-color: rgb(0, 128, 0); "
+|     style="background-color: rgb(0, 128, 0);"
 |     "Green background"
 | "
 "
index 08920a3..f21d66a 100644 (file)
@@ -20,6 +20,6 @@ Testing if DataTransferItems can be accessed outside an event handler...
 DataTransferItem accessed outside event handler!
 copy: items[0] value: Hello World!
 copy: items[1] value: <b>Hello World!
-paste: items[0] value: <span style="color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">This file tests the basic functionality and properties of DataTransferItems. This test requires DRT.</span>
+paste: items[0] value: <span style="color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none;">This file tests the basic functionality and properties of DataTransferItems. This test requires DRT.</span>
 paste: items[1] value: This file tests the basic functionality and properties of DataTransferItems. This test requires DRT.
 
index 784a36d..b55b21b 100644 (file)
@@ -23,7 +23,7 @@ after:
 | "
 "
 | <span>
-|   style="display: block; "
+|   style="display: block;"
 |   <b>
 |     "This is a paragraph."
 | <span>
index 0df98b6..13a4d20 100644 (file)
@@ -3,5 +3,5 @@ This test verifies that WebKit does not erroneously clone nodes hierarchy when c
 
 You should not see any borders:
 | <span>
-|   style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 0); "
+|   style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 0);"
 |   "Hello<#selection-caret>"
index daf8555..1541747 100644 (file)
@@ -3,7 +3,7 @@
 This test verifies that WebKit does not erroneously clone nodes hierarchy when copying text with background color.
 To manually this test, select the text inside the div with the border, cut and paste it back. You should not see an additional red border.
 <div style="border: 2px solid red">
-<div id="test"><span style="background-color: rgb(187, 187, 187); ">Select this text</span><br></div>
+<div id="test"><span style="background-color: rgb(187, 187, 187);">Select this text</span><br></div>
 </div>
 </div>
 
index 41bcc56..8de3641 100644 (file)
@@ -11,7 +11,7 @@ before:
 after:
 | <a>
 |   href="http://webkit.org/"
-|   style="color: orange; "
+|   style="color: orange;"
 |   target="_blank"
 |   title="some title"
 |   "<#selection-anchor>drag me<#selection-focus>"
index 69a95d5..8d142d8 100644 (file)
@@ -1,5 +1,5 @@
 CONSOLE MESSAGE: line 21: text/plain: This test verifies that we can get text/html from the clipboard during an onpaste event. 
-CONSOLE MESSAGE: line 23: text/html: <span style="color: rgb(0, 0, 0);  font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">This test verifies that we can get text/html from the clipboard during an onpaste event.<span class="Apple-converted-space"> </span></span>
+CONSOLE MESSAGE: line 23: text/html: <span style="color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none;">This test verifies that we can get text/html from the clipboard during an onpaste event.<span class="Apple-converted-space"> </span></span>
 This test verifies that we can get text/html from the clipboard during an onpaste event. This test requires DRT.
 Paste content in this div.This test verifies that we can get text/html from the clipboard during an onpaste event. 
 PASS
index 455c751..044a4ac 100644 (file)
@@ -13,7 +13,7 @@ function removeFontName(text)
 {
     if (!text)
         return text;
-    return text.replace(/font-family: [^;]+;/g, "");
+    return text.replace(/font-family: [^;]+;\s*/g, "");
 }
 
 function paste(ev)
index cf54ca0..59f5581 100644 (file)
@@ -52,7 +52,7 @@ Actual result:
 |   <li>
 |     "A"
 |   <div>
-|     style="text-align: start; "
+|     style="text-align: start;"
 |     <ul>
 |       <li>
 |         <a>
index 21e85b5..53df6e5 100644 (file)
@@ -7,10 +7,10 @@ PASS confirmedMarkup is 'Hello'
 PASS confirmedMarkup is '<b><i>Hello</i></b>'
 PASS confirmedMarkup is '<div style="text-align: center;"><b>Hello</b></div>'
 PASS confirmedMarkup is '<div><b><i>hello</i></b></div><div><b><i>world</i></b></div>'
-PASS confirmedMarkup is '<b><i><span style="font-weight: normal; "><b><i>hello1</i></b><b><i>&nbsp;hello2</i></b></span></i></b>'
-FAIL confirmedMarkup should be <i style="margin: 10px; ">hello</i></b></i>. Was <i style="margin: 10px; "><b><i style="margin: 10px; ">hello</i></b></i>.
+PASS confirmedMarkup is '<b><i><span style="font-weight: normal;"><b><i>hello1</i></b><b><i>&nbsp;hello2</i></b></span></i></b>'
+FAIL confirmedMarkup should be <i style="margin: 10px;">hello</i></b></i>. Was <i style="margin: 10px;"><b><i style="margin: 10px;">hello</i></b></i>.
 PASS confirmedMarkup is '<b><i>Hello&nbsp;world</i></b>'
-PASS confirmedMarkup is '<b><i><span style="font-weight: normal; ">plain text<b><i>bold italic text</i></b></span></i></b>'
+PASS confirmedMarkup is '<b><i><span style="font-weight: normal;">plain text<b><i>bold italic text</i></b></span></i></b>'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 4dfb13b..7a1dc44 100644 (file)
@@ -42,11 +42,11 @@ testPaste("div", "<div><b><div><i>Hello</i></div></b></div>", "<b><i>Hello</i></
 testPaste("div", "<div><div style=\"text-align: center;\"><b>Hello</b></div></div>", "<div style=\"text-align: center;\"><b>Hello</b></div>");
 testPaste("div", "<div><b><i><span style=\"font-weight: normal\"><b><i>hello</i></b></span></i></b></div><div><b><i><span style=\"font-weight: normal\"><b><i>world</i></b></span></i></b></div>", 
           "<div><b><i>hello</i></b></div><div><b><i>world</i></b></div>");
-testPaste("div", "<div><b><i><span style=\"font-weight: normal; \"><b><i>hello1</i></b><b><i> hello2</i></b></span></i></b></div>", "<b><i><span style=\"font-weight: normal; \"><b><i>hello1</i></b><b><i>&nbsp;hello2</i></b></span></i></b>");
+testPaste("div", "<div><b><i><span style=\"font-weight: normal;\"><b><i>hello1</i></b><b><i> hello2</i></b></span></i></b></div>", "<b><i><span style=\"font-weight: normal;\"><b><i>hello1</i></b><b><i>&nbsp;hello2</i></b></span></i></b>");
 testPaste("div", "<i style=\"margin: 10px;\"><b><i style=\"margin: 10px;\">hello</i></b></i>",
-          "<i style=\"margin: 10px; \">hello</i></b></i>");
+          "<i style=\"margin: 10px;\">hello</i></b></i>");
 testPaste("div", "<div><b><i><span style=\"font-weight: normal\"><b><i>Hello <!-- comment -->world</i></b></span></i></b></div>", "<b><i>Hello&nbsp;world</i></b>");
-testPaste("div", "<div><b><i><span style=\"font-weight: normal\">plain text<b><i>bold italic text</i></b></span></i></b></div>", "<b><i><span style=\"font-weight: normal; \">plain text<b><i>bold italic text</i></b></span></i></b>");
+testPaste("div", "<div><b><i><span style=\"font-weight: normal\">plain text<b><i>bold italic text</i></b></span></i></b></div>", "<b><i><span style=\"font-weight: normal;\">plain text<b><i>bold italic text</i></b></span></i></b>");
 
 root.style.display = "none";
 
index 30965f7..7d22e93 100644 (file)
@@ -6,6 +6,6 @@ one: <b>one</b>
 two: <span style="background-color: green">two</span>
 three: three
 one: <b>one</b>
-two: <span style="background-color: green; ">two</span>
+two: <span style="background-color: green;">two</span>
 four: <span style="background-color: orange"><i>four</i></span>
 i love counting, counting to the number four: i love counting, counting to the number four
index 1502f5c..e66c779 100644 (file)
@@ -8,12 +8,12 @@ CNN Hello 
 This is a form
 
 <button id="button1" onclick="sayHello()" ondblclick="sayHello()" style="width: 100px;">Hello</button>
-<button id="button1" style="width: 100px; ">Hello</button>
+<button id="button1" style="width: 100px;">Hello</button>
 <a id="anchor1" href="http://www.cnn.com/">CNN</a>
 <a id="anchor1" href="http://www.cnn.com/">CNN</a>
 <a id="anchor2" href="javascript:sayHello()">Hello</a>
 <a id="anchor2" href="">Hello</a>
 <iframe id="iframe1" src="javascript:var x = 1;" style="width: 200px; height: 100px; background-color:#cee;"></iframe>
-<iframe id="iframe1" src="" style="width: 200px; height: 100px; background-color: rgb(204, 238, 238); "></iframe>
+<iframe id="iframe1" src="" style="width: 200px; height: 100px; background-color: rgb(204, 238, 238);"></iframe>
 <form id="form1" action="javascript:sayHello()" formaction="javascript:sayHello()" style="width: 200px; height: 150px; background-color:#cee;">This is a form<br><img src="../resources/abe.png"></form>
-<form id="form1" action="" formaction="" style="width: 200px; height: 150px; background-color: rgb(204, 238, 238); ">This is a form<br><img src="../resources/abe.png"></form>
+<form id="form1" action="" formaction="" style="width: 200px; height: 150px; background-color: rgb(204, 238, 238);">This is a form<br><img src="../resources/abe.png"></form>
index bd8922a..bb8de74 100644 (file)
@@ -57,7 +57,7 @@ FRAME 0:
 Pasted content:
 | <button>
 |   id="button1"
-|   style="width: 100px; "
+|   style="width: 100px;"
 |   "Hello"
 | <a>
 |   href="http://www.bing.com/search?q=cnn"
@@ -70,12 +70,12 @@ Pasted content:
 | <iframe>
 |   id="iframe1"
 |   src=""
-|   style="width: 200px; height: 100px; background-color: rgb(204, 238, 238); "
+|   style="width: 200px; height: 100px; background-color: rgb(204, 238, 238);"
 | <form>
 |   action=""
 |   formaction=""
 |   id="form1"
-|   style="width: 200px; height: 150px; background-color: rgb(204, 238, 238); "
+|   style="width: 200px; height: 150px; background-color: rgb(204, 238, 238);"
 |   "This is a form<#selection-caret>"
 
 FRAME 0:
index 104b883..9637765 100644 (file)
@@ -15,4 +15,4 @@ Problem: copy/pasting some HTML including tables can give rise to a <div> elemen
 abcdef
 foo    bar
 ghijk
-<div id="test" class="editing"> <div>abcdef<div style="text-align: center; "><table><tbody><tr><td>foo</td><td>bar</td></tr></tbody></table>ghijk</div> </div> </div>
+<div id="test" class="editing"> <div>abcdef<div style="text-align: center;"><table><tbody><tr><td>foo</td><td>bar</td></tr></tbody></table>ghijk</div> </div> </div>
index b1ad2cd..7df4ab7 100644 (file)
@@ -10,6 +10,6 @@ After paste:
 | <b>
 |   style="border: solid 5px blue;padding: 5px;"
 |   <i>
-|     style="font-weight: normal; "
+|     style="font-weight: normal;"
 |     "hello<#selection-caret>"
 |   <br>
index 4da7971..811aa53 100644 (file)
@@ -8,6 +8,6 @@ Before copy-paste:
 
 After copy-paste:
 | <b>
-|   style="font-weight: normal; "
+|   style="font-weight: normal;"
 |   "hello world<#selection-caret>"
 | <br>
index 567ef2b..1120e47 100644 (file)
@@ -1,7 +1,7 @@
 This tests pasting content with redundant inline style.
 You should not see any inline styles other than font-weight: bold and there should be exactly one span around WebKit.
 | <em>
-|   style="font-weight: bold; "
+|   style="font-weight: bold;"
 |   "hello world"
 | <br>
 | <span>
index 6a3c65b..8af65f7 100644 (file)
@@ -1,5 +1,5 @@
 This test for a bug copy/pasting underlined text. The color of the underline should be the color of the element that has the text-decoration property.
 | <span>
-|   style="color: rgb(255, 0, 0); text-decoration: underline; "
+|   style="color: rgb(255, 0, 0); text-decoration: underline;"
 |   "This should be underlined.<#selection-caret>"
 | <br>
index 0876bea..0483d63 100644 (file)
@@ -30,11 +30,11 @@ Pasted:
 |   title="none"
 |   <span>
 |     class="red"
-|     style="font-size: 1em; font-weight: bold; "
+|     style="font-size: 1em; font-weight: bold;"
 |     title="font-size: 1em; font-weight: bold;"
 |     "world"
 |   " "
 |   <em>
-|     style="font-style: normal; font-weight: bold; color: blue; "
+|     style="font-style: normal; font-weight: bold; color: blue;"
 |     title="font-style: normal; font-weight: bold; color: blue;"
 |     "WebKit<#selection-caret>"
index 7ce1f1a..b56eb73 100644 (file)
@@ -30,7 +30,7 @@ After paste:
 |   id="test"
 |   "foo"
 |   <div>
-|     style="color: rgb(255, 0, 0); "
+|     style="color: rgb(255, 0, 0);"
 |     "bar<#selection-caret>"
 |   <div>
 |     style="color: rgb(255, 0, 0);"
index a59a54c..6291a8e 100644 (file)
@@ -3,6 +3,6 @@ This tests copy.  Non-inheritable styles should be brought down from stylesheets
 | <div>
 |   class="class"
 |   id="id"
-|   style="border: 1px solid blue; "
+|   style="border: 1px solid blue;"
 |   "This should have blue border when its pasted."
 | "This shouldn't have a border.<#selection-caret>"
index e35a145..d44fad5 100644 (file)
@@ -7,9 +7,9 @@ Font size
 PASS fontsize 2 on all of "hello world" yields "<font size="2">hello world</font>"
 PASS fontsize 4 on all of "hello world" yields "<font size="4">hello world</font>"
 PASS fontsize 5 on first word of "hello world" yields "<font size="5">hello</font> world"
-PASS fontsize 3 on first word of "<font size="7">hello <div>world</div></font>" yields "hello <div style="font-size: -webkit-xxx-large; ">world</div>"
-PASS fontsize 3 on first word of "<font size="7"><div>hello</div><div>world</div></font>" yields "<div>hello</div><div style="font-size: -webkit-xxx-large; ">world</div>"
-PASS fontsize 3 on second word of "<font size="7"><div>hello</div>world</font>" yields "<div style="font-size: -webkit-xxx-large; ">hello</div>world"
+PASS fontsize 3 on first word of "<font size="7">hello <div>world</div></font>" yields "hello <div style="font-size: -webkit-xxx-large;">world</div>"
+PASS fontsize 3 on first word of "<font size="7"><div>hello</div><div>world</div></font>" yields "<div>hello</div><div style="font-size: -webkit-xxx-large;">world</div>"
+PASS fontsize 3 on second word of "<font size="7"><div>hello</div>world</font>" yields "<div style="font-size: -webkit-xxx-large;">hello</div>world"
 PASS fontsize 7 on all of "<font size="7"><div>hello</div>world</font>" yields "<font size="7"><div>hello</div>world</font>"
 PASS fontsize 7 on all of "<font size="3"><div>hello</div>world</font>" yields "<div><font size="7">hello</font></div><font size="7">world</font>"
 PASS fontsize 6 on all of "<font size="7"><div>hello</div>world</font>" yields "<div><font size="6">hello</font></div><font size="6">world</font>"
@@ -30,7 +30,7 @@ PASS fontsize 1 on all of "<font size="3"><div>hello</div>world</font>" yields "
 Font family
 PASS fontname Arial on all of "hello world" yields "<font face="Arial">hello world</font>"
 PASS fontname Arial on first word of "<font face="sans-serif">hello world</font>" yields "<font face="Arial">hello</font><font face="sans-serif"> world</font>"
-PASS fontname Arial on first word of "<font face="sans-serif">hello<div>world</div></font>" yields "<font face="Arial">hello</font><div style="font-family: sans-serif; ">world</div>"
+PASS fontname Arial on first word of "<font face="sans-serif">hello<div>world</div></font>" yields "<font face="Arial">hello</font><div style="font-family: sans-serif;">world</div>"
 PASS fontname Arial on second word of "<font face="sans-serif">hello<div>world</div></font>" yields "<font face="sans-serif">hello</font><div><font face="Arial">world</font></div>"
 PASS fontname Sans-Serif on all of "<font face="sans-serif"><div>hello</div><div>world</div></font>" yields "<font face="sans-serif"><div>hello</div><div>world</div></font>"
 PASS fontname Arial on all of "<font face="sans-serif"><div>hello</div><div>world</div></font>" yields "<div><font face="Arial">hello</font></div><div><font face="Arial">world</font></div>"
@@ -38,7 +38,7 @@ PASS fontname Arial on all of "<font face="sans-serif"><div>hello</div><div>worl
 Font family (with CSS)
 PASS fontname Arial on all of "hello world" yields "<span style="font-family: Arial;">hello world</span>"
 PASS fontname Arial on first word of "<font face="sans-serif">hello world</font>" yields "<span style="font-family: Arial;">hello</span><font face="sans-serif"> world</font>"
-PASS fontname Arial on first word of "<font face="sans-serif">hello<div>world</div></font>" yields "<span style="font-family: Arial;">hello</span><div style="font-family: sans-serif; ">world</div>"
+PASS fontname Arial on first word of "<font face="sans-serif">hello<div>world</div></font>" yields "<span style="font-family: Arial;">hello</span><div style="font-family: sans-serif;">world</div>"
 PASS fontname Arial on second word of "<font face="sans-serif">hello<div>world</div></font>" yields "<span style="font-family: sans-serif;">hello</span><div><span style="font-family: Arial;">world</span></div>"
 PASS fontname Sans-Serif on all of "<font face="sans-serif"><div>hello</div><div>world</div></font>" yields "<font face="sans-serif"><div>hello</div><div>world</div></font>"
 PASS fontname Arial on all of "<font face="sans-serif"><div>hello</div><div>world</div></font>" yields "<div><span style="font-family: Arial;">hello</span></div><div><span style="font-family: Arial;">world</span></div>"
index e97e067..ebe1255 100644 (file)
@@ -4,21 +4,21 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS bold on first word of <b><ul><li><b>a</b></li></ul></b> yields <ul><li>a</li></ul>
-PASS bold on first word of <b><ul><li>hello</li><li>world</li></ul></b> yields <ul><li>hello</li><li style="font-weight: bold; ">world</li></ul>
-PASS bold on last word of <ul><li>hello</li><li style="font-weight: bold; ">world</li></ul> yields <ul><li>hello</li><li>world</li></ul>
-PASS bold on first word of <b><ul><li>hello world</li><li>webkit</li></ul></b> yields <ul><li>hello<b> world</b></li><li style="font-weight: bold; ">webkit</li></ul>
+PASS bold on first word of <b><ul><li>hello</li><li>world</li></ul></b> yields <ul><li>hello</li><li style="font-weight: bold;">world</li></ul>
+PASS bold on last word of <ul><li>hello</li><li style="font-weight: bold;">world</li></ul> yields <ul><li>hello</li><li>world</li></ul>
+PASS bold on first word of <b><ul><li>hello world</li><li>webkit</li></ul></b> yields <ul><li>hello<b> world</b></li><li style="font-weight: bold;">webkit</li></ul>
 PASS italic on first word of <i><ul><li><i>a</i></li></ul></i> yields <ul><li>a</li></ul>
-PASS italic on first word of <i><ul><li>hello</li><li>world</li></ul></i> yields <ul><li>hello</li><li style="font-style: italic; ">world</li></ul>
-PASS italic on last word of <ul><li>hello</li><li style="font-style: italic; ">world</li></ul> yields <ul><li>hello</li><li>world</li></ul>
-PASS italic on first word of <i><ul><li>hello world</li><li>webkit</li></ul></i> yields <ul><li>hello<i> world</i></li><li style="font-style: italic; ">webkit</li></ul>
+PASS italic on first word of <i><ul><li>hello</li><li>world</li></ul></i> yields <ul><li>hello</li><li style="font-style: italic;">world</li></ul>
+PASS italic on last word of <ul><li>hello</li><li style="font-style: italic;">world</li></ul> yields <ul><li>hello</li><li>world</li></ul>
+PASS italic on first word of <i><ul><li>hello world</li><li>webkit</li></ul></i> yields <ul><li>hello<i> world</i></li><li style="font-style: italic;">webkit</li></ul>
 PASS underline on first word of <u><ul><li><u>a</u></li></ul></u> yields <ul><li>a</li></ul>
-PASS underline on first word of <u><ul><li>hello</li><li>world</li></ul></u> yields <ul><li>hello</li><li style="text-decoration: underline; ">world</li></ul>
-PASS underline on last word of <ul><li>hello</li><li style="text-decoration: underline; ">world</li></ul> yields <ul><li>hello</li><li>world</li></ul>
-PASS underline on first word of <u><ul><li>hello world</li><li>webkit</li></ul></u> yields <ul><li>hello<u> world</u></li><li style="text-decoration: underline; ">webkit</li></ul>
+PASS underline on first word of <u><ul><li>hello</li><li>world</li></ul></u> yields <ul><li>hello</li><li style="text-decoration: underline;">world</li></ul>
+PASS underline on last word of <ul><li>hello</li><li style="text-decoration: underline;">world</li></ul> yields <ul><li>hello</li><li>world</li></ul>
+PASS underline on first word of <u><ul><li>hello world</li><li>webkit</li></ul></u> yields <ul><li>hello<u> world</u></li><li style="text-decoration: underline;">webkit</li></ul>
 PASS strikethrough on first word of <strike><ul><li><strike>a</strike></li></ul></strike> yields <ul><li>a</li></ul>
-PASS strikethrough on first word of <strike><ul><li>hello</li><li>world</li></ul></strike> yields <ul><li>hello</li><li style="text-decoration: line-through; ">world</li></ul>
-PASS strikethrough on last word of <ul><li>hello</li><li style="text-decoration: line-through; ">world</li></ul> yields <ul><li>hello</li><li>world</li></ul>
-PASS strikethrough on first word of <strike><ul><li>hello world</li><li>webkit</li></ul></strike> yields <ul><li>hello<strike> world</strike></li><li style="text-decoration: line-through; ">webkit</li></ul>
+PASS strikethrough on first word of <strike><ul><li>hello</li><li>world</li></ul></strike> yields <ul><li>hello</li><li style="text-decoration: line-through;">world</li></ul>
+PASS strikethrough on last word of <ul><li>hello</li><li style="text-decoration: line-through;">world</li></ul> yields <ul><li>hello</li><li>world</li></ul>
+PASS strikethrough on first word of <strike><ul><li>hello world</li><li>webkit</li></ul></strike> yields <ul><li>hello<strike> world</strike></li><li style="text-decoration: line-through;">webkit</li></ul>
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 6cc09ad..be06044 100644 (file)
@@ -5,13 +5,13 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 PASS bold on first word of <b><div>hello</div> world</b> yields <div>hello</div><b> world</b>
 PASS bold on first word of <b><div>hello</div>world</b> yields <div>hello</div><b>world</b>
-PASS bold on first word of <b><div>hello</div><em>world</em></b> yields <div>hello</div><em style="font-weight: bold; ">world</em>
+PASS bold on first word of <b><div>hello</div><em>world</em></b> yields <div>hello</div><em style="font-weight: bold;">world</em>
 PASS bold on second word of <b>hello <div>world</div></b> yields <b>hello </b><div>world</div>
-PASS bold on second word of <b><em>hello</em> <div>world</div></b> yields <em style="font-weight: bold; ">hello</em> <div>world</div>
+PASS bold on second word of <b><em>hello</em> <div>world</div></b> yields <em style="font-weight: bold;">hello</em> <div>world</div>
 PASS bold on all of <b> <div>text</div> </b> yields  <div>text</div> 
 PASS bold on all of <b><strike><div>text</div></strike></b> yields <strike><div>text</div></strike>
-PASS bold on first word of <b><div>hello</div><div>world</div></b> yields <div>hello</div><div style="font-weight: bold; ">world</div>
-PASS bold on first word of <b><div>hello</div><div style="font-weight: normal;">world</div>webkit</b> yields <div>hello</div><div style="font-weight: normal; ">world</div><b>webkit</b>
+PASS bold on first word of <b><div>hello</div><div>world</div></b> yields <div>hello</div><div style="font-weight: bold;">world</div>
+PASS bold on first word of <b><div>hello</div><div style="font-weight: normal;">world</div>webkit</b> yields <div>hello</div><div style="font-weight: normal;">world</div><b>webkit</b>
 PASS bold on second word of <b style="font-style: italic;">hello world</b> yields <b style="font-style: italic;">hello</b><span style="font-style: italic;"> world</span>
 PASS underline on second word of <u>hello <b>world</b> webkit</u> yields <u>hello</u> <b>world</b><u> webkit</u>
 PASS underline on last two words of <u>hello <b>world</b> webkit</u> yields <u>hello </u><b>world</b> webkit
@@ -23,7 +23,7 @@ PASS underline on second word of <u><strike>hello world webkit</strike></u> yiel
 PASS underline on second word of <u><strike>hello world</strike> webkit</u> yields <strike><u>hello</u> world</strike><u> webkit</u>
 PASS underline on second word of <u>hello <em><code>world webkit</code></em> rocks</u> yields <u>hello</u> <em><code>world<u> webkit</u></code></em><u> rocks</u>
 PASS strikeThrough on all of <s style="color: blue;">hello world</strike> yields <span style="color: blue;">hello world</span>
-PASS strikeThrough on first word of <s style="color: blue;"><div>hello</div> <b>world</b> webkit</strike> yields <span style="color: blue;"><div>hello</div> <b style="text-decoration: line-through; ">world</b><strike> webkit</strike></span>
+PASS strikeThrough on first word of <s style="color: blue;"><div>hello</div> <b>world</b> webkit</strike> yields <span style="color: blue;"><div>hello</div> <b style="text-decoration: line-through;">world</b><strike> webkit</strike></span>
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7833a0e..1f53f98 100644 (file)
@@ -5,23 +5,23 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 PASS bold converted <span style="font-weight: 900;"> <div>text</div> </span> to  <div>text</div> 
 PASS bold converted <span style="font-weight: 900;"><div>text</div></span> to <div>text</div>
-PASS bold converted <span style="font-weight: 900;"><div id="test">hello</div><div>world</div></span> to <div id="test">hello</div><div style="font-weight: 900; ">world</div>
+PASS bold converted <span style="font-weight: 900;"><div id="test">hello</div><div>world</div></span> to <div id="test">hello</div><div style="font-weight: 900;">world</div>
 PASS bold converted <div style="font-weight: bold;">hello<div id="test">world</div></div> to <div><b>hello</b><div id="test">world</div></div>
 PASS bold converted <span style="font-weight: bold;">hello<span id="test">world</div></div> to <b>hello</b><span id="test">world</span>
-PASS bold converted <span style="font-style: italic; font-weight: bold;">hello<span id="test">world</div></div> to <span style="font-style: italic; "><b>hello</b><span id="test">world</span></span>
-FAIL bold converted <span style="font-weight: bold;"><div id="test">hello</div><div style="font-weight: normal;"><div>world</div>webkit</div> to <div id="test">hello</div><div style="font-weight: normal; "><div>world</div>webkit</div>, expected <div id="test">hello</div><div>world</div>webkit
+PASS bold converted <span style="font-style: italic; font-weight: bold;">hello<span id="test">world</div></div> to <span style="font-style: italic;"><b>hello</b><span id="test">world</span></span>
+FAIL bold converted <span style="font-weight: bold;"><div id="test">hello</div><div style="font-weight: normal;"><div>world</div>webkit</div> to <div id="test">hello</div><div style="font-weight: normal;"><div>world</div>webkit</div>, expected <div id="test">hello</div><div>world</div>webkit
 PASS italic converted <span style="font-style: italic;"><div>hello</div></span> to <div>hello</div>
-PASS italic converted <span style="font-style: italic;"><div id="test">hello</div><span style="font-style: oblique;">world</span> to <div id="test">hello</div><span style="font-style: oblique; ">world</span>
-PASS italic converted <span style="font-style: italic; font-weight: bold;"><div>hello</div></span> to <span style="font-weight: bold; "><div>hello</div></span>
-PASS italic converted <span style="font-style: italic; text-decoration: line-through;"><div>hello</div></span> to <span style="text-decoration: line-through; "><div>hello</div></span>
-PASS italic converted <span style="font-style: italic;">hello<div id="test">world</div><blockquote>webkit</blockquote></span> to <i>hello</i><div id="test">world</div><blockquote style="font-style: italic; ">webkit</blockquote>
+PASS italic converted <span style="font-style: italic;"><div id="test">hello</div><span style="font-style: oblique;">world</span> to <div id="test">hello</div><span style="font-style: oblique;">world</span>
+PASS italic converted <span style="font-style: italic; font-weight: bold;"><div>hello</div></span> to <span style="font-weight: bold;"><div>hello</div></span>
+PASS italic converted <span style="font-style: italic; text-decoration: line-through;"><div>hello</div></span> to <span style="text-decoration: line-through;"><div>hello</div></span>
+PASS italic converted <span style="font-style: italic;">hello<div id="test">world</div><blockquote>webkit</blockquote></span> to <i>hello</i><div id="test">world</div><blockquote style="font-style: italic;">webkit</blockquote>
 PASS italic converted <span style="font-style: italic;">hello <span id="test">world</span> webkit</span> to <i>hello </i><span id="test">world</span><i> webkit</i>
 PASS underline converted <span style="text-decoration: underline;"><div id="test">hello</div>world</span> to <div id="test">hello</div><u>world</u>
-PASS underline converted <span style="text-decoration: underline;"><div id="test">hello</div><blockquote>world<br>webkit</blockquote></span> to <div id="test">hello</div><blockquote style="text-decoration: underline; ">world<br>webkit</blockquote>
+PASS underline converted <span style="text-decoration: underline;"><div id="test">hello</div><blockquote>world<br>webkit</blockquote></span> to <div id="test">hello</div><blockquote style="text-decoration: underline;">world<br>webkit</blockquote>
 PASS underline converted <span style="text-decoration: underline;">hello<div id="test">world</div>webkit</u> to <u>hello</u><div id="test">world</div><u>webkit</u>
-FAIL underline converted <div style="text-decoration: underline;"><div>hello</span></div><div id="test">webkit</div><span style="font-style: italic;">rocks</span> to <div><div style="text-decoration: underline; ">hello</div><div id="test">webkit</div><span style="text-decoration: underline; font-style: italic; ">rocks</span></div>, expected <div><div style="text-decoration: underline; ">hello</span></div><div id="test">webkit</div><u><span style="font-style: italic;">rocks</span></u></div>
-PASS underline converted <span style="text-decoration: underline;"><div style="text-decoration: line-through;">hello</div><div id="test">world</div></span> to <div style="text-decoration: underline line-through; ">hello</div><div id="test">world</div>
-PASS strikeThrough converted <span style="text-decoration: line-through;"><div id="test">hello</div><div style="text-decoration: underline;">world</div></span> to <div id="test">hello</div><div style="text-decoration: line-through underline; ">world</div>
+FAIL underline converted <div style="text-decoration: underline;"><div>hello</span></div><div id="test">webkit</div><span style="font-style: italic;">rocks</span> to <div><div style="text-decoration: underline;">hello</div><div id="test">webkit</div><span style="text-decoration: underline; font-style: italic;">rocks</span></div>, expected <div><div style="text-decoration: underline;">hello</span></div><div id="test">webkit</div><u><span style="font-style: italic;">rocks</span></u></div>
+PASS underline converted <span style="text-decoration: underline;"><div style="text-decoration: line-through;">hello</div><div id="test">world</div></span> to <div style="text-decoration: underline line-through;">hello</div><div id="test">world</div>
+PASS strikeThrough converted <span style="text-decoration: line-through;"><div id="test">hello</div><div style="text-decoration: underline;">world</div></span> to <div id="test">hello</div><div style="text-decoration: line-through underline;">world</div>
 PASS successfullyParsed is true
 
 TEST COMPLETE
index a44ca83..001b849 100644 (file)
@@ -55,9 +55,9 @@ styleWithCSS = false;
 testSingleToggle("fontsize", 2, selectAll, 'hello world', '<font size="2">hello world</font>');
 testSingleToggle("fontsize", 4, selectAll, 'hello world', '<font size="4">hello world</font>');
 testSingleToggle("fontsize", 5, selectFirstWord, 'hello world', '<font size="5">hello</font> world');
-testSingleToggle("fontsize", 3, selectFirstWord, '<font size="7">hello <div>world</div></font>', 'hello <div style="font-size: -webkit-xxx-large; ">world</div>');
-testSingleToggle("fontsize", 3, selectFirstWord, '<font size="7"><div>hello</div><div>world</div></font>', '<div>hello</div><div style="font-size: -webkit-xxx-large; ">world</div>');
-testSingleToggle("fontsize", 3, selectSecondWord, '<font size="7"><div>hello</div>world</font>', '<div style="font-size: -webkit-xxx-large; ">hello</div>world');
+testSingleToggle("fontsize", 3, selectFirstWord, '<font size="7">hello <div>world</div></font>', 'hello <div style="font-size: -webkit-xxx-large;">world</div>');
+testSingleToggle("fontsize", 3, selectFirstWord, '<font size="7"><div>hello</div><div>world</div></font>', '<div>hello</div><div style="font-size: -webkit-xxx-large;">world</div>');
+testSingleToggle("fontsize", 3, selectSecondWord, '<font size="7"><div>hello</div>world</font>', '<div style="font-size: -webkit-xxx-large;">hello</div>world');
 
 testSingleToggle("fontsize", 7, selectAll, '<font size="7"><div>hello</div>world</font>', '<font size="7"><div>hello</div>world</font>');
 testSingleToggle("fontsize", 7, selectAll, '<font size="3"><div>hello</div>world</font>', '<div><font size="7">hello</font></div><font size="7">world</font>');
@@ -83,7 +83,7 @@ debug("Font family");
 styleWithCSS = false;
 testSingleToggle("fontname", "Arial", selectAll, 'hello world', '<font face="Arial">hello world</font>');
 testSingleToggle("fontname", "Arial", selectFirstWord, '<font face="sans-serif">hello world</font>', '<font face="Arial">hello</font><font face="sans-serif"> world</font>');
-testSingleToggle("fontname", "Arial", selectFirstWord, '<font face="sans-serif">hello<div>world</div></font>', '<font face="Arial">hello</font><div style="font-family: sans-serif; ">world</div>');
+testSingleToggle("fontname", "Arial", selectFirstWord, '<font face="sans-serif">hello<div>world</div></font>', '<font face="Arial">hello</font><div style="font-family: sans-serif;">world</div>');
 testSingleToggle("fontname", "Arial", selectSecondWord, '<font face="sans-serif">hello<div>world</div></font>', '<font face="sans-serif">hello</font><div><font face="Arial">world</font></div>');
 testSingleToggle("fontname", "Sans-Serif", selectAll, '<font face="sans-serif"><div>hello</div><div>world</div></font>', '<font face="sans-serif"><div>hello</div><div>world</div></font>');
 testSingleToggle("fontname", "Arial", selectAll, '<font face="sans-serif"><div>hello</div><div>world</div></font>', '<div><font face="Arial">hello</font></div><div><font face="Arial">world</font></div>');
@@ -93,7 +93,7 @@ debug("Font family (with CSS)");
 styleWithCSS = true;
 testSingleToggle("fontname", "Arial", selectAll, 'hello world', '<span style="font-family: Arial;">hello world</span>');
 testSingleToggle("fontname", "Arial", selectFirstWord, '<font face="sans-serif">hello world</font>', '<span style="font-family: Arial;">hello</span><font face="sans-serif"> world</font>');
-testSingleToggle("fontname", "Arial", selectFirstWord, '<font face="sans-serif">hello<div>world</div></font>', '<span style="font-family: Arial;">hello</span><div style="font-family: sans-serif; ">world</div>');
+testSingleToggle("fontname", "Arial", selectFirstWord, '<font face="sans-serif">hello<div>world</div></font>', '<span style="font-family: Arial;">hello</span><div style="font-family: sans-serif;">world</div>');
 testSingleToggle("fontname", "Arial", selectSecondWord, '<font face="sans-serif">hello<div>world</div></font>', '<span style="font-family: sans-serif;">hello</span><div><span style="font-family: Arial;">world</span></div>');
 testSingleToggle("fontname", "Sans-Serif", selectAll, '<font face="sans-serif"><div>hello</div><div>world</div></font>', '<font face="sans-serif"><div>hello</div><div>world</div></font>');
 testSingleToggle("fontname", "Arial", selectAll, '<font face="sans-serif"><div>hello</div><div>world</div></font>', '<div><span style="font-family: Arial;">hello</span></div><div><span style="font-family: Arial;">world</span></div>');
index 9f91b96..cfe342f 100644 (file)
@@ -30,24 +30,24 @@ function selectLastWord(container) {
 }
 
 testSingleToggle("bold", selectFirstWord, '<b><ul><li><b>a</b></li></ul></b>', '<ul><li>a</li></ul>');
-testSingleToggle("bold", selectFirstWord, '<b><ul><li>hello</li><li>world</li></ul></b>', '<ul><li>hello</li><li style="font-weight: bold; ">world</li></ul>');
-testSingleToggle("bold", selectLastWord, '<ul><li>hello</li><li style="font-weight: bold; ">world</li></ul>', '<ul><li>hello</li><li>world</li></ul>');
-testSingleToggle("bold", selectFirstWord, '<b><ul><li>hello world</li><li>webkit</li></ul></b>', '<ul><li>hello<b> world</b></li><li style="font-weight: bold; ">webkit</li></ul>');
+testSingleToggle("bold", selectFirstWord, '<b><ul><li>hello</li><li>world</li></ul></b>', '<ul><li>hello</li><li style="font-weight: bold;">world</li></ul>');
+testSingleToggle("bold", selectLastWord, '<ul><li>hello</li><li style="font-weight: bold;">world</li></ul>', '<ul><li>hello</li><li>world</li></ul>');
+testSingleToggle("bold", selectFirstWord, '<b><ul><li>hello world</li><li>webkit</li></ul></b>', '<ul><li>hello<b> world</b></li><li style="font-weight: bold;">webkit</li></ul>');
 
 testSingleToggle("italic", selectFirstWord, '<i><ul><li><i>a</i></li></ul></i>', '<ul><li>a</li></ul>');
-testSingleToggle("italic", selectFirstWord, '<i><ul><li>hello</li><li>world</li></ul></i>', '<ul><li>hello</li><li style="font-style: italic; ">world</li></ul>');
-testSingleToggle("italic", selectLastWord, '<ul><li>hello</li><li style="font-style: italic; ">world</li></ul>', '<ul><li>hello</li><li>world</li></ul>');
-testSingleToggle("italic", selectFirstWord, '<i><ul><li>hello world</li><li>webkit</li></ul></i>', '<ul><li>hello<i> world</i></li><li style="font-style: italic; ">webkit</li></ul>');
+testSingleToggle("italic", selectFirstWord, '<i><ul><li>hello</li><li>world</li></ul></i>', '<ul><li>hello</li><li style="font-style: italic;">world</li></ul>');
+testSingleToggle("italic", selectLastWord, '<ul><li>hello</li><li style="font-style: italic;">world</li></ul>', '<ul><li>hello</li><li>world</li></ul>');
+testSingleToggle("italic", selectFirstWord, '<i><ul><li>hello world</li><li>webkit</li></ul></i>', '<ul><li>hello<i> world</i></li><li style="font-style: italic;">webkit</li></ul>');
 
 testSingleToggle("underline", selectFirstWord, '<u><ul><li><u>a</u></li></ul></u>', '<ul><li>a</li></ul>');
-testSingleToggle("underline", selectFirstWord, '<u><ul><li>hello</li><li>world</li></ul></u>', '<ul><li>hello</li><li style="text-decoration: underline; ">world</li></ul>');
-testSingleToggle("underline", selectLastWord, '<ul><li>hello</li><li style="text-decoration: underline; ">world</li></ul>', '<ul><li>hello</li><li>world</li></ul>');
-testSingleToggle("underline", selectFirstWord, '<u><ul><li>hello world</li><li>webkit</li></ul></u>', '<ul><li>hello<u> world</u></li><li style="text-decoration: underline; ">webkit</li></ul>');
+testSingleToggle("underline", selectFirstWord, '<u><ul><li>hello</li><li>world</li></ul></u>', '<ul><li>hello</li><li style="text-decoration: underline;">world</li></ul>');
+testSingleToggle("underline", selectLastWord, '<ul><li>hello</li><li style="text-decoration: underline;">world</li></ul>', '<ul><li>hello</li><li>world</li></ul>');
+testSingleToggle("underline", selectFirstWord, '<u><ul><li>hello world</li><li>webkit</li></ul></u>', '<ul><li>hello<u> world</u></li><li style="text-decoration: underline;">webkit</li></ul>');
 
 testSingleToggle("strikethrough", selectFirstWord, '<strike><ul><li><strike>a</strike></li></ul></strike>', '<ul><li>a</li></ul>');
-testSingleToggle("strikethrough", selectFirstWord, '<strike><ul><li>hello</li><li>world</li></ul></strike>', '<ul><li>hello</li><li style="text-decoration: line-through; ">world</li></ul>');
-testSingleToggle("strikethrough", selectLastWord, '<ul><li>hello</li><li style="text-decoration: line-through; ">world</li></ul>', '<ul><li>hello</li><li>world</li></ul>');
-testSingleToggle("strikethrough", selectFirstWord, '<strike><ul><li>hello world</li><li>webkit</li></ul></strike>', '<ul><li>hello<strike> world</strike></li><li style="text-decoration: line-through; ">webkit</li></ul>');
+testSingleToggle("strikethrough", selectFirstWord, '<strike><ul><li>hello</li><li>world</li></ul></strike>', '<ul><li>hello</li><li style="text-decoration: line-through;">world</li></ul>');
+testSingleToggle("strikethrough", selectLastWord, '<ul><li>hello</li><li style="text-decoration: line-through;">world</li></ul>', '<ul><li>hello</li><li>world</li></ul>');
+testSingleToggle("strikethrough", selectFirstWord, '<strike><ul><li>hello world</li><li>webkit</li></ul></strike>', '<ul><li>hello<strike> world</strike></li><li style="text-decoration: line-through;">webkit</li></ul>');
 
 document.body.removeChild(testContainer);
 
index 3969b90..0545283 100644 (file)
@@ -49,13 +49,13 @@ function selectLastTwoWords(container) {
 
 testSingleToggle("bold", selectFirstWord, '<b><div>hello</div> world</b>', '<div>hello</div><b> world</b>');
 testSingleToggle("bold", selectFirstWord, '<b><div>hello</div>world</b>', '<div>hello</div><b>world</b>');
-testSingleToggle("bold", selectFirstWord, '<b><div>hello</div><em>world</em></b>', '<div>hello</div><em style="font-weight: bold; ">world</em>');
+testSingleToggle("bold", selectFirstWord, '<b><div>hello</div><em>world</em></b>', '<div>hello</div><em style="font-weight: bold;">world</em>');
 testSingleToggle("bold", selectSecondWord, '<b>hello <div>world</div></b>', '<b>hello </b><div>world</div>');
-testSingleToggle("bold", selectSecondWord, '<b><em>hello</em> <div>world</div></b>', '<em style="font-weight: bold; ">hello</em> <div>world</div>');
+testSingleToggle("bold", selectSecondWord, '<b><em>hello</em> <div>world</div></b>', '<em style="font-weight: bold;">hello</em> <div>world</div>');
 testSingleToggle("bold", selectAll, '<b> <div>text</div> </b>', ' <div>text</div> ');
 testSingleToggle("bold", selectAll, '<b><strike><div>text</div></strike></b>', '<strike><div>text</div></strike>');
-testSingleToggle("bold", selectFirstWord, '<b><div>hello</div><div>world</div></b>', '<div>hello</div><div style="font-weight: bold; ">world</div>');
-testSingleToggle("bold", selectFirstWord, '<b><div>hello</div><div style="font-weight: normal;">world</div>webkit</b>', '<div>hello</div><div style="font-weight: normal; ">world</div><b>webkit</b>');
+testSingleToggle("bold", selectFirstWord, '<b><div>hello</div><div>world</div></b>', '<div>hello</div><div style="font-weight: bold;">world</div>');
+testSingleToggle("bold", selectFirstWord, '<b><div>hello</div><div style="font-weight: normal;">world</div>webkit</b>', '<div>hello</div><div style="font-weight: normal;">world</div><b>webkit</b>');
 testSingleToggle("bold", selectSecondWord, '<b style="font-style: italic;">hello world</b>', '<b style="font-style: italic;">hello</b><span style="font-style: italic;"> world</span>');
 
 testSingleToggle("underline", selectSecondWord, '<u>hello <b>world</b> webkit</u>', '<u>hello</u> <b>world</b><u> webkit</u>');
@@ -69,7 +69,7 @@ testSingleToggle("underline", selectSecondWord, '<u><strike>hello world</strike>
 testSingleToggle("underline", selectSecondWord, '<u>hello <em><code>world webkit</code></em> rocks</u>', '<u>hello</u> <em><code>world<u> webkit</u></code></em><u> rocks</u>');
 
 testSingleToggle("strikeThrough", selectAll, '<s style="color: blue;">hello world</strike>', '<span style="color: blue;">hello world</span>');
-testSingleToggle("strikeThrough", selectFirstWord, '<s style="color: blue;"><div>hello</div> <b>world</b> webkit</strike>', '<span style="color: blue;"><div>hello</div> <b style="text-decoration: line-through; ">world</b><strike> webkit</strike></span>');
+testSingleToggle("strikeThrough", selectFirstWord, '<s style="color: blue;"><div>hello</div> <b>world</b> webkit</strike>', '<span style="color: blue;"><div>hello</div> <b style="text-decoration: line-through;">world</b><strike> webkit</strike></span>');
 
 document.body.removeChild(testContainer);
 
index fd4e9d0..c4cbebc 100644 (file)
@@ -23,25 +23,25 @@ function testSingleToggle(toggleCommand, initialContents, expectedContents)
 
 testSingleToggle("bold", '<span style="font-weight: 900;"> <div>text</div> </span>', ' <div>text</div> ');
 testSingleToggle("bold", '<span style="font-weight: 900;"><div>text</div></span>', '<div>text</div>');
-testSingleToggle("bold", '<span style="font-weight: 900;"><div id="test">hello</div><div>world</div></span>', '<div id="test">hello</div><div style="font-weight: 900; ">world</div>');
+testSingleToggle("bold", '<span style="font-weight: 900;"><div id="test">hello</div><div>world</div></span>', '<div id="test">hello</div><div style="font-weight: 900;">world</div>');
 testSingleToggle("bold", '<div style="font-weight: bold;">hello<div id="test">world</div></div>', '<div><b>hello</b><div id="test">world</div></div>');
 testSingleToggle("bold", '<span style="font-weight: bold;">hello<span id="test">world</div></div>', '<b>hello</b><span id="test">world</span>');
-testSingleToggle("bold", '<span style="font-style: italic; font-weight: bold;">hello<span id="test">world</div></div>', '<span style="font-style: italic; "><b>hello</b><span id="test">world</span></span>');
+testSingleToggle("bold", '<span style="font-style: italic; font-weight: bold;">hello<span id="test">world</div></div>', '<span style="font-style: italic;"><b>hello</b><span id="test">world</span></span>');
 testSingleToggle("bold", '<span style="font-weight: bold;"><div id="test">hello</div><div style="font-weight: normal;"><div>world</div>webkit</div>', '<div id="test">hello</div><div>world</div>webkit');
 testSingleToggle("italic", '<span style="font-style: italic;"><div>hello</div></span>', '<div>hello</div>');
-testSingleToggle("italic", '<span style="font-style: italic;"><div id="test">hello</div><span style="font-style: oblique;">world</span>', '<div id="test">hello</div><span style="font-style: oblique; ">world</span>');
-testSingleToggle("italic", '<span style="font-style: italic; font-weight: bold;"><div>hello</div></span>', '<span style="font-weight: bold; "><div>hello</div></span>');
-testSingleToggle("italic", '<span style="font-style: italic; text-decoration: line-through;"><div>hello</div></span>', '<span style="text-decoration: line-through; "><div>hello</div></span>');
-testSingleToggle("italic", '<span style="font-style: italic;">hello<div id="test">world</div><blockquote>webkit</blockquote></span>', '<i>hello</i><div id="test">world</div><blockquote style="font-style: italic; ">webkit</blockquote>');
+testSingleToggle("italic", '<span style="font-style: italic;"><div id="test">hello</div><span style="font-style: oblique;">world</span>', '<div id="test">hello</div><span style="font-style: oblique;">world</span>');
+testSingleToggle("italic", '<span style="font-style: italic; font-weight: bold;"><div>hello</div></span>', '<span style="font-weight: bold;"><div>hello</div></span>');
+testSingleToggle("italic", '<span style="font-style: italic; text-decoration: line-through;"><div>hello</div></span>', '<span style="text-decoration: line-through;"><div>hello</div></span>');
+testSingleToggle("italic", '<span style="font-style: italic;">hello<div id="test">world</div><blockquote>webkit</blockquote></span>', '<i>hello</i><div id="test">world</div><blockquote style="font-style: italic;">webkit</blockquote>');
 testSingleToggle("italic", '<span style="font-style: italic;">hello <span id="test">world</span> webkit</span>', '<i>hello </i><span id="test">world</span><i> webkit</i>');
 testSingleToggle("underline", '<span style="text-decoration: underline;"><div id="test">hello</div>world</span>', '<div id="test">hello</div><u>world</u>');
-testSingleToggle("underline", '<span style="text-decoration: underline;"><div id="test">hello</div><blockquote>world<br>webkit</blockquote></span>', '<div id="test">hello</div><blockquote style="text-decoration: underline; ">world<br>webkit</blockquote>');
+testSingleToggle("underline", '<span style="text-decoration: underline;"><div id="test">hello</div><blockquote>world<br>webkit</blockquote></span>', '<div id="test">hello</div><blockquote style="text-decoration: underline;">world<br>webkit</blockquote>');
 testSingleToggle("underline", '<span style="text-decoration: underline;">hello<div id="test">world</div>webkit</u>', '<u>hello</u><div id="test">world</div><u>webkit</u>');
 testSingleToggle("underline",
     '<div style="text-decoration: underline;"><div>hello</span></div><div id="test">webkit</div><span style="font-style: italic;">rocks</span>',
-    '<div><div style="text-decoration: underline; ">hello</span></div><div id="test">webkit</div><u><span style="font-style: italic;">rocks</span></u></div>');
-testSingleToggle("underline", '<span style="text-decoration: underline;"><div style="text-decoration: line-through;">hello</div><div id="test">world</div></span>', '<div style="text-decoration: underline line-through; ">hello</div><div id="test">world</div>');
-testSingleToggle("strikeThrough", '<span style="text-decoration: line-through;"><div id="test">hello</div><div style="text-decoration: underline;">world</div></span>', '<div id="test">hello</div><div style="text-decoration: line-through underline; ">world</div>');
+    '<div><div style="text-decoration: underline;">hello</span></div><div id="test">webkit</div><u><span style="font-style: italic;">rocks</span></u></div>');
+testSingleToggle("underline", '<span style="text-decoration: underline;"><div style="text-decoration: line-through;">hello</div><div id="test">world</div></span>', '<div style="text-decoration: underline line-through;">hello</div><div id="test">world</div>');
+testSingleToggle("strikeThrough", '<span style="text-decoration: line-through;"><div id="test">hello</div><div style="text-decoration: underline;">world</div></span>', '<div id="test">hello</div><div style="text-decoration: line-through underline;">world</div>');
 
 document.body.removeChild(testContainer);
 
index c2bebf5..2c95bd6 100644 (file)
@@ -10,7 +10,7 @@ Unbolding should remove the CSS style and also remove the span:
 
 Undo should bring back both the span and style attribute so that "test" is once again bold:
 | <span>
-|   style="font-weight: 900; "
+|   style="font-weight: 900;"
 |   "<#selection-anchor>test<#selection-focus>"
 
 Redo should unbold "test" and there should be no span:
@@ -18,7 +18,7 @@ Redo should unbold "test" and there should be no span:
 
 Undo once more:
 | <span>
-|   style="font-weight: 900; "
+|   style="font-weight: 900;"
 |   "<#selection-anchor>test<#selection-focus>"
 
 Reset, and added id and title:
@@ -37,7 +37,7 @@ Unbolding should remove the CSS style but shouldn't remove the span:
 Undo should restore the style attribute and "test" should be bold:
 | <span>
 |   id="test_span"
-|   style="font-weight: 900; "
+|   style="font-weight: 900;"
 |   title="hello, world"
 |   "<#selection-anchor>test<#selection-focus>"
 
@@ -49,22 +49,22 @@ Redo should remove the style attribute again:
 
 Reset, and added color:blue:
 | <span>
-|   style="font-weight: 900; color: blue; "
+|   style="font-weight: 900; color: blue;"
 |   "<#selection-anchor>test<#selection-focus>"
 
 Unbolding should remove the font-weight but shouldn't remove the style attribute:
 | <span>
-|   style="color: blue; "
+|   style="color: blue;"
 |   "<#selection-anchor>test<#selection-focus>"
 
 Undo should reset the style attribute so that "test" is both bold and blue:
 | <span>
-|   style="color: blue; font-weight: 900; "
+|   style="color: blue; font-weight: 900;"
 |   "<#selection-anchor>test<#selection-focus>"
 
 Redo should only remove font-weight and leave "test" blue:
 | <span>
-|   style="color: blue; "
+|   style="color: blue;"
 |   "<#selection-anchor>test<#selection-focus>"
 
 Setting the forecolor to black should remove both the style attribute and the span:
@@ -72,5 +72,5 @@ Setting the forecolor to black should remove both the style attribute and the sp
 
 Undo should make "test" blue again:
 | <span>
-|   style="color: blue; "
+|   style="color: blue;"
 |   "<#selection-anchor>test<#selection-focus>"
index bcc4a0c..16bc24e 100644 (file)
@@ -1,7 +1,7 @@
-initial:<b style="font-style: italic; ">world</b>
-after removing bold:<span style="font-style: italic; ">world</span>
+initial:<b style="font-style: italic;">world</b>
+after removing bold:<span style="font-style: italic;">world</span>
 after removing italic:world
-after undo:<b style="font-style: italic; ">world</b>
+after undo:<b style="font-style: italic;">world</b>
 after redo:world
 PASS
 
index 4730837..ae04cc0 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <body>
-<div id="test" contenteditable><b style="font-style: italic; ">world</b></div>
+<div id="test" contenteditable><b style="font-style: italic;">world</b></div>
 <pre id="console">
 </pre>
 <script>
index 735c5a2..d3950ff 100644 (file)
@@ -47,69 +47,69 @@ run("t.style.backgroundPositionX = '5%';");
 shouldBe("t.style.backgroundPosition", "5%");
 shouldBe("t.style.backgroundPositionX", "5%");
 shouldBe("t.style.backgroundPositionY", "");
-shouldBe("t.style.cssText", "background-position-x: 5%; ");
-shouldBe("t.getAttribute('style')", "background-position-x: 5%; ");
+shouldBe("t.style.cssText", "background-position-x: 5%;");
+shouldBe("t.getAttribute('style')", "background-position-x: 5%;");
 
 run("t.style.backgroundPositionY = '5%';");
 shouldBe("t.style.backgroundPosition", "5% 5%");
 shouldBe("t.style.backgroundPositionX", "5%");
 shouldBe("t.style.backgroundPositionY", "5%");
-shouldBe("t.style.cssText", "background-position: 5% 5%; ");
-shouldBe("t.getAttribute('style')", "background-position: 5% 5%; ");
+shouldBe("t.style.cssText", "background-position: 5% 5%;");
+shouldBe("t.getAttribute('style')", "background-position: 5% 5%;");
 
 run("t.style.backgroundPosition = '10% 10%';");
 shouldBe("t.style.backgroundPosition", "10% 10%");
 shouldBe("t.style.backgroundPositionX", "10%");
 shouldBe("t.style.backgroundPositionY", "10%");
-shouldBe("t.style.cssText", "background-position: 10% 10%; ");
-shouldBe("t.getAttribute('style')", "background-position: 10% 10%; ");
+shouldBe("t.style.cssText", "background-position: 10% 10%;");
+shouldBe("t.getAttribute('style')", "background-position: 10% 10%;");
 
 run("t.style.backgroundPositionX = '20%';");
 shouldBe("t.style.backgroundPosition", "20% 10%");
 shouldBe("t.style.backgroundPositionX", "20%");
 shouldBe("t.style.backgroundPositionY", "10%");
-shouldBe("t.style.cssText", "background-position: 20% 10%; ");
-shouldBe("t.getAttribute('style')", "background-position: 20% 10%; ");
+shouldBe("t.style.cssText", "background-position: 20% 10%;");
+shouldBe("t.getAttribute('style')", "background-position: 20% 10%;");
 
 run("t.style.backgroundPositionY = '20%';");
 shouldBe("t.style.backgroundPosition", "20% 20%");
 shouldBe("t.style.backgroundPositionX", "20%");
 shouldBe("t.style.backgroundPositionY", "20%");
-shouldBe("t.style.cssText", "background-position: 20% 20%; ");
-shouldBe("t.getAttribute('style')", "background-position: 20% 20%; ");
+shouldBe("t.style.cssText", "background-position: 20% 20%;");
+shouldBe("t.getAttribute('style')", "background-position: 20% 20%;");
 
 run("t.setAttribute('style', 'background-position: 30% 30%');");
 shouldBe("t.style.backgroundPosition", "30% 30%");
 shouldBe("t.style.backgroundPositionX", "30%");
 shouldBe("t.style.backgroundPositionY", "30%");
-shouldBe("t.style.cssText", "background-position: 30% 30%; ");
+shouldBe("t.style.cssText", "background-position: 30% 30%;");
 shouldBe("t.getAttribute('style')", "background-position: 30% 30%");
 
 run("t.style.backgroundPositionX = '20%';");
 shouldBe("t.style.backgroundPosition", "20% 30%");
 shouldBe("t.style.backgroundPositionX", "20%");
 shouldBe("t.style.backgroundPositionY", "30%");
-shouldBe("t.style.cssText", "background-position: 20% 30%; ");
-shouldBe("t.getAttribute('style')", "background-position: 20% 30%; ");
+shouldBe("t.style.cssText", "background-position: 20% 30%;");
+shouldBe("t.getAttribute('style')", "background-position: 20% 30%;");
 
 run("t.style.backgroundPositionY = '20%';");
 shouldBe("t.style.backgroundPosition", "20% 20%");
 shouldBe("t.style.backgroundPositionX", "20%");
 shouldBe("t.style.backgroundPositionY", "20%");
-shouldBe("t.style.cssText", "background-position: 20% 20%; ");
-shouldBe("t.getAttribute('style')", "background-position: 20% 20%; ");
+shouldBe("t.style.cssText", "background-position: 20% 20%;");
+shouldBe("t.getAttribute('style')", "background-position: 20% 20%;");
 
 run("t.setAttribute('style', 'background-position: 60% 60% !important;');");
 shouldBe("t.style.backgroundPosition", "60% 60%");
 shouldBe("t.style.backgroundPositionX", "60%");
 shouldBe("t.style.backgroundPositionY", "60%");
-shouldBe("t.style.cssText", "background-position: 60% 60% !important; ");
+shouldBe("t.style.cssText", "background-position: 60% 60% !important;");
 
 run("t.setAttribute('style', 'background-position: 10px 15px, 20px 25px, 30px 35px');");
 shouldBe("t.style.backgroundPosition", "10px 15px, 20px 25px, 30px 35px");
 shouldBe("t.style.backgroundPositionX", "10px, 20px, 30px");
 shouldBe("t.style.backgroundPositionY", "15px, 25px, 35px");
-shouldBe("t.style.cssText", "background-position: 10px 15px, 20px 25px, 30px 35px; ");
+shouldBe("t.style.cssText", "background-position: 10px 15px, 20px 25px, 30px 35px;");
 
 run("t.setAttribute('style', 'background: url(about:blank) 80% 80%;');");
 run("t.style.backgroundPositionY = '50px'");
index 3ac23d2..9c5e64c 100644 (file)
@@ -3,11 +3,11 @@ Test the cssText output of counter-valued CSSPrimitiveValues
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS rules[2].style.cssText is "content: counter(section, decimal); "
-PASS rules[3].style.cssText is "content: counters(section, ':', decimal); "
-PASS rules[4].style.cssText is "content: counter(section, lower-roman); "
-PASS rules[5].style.cssText is "content: counters(section, ',', upper-roman); "
-PASS rules[6].style.cssText is "content: counter(section, none); "
+PASS rules[2].style.cssText is "content: counter(section, decimal);"
+PASS rules[3].style.cssText is "content: counters(section, ':', decimal);"
+PASS rules[4].style.cssText is "content: counter(section, lower-roman);"
+PASS rules[5].style.cssText is "content: counters(section, ',', upper-roman);"
+PASS rules[6].style.cssText is "content: counter(section, none);"
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 8e3c2cb..b2c1890 100644 (file)
@@ -29,11 +29,11 @@ h4:before {
 <script>
 description("Test the cssText output of counter-valued CSSPrimitiveValues");
 var rules = document.styleSheets[0].cssRules;
-shouldBeEqualToString("rules[2].style.cssText", "content: counter(section, decimal); ");
-shouldBeEqualToString("rules[3].style.cssText", "content: counters(section, ':', decimal); ");
-shouldBeEqualToString("rules[4].style.cssText", "content: counter(section, lower-roman); ");
-shouldBeEqualToString("rules[5].style.cssText", "content: counters(section, ',', upper-roman); ");
-shouldBeEqualToString("rules[6].style.cssText", "content: counter(section, none); ");
+shouldBeEqualToString("rules[2].style.cssText", "content: counter(section, decimal);");
+shouldBeEqualToString("rules[3].style.cssText", "content: counters(section, ':', decimal);");
+shouldBeEqualToString("rules[4].style.cssText", "content: counter(section, lower-roman);");
+shouldBeEqualToString("rules[5].style.cssText", "content: counters(section, ',', upper-roman);");
+shouldBeEqualToString("rules[6].style.cssText", "content: counter(section, none);");
 </script>
 <script src="../../js/resources/js-test-post.js"></script>
 </body>
index 6deaba0..aca9d46 100644 (file)
@@ -1,2 +1,2 @@
-CONSOLE MESSAGE: line 4: border-image-source: url(shadow-border.png); border-image-slice: 10; border-image-repeat: stretch; 
+CONSOLE MESSAGE: line 4: border-image-source: url(shadow-border.png); border-image-slice: 10; border-image-repeat: stretch;
 This test should not crash
index 05d43d3..501922e 100644 (file)
@@ -26,9 +26,9 @@
                  -webkit-border-radius: 6px 8px; \
                  overflow: scroll; \
                  -webkit-mask: url(/mask.png) repeat-x scroll center top;");
-            var allProperties = element.style.cssText.split("; ");
+            var allProperties = element.style.cssText.concat(" ").split("; ");
             element.style.removeProperty(shorthand);
-            var remainingProperties = element.style.cssText.split("; ");
+            var remainingProperties = element.style.cssText.concat(" ").split("; ");
             var removedProperties = [];
             var addedProperties = [];
 
index 76720c9..330406e 100644 (file)
@@ -24,7 +24,9 @@
         function testDiv(div)
         {
             var childStyle = div.firstElementChild.style;
-            log(childStyle.cssText + "-> scrollWidth: " + div.scrollWidth);
+            var cssText = childStyle.cssText;
+            if (cssText) cssText += " ";
+            log(cssText + "-> scrollWidth: " + div.scrollWidth);
         }
 
         function test()
index 60a384b..d68eaa8 100644 (file)
@@ -11,7 +11,7 @@ Both meter elements should have a nested shadow box with a width specified:
 |       <div>
 |         shadow:pseudoId="-webkit-meter-bar"
 |         <div>
-|           style="width: 70%; "
+|           style="width: 70%;"
 |           shadow:pseudoId="-webkit-meter-optimum-value"
 | "
     "
@@ -28,7 +28,7 @@ Both meter elements should have a nested shadow box with a width specified:
 |       <div>
 |         shadow:pseudoId="-webkit-meter-bar"
 |         <div>
-|           style="width: 100%; "
+|           style="width: 100%;"
 |           shadow:pseudoId="-webkit-meter-suboptimum-value"
 | "
     "
@@ -45,7 +45,7 @@ Both meter elements should have a nested shadow box with a width specified:
 |       <div>
 |         shadow:pseudoId="-webkit-meter-bar"
 |         <div>
-|           style="width: 100%; "
+|           style="width: 100%;"
 |           shadow:pseudoId="-webkit-meter-even-less-good-value"
 | "
   "
index c5218c1..4825a6a 100644 (file)
@@ -10,5 +10,5 @@ A progress element should have a nested shadow box with a width specified:
 |       <div>
 |         shadow:pseudoId="-webkit-progress-bar"
 |         <div>
-|           style="width: 70%; "
+|           style="width: 70%;"
 |           shadow:pseudoId="-webkit-progress-value"
index 6809013..b45dfc3 100644 (file)
@@ -3,9 +3,9 @@ This test verifies that acquiring the 'style' attribute via a DOM Attr node stil
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS styleAttr.value is 'background-color: white; '
-PASS styleAttr.value is 'background-color: green; '
-PASS oldStyleAttr.value is 'background-color: red; '
+PASS styleAttr.value is 'background-color: white;'
+PASS styleAttr.value is 'background-color: green;'
+PASS oldStyleAttr.value is 'background-color: red;'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 8f294df..a014658 100644 (file)
 description("This test verifies that acquiring the 'style' attribute via a DOM Attr node still works correctly after the inline style has been modified through the CSSOM API.");
 
 var e = document.createElement("span");
-e.setAttribute("style", "background-color: white; ");
+e.setAttribute("style", "background-color: white;");
 var styleAttr = e.getAttributeNode("style");
-shouldBe("styleAttr.value", "'background-color: white; '");
+shouldBe("styleAttr.value", "'background-color: white;'");
 e.style.backgroundColor = 'green';
-shouldBe("styleAttr.value", "'background-color: green; '");
+shouldBe("styleAttr.value", "'background-color: green;'");
 
 e.style.backgroundColor = 'red';
 var oldStyleAttr = e.setAttributeNode(document.createAttribute("style"));
-shouldBe("oldStyleAttr.value", "'background-color: red; '");
+shouldBe("oldStyleAttr.value", "'background-color: red;'");
 
 </script>
 <script src="../js/resources/js-test-post.js"></script>
index 6bc0c67..e7eb7ef 100644 (file)
@@ -6,11 +6,11 @@ It is OK if the order of properties changes from the expected results - IE 6 and
 
 This is the test element.
 
-Successfully set display to "block"; cssText is now: "top: 0px; display: block; bottom: 1px; ".
-Successfully set display to "foobar"; cssText is now: "top: 0px; display: none; bottom: 1px; ".
-Successfully set display to ""; cssText is now: "top: 0px; bottom: 1px; ".
-Successfully set display to null; cssText is now: "top: 0px; bottom: 1px; ".
-Successfully set display to "block" with setProperty; cssText is now: "top: 0px; display: block; bottom: 1px; ".
-Successfully set display to "foobar" with setProperty; cssText is now: "top: 0px; display: none; bottom: 1px; ".
-Successfully set display to "" with setProperty; cssText is now: "top: 0px; bottom: 1px; ".
-Successfully set display to null with setProperty; cssText is now: "top: 0px; bottom: 1px; ".
+Successfully set display to "block"; cssText is now: "top: 0px; display: block; bottom: 1px;".
+Successfully set display to "foobar"; cssText is now: "top: 0px; display: none; bottom: 1px;".
+Successfully set display to ""; cssText is now: "top: 0px; bottom: 1px;".
+Successfully set display to null; cssText is now: "top: 0px; bottom: 1px;".
+Successfully set display to "block" with setProperty; cssText is now: "top: 0px; display: block; bottom: 1px;".
+Successfully set display to "foobar" with setProperty; cssText is now: "top: 0px; display: none; bottom: 1px;".
+Successfully set display to "" with setProperty; cssText is now: "top: 0px; bottom: 1px;".
+Successfully set display to null with setProperty; cssText is now: "top: 0px; bottom: 1px;".
index d280479..71334d7 100644 (file)
@@ -1,4 +1,4 @@
 CONSOLE MESSAGE: line 21: text/plain: This test verifies that we can get text/html from the drag object during an ondrop event. 
-CONSOLE MESSAGE: line 23: text/html: <span style="color: rgb(0, 0, 0);  font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">This test verifies that we can get text/html from the drag object during an ondrop event.<span class="Apple-converted-space"> </span></span>
+CONSOLE MESSAGE: line 23: text/html: <span style="color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none;">This test verifies that we can get text/html from the drag object during an ondrop event.<span class="Apple-converted-space"> </span></span>
 This test verifies that we can get text/html from the drag object during an ondrop event. This test requires DRT.
 PASS
index cf2afbc..7a46916 100644 (file)
@@ -13,7 +13,7 @@ function removeFontName(text)
 {
     if (!text)
         return text;
-    return text.replace(/font-family: [^;]+;/g, "");
+    return text.replace(/font-family: [^;]+;\s*/g, "");
 }
 
 function drop(ev)
index 07a68c3..d7f6316 100644 (file)
@@ -170,13 +170,13 @@ Testing that modifying an elements style property dispatches Mutation Records wi
 PASS mutations.length is 3
 PASS mutations[0].type is "attributes"
 PASS mutations[0].attributeName is "style"
-PASS mutations[0].oldValue is "color: yellow; width: 100px; "
+PASS mutations[0].oldValue is "color: yellow; width: 100px;"
 PASS mutations[1].type is "attributes"
 PASS mutations[1].attributeName is "style"
-PASS mutations[1].oldValue is "color: red; width: 100px; "
+PASS mutations[1].oldValue is "color: red; width: 100px;"
 PASS mutations[2].type is "attributes"
 PASS mutations[2].attributeName is "style"
-PASS mutations[2].oldValue is "color: red; width: 200px; "
+PASS mutations[2].oldValue is "color: red; width: 200px;"
 ...mutation record created.
 PASS mutations is null
 
index 421eead..f476e0a 100644 (file)
@@ -647,7 +647,7 @@ function testStyleAttributePropertyAccess() {
         });
 
         div = document.createElement('div');
-        div.setAttribute('style', 'color: yellow; width: 100px; ');
+        div.setAttribute('style', 'color: yellow; width: 100px;');
         observer.observe(div, { attributes: true });
         div.style.color = 'red';
         div.style.width = '200px';
@@ -699,7 +699,7 @@ function testStyleAttributePropertyAccessOldValue() {
         });
 
         div = document.createElement('div');
-        div.setAttribute('style', 'color: yellow; width: 100px; ');
+        div.setAttribute('style', 'color: yellow; width: 100px;');
         observer.observe(div, { attributes: true, attributeOldValue: true });
         div.style.color = 'red';
         div.style.width = '200px';
@@ -712,13 +712,13 @@ function testStyleAttributePropertyAccessOldValue() {
         shouldBe('mutations.length', '3');
         shouldBe('mutations[0].type', '"attributes"');
         shouldBe('mutations[0].attributeName', '"style"');
-        shouldBe('mutations[0].oldValue', '"color: yellow; width: 100px; "');
+        shouldBe('mutations[0].oldValue', '"color: yellow; width: 100px;"');
         shouldBe('mutations[1].type', '"attributes"');
         shouldBe('mutations[1].attributeName', '"style"');
-        shouldBe('mutations[1].oldValue', '"color: red; width: 100px; "');
+        shouldBe('mutations[1].oldValue', '"color: red; width: 100px;"');
         shouldBe('mutations[2].type', '"attributes"');
         shouldBe('mutations[2].attributeName', '"style"');
-        shouldBe('mutations[2].oldValue', '"color: red; width: 200px; "');
+        shouldBe('mutations[2].oldValue', '"color: red; width: 200px;"');
 
         mutations = null;
         div.getAttribute('style');
@@ -751,7 +751,7 @@ function testStyleAttributePropertyAccessIgnoreNoop() {
         });
 
         div = document.createElement('div');
-        div.setAttribute('style', 'color: yellow; width: 100px; ');
+        div.setAttribute('style', 'color: yellow; width: 100px;');
         observer.observe(div, { attributes: true });
         div.style.removeProperty('height');
 
index 5f0fff8..cda5d6d 100644 (file)
@@ -49,7 +49,7 @@ Running: testAppendWithText
       <div id="child2"></div>
       <div id="child3"></div>
       <div id="child-after"></div>
-      <div style="display: none; " id="child-with-text">Text</div>
+      <div style="display: none;" id="child-with-text">Text</div>
   </div>
 Success: child text is bound
 
@@ -64,7 +64,7 @@ Running: testInsertFirstTextNode
           "First text"
       </div>
       <div id="child-after"></div>
-      <div style="display: none; " id="child-with-text">Text</div>
+      <div style="display: none;" id="child-with-text">Text</div>
   </div>
 Success: child text is bound
 
index 32c59d1..1c1d667 100644 (file)
@@ -25,7 +25,7 @@ border: 1px solid black;
 
 
 Running: testSetStyleCSSText
-<div id="container" style="color: rgb(192, 255, 238); "></div>
+<div id="container" style="color: rgb(192, 255, 238);"></div>
 [expanded] 
 element.style  { ()
 color: #C0FFEE;
@@ -33,7 +33,7 @@ color: #C0FFEE;
 
 
 Running: testSetViaParsedAttributes
-<div id="container" style="color: rgb(192, 255, 238); border: 3px dashed green; "></div>
+<div id="container" style="color: rgb(192, 255, 238); border: 3px dashed green;"></div>
 [expanded] 
 element.style  { ()
 color: #C0FFEE;
index 76e73e6..bda9d4f 100644 (file)
@@ -1,3 +1,3 @@
 This tests for a bug where copying content from a document in quirksmode and pasting it would produce overlapping text because of a height: 1%; overflow: visible; rule. To run manually, paste into a document not in quirksmode. The paragraphs should not overlap. When you inspect the source, the paragraphs should have pixel values for the height property.
 
-<p style="height: 60px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 60px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 60px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p>
+<p style="height: 60px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 60px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 60px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p>
index 60a384b..d68eaa8 100644 (file)
@@ -11,7 +11,7 @@ Both meter elements should have a nested shadow box with a width specified:
 |       <div>
 |         shadow:pseudoId="-webkit-meter-bar"
 |         <div>
-|           style="width: 70%; "
+|           style="width: 70%;"
 |           shadow:pseudoId="-webkit-meter-optimum-value"
 | "
     "
@@ -28,7 +28,7 @@ Both meter elements should have a nested shadow box with a width specified:
 |       <div>
 |         shadow:pseudoId="-webkit-meter-bar"
 |         <div>
-|           style="width: 100%; "
+|           style="width: 100%;"
 |           shadow:pseudoId="-webkit-meter-suboptimum-value"
 | "
     "
@@ -45,7 +45,7 @@ Both meter elements should have a nested shadow box with a width specified:
 |       <div>
 |         shadow:pseudoId="-webkit-meter-bar"
 |         <div>
-|           style="width: 100%; "
+|           style="width: 100%;"
 |           shadow:pseudoId="-webkit-meter-even-less-good-value"
 | "
   "
index 30ecdfe..619924e 100644 (file)
@@ -1,3 +1,3 @@
 This tests to see that tabs are put into tab spans when they are copied individually. The pasted tab should be inside of a tab span, not a style span. To run the test manually, paste and then inspect the editable region, and ensure that there is a tab span at the beginning of the editable div.
 
-<span class="Apple-tab-span" style="white-space: pre; ">       </span><span class="Apple-tab-span" style="white-space:pre;"> </span>xxx
+<span class="Apple-tab-span" style="white-space: pre;">        </span><span class="Apple-tab-span" style="white-space:pre;"> </span>xxx
index 30ecdfe..619924e 100644 (file)
@@ -1,3 +1,3 @@
 This tests to see that tabs are put into tab spans when they are copied individually. The pasted tab should be inside of a tab span, not a style span. To run the test manually, paste and then inspect the editable region, and ensure that there is a tab span at the beginning of the editable div.
 
-<span class="Apple-tab-span" style="white-space: pre; ">       </span><span class="Apple-tab-span" style="white-space:pre;"> </span>xxx
+<span class="Apple-tab-span" style="white-space: pre;">        </span><span class="Apple-tab-span" style="white-space:pre;"> </span>xxx
index f9c1a75..fc18d17 100644 (file)
@@ -1,3 +1,3 @@
 This tests for a bug where copying content from a document in quirksmode and pasting it would produce overlapping text because of a height: 1%; overflow: visible; rule. To run manually, paste into a document not in quirksmode. The paragraphs should not overlap. When you inspect the source, the paragraphs should have pixel values for the height property.
 
-<p style="height: 57px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 57px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 57px; ">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p>
+<p style="height: 57px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 57px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p><p style="height: 57px;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam interdum lacus id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque pulvinar, libero eu tincidunt adipiscing, quam arcu pharetra libero, sed aliquet leo eros vitae sapien.</p>
index 861e50d..a4043d5 100644 (file)
@@ -10,7 +10,7 @@
     if (window.testRunner)
         testRunner.dumpDOMAsWebArchive();
   &lt;/script&gt;
-  &lt;rect id="rect" width="100" height="100" fill="red" style="fill: #008000; "/&gt;
+  &lt;rect id="rect" width="100" height="100" fill="red" style="fill: #008000;"/&gt;
   &lt;script xlink:href="resources/svg-script-subresources.js" type="text/ecmascript"/&gt;
 &lt;/svg&gt;</string>
                <key>WebResourceFrameName</key>
index 3a2606f..fc4cf9e 100644 (file)
@@ -18,7 +18,7 @@ function runTest()
 &lt;/script&gt;
 &lt;/head&gt;
 &lt;body onload="runTest()"&gt;
-&lt;div id="console"&gt;&lt;div style="font-family: monospace; color: green; "&gt;PASS&lt;/div&gt;&lt;/div&gt;
+&lt;div id="console"&gt;&lt;div style="font-family: monospace; color: green;"&gt;PASS&lt;/div&gt;&lt;/div&gt;
 &lt;script&gt;
 function print(message, color) 
 {
index d222026..f5915fa 100644 (file)
@@ -1,3 +1,67 @@
+2012-08-24  Glenn Adams  <glenn@skynav.com>
+
+        CSSStyleDeclaration.cssText should not contain extraneous whitespace in final delimiter
+        https://bugs.webkit.org/show_bug.cgi?id=94633
+
+        Reviewed by Benjamin Poulain.
+
+        Ensure cssText final delimiter does not contain extraneous space character after semicolon.
+
+        Test: cssom/cssstyledeclaration-csstext-final-delimiter.html
+
+        * css/CSSFontFaceRule.cpp:
+        (WebCore::CSSFontFaceRule::cssText):
+        Conditionally add SPACE in serialized rule since asText() no longer
+        contains extra space.
+        Construct result using StringBuilder.
+        
+        * css/CSSPageRule.cpp:
+        (WebCore::CSSPageRule::cssText):
+        Conditionally add SPACE in serialized rule since asText() no longer
+        contains extra space.
+        Construct result using StringBuilder.
+        
+        * css/CSSProperty.cpp:
+        (WebCore::CSSProperty::cssText):
+        Ensure serialized property does longer contains extra space in cssText.
+        Construct result using StringBuilder.
+        
+        * css/CSSStyleRule.cpp:
+        (WebCore::CSSStyleRule::cssText):
+        Conditionally add SPACE in serialized rule since asText() no longer
+        contains extra space.
+        Construct result using StringBuilder.
+        
+        * css/CSSStyleSheet.cpp:
+        (WebCore::CSSStyleSheet::addRule):
+        Conditionally add SPACE in reserialized rule in case passed style no
+        longer contains extra space.  Note that if it does already contain an
+        extra space that inserting an extra space here is harmless (i.e., is
+        effectively normalized during parse).
+        Construct result using StringBuilder.
+        
+        * css/StylePropertySet.cpp:
+        (WebCore::StylePropertySet::asText):
+        Ensure serialized property set does longer contains extra space in final
+        delimiter.
+        Construct result using StringBuilder.
+        
+        * css/WebKitCSSKeyframeRule.cpp:
+        (WebCore::StyleKeyframe::cssText):
+        Conditionally add SPACE in serialized rule since asText() no longer
+        contains extra space.
+        Construct result using StringBuilder.
+        
+        * editing/ApplyStyleCommand.cpp:
+        (WebCore::ApplyStyleCommand::addBlockStyle):
+        Conditionally add SPACE in block style since cssText no longer contains
+        extra space.
+        Construct result using StringBuilder.
+        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
+        Conditionally add SPACE in pre-existing inline style since cssText no
+        longer contains extra space.
+        Construct result using StringBuilder.
+        
 2012-08-23  James Robinson  <jamesr@chromium.org>
 
         [chromium] Convert WebLayerTreeView interface into pure virtual
index e85a6e4..09529e4 100644 (file)
@@ -25,6 +25,7 @@
 #include "MemoryInstrumentation.h"
 #include "StylePropertySet.h"
 #include "StyleRule.h"
+#include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
 
@@ -49,11 +50,14 @@ CSSStyleDeclaration* CSSFontFaceRule::style() const
 
 String CSSFontFaceRule::cssText() const
 {
-    String result("@font-face");
-    result += " { ";
-    result += m_fontFaceRule->properties()->asText();
-    result += "}";
-    return result;
+    StringBuilder result;
+    result.appendLiteral("@font-face { ");
+    String descs = m_fontFaceRule->properties()->asText();
+    result.append(descs);
+    if (!descs.isEmpty())
+        result.append(' ');
+    result.append('}');
+    return result.toString();
 }
 
 void CSSFontFaceRule::reattach(StyleRuleFontFace* rule)
index 6a69dcc..0a05f5e 100644 (file)
@@ -30,6 +30,7 @@
 #include "StylePropertySet.h"
 #include "StyleRule.h"
 #include <wtf/Vector.h>
+#include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
 
@@ -79,11 +80,15 @@ void CSSPageRule::setSelectorText(const String& selectorText)
 
 String CSSPageRule::cssText() const
 {
-    String result = selectorText();
-    result += " { ";
-    result += m_pageRule->properties()->asText();
-    result += "}";
-    return result;
+    StringBuilder result;
+    result.append(selectorText());
+    result.appendLiteral(" { ");
+    String decls = m_pageRule->properties()->asText();
+    result.append(decls);
+    if (!decls.isEmpty())
+        result.append(' ');
+    result.append('}');
+    return result.toString();
 }
 
 void CSSPageRule::reattach(StyleRulePage* rule)
index 9bc8966..eab987b 100644 (file)
@@ -31,6 +31,8 @@
 #include "CSSVariableValue.h"
 #endif
 
+#include <wtf/text/StringBuilder.h>
+
 namespace WebCore {
 
 struct SameSizeAsCSSProperty {
@@ -53,7 +55,14 @@ String CSSProperty::cssName() const
 
 String CSSProperty::cssText() const
 {
-    return cssName() + ": " + m_value->cssText() + (isImportant() ? " !important" : "") + "; ";
+    StringBuilder result;
+    result.append(cssName());
+    result.appendLiteral(": ");
+    result.append(m_value->cssText());
+    if (isImportant())
+        result.appendLiteral(" !important");
+    result.append(';');
+    return result.toString();
 }
 
 void CSSProperty::wrapValueInCommaSeparatedList()
index 7fcdc17..29703b1 100644 (file)
@@ -111,13 +111,15 @@ void CSSStyleRule::setSelectorText(const String& selectorText)
 
 String CSSStyleRule::cssText() const
 {
-    String result = selectorText();
-
-    result += " { ";
-    result += m_styleRule->properties()->asText();
-    result += "}";
-
-    return result;
+    StringBuilder result;
+    result.append(selectorText());
+    result.appendLiteral(" { ");
+    String decls = m_styleRule->properties()->asText();
+    result.append(decls);
+    if (!decls.isEmpty())
+        result.append(' ');
+    result.append('}');
+    return result.toString();
 }
 
 void CSSStyleRule::reattach(StyleRule* rule)
index ec0ebe6..59593dc 100644 (file)
@@ -38,6 +38,7 @@
 #include "SecurityOrigin.h"
 #include "StyleRule.h"
 #include "StyleSheetContents.h"
+#include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
 
@@ -311,7 +312,14 @@ void CSSStyleSheet::deleteRule(unsigned index, ExceptionCode& ec)
 
 int CSSStyleSheet::addRule(const String& selector, const String& style, int index, ExceptionCode& ec)
 {
-    insertRule(selector + " { " + style + " }", index, ec);
+    StringBuilder text;
+    text.append(selector);
+    text.appendLiteral(" { ");
+    text.append(style);
+    if (!style.isEmpty())
+        text.append(' ');
+    text.append('}');
+    insertRule(text.toString(), index, ec);
     
     // As per Microsoft documentation, always return -1.
     return -1;
index df5b341..bbdabc3 100644 (file)
@@ -659,6 +659,7 @@ String StylePropertySet::asText() const
     BitArray<numCSSProperties> shorthandPropertyAppeared;
 
     unsigned size = propertyCount();
+    unsigned numDecls = 0;
     for (unsigned n = 0; n < size; ++n) {
         const CSSProperty& prop = propertyAt(n);
         CSSPropertyID propertyID = prop.id();
@@ -669,6 +670,8 @@ String StylePropertySet::asText() const
         switch (propertyID) {
 #if ENABLE(CSS_VARIABLES)
         case CSSPropertyVariable:
+            if (numDecls++)
+                result.append(' ');
             result.append(prop.cssText());
             continue;
 #endif
@@ -825,11 +828,14 @@ String StylePropertySet::asText() const
         if (value == "initial" && !CSSProperty::isInheritedProperty(propertyID))
             continue;
 
+        if (numDecls++)
+            result.append(' ');
         result.append(getPropertyName(propertyID));
-        result.append(": ");
+        result.appendLiteral(": ");
         result.append(value);
-        result.append(prop.isImportant() ? " !important" : "");
-        result.append("; ");
+        if (prop.isImportant())
+            result.appendLiteral(" !important");
+        result.append(';');
     }
 
     // FIXME: This is a not-so-nice way to turn x/y positions into single background-position in output.
@@ -837,44 +843,61 @@ String StylePropertySet::asText() const
     // would not work in Firefox (<rdar://problem/5143183>)
     // It would be a better solution if background-position was CSS_PAIR.
     if (positionXProp && positionYProp && positionXProp->isImportant() == positionYProp->isImportant()) {
-        result.append("background-position: ");
+        if (numDecls++)
+            result.append(' ');
+        result.appendLiteral("background-position: ");
         if (positionXProp->value()->isValueList() || positionYProp->value()->isValueList())
             result.append(getLayeredShorthandValue(backgroundPositionShorthand()));
         else {
             result.append(positionXProp->value()->cssText());
-            result.append(" ");
+            result.append(' ');
             result.append(positionYProp->value()->cssText());
         }
         if (positionXProp->isImportant())
-            result.append(" !important");
-        result.append("; ");
+            result.appendLiteral(" !important");
+        result.append(';');
     } else {
-        if (positionXProp)
+        if (positionXProp) {
+            if (numDecls++)
+                result.append(' ');
             result.append(positionXProp->cssText());
-        if (positionYProp)
+        }
+        if (positionYProp) {
+            if (numDecls++)
+                result.append(' ');
             result.append(positionYProp->cssText());
+        }
     }
 
     // FIXME: We need to do the same for background-repeat.
     if (repeatXProp && repeatYProp && repeatXProp->isImportant() == repeatYProp->isImportant()) {
-        result.append("background-repeat: ");
+        if (numDecls++)
+            result.append(' ');
+        result.appendLiteral("background-repeat: ");
         if (repeatXProp->value()->isValueList() || repeatYProp->value()->isValueList())
             result.append(getLayeredShorthandValue(backgroundRepeatShorthand()));
         else {
             result.append(repeatXProp->value()->cssText());
-            result.append(" ");
+            result.append(' ');
             result.append(repeatYProp->value()->cssText());
         }
         if (repeatXProp->isImportant())
-            result.append(" !important");
-        result.append("; ");
+            result.appendLiteral(" !important");
+        result.append(';');
     } else {
-        if (repeatXProp)
+        if (repeatXProp) {
+            if (numDecls++)
+                result.append(' ');
             result.append(repeatXProp->cssText());
-        if (repeatYProp)
+        }
+        if (repeatYProp) {
+            if (numDecls++)
+                result.append(' ');
             result.append(repeatYProp->cssText());
+        }
     }
 
+    ASSERT(!numDecls ^ !result.isEmpty());
     return result.toString();
 }
 
index 8006932..9257079 100644 (file)
@@ -30,6 +30,7 @@
 #include "PropertySetCSSStyleDeclaration.h"
 #include "StylePropertySet.h"
 #include "WebKitCSSKeyframesRule.h"
+#include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
 
@@ -77,13 +78,15 @@ void StyleKeyframe::parseKeyString(const String& s, Vector<float>& keys)
 
 String StyleKeyframe::cssText() const
 {
-    String result = keyText();
-
-    result += " { ";
-    result += m_properties->asText();
-    result += "}";
-
-    return result;
+    StringBuilder result;
+    result.append(keyText());
+    result.appendLiteral(" { ");
+    String decls = m_properties->asText();
+    result.append(decls);
+    if (!decls.isEmpty())
+        result.append(' ');
+    result.append('}');
+    return result.toString();
 }
 
 void StyleKeyframe::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
index 25a3c4a..51b76ac 100644 (file)
@@ -50,6 +50,7 @@
 #include "htmlediting.h"
 #include "visible_units.h"
 #include <wtf/StdLibExtras.h>
+#include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
 
@@ -1313,10 +1314,15 @@ void ApplyStyleCommand::addBlockStyle(const StyleChange& styleChange, HTMLElemen
     if (!block)
         return;
         
-    String cssText = styleChange.cssStyle();
-    if (const StylePropertySet* decl = block->inlineStyle())
-        cssText += decl->asText();
-    setNodeAttribute(block, styleAttr, cssText);
+    String cssStyle = styleChange.cssStyle();
+    StringBuilder cssText;
+    cssText.append(cssStyle);
+    if (const StylePropertySet* decl = block->inlineStyle()) {
+        if (!cssStyle.isEmpty())
+            cssText.append(' ');
+        cssText.append(decl->asText());
+    }
+    setNodeAttribute(block, styleAttr, cssText.toString());
 }
 
 void ApplyStyleCommand::addInlineStyleIfNeeded(EditingStyle* style, PassRefPtr<Node> passedStart, PassRefPtr<Node> passedEnd, EAddStyledElement addStyledElement)
@@ -1379,9 +1385,15 @@ void ApplyStyleCommand::addInlineStyleIfNeeded(EditingStyle* style, PassRefPtr<N
 
     if (styleChange.cssStyle().length()) {
         if (styleContainer) {
-            if (const StylePropertySet* existingStyle = styleContainer->inlineStyle())
-                setNodeAttribute(styleContainer, styleAttr, existingStyle->asText() + styleChange.cssStyle());
-            else
+            if (const StylePropertySet* existingStyle = styleContainer->inlineStyle()) {
+                String existingText = existingStyle->asText();
+                StringBuilder cssText;
+                cssText.append(existingText);
+                if (!existingText.isEmpty())
+                    cssText.append(' ');
+                cssText.append(styleChange.cssStyle());
+                setNodeAttribute(styleContainer, styleAttr, cssText.toString());
+            } else
                 setNodeAttribute(styleContainer, styleAttr, styleChange.cssStyle());
         } else {
             RefPtr<Element> styleElement = createStyleSpanElement(document());