From b9ed7e8ba33d144f4a6a40a796858efb8cb600cb Mon Sep 17 00:00:00 2001 From: Aryeh Gregor Date: Thu, 27 Sep 2012 14:39:39 +0200 Subject: [PATCH] Bug 787432 - Don't strip existing empty wrappers when inserting text; r=ehsan --- .../editing/conformancetest/Makefile.in | 18 ++--- .../conformancetest/test_runtest.html.json | 69 +------------------ editor/libeditor/html/nsHTMLEditRules.cpp | 5 +- editor/libeditor/html/tests/Makefile.in | 1 + .../libeditor/html/tests/test_bug787432.html | 17 +++++ 5 files changed, 32 insertions(+), 78 deletions(-) create mode 100644 editor/libeditor/html/tests/test_bug787432.html diff --git a/dom/imptests/failures/editing/conformancetest/Makefile.in b/dom/imptests/failures/editing/conformancetest/Makefile.in index 64f5b1b5fb53..10a521562c74 100644 --- a/dom/imptests/failures/editing/conformancetest/Makefile.in +++ b/dom/imptests/failures/editing/conformancetest/Makefile.in @@ -1,16 +1,18 @@ -DEPTH = @DEPTH@ +# THIS FILE IS AUTOGENERATED BY parseFailures.py - DO NOT EDIT -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ -relativesrcdir = @relativesrcdir@ +DEPTH := @DEPTH@ -DIRS = \ - $(NULL) +topsrcdir := @top_srcdir@ +srcdir := @srcdir@ +VPATH := @srcdir@ +relativesrcdir := @relativesrcdir@ include $(DEPTH)/config/autoconf.mk -MOCHITEST_FILES = \ +DIRS := \ + $(NULL) + +MOCHITEST_FILES := \ test_event.html.json \ test_runtest.html.json \ $(NULL) diff --git a/dom/imptests/failures/editing/conformancetest/test_runtest.html.json b/dom/imptests/failures/editing/conformancetest/test_runtest.html.json index 6087522eff77..7cc58f3c1996 100644 --- a/dom/imptests/failures/editing/conformancetest/test_runtest.html.json +++ b/dom/imptests/failures/editing/conformancetest/test_runtest.html.json @@ -2369,16 +2369,6 @@ "[[\"formatblock\",\"
  • \"]] \"
    [foobar]
    \" queryCommandValue(\"formatblock\") after":true, "[[\"formatblock\",\"
      \"]] \"
      [foobar]
      \" queryCommandValue(\"formatblock\") before":true, "[[\"formatblock\",\"
        \"]] \"
        [foobar]
        \" queryCommandValue(\"formatblock\") after":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \" compare innerHTML":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \" queryCommandValue(\"defaultparagraphseparator\") before":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \" queryCommandValue(\"defaultparagraphseparator\") after":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \" queryCommandValue(\"formatblock\") before":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \": execCommand(\"defaultparagraphseparator\", false, \"p\") return value":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \" compare innerHTML":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \" queryCommandValue(\"defaultparagraphseparator\") before":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \" queryCommandValue(\"defaultparagraphseparator\") after":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"

        \"]] \"

        [foobar]
        \" queryCommandValue(\"formatblock\") before":true, "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"
        \"]] \"
        [foobar]
        \": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true, "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"
        \"]] \"
        [foobar]
        \" compare innerHTML":true, "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"
        \"]] \"
        [foobar]
        \" queryCommandValue(\"defaultparagraphseparator\") before":true, @@ -2409,14 +2399,6 @@ "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"defaultparagraphseparator\") before":true, "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"defaultparagraphseparator\") after":true, "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"formatblock\") after":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"defaultparagraphseparator\") before":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"defaultparagraphseparator\") after":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"formatblock\") after":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \": execCommand(\"defaultparagraphseparator\", false, \"p\") return value":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"defaultparagraphseparator\") before":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"defaultparagraphseparator\") after":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"formatblock\") after":true, "[[\"formatblock\",\"
        \"]] \"

        [foobar]

        \": execCommand(\"formatblock\", false, \"
        \") return value":true, "[[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" compare innerHTML":true, "[[\"formatblock\",\"
        \"]] \"

        [foobar]

        \" queryCommandValue(\"formatblock\") after":true, @@ -3905,12 +3887,6 @@ "[[\"inserthorizontalrule\",\"\"]] \"
        foo[bar]baz
        quz
        \": execCommand(\"inserthorizontalrule\", false, \"\") return value":true, "[[\"inserthorizontalrule\",\"\"]] \"
        foo[bar]baz
        quz
        \" compare innerHTML":true, "[[\"inserthorizontalrule\",\"\"]] \"
        foo[bar]baz
        \" compare innerHTML":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"inserthorizontalrule\",\"\"]] \"

        foo[bar]baz

        \": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"inserthorizontalrule\",\"\"]] \"

        foo[bar]baz

        \" queryCommandValue(\"defaultparagraphseparator\") before":true, - "[[\"defaultparagraphseparator\",\"div\"],[\"inserthorizontalrule\",\"\"]] \"

        foo[bar]baz

        \" queryCommandValue(\"defaultparagraphseparator\") after":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"inserthorizontalrule\",\"\"]] \"

        foo[bar]baz

        \": execCommand(\"defaultparagraphseparator\", false, \"p\") return value":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"inserthorizontalrule\",\"\"]] \"

        foo[bar]baz

        \" queryCommandValue(\"defaultparagraphseparator\") before":true, - "[[\"defaultparagraphseparator\",\"p\"],[\"inserthorizontalrule\",\"\"]] \"

        foo[bar]baz

        \" queryCommandValue(\"defaultparagraphseparator\") after":true, "[[\"inserthorizontalrule\",\"\"]] \"foo[bar]bazquz\" compare innerHTML":true, "[[\"inserthorizontalrule\",\"\"]] \"foobar[baz]quz\" compare innerHTML":true, "[[\"inserthorizontalrule\",\"\"]] \"foobar[baz]quzqozqiz\" compare innerHTML":true, @@ -6502,7 +6478,7 @@ "[[\"inserttext\",\" \"]] \"a@b[]c\" compare innerHTML":true, "[[\"inserttext\",\"\\t\"]] \"http://a[]\" compare innerHTML":true, "[[\"inserttext\",\"\\f\"]] \"http://a[]\" compare innerHTML":true, - "[[\"inserttext\",\" \"]] \"http://a[]\" compare innerHTML":true, + "[[\"inserttext\",\"\u00a0\"]] \"http://a[]\" compare innerHTML":true, "[[\"inserttext\",\" \"]] \"foo[]\" compare innerHTML":true, "[[\"defaultparagraphseparator\",\"div\"],[\"inserttext\",\"a\"]] \"

        fo[o

        b]ar\": execCommand(\"defaultparagraphseparator\", false, \"div\") return value":true, "[[\"defaultparagraphseparator\",\"div\"],[\"inserttext\",\"a\"]] \"

        fo[o

        b]ar\" queryCommandValue(\"defaultparagraphseparator\") before":true, @@ -6519,30 +6495,13 @@ "[[\"inserttext\",\"a\"]] \"{}
        \" compare innerHTML":true, "[[\"inserttext\",\"a\"]] \"

        {}
        \" compare innerHTML":true, "[[\"inserttext\",\"a\"]] \"

        {}
        \" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"

        foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"

        foo{bar}baz\" compare innerHTML":true, "[[\"inserttext\",\"a\"]] \"

        foo{bar}baz\" compare innerHTML":true, "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"

        [foobar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"

        [foobar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"

        {foobar}baz\" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"

        {foobar}baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"

        foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"

        foo{barbaz}\" compare innerHTML":true, "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"

        foo[barbaz]quz\" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"

        foo[barbaz]quz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[bar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foobar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foobar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foobar]baz\" compare innerHTML":true, @@ -6586,28 +6545,6 @@ "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foobar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foobar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foobar]baz\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, - "[[\"inserttext\",\"a\"]] \"foo[barbaz]\" compare innerHTML":true, "[[\"insertunorderedlist\",\"\"]] \"foo
        [bar]\" compare innerHTML":true, "[[\"insertunorderedlist\",\"\"]] \"[foo

        1. bar]
        baz\" queryCommandIndeterm(\"insertunorderedlist\") before":true, "[[\"insertunorderedlist\",\"\"]] \"foo
        1. [bar
        baz]\" queryCommandIndeterm(\"insertunorderedlist\") before":true, @@ -11218,10 +11155,6 @@ "[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foob[a]rbaz\" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foo[bar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foob[a]rbaz\" compare innerHTML":true, - "[[\"stylewithcss\",\"true\"],[\"strikethrough\",\"\"]] \"

        foo[bar]baz

        \" compare innerHTML":true, - "[[\"stylewithcss\",\"true\"],[\"strikethrough\",\"\"]] \"

        foo[bar]baz

        \" queryCommandState(\"strikethrough\") after":true, - "[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"

        foo[bar]baz

        \" compare innerHTML":true, - "[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"

        foo[bar]baz

        \" queryCommandState(\"strikethrough\") after":true, "[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"

        foo[bar]baz

        \" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foo[bar]baz\" compare innerHTML":true, "[[\"stylewithcss\",\"false\"],[\"strikethrough\",\"\"]] \"foob[a]rbaz\" compare innerHTML":true, diff --git a/editor/libeditor/html/nsHTMLEditRules.cpp b/editor/libeditor/html/nsHTMLEditRules.cpp index c696a876de66..044dceb9a93d 100644 --- a/editor/libeditor/html/nsHTMLEditRules.cpp +++ b/editor/libeditor/html/nsHTMLEditRules.cpp @@ -1271,9 +1271,10 @@ nsHTMLEditRules::WillInsertText(EditAction aAction, nsCOMPtr selNode; int32_t selOffset; - // if the selection isn't collapsed, delete it. + // If the selection isn't collapsed, delete it. Don't delete existing inline + // tags, because we're hopefully going to insert text (bug 787432). if (!aSelection->Collapsed()) { - res = mHTMLEditor->DeleteSelection(nsIEditor::eNone, nsIEditor::eStrip); + res = mHTMLEditor->DeleteSelection(nsIEditor::eNone, nsIEditor::eNoStrip); NS_ENSURE_SUCCESS(res, res); } diff --git a/editor/libeditor/html/tests/Makefile.in b/editor/libeditor/html/tests/Makefile.in index 0201bcb45708..1bdfbf089ee1 100644 --- a/editor/libeditor/html/tests/Makefile.in +++ b/editor/libeditor/html/tests/Makefile.in @@ -80,6 +80,7 @@ MOCHITEST_FILES = \ test_bug757371.html \ test_bug767684.html \ test_bug780035.html \ + test_bug787432.html \ $(NULL) ifneq (mobile,$(MOZ_BUILD_APP)) diff --git a/editor/libeditor/html/tests/test_bug787432.html b/editor/libeditor/html/tests/test_bug787432.html new file mode 100644 index 000000000000..c73bb3c7ea61 --- /dev/null +++ b/editor/libeditor/html/tests/test_bug787432.html @@ -0,0 +1,17 @@ + + +Test for Bug 787432 + + +Mozilla Bug 787432 +
        %
        +